본문 바로가기
CS/네트워크

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

by KDGdev 2023. 2. 4.

4-웨이 핸드셰이크


TCP/IP의 전송계층에서 연결지향인 TCP를 사용할 때 서버와 클라이언트의 연결을 해제하는 과정을 3-웨이 핸드셰이크라고 합니다.

 

연결을 활성화하는 과정은 아래의 링크를 들어가시면 확인할 수 있습니다.

https://kdgdev.tistory.com/13

 

 

연결 해제 과정

위 그림과 같이 연결을 해제하기 위한 과정에서 총 네 번의 통신이 이루어지기 때문에 4-웨이 핸드셰이크라고 합니다.

 

네 번의 절차가 어떻게 되는지 설명하겠습니다.

  1. 클라이언트와 서버의 통신이 활성화되어 있는 상태에서 클라이언트가 close()를 통해 연결을 해제하려고 하면 서버에게 연결을 종료한다는 FIN 세그먼트를 보냅니다.
  2. 이를 확인한 서버는 FIN 세그먼트를 받았다는 응답으로 ACK를 보내고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트는 ACK를 받으면 서버가 다시 FIN을 보낼 때까지 기다리는 FIN_WAIT상태에 들어갑니다.
  3. 서버는 CLOSE_WAIT 상태에서 남은 데이터가 있다면 모두 보내고 모두 보냈다면 close()를 호출하고 클라이언트에게 FIN을 보내어 클라이언트의 ACK를 기다리는 LAST_ACK 상태에 들어갑니다.
  4. 클라이언트는 이 세그먼트를 받았다는 응답 ACK를 보내고 TIME_WAIT 상태에 들어갑니다. 서버는 ACK를 수신하면 연결을 종료하고 클라이언트는 TIME_WAIT가 끝나면 연결을 종료합니다.

네번째 과정에서 클라이언트가 서버의 마지막 FIN을 받고 바로 종료하지 않고 TIME_WAIT에 들어가는데 그 이유는 서버가 어떠한 문제로인해 클라이언트의 마지막 ACK를 받지 못했을 때 클라이언트는 연결을 종료했지만 서버는 연결이 계속 활성화되어있는 상태인 문제가 생기게 됩니다.

 

여기서 TIME_WAIT의 대기 시간이 있다면, 서버가 일정 시간이 지나도 클라이언트가 보내는 마지막 ACK가 오지 않을 때 문제가 있다고 판단하여 FIN을 재전송할 수 있습니다. 클라이언트는 TIME_WAIT동안 아직 연결이 활성화되어있기 때문에 서버가 재전송한 FIN을 받을 시간이 충분히 있고 마찬가지로 ACK를 서버에게 다시 재전송하여 이 ACK가 제대로 전송된다면 서버도 연결을 해제할 수 있게 됩니다.

 

위 그림은 TIME_WAIT가 필요한 이유에 대한 과정입니다.

 

※ 잘못된 정보, 혹은 다른 의견이 있다면 댓글로 말해주세요. 감사합니다.

'CS > 네트워크' 카테고리의 다른 글

ARP(Address Resolution Protocol)  (0) 2023.03.07
OSI 7계층  (0) 2023.02.23
3-웨이 핸드셰이크(3-way handshake) - 연결 성립 과정  (0) 2023.02.04
TCP/IP 4계층  (0) 2023.01.31
네트워크 토폴로지  (2) 2023.01.26