본문 바로가기
Server

TCP 에 대해 ( 3way handshake / 4way handshake)

by Taron 2023. 8. 13.

TCP / IP의 역사

  • 인터넷의 시초인 ARPANET이 있었는데 ARPANET은 PC A에서 PC B에게 데이터를 전달하기 위해 전달할 경로를 하나를 정해놓으면 그 경로로만 데이터를 전달하게 되는데 만약 이 경로가 망가지게 되면 데이터를 전달할 수 없었습니다.
  • 이 단점을 보완해 경로를 설정해 데이터를 전달하는 방식이 아닌 핵폭탄이 떨어져도 다른 경로가 있다면 데이터 전송이 가능한
    패킷 교환 방식을 사용해 데이터를 전달하는 프로토콜을 만들게 된것 입니다.

 

TCP(Transmission Control Protocol)는 인터넷 프로토콜 스위트 중 하나로, IP(Internet Protocol)와 함께 인터넷에서 가장 많이 사용되는 프로토콜 중 하나입니다 그래서 TCP/IP 라 널리 불립니다.

TCP는 데이터가 정확하게 전달되어야 하는 통신에서 사용됩니다.

 

 

TCP는 3-way handshake를 통해 연결을 설정하고, 4-way handshake를 통해 연결을 해제합니다. 이를 통해 두 시스템 간 안정적인 데이터 전송을 보장합니다. TCP는 데이터를 전송하기 전에 먼저 연결을 설정해야 합니다. 이 과정에서 3-way handshake를 사용합니다. 3-way handshake는 아래 사진과 같은 단계로 이루어집니다.

3-way handshake

  • Client 가 서버로 연결을 요청하는 SYN 플래그를 전송합니다.
  • Server는 Client로 연결을 승인했다는 ACK(승인 코드)와 SYN 플래그가 설정된 패킷을 Client에게 전송하고 Client의 ACK 응답을 기다립니다.
  • Client는 Server가 전송한 SYN 플래그와 ACK를 받으면 다시 서버로 ACK 를 보내게 되고 서버에서 ACK를 받게 되면 연결이 성립됩니다.
  • 3번의 과정을 거치기 때문에 3 way handshake 라는 이름이 붙여졌습니다.

3way handshake를 통해 연결이 설정되면 데이터를 전달합니다. 그리고 연결을 해제할 때는 4 way handshake 방식을 사용해 연결을 해제합니다.

4 way handshake 방식은 아래 사진과 같은 단계로 이루어집니다.

4-way handshake

 

  • 연결이 되어있는 상태에서 연결을 해제하고 싶을 때 Client는 FiN(연결 종료 플래그) 패킷 를 서버로 전송합니다.
  • Server는 Client로부터 FIN 패킷을 받고 응답 패킷 ACK를 전송합니다.
  • 그리고 남아있는 데이터를 전송한 후 FIN 패킷을 Server 가 Client에게 전송합니다.
  • Client는 종료 플래그를 받고 응답패킷을 서버로 전송하고 연결을 해제합니다.

 

또한 TCP는 데이터 전송의 신뢰성을 보장하기 위해 여러 가지 기능을 제공합니다.

2가지 기능에 대해 설명하겠습니다.

흐름제어

  • 수신 측이 송신측보다 데이터 처리 속도가 느릴 경우 송신하는 데이터를 처리하는 과정에 버퍼가 꽉 차 데이터 유실을 초래했습니다.
  • 이 문제를 해결하기 위한 기능입니다.
  • 흐름 제어는 수신자의 버퍼 상태를 모니터링하고, 송신자의 전송 속도를 조절하여 데이터 전송의 효율을 향상합니다.
  • 해결방법
    • Stop and wait
      • 매번 전송한 패킷에 대해 확인 응답을 받아야만 그다음 패킷을 전송하는 방식
    • Sliding Window
      • 수신 측에서 설정한 윈도 크기만큼 송신 측에서 확인응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법

혼잡제어

  • 송신 측의 데이터를 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전송되는데 만약 한 라우터에 데이터가 몰릴경우 자신에게 온 데이터 모두를 처리할 수 없는 상황이 발생하게 되는데 하지만 손실된 데이터를 다시 재전송하게 되면서 혼잡은 가중시켜 오버플로우나 데이터 손실을 유발합니다.
  • 그래서 네트워크의 혼잡을 피하기 위해 송신 측에서 보내는 데이터 전송속도를 강제로 줄이는 작업을 혼잡제어라고 합니다. 
  • 혼잡 제어는 네트워크 상황을 모니터링하고, 네트워크 혼잡을 방지하여 데이터 전송의 신뢰성을 보장합니다
  • 해결방법
    • AIMD
      • 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜 가며 전송하는 방법
    • Fast Recovery
      • 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법이다.

댓글