3-Way Handshake


서버와 클라이언트간의 TCP 연결 단계에서 신뢰성 있는 연결을 하게 된다.

이 때 데이터의 정확한 전송을 보장하기 위한 세션을 성립(Establish) 단계를 위해 3-Way Handshake 방식을 사용하게 된다.





1-1)client는 TCP SYNchronize 패킷을 server로 전송합니다.

1-2)server는 client의 SYN을받습니다.
2-1)server는 SYNchronize-acknowledgement를 보냅니다.
2-2)client는 server의 SYN-ACK를 수신합니다.
3-1)client는 ACKnowledge를 보낸다.
3-2)server는 ACK를 수신합니다.

 -> TCP 소켓 연결이 설정.  




4-Way Handshake


4-way handshake는 클라이언트와 서버의 통신을 종료하기 위해서 사용된다.



1) 클라이언트가 연결을 종료하겠다는 FIN패킷을 전송


2) 서버는 세그먼트A를 확인 후 클라이언트에게 ACK패킷을 발송한 후, 자신의 통신이 끝날 때까지 대기(TIME-WAIT)한다. 이때, 클라이언트는 서버의 FIN패킷을 대기(FIN-WAIT-2)한다.


3) 서버의 통신이 끝나서 종료할 준비가 되었다면, 클라이언트에게 FIN패킷 전송한다.

4) 클라이언트는 서버에 ACK패킷을 전송하고 서버는 ACK 패킷을 받는다.




- 서버에서 FIN패킷을 발송하기 전에 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 FIN패킷보다 늦게 도착하는 상황이 발생할 수 있다.

- 클라이언트가 세션을 종료한 후, 뒤늦게 도착하는 패킷이 있다면 이 패킷은 드랍되고 데이터는 유실된다.

- 이런 현상에 대비하여 클라이언트는 서버로부터 FIN패킷을 수신하더라도 일정시간(디폴트 240초) 동안 세션(session)을 남겨놓고 잉여 패킷을 기다리는 과정을 거치는데, 이 과정을 TIME-WAIT라고 한다.









※ 왜 3 way-handshake 와 4-way handshake 방식을 사용할까?


: TCP는 4layer에서 수행되며 신뢰성 있는 통신이다.  클라이언트와 서버간의 연결/종료는 데이터의 정확한 전달만큼 중요한 단계이다.


클라이언트-서버간 서로 SYN과 ACK 패킷을 통해 연결 요청에 대해 물어보고, FIN과 ACK 패킷을 통해 서로간의 통신중단에 대해 물어보는 과정이다.



 









참고: http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm







+ Recent posts