TCP 3 way-handshake

SangHyun-Park·2022년 1월 31일
0

DNS resolve 과정이 끝나면 서버 컴퓨터의 IP를 알아냈으므로 HTTP 요청이 가능하다.

다만 목적지를 알아냈다고 해서 데이터가 정상적으로 전송이 가능하다는 의미가 될 수 없다.

데이터를 받는 컴퓨터(서버)가 데이터를 받을 준비가 되었고, 정해진 절차를 모두 이행한 이후에 데이터 전송이 가능하다.

이때의 절차를 3 way-handshake 라고 한다.

물론 UDP 와 같은 비연결형 프로토콜이 존재하긴 하지만 이번 포스팅에서는 데이터 전송이 보장되는 연결형 프로토콜인 TCP 의 관점에서 알아보겠다.

3 way-handshake

TCP는 서버와 클라이언트 사이간에 동기화하기 위하여 3 way-handshake 를 수행한다. 이 과정은 TCP/IP 전송체계에서 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

3 way 라는 이름에 맞게 총 3단계의 과정을 거쳐 수행된다.

client syn

최초 클라이언트가 syn 패킷을 생성하여 서버에 전송하게 되는데
syn 패킷 내부에는 sequence number, 즉 패킷의 일련번호가 포함되어 전송된다.

SYN_SENT state 라고도 한다.

server syn/ack

서버측에서는 해당 패킷을 받고 syn/ack 패킷을 준비하는데
해당 패킷은 클라이언트의 요청을 잘 받았다는 의미의 acknowledgement 데이터를 포함하고 있으며 보통 sequence number+1 의 값이 들어간다.

서버 패킷의 sequence number 또한 포함되어 전송되며 client 또한 다음 과정에서 +1 을 하여 재전송한다.

SYN_RECEIVED state 라고도 한다.

client ack

위에서 언급했듯 클라이언트가 syn/ack 패킷을 수신한 후 동일하게 ack = seq + 1 의 값을 저장한 패킷을 재전송 한다.

ESTABLISHED state 라고도 한다.


정리

3 way-handshake 의 구체적인 로직은 패킷을 생성하고 전송하는 방식에서 복잡해질 수 있지만 대략적인 로직은 위와 같이 3단계에 걸친 flag 검증 방식이라고도 볼 수 있다.

그렇다면 왜 위와같은 복잡한어찌보면귀찮은 과정을 거치는 걸까.

그 이유는 TCP protocol 의 목적에 있다.

TCP protocol

기본적으로 TCP 방식의 통신은 데이터의 송신자와 수신자간의 연결성을 중요시하고, 데이터의 손실을 막는 것에 초점이 맞춰져있다.

  • 연결성을 보장하기 위해 3 way-handshake 과정을 거치고

  • 데이터의 손실을 막기 위해 패킷을 추적하여(패킷 번호를 확인하여) 손실된 데이터를 확인하고 재요청하는 과정을 수행한다.

  • 이를 제외하고도 네트워크의 흐름제어와 혼잡제어를 통해 수신자(서버)의 버퍼 오버플로우를 방지하는 등의 데이터 손실을 최소화 하는 방법을 채택합니다


연결성을 중시하고 데이터의 손실을 막는다는 것은 데이터의 전송을 보장한다는 말과 같고 신뢰성을 중시하는 서비스에서 유리한 통신방법 이라는 것이다.
다만 TCP 방식은 보시다시피 절차가 복잡해 통신 속도가 다소 느리다는 단점이 존재한다. 따라서 빠른 속도가 보장되어야하는 스트리밍, 채팅 서비스 같은 경우에는 TCP 방식의 통신보다는 UDP 방식이 적극적으로 채택되곤 한다.

UDP에 대해서는 다음에 알아보자


참고

https://www.cs.miami.edu/home/burt/learning/Csc524.032/notes/tcp_nutshell.html

profile
https://ppaksang.tistory.com/ 옮겼습니다 !!

0개의 댓글