TCP 4 way handshake 란?
TCP 는 Connection-Oriented (연결 지향) 프로토콜 입니다.
따라서, 논리적인 접속 상태를 "해제"하기 위해서도 필요한 과정이 있는데
이것이 4-way handshake 입니다.
해당 과정을 통하여 sever, client는 tcp 연결이 해제되며 연결을 위해
사용하였던 리소스의 정리가 일어나게 됩니다.
rfc793 (https://tools.ietf.org/html/rfc793) 문서의 "3.5. Closing a Connection" 을 보시면
구체적으로 closing connection 을 위해 하는 일 들이 정리 되어 있습니다.
간단히 그림으로 살펴보면 다음과 같습니다.
1. 연결이 되어 있는 상태 입니다.
2. 연결을 종료하고자 하는 client 는 server 에게 tcp header 의 flags 필드의
FIN 을 1을 세팅하여 전송하고 소켓을 FIN_WAIT_1 상태로 변경합니다.
3. FIN 을 받은 server CLOSE_WAIT 상태로 변경되며 FIN 에 대응 되는 ACK 를 전송해 줍니다.
ACK 전송을 받은 client 는 FIN_WAIT_2 상태로 변경되며 server 의 FIN 을 기다립니다.
4. server 는 연결 종료를 위해 FIN 패킷을 client 에게 전송하며 소켓을 LAST_ACK 상태로 변경합니다.
5. FIN을 받은 client 는 TIME_WAIT 상태로 변경되며 FIN 에 대응되는 ACK 를 server 에 전송합니다.
ACK 를 받은 server 는 소켓을 CLOSED 상태로 변경합니다.
6. 시간이 경과한 뒤, client 도 소켓을 CLOSED 상태로 변경합니다. (MSL 은 커널마다 지정된 시간 확인필요)
위의 그림에서 설명에 매칭되는 패킷내용 입니다. 참고하시어 four-way handshake 를 패킷으로 정리해보시는 것도 좋을 것 같습니다.
IP Aliasing, Network Aliasing 이란? (0) | 2018.12.27 |
---|---|
link local address(IPv4 링크로컬주소) 개념 및 사용법 정리 (0) | 2018.12.24 |
TCP 3 way handshake 내용 정리 (0) | 2018.12.18 |
DHCP 연결과정 정리 (0) | 2018.12.12 |
유니캐스트(unicast), 브로드캐스트(broadcast), 멀티캐스트(multicast) (0) | 2018.11.18 |