데이터의 배달을 책임지는 전송 계층. 다중화/역다중화의 원리부터 TCP의 3-way Handshake, 그리고 신뢰성 보장 메커니즘(RDT)까지 깊이 있게 파헤칩니다.

애플리케이션 계층이 '무엇을 보낼까'를 고민했다면, 전송 계층은 그 데이터를 **'어떻게, 얼마나 신뢰성 있게 보낼 것인가'**를 책임지는 네트워크의 심장부입니다.
이곳은 인터넷의 두 주인공인 UDP와 TCP가 활약하는 무대이기도 합니다.
네트워크 계층(IP)이 '컴퓨터와 컴퓨터(Host-to-Host)' 사이의 배달을 책임진다면, 전송 계층은 그 컴퓨터 안에서 실행 중인 **특정 프로세스(Process-to-Process)**까지 데이터를 배달합니다.
하나의 IP 주소를 가진 컴퓨터에서 브라우저, 카톡, 유튜브가 동시에 통신할 수 있는 비결입니다.
전송 계층의 두 가지 선택지, UDP와 TCP를 비교해 봅시다.
User Datagram Protocol 전송 계층이 할 수 있는 최소한의 일만 합니다.
하위 계층인 IP는 패킷을 잃어버리거나 비트를 깨먹을 수 있는 **'신뢰할 수 없는 채널'**입니다. TCP는 이 부실한 토대 위에서 어떻게 신뢰성을 쌓아 올릴까요?
하나 보내고 응답을 기다리는 방식(Stop-and-Wait)은 너무 느립니다. 그래서 현대 TCP는 응답을 기다리지 않고 패킷을 쏟아붓는 파이프라이닝을 사용합니다.
TCP 통신의 시작은 "우리 이제 대화하자"라고 약속하는 3-way Handshake입니다. 이 과정의 핵심은 **초기 순서 번호(ISN)**를 동기화하는 것입니다.
클라이언트가 서버에 접속 요청(SYN)을 보냅니다. * "내 순서 번호는 $x$야.
연결해 줘." * 상태: SYN_SENT
서버가 요청을 수락하고 확인 응답(SYN-ACK)을 보냅니다. * "그래, $x$번 잘
받았어(ACK $x+1$). 내 순서 번호는 $y$야(SYN)." * 상태: SYN_RCVD
클라이언트가 서버의 수락을 확인했다는 응답(ACK)을 보냅니다. * "그래,
$y$번 잘 받았어(ACK $y+1$). 이제 데이터 보낼게." * 상태: ESTABLISHED (연결
성립)
이 핸드쉐이크 과정 때문에 TCP 연결을 맺는 데는 무조건 **1 RTT(왕복 시간)**가 소요됩니다. (HTTPS는 TLS까지 더해져 더 오래 걸림) 현대 브라우저는 이를 최적화하기 위해 Keep-alive(연결 재사용)나 TCP Fast Open 같은 기술을 사용합니다.
연결을 끊을 때는 더 신중해야 합니다. 한쪽이 "끊자"고 해도 반대쪽은 보낼 데이터가 남아있을 수 있기 때문입니다.
따라서 FIN - ACK - FIN - ACK의 4단계 과정을 거쳐 양쪽 모두 보낼 데이터가 없음을 확인하고 연결을 종료합니다.