3-Way Handshake
서버와 클라이언트간의 TCP 연결 단계에서 신뢰성 있는 연결을 하게 된다.
이 때 데이터의 정확한 전송을 보장하기 위한 세션을 성립(Establish) 단계를 위해 3-Way Handshake 방식을 사용하게 된다.
1-1)client는 TCP SYNchronize 패킷을 server로 전송합니다.
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
'System > Network ' 카테고리의 다른 글
브릿지(Bridge) (0) | 2018.09.17 |
---|---|
네트워크 바이트 순서와 호스트 바이트 순서 (Network Byte Order, Host Byte Order) (0) | 2018.06.26 |
TCP Header 구조체 분석 (0) | 2018.05.09 |
TCP/IP , OSI 7 Layer (0) | 2018.04.01 |
방화벽 (Firewall) (0) | 2018.04.01 |