TCP / UDP

유병수·2024년 4월 1일

통신의 기본 원칙: 신뢰할 수 없음

네트워킹의 핵심 원칙 중 하나는 통신 과정이 완벽하게 신뢰할 수 없다는 것입니다. 어떤 네트워크 환경에서든, 데이터 패킷은 다양한 이유로 손실되거나 손상될 수 있으며, 때로는 목적지에 도달하지 못할 수도 있습니다.

패킷 손실의 원인

패킷 손실이나 손상은 여러 원인에 의해 발생할 수 있습니다. 전송 중에 발생하는 전기적인 문제로 인해 비트가 반전될 수 있으며, 네트워크의 링크, 라우터 등 시스템 구성요소의 고장으로 인해 발생하기도 합니다. 또한, 네트워크 스위치나 라우터, 또는 연결의 종단점에서 충분한 버퍼링이 이루어지지 않아 발생하는 경우도 흔합니다. 실제로 모든 시스템 구성요소가 제대로 동작하고 있더라도, 라우터의 메모리가 과부하 상태가 되면, 들어오는 패킷을 모두 처리할 수 없게 되어 일부 패킷을 포기해야 할 상황에 직면할 수 있습니다.

대처 방안

어떤 응용 프로그램들은 패킷 손실에 대한 자체적인 대응 방법을 가지고 있습니다. 예를 들어, UDP/IP 네트워크 스택은 패킷 손실 시 특별한 조치를 취하지 않는 방법 중 하나입니다. UDP는 손실에 대해 알 수 없지만, 패킷 손상은 체크섬을 통해 검출할 수 있습니다. 그러나 대부분의 응용 프로그램은 패킷 손실 없이 데이터를 전송하기를 원하기 때문에, 신뢰할 수 있는 통신 방법이 필요합니다.

신뢰할 수 있는 통신 계층

신뢰할 수 있는 통신 계층을 구현하기 위해서는, 패킷 손실에 대응할 수 있는 새로운 메커니즘이 필요합니다. 이를 위해 '확인(acknowledgement)'과 '타임아웃(timeout)'이라는 두 가지 기술이 도입됩니다.

  • 확인(Acknowledgement): 발신자는 수신자에게 메시지를 보내고, 수신자는 메시지를 받았다는 응답을 발신자에게 보냅니다. 발신자가 이 응답을 받지 못하면, 메시지가 손실되었다고 판단하고 재전송을 시도합니다.

  • 타임아웃(Timeout): 메시지 전송 시, 발신자는 타이머를 설정합니다. 지정된 시간 내에 응답을 받지 못하면, 메시지를 재전송합니다.

중복 메시지의 처리

신뢰할 수 있는 통신에서는 중복 메시지의 처리도 중요합니다. 발신자는 각 메시지에 고유 ID(예: 순서 카운터)를 부여하고, 수신자는 이를 통해 메시지가 중복되었는지를 판단합니다. 중복된 메시지를 받은 경우, 수신자는 ack를 보내지만, 해당 메시지를 응용 프로그램에는 전달하지 않습니다.

TCP (Transmission Control Protocol)

TCP는 인터넷 상에서 데이터를 신뢰성 있게, 순서대로, 에러 없이 전송하기 위해 설계된 연결 지향적 프로토콜입니다.

TCP의 주요 특징

  • 연결 지향적 프로토콜: TCP 통신을 시작하기 전에 클라이언트와 서버 간의 연결 설정이 필요합니다. 이 과정에서 3-way handshake라는 과정을 거치게 됩니다.
  • 신뢰성 있는 데이터 전송: 데이터 패킷의 손실, 중복, 순서 바뀜 없이 데이터를 전송합니다. 손실된 패킷은 재전송됩니다.
  • 흐름 제어 및 혼잡 제어: 네트워크의 혼잡 상태나 수신자의 데이터 처리 속도를 고려하여 데이터 전송 속도를 조절합니다.
  • 전이중 통신(Full-Duplex): 데이터를 양방향으로 동시에 전송할 수 있습니다.

TCP의 동작 원리

  1. 3-way Handshake: 연결을 시작할 때, 클라이언트와 서버 사이에 SYN, SYN-ACK, ACK 패킷을 교환하여 연결을 설정합니다.
  2. 데이터 전송: 연결이 설정되면, 데이터 패킷을 전송합니다. 각 패킷은 순서 번호가 부여되어 순서대로 전송됩니다.
  3. 4-way Handshake: 데이터 전송이 완료된 후, 연결을 종료하기 위해 FIN, ACK 패킷을 교환합니다.

UDP (User Datagram Protocol)

UDP는 비연결 지향적 프로토콜로, TCP보다 단순하며 오버헤드가 적습니다. 데이터를 데이터그램 단위로 처리합니다.

UDP의 주요 특징

  • 비연결 지향적 프로토콜: 연결 설정 없이 데이터를 바로 전송합니다.
  • 신뢰성 없는 데이터 전송: 데이터의 손실이나 순서 바뀜에 대해 복구하지 않습니다. 손실된 데이터는 재전송되지 않습니다.
  • 경량 프로토콜: TCP에 비해 헤더 사이즈가 작고, 통신 오버헤드가 적습니다.
  • 다대다 통신: 브로드캐스팅과 멀티캐스팅을 지원합니다.

UDP의 사용 사례

실시간 응용 프로그램: 비디오 스트리밍, 온라인 게임 등 지연 시간이 중요한 응용 프로그램에서 사용됩니다. 데이터 일부가 손실되더라도 전체 서비스에 큰 영향을 주지 않는 경우에 적합합니다.
DNS 조회: 작은 데이터 패킷을 빠르게 주고받아야 하는 DNS 조회에 주로 사용됩니다.

TCP vs UDP

연결 설정: TCP는 연결을 설정해야 하지만, UDP는 설정 없이 데이터를 바로 전송합니다.
신뢰성: TCP는 데이터의 순서, 무결성, 신뢰성을 보장하지만, UDP는 보장하지 않습니다.
속도: TCP는 오버헤드가 더 많고, 데이터 전송 속도가 UDP보다 느릴 수 있습니다.
사용 사례: TCP는 이메일, 웹 페이지 로딩과 같은 신뢰성이 중요한 통신에 사용됩니다. 반면, UDP는 실시간 스트리밍, 온라인 게임 등 지연 시간이 더 중요한 응용 프로그램에 사용됩니다.

참고
devharrypmw
운영체제 - 아주쉬운 세 가지 이야기

0개의 댓글