certification/정보처리산업기사

[Network] TCP 연결 해제 과정(4-way 핸드셰이크)

gaing 2024. 10. 19. 21:19

TCP 연결 해제 과정(4-way 핸드셰이크)

TCP 연결을 설정할 땐 3-way 핸드셰이크가 사용되지만, 연결을 해제할 때는 양방향에서 안전하게 데이터 전송이 종료되었음을 확인하기 위해 4-way 핸드셰이크가 사용된다.

 

1. FIN 전송(송신자 → 수신자)

  • 데이터 전송이 끝난 송신자가 더 이상 데이터를 전송할 필요가 없으면, FIN 플래그가 설정된 패킷을 수신자에게 보낸다.
  • 이 FIN 패킷은 "더 이상 데이터를 보내지 않겠다"는 신호이다.

 

2. ACK 전송(수신자 → 송신자)

  • 수신자는 FIN 패킷을 받으면 ACK 패킷을 송신자에게 보낸다
  • 이 ACK 패킷은 "FIN 패킷을 잘 받았다"는 응답이다.
  • 이 시점에서 수신자는 송신자가 더 이상 데이터를 보내지 않는다는 것을 알게된다.
    • 그러나, 수신자는 여전히 데이터를 보낼 수 있는 상태이다.

 

3. FIN 전송(수신자 → 송신자)

  • 수신자도 더 이상 전송할 데이터가 없다면, FIN 플래그가 설정된 패킷을 송신자에게 보낸다.
  • 이 FIN 패킷은 "나도 데이터를 전송할 게 없다"는 신호이다.

 

4. ACK 전송(송신자→ 수신자)

  • 송신자가 수신자로부터 FIN 패킷을 받으면, 이를 확인하고 ACK 패킷을 수신자에게 보낸다.
  • 이 ACK 패킷은 "FIN 패킷을 잘 받았다"는 응답이다.
  • 이제 양쪽 모두 데이터를 더 이상 주고받지 않기 때문에 연결이 완전히 종료된다.
이 과정이 완료되면 TCP 연결은 안전하게 종료되며,
이때까지 전송되지 않은 데이터가 있는 경우 재전송되거나 추가적인 오류 처리가 이루어질 수 있다.

 


TCP 연결 해제 과정 요약

  1. 송신자가 FIN 패킷을 보내고, 수신자가 이를 받는다.
  2. 수신자는 ACK 패킷을 보내며, 수신자도 데이터를 계속 전송할 수 있다.
  3. 수신자도 전송할 데이터가 없으면 FIN 패킷을 보내고, 송신자가 이를 받는다.
  4. 송신자는 ACK 패킷을 보내며, 연결이 완전히 종료된다.

4-way 핸드셰이크 흐름

  1. 송신자 → 수신자 : FIN (연결 종료 요청)
  2. 수신자 → 송신자 : ACK (FIN 확인 응답)
  3. 수신자 → 송신자 : FIN (연결 종료 요청)
  4. 송신자 → 수신자 : ACK (FIN 확인 응답)

용어 정리(ACK, FIN)

ACK(Acknowledgment)

데이터를 잘 받았다는 확인 응답
  • 송신자가 보낸 패킷에 대해 수신자가 잘 받았다는 신호를 보낼 때 사용된다.
  • 수신자는 송신자로부터 받은 데이터에 대한 ACK 번호를 포함시켜 송신자에게 보낸다.
    • 이 ACK 번호는 수신자가 다음에 받아야 할 데이터의 순서 번호를 나타낸다.

예시

만약 송신자가 1000번 순서의 데이터를 보냈고 수신자가 이를 잘 받았다면
수신자는 ACK 1001을 송신자에게 보낸다.
이것은 1000번까지 잘 받았고, 다음 데이터는 1001번을 기다리고 있다는 의미이다.

 

FIN(Finish)

TCP 연결을 종료하고 싶을 때 사용
  • TCP는 데이터를 주고받기 위해 먼저 연결을 설정한 후, 데이터 전송이 완료되면 연결을 안전하게 종료한다.
    • 이 과정에서 FIN 플래그가 사용된다.
  • 연결을 종료하고 싶을 때 송신자가 FIN 플래그를 설정한 패킷을 수신자에게 보낸다.
  • 수신자는 이 FIN 패킷을 받고 송신자에게 ACK를 보내며, 이후 수신자도 FIN 패킷을 송신자에게 보내어 양방향 연결을 종료한다.