TCP 3-way & 4-way handshake::네트워크

2020. 7. 4. 21:14computer science/network

1. 3-way handshake

 

 두 호스트 간 데이터를 전송하기 전 신뢰성있는 연결을 맺어주는 방식입니다.

 

 TCP/IP 프로토콜을 이용해 통신하는 응용프로그램에서 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 수신 호스트와 사전에 세션을 수립하는 과정을 의미합니다.

 

 아래 그림은 Client와 Server가 서로에게 송/수신 준비를 알려 연결을 초기화하는 3-way handshake입니다.

< 3-way handshake >

1) Client는 Server에 접속을 요청하는 SYN 패킷을 보내고, 응답을 기다립니다(SYN_SENT).

2) Server는 SYN 요청을 받고, Client에게 요청을 수락하는 긍정 응답(ACK)과 SYN 패킷을 보내고 응답을 기다립니다(SYN_RECEIVED).

3) Client는 Server에게 긍정 응답을 보내면 서로 연결이 이뤄지고 데이터를 송/수신할 수 있게 됩니다(ESTABLISHED).

 

* SYN : SYNchronize sequence numbers

* ACK : ACKnowledgement

 

SYN_SENT -> SYN_RECEIVED -> ESTABLISHED

 

 

2. 4-way handshake

 

 두 호스트 간 세션을 종료하기 위해 수행되는 절차입니다.

< 4-way handshake >

1) Client가 연결을 종료하겠다는 FIN 패킷을 전송합니다.

2) Server는 확인 응답을 보내고 자신의 통신이 끝날 때까지 기다립니다(TIME_WAIT).

3) Server에서 통신이 끝났으면 연결을 종료하는 FIN 패킷을 전송합니다.

4) Client는 확인 응답을 보냅니다.

 

 만약 전송한 패킷이 Routing 지연이나 패킷 유실로 인해 재전송되는 경우 Server에서 전송하는 FIN 패킷보다 늦게 도착할 수 있습니다. 그렇게 되면 해당 패킷은 폐기되기 때문에 데이터 유실이 일어날 수 있습니다.

 이러한 현상을 대비해 일정 시간동안 세션을 남겨놓고 패킷을 기다리는 TIME_WAIT 과정을 거칩니다.