Computer Science/Network

[Network] TCP와 UDP

LeeJaeJun 2023. 12. 22. 23:27
728x90
반응형

- TCP(Transmission Control Protocol)

  • Virtual cercuit이라고도 함.(TCP의 연결 지향성과 패킷 전송 과정에서 연결성과 순차성을 제공하며 가상적인 회선을 구축하기 때문)
  • 연결 지향적인 프로토콜로, 신뢰성과 정확성을 중요시합니다.
  • 데이터 전송 과정에서 패킷의 손실, 손상 또는 순서 변경을 최소화합니다.
  • 핸드쉐이크를 통해 연결 설정과 해제를 수행하며, 데이터 전송 후 연결을 정리합니다.
  • 순차적인 데이터 전송을 보장하고, 데이터의 오류 검출 및 복구를 위해 확인 응답과 재전송을 수행합니다.(TCP는 상대가 못 받을 상황이면 보내지 않는다.)
  • 대부분의 웹 브라우징, 이메일, 파일 전송, 원격 접속 등에 사용됩니다.
  • 전송단위는 segment

 

- UDP(User Datagram Protocol)

  • 비연결성 프로토콜로, 신뢰성보다는 속도와 효율성을 중요시합니다.
  • 패킷 기반의 통신을 수행하며, 데이터 전송 중 손실이나 오류가 발생할 수 있습니다.
  • 핸드쉐이크나 연결 설정 단계가 없어서 TCP보다 더 가볍고 빠른 전송이 가능합니다.(상대가 받을 수 있는 상태이건 아니건 그냥 보낸다.)
  • 실시간 스트리밍, DNS 조회, 오디오/비디오 스트리밍, 온라인 게임 등에 사용됩니다.
  • 데이터의 순서가 보장되지 않을 수 있고, 수신자는 데이터의 정확성을 확인하거나 손실된 패킷을 재요청해야 합니다.
  • 전송단위는 datagram

 

- TCP 연결과정 (3-way handshake)

TCP 연결과정 (3-way handshake)

TCP 연결이라는 것은 정책교환을 하는 것입니다. 정책에는 sequence 번호, MSS 등이 포함되어 있습니다. 

연결이라는 것은 이러한 관리적 정보(프로토콜이 규정하는 정보)를 교환하는 것입니다.

1. SYN (Synchronize) 패킷 전송:

  • 연결요청!
  • 연결을 설정하려는 송신자는 수신자에게 SYN 패킷을 보냅니다.
  • SYN 패킷은 초기 순차번호(Sequence Number)를 포함하고, 연결 설정 플래그(SYN flag)를 설정합니다.
  • 이 패킷은 수신자에게 연결 설정 요청을 전달하는 역할을 합니다.

TCP Header flag

 

2. SYN-ACK (Synchronize-Acknowledgment) 패킷 응답:

  • 확인 + 나도 연결 요청!
  • 수신자는 SYN 패킷을 받으면, 송신자에게 응답으로 SYN-ACK 패킷을 전송합니다.
  • SYN-ACK 패킷은 초기 순차번호(Sequence Number)와 확인 응답 번호(Acknowledgment Number)를 포함하며, 연결 설정 플래그(SYN, ACK flag)를 설정합니다.
  • 확인 응답 번호는 수신자가 송신자로부터 받은 데이터의 다음 예상 순차 번호를 나타냅니다. 즉, 수신자가 이전에 받은 데이터의 마지막 순차 번호에 1을 더한 값입니다.
  • 이 패킷은 송신자에게 수신자의 연결 수락 및 초기 순차번호를 알려주는 역할을 합니다.

TCP Header flag

 

3. ACK (Acknowledgment) 패킷 전송:

  • 확인!
  • 송신자는 SYN-ACK 패킷을 받으면, 수신자에게 ACK 패킷을 전송하여 연결 설정을 완료합니다.
  • ACK 패킷은 확인 응답 번호(Acknowledgment Number)를 포함하며, 연결 설정 플래그(ACK flag)를 설정합니다.
  • 이 패킷은 수신자에게 송신자의 연결 수락을 알리는 역할을 합니다.

TCP Header flag

 

- TCP 연결종료 과정 (4-way handshake)

연결을 종료하고자 Client가 FIN를 보내고 FIN_WAIT1 상태가 됩니다.

FIN을 받은 server는 close_wait상태로 변경되고 FIN에 대응되는 ACK를 보냅니다.

ACK를 받은 Client는  FIN_WAIT2 상태로 변경되며 계속 server의 FIN을 기다립니다.

server가 FIN를 보내고 소켓을 LAST_ACK 상태로 변경합니다.

FIN을 받은 Client가 TIME_WAIT 상태가 됩니다. (TIME_WAIT 상태가 나타났다는 것은 연결을 끊자고 했다는 것이다.)(주체)

Client가 ACK를 server에 보내면 servers는 소켓을 CLOSED 상태로 변경합니다. 시간이 경과한 뒤, client도 소켓을 CLOSED 상태로 변경하고 socket이 회수가 됨.

 

1. FIN (Finish) 패킷 전송

  • 연결을 종료하려는 송신자는 수신자에게 FIN 패킷을 전송합니다.
  • FIN 패킷은 더 이상 데이터를 전송하지 않을 것임을 나타내는 연결 해제 플래그(FIN flag)를 설정합니다.
  • 이 패킷은 수신자에게 연결 해제 요청을 전달하는 역할을 합니다.

TCP Header flag

 

2. ACK (Acknowledgment) 패킷 응답:

  • 수신자는 FIN 패킷을 받으면, 송신자에게 ACK 패킷을 전송하여 수신을 확인합니다.
  • ACK 패킷은 확인 응답 번호(Acknowledgment Number)를 설정하고, 연결 해제 플래그(ACK flag)를 설정합니다.
  • 이 패킷은 송신자에게 수신자의 연결 해제 요청을 확인하는 역할을 합니다.
  • 수신자가 FIN 패킷을 보낼 때까지 송신자(연결을 끊고 싶어하는 쪽)에서는 TIME WAIT가 발생합니다.

TCP Header flag

 

3. FIN (Finish) 패킷 전송:

  • 수신자는 연결 해제 요청에 대한 응답으로 자신도 연결을 종료하기 위해 FIN 패킷을 전송합니다.
  • 이 패킷은 송신자에게 수신자의 연결 해제 요청을 전달하는 역할을 합니다.

TCP Header flag

 

4. ACK (Acknowledgment) 패킷 응답:

  • 송신자는 FIN 패킷을 받으면, 수신자에게 ACK 패킷을 전송하여 연결 해제를 완료합니다.
  • ACK 패킷은 확인 응답 번호(Acknowledgment Number)를 설정하고, 연결 해제 플래그(ACK flag)를 설정합니다.
  • 이 패킷은 수신자에게 송신자의 연결 해제 요청을 확인하는 역할을 합니다.

TCP Header flag

 

TCP는 세션 연결 확립 후 종료하기 위해 패킷 요청을 네 번 교환하여 마무리하는 과정을 거칩니다.

대전제: 

특별한 이유가 없다면 client의 행동이 active하다. 연결을 하자고 하는 것도, 끊자고 하는 것도 client이어야 한다.server가 연결을 끊는 것이 아니라 client에게 요청해서 active하게 연결을 끊어야 한다. 그래야 server에서 time-wait이 발생하지 않는다.

728x90
반응형

'Computer Science > Network' 카테고리의 다른 글

[Network] UDP header  (1) 2023.12.22
[Network] TCP header 형식  (1) 2023.12.22
[Network] Ping, RTT, ICMP  (2) 2023.12.22
[Network] ARP(Address Resolution Protocol)  (0) 2023.12.21
[Network] DHCP(Dynamic Host Configuration Protocol)  (0) 2023.12.21