Frontend/Computer Science

[네트워크] TCP/IP 이해하기 (3-way Handshake, 4-way Handshake)

돌잡이개발자 2022. 3. 21. 11:52

네트워크 통신 레이어를 공부하며 TCP/IP를 자주 접했다. 그래서 오늘은 TCP/IP에 대한 개념을 짚고 정리해보는 시간을 가졌다.🤔 

 

TCP/IP의 개념

먼저 위키백과에 정의된 개념은 다음과 같다.

TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)와 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.(unreliable datagram service) TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다.

 

설명이 조금 어렵지만 TCP/IP는 메세지를 작게 조각내어 보내는 것과 같다. 이를 패킷이라고 한다. 패킷은 각각 다른 경로로 보내지는데 TCP 프로토콜은 패킷의 순서를 제대로 받았는지, 누락된 패킷은 없는지, 전부 받았는지 확인하고 알려주기 때문에 신뢰성 있는 데이터 통신을 가능하게 한다. 

 

3way handshake

TCP에선 장치간의 논리적인 접속을 성립하기 위해 3 way handshake와 4 way handshake를 사용한다. 

3 way handshake는 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정다.

 

 

  1. 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버가 SYN요청을 받으면 클라이언트에게 요청을 수락한다는 ACK 와 SYN flag가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다. 서버의 상태는 SYN_RECEIVED 이다.
  3. 클라이언트는 서버에게 ACK을 보내고 이후로 부터는 연결이 이루어지고 데이터가 오가게 된다. 이때의 서버 상태는 ESTABLISHED 이다.

 

4way handshake

4-Way handshake는 세션을 종료하기 위해 수행되는 절차이다.

 

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
  2. 서버는 일단 확인메시지 ACK를 보내고 자신의 통신이 끝날때까지 기다린다.
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
  4. 그 후 클라이언트는 확인했다는 ACK 메시지를 보낸다.
  • 서버에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황이 발생한다면 클라이언트에서 이 패킷은 Drop되고 데이터는 유실될 수 있기에 이에 대비하여 클라이언트는 서버로부터 FIN을 수신하더라도 일정시간동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 한다.

 

참고 자료

https://velog.io/@arielgv829/CS-network-TCP-3-way-handshake-4-way-handshake

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

반응형