TCP 3-way Handshake & 4-way Handshake

Tabber·2022년 1월 2일
0

공부하면서 쓰는 글입니다.

들어가기 전

위 이론들을 알기 위해서는 기본부터 알아봐야 한다.

먼저 TCP가 무엇인지에서부터 시작하고, 그 다음 차근차근 알아보자.

TCP(Transmission Control Protocol)란

TCP란
TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜으로서, 장치들 사이에 논리적인 접속을 성립하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다.

TCP의 특징

인터넷 상에서 데이터를 메세지의 형태(세그먼트라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다. TCP와 IP를 함께 사용하는데 , IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.

  • 연결형 서비스로 가상 회선 방식을 제공한다.
    3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
  • 흐름제어 및 혼잡제어를 제공한다.

흐름제어

데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것
송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.

혼잡제어

네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

  • 높은 신뢰성을 보장한다.
  • UDP보다 속도가 느리다.
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식이다.

전이중
전송이 양방향으로 동시에 일어날 수 있다.

점대점
각 연결이 정확히 2개의 종단점을 가지고 있다.

멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

  • 연속성보다 신뢰성이 있는 전송이 중요할 때 사용한다.

3-way Handshake 란

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정

양 쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이, 다른 쪽이 준비가 됐다라는 것을 알 수 있도록 한다. 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

  1. 클라이언트가 서버에게 SYN 패킷 전송(SEQ = X)
  2. 서버가 SYN(X)를 수신하고, 클라이언트에게 SYN을 잘 받았다는 의미로 ACK와 SYN 패킷 전송(SEQ: Y, ACK: X + 1)
  3. 클라이언트는 서버로부터 온 ACK(X + 1) 과 SYN(Y) 패킷을 수신하고, ACK(Y + 1) 을 서버로 전송

위 처럼 3번의 통신이 끝마치게 되면, 종단 간의 연결의 성립이 된 것이다.
이 때부터 실제 패킷을 주고받게 된다.

4-way Handshake 란

TCP의 연결 해제 과정을 칭하는 용어이다.

  1. 클라이언트는 서버에게 끊는다는 의미로 FIN 플래그를 전송
  2. 서버는 FIN 을 수신하고, 알겠다라는 의미로 클라이언트에게 ACK으로 답장
  3. 이후 데이터를 모두 보냈다면, 연결이 종료됐다는 FIN 플래그를 클라이언트에게 전송
  4. 클라이언트는 해당 FIN을 수신하고 확인했다는 의미로 ACK을 서버로 전송
    -> 혹시나 오지 않은 데이터가 있을 수 있기 때문에, 이를 대기하려고 TIME_WAIT 상태로 전환

서버가 클라이언트로부터 ACK을 수신했다면, 소켓을 닫게된다. 그리고 TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫게 된다. 이로써 통신이 완벽히 해제되는 것이다.

통신이 총 4번 이루어지기 때문에 4-way Handshake 라는 용어를 사용한다.

참고

https://velog.io/@haero_kim/TCP
https://gmlwjd9405.github.io/2018/09/19/tcp-connection.html

profile
iOS 정복중인 Tabber 입니다.

0개의 댓글