TCP/IP 4계층 모델

TCP와 UDP는 TCP/IP 4계층 모델을 기준으로 IP 프로토콜의 계층인 인터넷 계층의 상위에서 동작을 합니다. 전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할을 합니다.
TCP vs UDP

TCP 3-way handshake

- Step 1 (SYN): 처음으로, sender는 receiver와 연결 설정을 위해, segment를 랜덤으로 설정된 SYN(Synchronize Sequence Number)와 함께 보냅니다. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알립니다.
- Step 2(SYN / ACK): receiver는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답합니다. Acknowledgement(ACK) 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미합니다.
- Step 3(ACK): 마지막 단계에서, sender는 받은 ACK를 receiver에게 전송을 하면서, 신뢰성 있는 연결이 성립되었다는 사실을 sender와 receiver 양쪽에서 알 수 있고, 실제 데이터 전송이 시작되게 됩니다.
UDP
TCP처럼 가상의 회선을 설정해 신뢰성을 보장하면 당연히 좋은데 왜 UDP를 사용할까요? 그럼 모든 상황에서 TCP가 UDP보다 우수할까요?
당연히 답은 ‘No’입니다.
아래 TCP를 사용한 예시를 한번 들어보겠습니다.
- 온라인 게임 LOL을 플레이하는 중입니다. 결정적 순간에 기술을 사용해야 하는데 항상 조금 지연시간이 있습니다. 근데 지연시간이 매번 조금씩 달라서 타이밍을 잡기가 힘듭니다.
- 카카오톡으로 보이스 톡을 하는데, 내가 말하고 상대방이 말할 때마다 지연시간이 조금씩 발생하면서 싱크가 맞지가 않습니다.
아래와 같은 이유로 많은 애플리케이션 개발자들은 UDP를 사용합니다.
- 애플리케이션의 정교한 제어가 가능하다: TCP의 경우 receiver가 전송받을 준비가 될 때까지 세그먼트를 반복적으로 재전송합니다. 실시간 전송에 대한 요구가 큰 애플리케이션 들은 높은 latency를 지양하므로 약간의 데이터 손실을 감수합니다. 대신 개발자 스스로가 이를 보완하기 위해 애플리케이션에 추가 기능을 구현할 수 있습니다.