TCP

TCP는 전송 계층에서 신뢰성있는 데이터 전달을 담당하는 프로토콜로, 순서 보장, 재전송, 흐름 제어, 혼잡 제어 기능을 제공함.

TCP 통신이란?

  • 전송 계층에서 사용하는 프로토콜로, 신뢰성을 보장하는 연결형 서비스.

  • 3-way handshake 과정을 통해 연결을 설정 및 4-way handshake로 연결 해제

  • 흐름제어와 혼잡제어를 통해 패킷을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 해줌.

    • 흐름제어란?(end-system to end-system)

      • 송신측과 수신측의 데이터 처리 속도 처리를 해결하기 위한 기법

      • 수신쪽(receiver)에서 packet을 지나치게 많이 받지 않도록 조절(오버플로우 방지)

      • 흐름 제어 + 재전송 제어 기법 중 하나인 Sliding Window를 사용해 수신자의 버퍼에 남은 공간만큼 데이터를 전송 받음

    • 혼잡제어란?

      • 송신측의 데이터 전달과 네트워크 처리 속도 차이를 해결하기 위한 기법?

        or 네트워크 내 패킷 수가 넘쳐 네트워크를 혼잡하게 만드는 것을 방지하는 기법

전송 과정

  • 데이터 흐름

    Application
    
    Socket
    
    Transport Layer (TCP)
    
    Network Layer (IP)
    
    Internet
    
    Receiver

    애플리케이션에서 생성된 데이터가 소켓을 통해 커널로 전달,

    TCP를 거쳐 IP계층으로 내려간 뒤 네트워크를 통해 수신자에게 전달

전송 과정 상세

  • 보내는쪽(Sender) 흐름

    1. 애플리케이션이 소켓에 write

      → 데이터는 커널의 송신 버퍼(Send Buffer)에 저장됨. 이 시점에선 아직 네트워크로 안나감

    2. TCP 계층

      • 데이터를 세그먼트 단위로 분할

      • TCP 헤더 추가(Sequence Number 포함)

      • 네트워크 계층(IP)로 전달

    TCP는 데이터를 작은 단위로 나누고, 각 세그먼트에 순서 정보와 제어 정보를 붙여 전송 준비를 함.

  • 받는쪽(Receiver)흐름

    1. 세그먼트 수신 → 커널의 수신 버퍼(Receive Buffer)에 저장됨

    2. 애플리케이션이 read

      → 수신 버퍼에 저장된 데이터를 애플리케이션이 읽어감.

      애플리케이션이 읽어가야 버퍼 공간이 다시 확보됨.

    • 문제: 수신 버퍼가 가득 차면?

      만약 송신자가 계속 데이터를 보내고, 수신자가 데이터를 느리게 읽는 상황이라면?

      발생 가능. 이를 방지하기 위한게 Flow Control(흐름 제어).

TCP가 신뢰성을 보장하는 방법

TCP는 다음을 통해 신뢰성을 보장합니다:

  • 순서 보장 (Sequence Number) → Sequence Number로 순서 재정렬

  • 손실 감지 및 재전송(ACK) → ACK 기반 확인 응답 → 일정 시간 내 ACK 없으면 재전송

  • 흐름 제어(Flow Control) → 수신 버퍼 보호 → Receive Window 사용

  • 혼잡 제어(Congestion Control) → 네트워크 과부하 방지 → Slow Start, AIMD 사용

    • AIMD(Additive Increase/Multiplicative Decrease)

      : 증가할땐 더하고, 감소할땐 곱하는 방식.

      • 가산증가: 네트워크 혼잡이 없으면 RTT마다 1MSS(Maximum Segment Size)씩 증가시킴

      • 곱셈감소: 패킷 손실 등 혼잡이 감지되면, 송신자는 cwnd 크기를 즉시 절반으로 줄임.

Last updated