My Own Style

반응형


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 를 패킷으로 정리해보시는 것도 좋을 것 같습니다.

와이어샤크 예제1

와이어샤크 예제2


  



반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band