4-웨이 핸드셰이크
TCP/IP의 전송계층에서 연결지향인 TCP를 사용할 때 서버와 클라이언트의 연결을 해제하는 과정을 3-웨이 핸드셰이크라고 합니다.
연결을 활성화하는 과정은 아래의 링크를 들어가시면 확인할 수 있습니다.
연결 해제 과정
위 그림과 같이 연결을 해제하기 위한 과정에서 총 네 번의 통신이 이루어지기 때문에 4-웨이 핸드셰이크라고 합니다.
네 번의 절차가 어떻게 되는지 설명하겠습니다.
- 클라이언트와 서버의 통신이 활성화되어 있는 상태에서 클라이언트가 close()를 통해 연결을 해제하려고 하면 서버에게 연결을 종료한다는 FIN 세그먼트를 보냅니다.
- 이를 확인한 서버는 FIN 세그먼트를 받았다는 응답으로 ACK를 보내고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트는 ACK를 받으면 서버가 다시 FIN을 보낼 때까지 기다리는 FIN_WAIT상태에 들어갑니다.
- 서버는 CLOSE_WAIT 상태에서 남은 데이터가 있다면 모두 보내고 모두 보냈다면 close()를 호출하고 클라이언트에게 FIN을 보내어 클라이언트의 ACK를 기다리는 LAST_ACK 상태에 들어갑니다.
- 클라이언트는 이 세그먼트를 받았다는 응답 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 |