여태까지 살펴본 물리계층, 데이터링크 계층, 네트워크 계층은
각각 물리적 장비들 간 연결, 동일 네트워크 내 통신, 다른 네트워크끼리의 통신을 담당한다.
그러나 통신에 있어, 데이터 전송의 신뢰성에 대해서는 검증하지 않는다.
보내려고 하는 데이터가 중간에 유실되거나 손상되었는지를 어떻게 식별할 것인가?
이를 컨트롤하는 계층이 OSI 4계층인 전송계층이다.
전송계층은 흐름제어, 혼잡제어, 오류제어를 수행한다.
말 그대로 전송하려는 데이터에 오류가 있는지 검사하여,
제대로 전송되지 않은 데이터가 있거나 데이터에 변형이 일어났을 경우,
상대방에게 데이터 재전송을 요청하는 역할이다.
오류가 있음을 어떻게 판단하는가?
수신자의 경우 자신이 요청한 데이터가 제대로 오지 않았을 경우(부정응답),
송신자의 경우 요청 타임아웃을 생각하면 될 것이다.
데이터를 보내는 쪽(송신) 보다 데이터를 받는 쪽(수신)이 속도가 느린 경우엔 문제다.
수신하는 쪽에서 데이터 패킷을 Queue에 담아 순차적으로 처리한다고 해 보자.
아직 Queue에 담긴 패킷들을 다 처리하지도 못했는데 송신측이 계속 패킷을 보낸다면?
Queue 공간이 꽉 차버려서 Overflow상태가 되면 이후에 수신한 패킷은 유실될 것이다.
이를 방지하고자, 전송계층은 송신하는 측의 데이터 전송을 Control한다.
대표적인 기법은
혼잡제어는 흐름제어와 비슷하다. 데이터 전송이 몰리는 라우터가 있을 때,
송신측에서 보내는 데이터 전속 속도를 강제로 줄이는 방식이다.
여러가지 알고리즘이 사용된다는데…일단은 그렇다는 것만 알아두자.
전송계층은 또한, 전송 데이터가 어떤 Application을 목적지로 하는지,
해당 Application의 포트(port)를 찾아서 전송해주는 역할도 한다.
즉, 전송 패킷의 목적지가 어떤 어플리케이션 서비스인지를 식별하는 역할 또한 수행한다.
포트(Port)란?
쉽게 말하면 ‘응용프로그램의 프로세스 입구’이다.
IP주소와 MAC주소로 목적지를 찾았어도, 해당 컴퓨터의 ‘어떤 응용프로그램’에 전송할지는
바로 이 Port번호가 정한다.
잘 알려진 포트(Well-known Port) : FTP 21번 / DNS 53번 / HTTP 80번 / HTTPS 443번….
전송계층의 통신은 두 가지로 나뉘는데,
이 있고, 각각의 프로토콜은 TCP와 UDP에 해당한다.
전송계층에서도 다른 계층과 마찬가지로 캡슐화가 진행되며,
TCP헤더가 붙어서 캡슐화된 데이터를 세그먼트(Segment)라 한다.
TCP헤더에는 출발지/목적지 포트번호, 코드비트 등등이 담긴다.