본문 바로가기
network

TCP 연결 해제 (4 way hand shake) 설명

by 무대포 개발자 2020. 10. 28.
728x90
반응형

TCP 연결 해제 (4 way hand shake)

  1. TCP 연결이 해제 될때는 FIN 패킷, ACK 패킷들을 주고 받으면서 종료
  2. Close 요청을 먼저한 주체가 누구냐에 따라 Active Close, Passive Close 대상이 달라짐.
    • 먼저 close 요청한 쪽이 Active Close 임.

TCP 연결 해제 순서

  1. Active Close --> Passive Close 에게 종료 요청을 보냄.
  2. Passive Close 는 Close WAIT 상태로 변경.
    • Close WAIT 상태란 TCP 포트를 사용중인 프로세스에게 종료 명령을 내리는 것임.
    • 만약 프로세스 내부에서 교착 상태에 빠져있으면 소켓이 종료가 안되는 것임. 즉, hang 이 걸리는거지.
  3. Passivce Close 에서 Close WAIT --> CLOSE 상태로 변경되면 이것을 Active Close 에 전달.
    • 여기서 잠깐 생각해보면 왜 Passive Close 에서 응답이 올 떄까지 Active Close 가 기다리는지 생각해보면 됨.
    • Active Close 가 ack 을 줘도 뭐 할게 없기 때문. Passive Close 는 이미 프로세스에 Close 명령을 내린 상태에서 기다리고 있는데 뭘 더 할 수가 없음.
    • 만약 Active Close 가 일정 시간 동안 응답을 받지 못하면 일정 시간이 흐른 후, 자동으로 TIME_WAIT 상태로 변경
    • TIME WAIT 상태란 일정 시간 동안 응답을 기다리고 응답이 오지 않을 경우 Socket 을 Disconnect 하는 상태
    • 왜 바로 안닫고 TIME_WAIT 상태로 가냐하면, 그동안 응답이 올 수 있기 때문

Time WAIT 상태가 대량으로 존재할 때 무슨일이 발생하는가?

  • TCP 는 서버 간 포트를 열어서 통신하는 것이다.
  • Client <--> Server 간 통신 때, 클라이언트가 Active CLose 상태라고 가정해보자.
  • Client 에서 대량의 Request 를 보낸다면 Client 쪽에 TIME_WAIT 상태가 많이 생기겠지.
  • 클라이언트 입장에서는 랜덤 포트를 할당 받아 통신하기에 아무리 많아져봐야 물리 서버가 허용해주는 한도 내에서 크게 문제 없음.
  • 일정 시간이 흐른 후 DISCONNECTED 될테니.

  • 서버가 Active Close 상태일 때는 서버는 포트를 하나 할당받고 여러 요청들을 소켓에 할당할 것이다.
  • 이 때, 소켓은 파일 디스크립터만큼 만들어 낼 수 있을테고. 수많은 요청들이 들어온다해도 fd 가 많이 만들어진 것 말고는 딱히 문제 없음.

댓글