[Network] 3-way handshake & 4-way handshake

Wonjun Seo·2023년 8월 7일
0

TCP (Transmission Control Protocol)

TCP란 인터넷상에서 데이터를 메세지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜을 말한다.

TCP는 애플리케이션에게 신뢰적이고 연결지향성 서비스를 제공한다.

서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다. 따라서 통신하기에 앞서, TCP 장치들 사이에 논리적인 접속을 성립(establish)하기 위해 3 way handshake 과정을 진행한다.

3-way Handshake

TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.

  1. 클라이언트가 서버에게 SYN 패킷을 보냄(sequence = x)

  2. 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄(sequence = y, ACK = x + 1)

  3. 클라이언트는 서버의 응답으로 ACK(x + 1)와 SYN(y) 패킷을 받고, ACK(y + 1)를 서버로 보냄


위와 같이 신뢰성을 위해 3번의 handshake 과정을 거쳐 연결을 성립하는 것을 3-way Handshake라고 한다.

4-way Handshake

4-way handshake는 연결 성립 후, 모든 통신이 끝났다면 연결을 해제하기 위해 수행되는 절차를 의미한다.

  1. 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다. 보낸 후에 FIN_WAIT_1 상태가 된다.

  2. FIN 플래그를 받은 서버는 확인 메세지인 ACK를 클라이언트에게 보낸다. 그 후 CLOSE_WAIT 상태로 변한다.

  3. 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.

  4. 클라이언트는 서버로부터 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. 그 후 TIME_WAIT 상태로 변한다.

    • 서버는 ACK를 받은 이후 소캣을 닫는다.
    • TIME_WAIT 시간이 끝나면 클라이언트도 닫는다.

이렇게 4번의 통신이 완료되면 연결이 해제된다.

그런데 만약 서버에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생할 수 있다.

클라이언트에서 세션을 종료시킨 후 늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다.

이러한 현상에 대비하여 클라이언트는 서버로부터 FIN을 수신하더라도 일정시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT"이라고 한다.

References

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP%203%20way%20handshake%20%26%204%20way%20handshake.md

https://jeongkyun-it.tistory.com/180

0개의 댓글