IP와 TCP

  • IP(Internet Protocol)
    • 인터넷에서 데이터를 전송하기 위한 기본 프로토콜
    • 데이터를 작은 조각인 패킷으로 나누어 네트워크를 통해 전송
    • 특징:
      • 비신뢰적(Unreliable): 데이터가 손실되거나 순서가 뒤바뀔 수 있다.
      • 최선의 노력(Best-Effort): 데이터를 가능한 빨리 전송하지만, 성공 보장 X.
      • 경로 설정: 패킷이 목적지까지 도달할 최적 경로를 찾음.
  • TCP(Transmission Control Protocol)
    • IP 위에서 동작하는 프로토콜
    • 신뢰적인 데이터 전송 서비스 제공
    • 특징:
      • 데이터 손실 방지: 손실된 데이터를 재전송합니다.
      • 데이터 순서 보장: 원래 순서대로 데이터를 정렬합니다.
      • 무결성 확인: 데이터가 손상되지 않았는지 확인합니다.

예를 들면,

IP가 배달원이라면 TCP는 매니저 역할이다.

  • IP는 "주소만 보고" 패킷(데이터 조각)을 전달 → 잘못된 경로로 가거나 손실될 수 있음.
  • TCP는 패킷이 제대로 도착했는지 확인, 문제가 생기면 수정. 모든 패킷을 순서대로 정리하여 완전한 데이터로 조립.

TCP가 신뢰적인 데이터 전송을 제공하는 방법

  • 기다리는 순서 번호를 가진 순서에 맞는 세그먼트의 도착. 그 이전 순서까지의 모든 데이터들은 이미 확인 응답 된 상태라면?
    • 지연 ACK. 추가 세그먼트를 위해 대기. 만약 다른 세그먼트가 오지 않는다면 ACK 보냄. 온다면 두개를 합쳐서 ACK 보냄.
  • 순서에 맞는 세그먼트의 도착. 이미 하나의 순서에 맞는 세그먼트가 있다면?
    • 하나의 누적된 ACK를 보냄
  • 지연 ACK:
    • ACK 전송을 최대 500ms까지 지연하여 추가 데이터를 기다리는 것.
    • TCP에서는 네트워크 트래픽을 줄이기 위해 지연 ACK 메커니즘을 사용한다.

예시

  • 송신자가 100바이트 크기의 데이터를 두 번에 나누어 보낸다고 가정하자
    • 첫 번째 세그먼트(Sequence Number = 1~100) 도착.
    • 두 번째 세그먼트(Sequence Number = 101~200) 아직 도착하지 않음.
  • TCP Receiver의 행동:
    • 첫 번째 세그먼트에 대해 즉시 ACK를 보내지 않음.
    • 대신 500ms 동안 대기하며, 두 번째 세그먼트가 도착하는지 확인한다.
      • 두 번째 세그먼트가 500ms 내에 도착: 두 세그먼트에 대해 한 번의 ACK를 보냄.
      • 두 번째 세그먼트가 500ms 내에 도착하지 않음: 첫 번째 세그먼트에 대해 ACK를 보냄.

TCP와 GBN 프로토콜, SR 프로토콜

  • Go-Back-N(GBN)의 특징
    • 누적 ACK:
      • 송신자는 수신자로부터 가장 최근에 성공적으로 수신된 순서대로 된 데이터에 대한 ACK만 받음.
      • 예:
        • 세그먼트 1, 2, 3, 4, 5를 보냈을 때, 세그먼트 3까지 성공적으로 수신되었으면, 수신자는 "세그먼트 3까지 잘 받았음"이라는 ACK를 보낸다.
        • 송신자는 ACK 3을 기준으로 4, 5 이후의 데이터를 전송 상태로 간주.
    • 손실 시 전체 재전송:
      • 만약 세그먼트 4가 손실되었다면, 세그먼트 4 이후의 모든 데이터를 재전송. (비효율적)
  • Selective Repeat(SR)의 특징
    • 개별 ACK:
      • 수신자는 각 세그먼트마다 별도의 ACK를 보냄.
      • 예:
        • 세그먼트 1, 2, 3, 4, 5 중 세그먼트 4가 손실되었을 때, 수신자는 1, 2, 3, 5에 대해 ACK를 보낸다.
        • 송신자는 손실된 세그먼트(4)만 재전송.
    • 손실된 데이터만 재전송:
      • 개별 ACK 덕분에 손실된 데이터만 재전송 가능하며, 네트워크 리소스를 절약할 수 있음.

TCP에서의 혼합 동작

TCP는 위의 두 방식에서 효율적인 요소를 가져와 혼합하여 동작한다.

 

TCP의 기본 동작 (GBN 기반)

  • TCP는 기본적으로 누적 ACK를 사용.
    • 수신자는 순서대로 도착한 가장 마지막 세그먼트에 대한 ACK만 송신자에게 보냄
    • 순서가 틀린 세그먼트가 도착하면, 즉시 중복 ACK(Duplicate ACK) 전송(다음에 기대하는 데이터의 순서 번호가 포함됨)

TCP의 효율화 (SR 요소 추가)

  • TCP는 일부 구현에서 순서가 틀린 데이터도 임시로 저장 가능.
    • 송신자는 손실된 데이터만 재전송 → 효율 개선.

Selective Acknowledgment (SACK) 옵션

  • 수신자는 누락된 데이터 외에도, 어떤 데이터가 성공적으로 수신되었는지 세부적으로 표시
  • 송신자는 이 정보를 기반으로 손실된 데이터만 재전송

+ Recent posts