TCP Segment

TCP의 형식

  • Source Port : 송신자의 IP 주소, Port 번호
  • Destination Port : 수신자의 IP 주소, Port 번호
  • Sequence number : TCP 전송 시 전송되는 Packet에 붙는 번호.
    전송 순서를 위해 사용
  • Ack number : Packet 수신 후, 확인 응답과 다음 Packet 요청을 위해 사용
  • Head len : 헤더 길이 표현
  • Not used : 공백
  • UAPRSF : 1-bit 길이의 Flag 비트 용도
    • U : Urgent 긴급한 데이터를 표기하기 위해 사용
    • A : 통신 시작, 종료 시 Ack의 의미 부여를 위해 사용
    • P : Push 데이터를 Push하여 먼저 송신하기 위해 사용
    • R : Restart 통신 재시작을 위해 사용
    • S : Syn 통신 시작 시 연결을 위해 사용
    • F : FIN 통신 종료 시 연결 해제를 위해 사용
  • Receive window : 수신자 측의 여유 Buffer 용량
  • checksum : 데이터의 오류 검증을 위해 사용
  • Urg data pointer : 긴급한 데이터 표기를 위해 사용

TCP Header의 필수 내용.
32-bit 길이 5줄 --> 총 20bytes 크기로,

TCP Header의 최소 크기 = 20bytes이다.


TCP 기능

흐름 제어

  • Sliding Window
    전송이 정상적으로 진행되기 위해서는 수신자 측의 Buffer 용량을 넘어서지 않아야 한다.
    Sliding Window는 수신자의 확인 없이도 송신자 측에서 전송할 수 있는 데이터 크기를 제한 및 제어

    Window Size : 전송했으나 Ack를 받지 못한 데이터 + 확인 없이 보낼 수 있는 데이터
    Window Size는 수신자 측의 여유 Buffer 크기에 따라 바뀔 수 있다.

혼잡 제어

"혼잡 제어"는 통신 망 자체의 트래픽 양에 영향을 받는다.
네트워크 통신 망의 트래픽을 확인하여 "전송하는 데이터 양을 정하는 방법"이다.

TCP에서 사용하는 Window는 2가지가 있다

  1. Awnd (Advertised Window)

    • 수신자 측의 Buffer 중 비어있는 여유 공간의 크기
    • 초기 통신 연결 단계에서는 최대 버퍼 크기 의미한다.
  2. Cwnd (Congestion Window)

    • TCP가 Packet 전송 시 Ack를 받지 않고도 연속해서 보낼 수 있는 Packet의 양
    • 흐름 제어만을 고려하면 Awnd 만큼의 Packet을 전송,
      혼잡 제어를 위해서는 Cwnd 만큼의 Packet을 전송한다.

TCP 혼잡제어 방식

1. Additive increase multiplicative decrease

  1. 데이터량을 점차 증가시킨다.
  2. 데이터 손실 or 문제 발생 시 --> 데이터량 대폭 감소
  3. 다시 데이터량 점차 증가

데이터 전송 문제의 형태에 따라 처리 방식 변화

  • 동일한 ACK를 3개 받을 경우 (하나의 Packet에 대해 지속적인 Ack 요청이 들어올 경우)
    • 심각하지 않은 혼잡으로 판단
    • Timeout이 되기 전에 해당 Packet을 재전송
    • 데이터 전송량을 1/2로 줄이고, linear하게 증가시킨다
  • Timeout이 발생할 경우
    • 심각한 혼잡으로 판단
    • 데이터 전송량을 처음 시작했던 부분까지 감소
    • 이후 점차 증가

2. TCP Tahoe

  • 시작 Window Size = 1
  • Threshold 까지는 Slow Start 방식 사용 (Window Size를 2배씩 증가)
  • Threshold 이후 AIMD 방식 사용 (Window Size를 1씩 증가)
  • 3개 Ack 중첩 혹은 Timeout 발생 시
    -> Threshold를 1/2로 설정, Window Size를 1부터 다시 시작한다.

3. TCP Reno

  • 시작 Window Size = 1
  • Threshold 까지는 Slow Start 방식 사용 (Window Size를 2배씩 증가)
  • Threshold 이후 AIMD 방식 사용 (Window Size를 1씩 증가)
    --> 여기까지는 TCP Tahoe와 동일

  • Ack 중첩 시 : Window Size를 1/2로 줄이고, 해당 값을 Threshold 값으로 설정
  • Timeout 발생 시 : Window Size를 초기값으로 설정, Threshold는 그대로 둔다.

profile
개발자 지망생입니다.

0개의 댓글