😒 저 저 저 개념없는 나/🌐 네트워크

[네트워크] TCP Handshake | TIME-WAIT

우주수첩 2024. 11. 24. 17:26
728x90

# TCP 연결 수립 과정

 

 

연결 수립 /  연결 해제  시 : 상대방이 보낸 시퀀스 번호 +1 로 승인 번호를 계산하여 반환

 

0.init

  • Client : CLOSED
    • client_seq_num = 0
  • Server : LISTEN
    • server_seq_num = 100

 

1. client -> server / SYN

  • Client : SYN-SENT
    • seq_sum = 0
  • Server : CLOSED

 

2. server -> client / SYN + ACK

  • Client : SYN-SENT
  • Server = SYN_RECIEVED
    • ack_num = 1_seq_num +1 == 0+1 ==1
    • seq_num = 100

 

3. client -> server / ACK

  • Client : ESTABLISHED
    • ack_num = 2_seq_num + 1 == 100 +1 ==101
  • Server = SYN_RECIEVED

 

 

 

# 데이터 전송 과정

  • 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 byte로 승인 번호를 만들어 냄
  • ACK : 송신자가 다음으로 수신하기를 기대하는 바이트의 시퀀스 번호

 

클라이언트 -> 서버

전제조건

  • 크기가 1024byte인 데이터를 전송하고자 한다. 
  • 예시의 경우 TCP로 전송할 수 있는 데이터의 최대 크기가 512byte로 제한되어있어 2개의 세그먼트로 전송

 

클라이언트

  • 2개의 세그먼트 전송

 

서버

  • 2 개의 세그먼트 수신
  • 가장 마지막으로 수신한 세그먼트의 seq_num에 전송받은 데이터의 크기를 합.
    -> ACK = 513(seq_num) +512(data_size) == 1025

 

 

서버 -> 클라이언트

 

 

동일하게 동작.

 

! 서버의 seq_num과 클라이언트의 seq_num은 다름

 

 

# 연결 해제 과정

  • 4-way Handshaking
  • 세션을 종료하기 위해 수행
  • 찬 곳 : active closer
  • 차인 곳 : passive closer

 

 

0.init

  • Client : Established
  • Server : Established

 

1. client -> server / FIN

  • Client : FIN-WAIT-1
  • Server : Establish

 

2.server -> client / ACK

  • Client : FIN-WAIT-1
  • Server : CLOSE-WAIT
    • 확인 메세지 전송
    • 자신의 통신이 끝날 때 까지 대기.

 

3. server -> client / FIN

  • Client :  FIN-WAIT-1
  • Server : LAST-ACK
    • 서버의 통신 종료
    • 클라이언트에게 FIN 플래그 전송

 

4. client -> server / ACK

  • Client :  TIME-WAIT
    • 확인 메세지 전송
  • Server : CLOSED

 

 

❗️TIME-WAIT상태

  • TCP 연결 종료 시, 데이터 유실이나 네트워크 문제로 인해 발생할 수 있는 혼란을 방지하기 위한 안전장치
  • 뒤늦게 도착한 데이터의 유실 및 새로운 세션에 영향을 줄 수 있는 경우 방지

동작 예시

  • Server → Client: 데이터 전송 중 일부 지연 발생 (seq_num=513)
  • Server → Client: FIN 패킷 전송
  • Client: FIN 패킷 수신 후 ACK 전송 및 TIME_WAIT 상태 진입
  • 지연된 데이터 패킷(seq_num=513)이 TIME_WAIT 기간 내에 도착 → 정상 처리
  • TIME_WAIT 시간 종료 → 세션 완전 종료

 

 

 

 

 

 

728x90