cs

[컴퓨터 네트워크] TCP / UDP

<Eunhak> 2024. 9. 2. 16:34

TCP (Transmission Control Protocol)

TCP는 연결 지향적 프로토콜로, 인터넷 프로토콜 스위트의 중요한 요소 중 하나입니다. TCP는 데이터의 신뢰성과 순서를 보장하며, 데이터가 전송된 순서대로 도착하고 손실되거나 손상된 경우 이를 복구하는 기능을 제공합니다.

특징:

  • 연결 지향적: 데이터를 전송하기 전에 송신자와 수신자 사이에 연결을 설정합니다.
  • 신뢰성: 데이터가 정확하게 도착하는지 확인하고, 손실되거나 손상된 패킷은 재전송됩니다.
  • 흐름 제어: 수신자의 처리 능력을 고려해 데이터 전송 속도를 조절합니다.
  • 혼잡 제어: 네트워크 혼잡을 방지하기 위해 전송 속도를 조절합니다.
  • 패킷 순서 보장: 송신된 데이터 패킷의 순서가 유지되도록 합니다.

장점:

  • 데이터의 신뢰성과 정확성을 보장합니다.
  • 패킷의 순서를 보장하며, 흐름 제어와 혼잡 제어 기능을 제공합니다.

단점:

  • 연결 설정과 유지, 데이터 확인 등의 과정으로 인해 속도가 느릴 수 있습니다.
  • 상대적으로 높은 오버헤드가 발생합니다.

 

 

UDP (User Datagram Protocol)

UDP는 비연결형 프로토콜로, TCP와 달리 데이터 전송의 신뢰성을 보장하지 않습니다. UDP는 패킷이 순서에 상관없이 독립적으로 전송되며, 손실된 패킷에 대한 재전송은 이루어지지 않습니다.

특징:

  • 비연결형: 데이터를 전송하기 전에 연결을 설정하지 않습니다.
  • 신뢰성 없음: 패킷 손실이나 순서가 뒤바뀌는 상황을 처리하지 않으며, 데이터의 도착 여부를 확인하지 않습니다.
  • 낮은 지연: 추가적인 오버헤드가 없기 때문에 TCP보다 전송 속도가 빠릅니다.
  • 오버헤드가 적음: 단순한 프로토콜 구조로 인해 네트워크 자원을 적게 사용합니다.

장점:

  • TCP보다 빠른 데이터 전송이 가능합니다.
  • 오버헤드가 적어 실시간 애플리케이션에 적합합니다.

단점:

  • 데이터 전송의 신뢰성을 보장하지 않으며, 패킷이 손실될 수 있습니다.
  • 패킷 순서를 보장하지 않으며, 데이터가 손상될 수 있습니다.

 

 

3-Way Handshake 

3-Way Handshake는 TCP 연결을 설정할 때 사용하는 절차입니다. 송신자와 수신자가 서로 데이터를 주고받을 준비가 되었음을 확인하기 위해 3단계의 신호를 주고받습니다.

  1. SYN: 클라이언트가 서버에 연결 요청을 보냅니다. 이 때 클라이언트는 SYN 플래그가 설정된 패킷을 서버로 전송합니다.
  2. SYN-ACK: 서버는 클라이언트의 SYN 패킷을 수신하고, 이를 수락한다는 의미로 SYN-ACK 패킷을 클라이언트로 전송합니다. 이 패킷에는 서버 측의 SYN 요청도 포함됩니다.
  3. ACK: 클라이언트는 서버로부터의 SYN-ACK 패킷을 수신한 후, 이를 확인하는 ACK 패킷을 서버로 전송합니다. 이로써 연결이 설정됩니다.

이 과정이 완료되면, 클라이언트와 서버 간의 연결이 설정되며, 데이터를 주고받을 준비가 완료된 상태가 됩니다.

 

 

 

4-Way Handshake 

4-Way Handshake는 TCP 연결을 종료할 때 사용하는 절차입니다. TCP 연결 종료는 4단계의 신호 주고받기를 통해 이루어집니다.

  1. FIN: 클라이언트가 연결을 종료하기 위해 FIN 플래그가 설정된 패킷을 서버로 전송합니다. 이는 클라이언트가 더 이상 데이터를 전송하지 않겠다는 신호입니다.
  2. ACK: 서버는 클라이언트의 FIN 패킷을 수신하고, 이를 확인하는 ACK 패킷을 클라이언트로 전송합니다. 이 시점에서 서버는 아직 데이터를 클라이언트로 전송할 수 있습니다.
  3. FIN: 서버가 더 이상 데이터를 전송하지 않기로 결정하면, FIN 플래그가 설정된 패킷을 클라이언트로 전송합니다.
  4. ACK: 클라이언트는 서버로부터 FIN 패킷을 수신하고, 이를 확인하는 ACK 패킷을 서버로 전송합니다. 이로써 연결이 완전히 종료됩니다.

4-Way Handshake는 양방향에서 데이터를 전송하는 TCP 연결을 종료하기 위해 필요한 절차로, 연결의 종료를 양측이 명확하게 인식하도록 합니다.