안녕하세요!

FE 개발자 유진주입니다.

CS/네트워크

[컴퓨터네트워크] Chapter3.5 TCP 세그먼트 구조와 재전송 타이머

ypearl 2023. 12. 12. 11:24

Chapter3.5 TCP 세그먼트 구조와 재전송 타이머(RTT)

  • TCP 세그먼트 개요
  • TCP 세그먼트 구조
  • RTT 추정
  • 재전송 타이머 설정

 

TCP 세그먼트 개요

- 응용 프로세스 데이터 전송 과정

  • 큰 Application 자르는 기능을 트랜스포트 계층에서 수행 (Segementation)
  • TCP 세그먼트?
    : 네트워크에서 전송할 수 있는 MTU보다 작은 크기로 Application Data를 잘라서,
      TCP에 헤더와 처리하는데 필요한 제어정보를 붙여서 만든 데이터 전송 단위

 

- TCP 세그먼트

  • 헤더(control infomation) 필드 + 데이터(payload) 필드
  • 헤더: madatory(반드시 존재), 데이터: optional(선택적)

*Data: 응용계층 데이터(segmentation), Header: 제어정보

 

 

- MSS(Maximum Segment Size)

  • 데이터 필드에 포함되는 응용 메시지 조각(chunk)의 최대 크기
  • 데이터 링크의 MTU(Maximum Transmission Unit)에 의해 결정
    (예, 유선 LAN MTU = 1500바이트)
  • TCP 헤더 크기 + IP 헤더 크기 + MSS <= MTU
    최소 TCP 헤더 = 20, 최소 IP 헤더 = 20, MSS = 1460

 

 

TCP 세그먼트 구조

- TCP 세그먼트 구성

  • 헤더(제어정보) + 데이터 필드(응용 데이터)
  • 헤더의 구성?
    • 32bits
    • 필수 정보(20바이트) + 옵션(~40바이트)

 

- TCP 포트 번호(Port Number)

  • 역할: 응용 프로토콜 식별
  • 클라이언트 포트 번호: 연결 설정 시에 임의의 포트번호 할당 (Ephemeral Port)
  • 서버 포트 번호: 연결 설정 전에 미리 할당(Well-known Port)
  • 출발지(source) 포트 번호: 세그먼트 송신자의 포트 번호, 16비트
  • 목적지(destination) 포트 번호: 세그먼트 수신자의 포트 번호, 16비트

 

- 순서 번호(Sequence Number)

  • 번호 부여 원칙: 시작 순서 번호(ISN)부터 이미 송신된 바이트의
    다음 바이트 번호(데이터의 첫번째 바이트 번호), 세그먼트 송신자에 의해 부여
  • ISN + 송신된 바이트 수
  • ISN: 3000, 송신된 바이트 수: 1000 → 순서 번호 = 4000
  • ※ 세그먼트 번호는 아님

 

- 확인 번호(Acknowledgement Number)

  • 번호 부여 원칙: 순서대로 수신된 세그먼트의 마지막 바이트의 다음 바이트 번호
    (수신을 기대하는 세그먼트의 순서 번호), 세그먼트 수신자에 의해 부여 (by. ACK 세그먼트)
    *다음에 송신자가 보낼 수 있는 바이트 번호
  • 순서대로 수신된 세그먼트 순서 번호 + 수신 세그먼트 데이터 크기
  • 세그먼트 순서 번호: 4000, 데이터: 1000 바이트 → 확인 번호 = 5000
  • 누적 수신 확인 (Cumulative Acknowledgement)

 

- 헤더 길이(Header Length)

  • 헤더 필드 전체 길이(20~60 바이트), 4바이트 워드 단위로 표시(5~15)

 

- 수신 윈도우(Receive Window) 크기

  • 수신 TCP가 수신 가능한 데이터 크기(버퍼 여유 공간)
  • 수신 TCP가 ACK 세그먼트에 표시, 송신 윈도우(send window) 결정
  • 최대 65,535 바이트(16 비트 필드)

 

- 제어 플래그(Control Flags)

  • URG: Urgent
  • ACK: Acknowledgement
  • PSH: push  // 바로 목적지로 내보냄
  • RST: Reset  // 연결 설정
  • SYN: Synchronization  // 연결 해지
  • FIN: Finish

 

- 긴급 데이터 포인터(Urgent Data Pointer)

  • 긴급 데이터의 위치

 

 

TCP RTT 추정

- TCP RTT(Round Trip Time)

  • 세그먼트 송신 후 ACK 수신까지 걸리는 시간
  • 네트워크 상태에 따라 가변적인 시간

 

 

- TCP의 RTT 추정(Estimation)

  • 추정RTT = (1 - α ) x 추정 RTT x α x 측정 RTT
  • α  = 0.125
  • 지수이동가중평균(exponential weighted moving average)

※ 시간이 지남에 따라 예전에 측정한 RTT 값의 반영 비율을 줄여나감! (반영비율: 예전 < 최근)

 

 

- RTT 추정 예

  • 시간에 따라 RTT 측정: S1, S2, S3
  • 초기 추정 RTT = RTT0
  • 추정 RTT1 = 0.875 x RTT0 + 0.125 x S1
  • 추정 RTT2 = 0.875 x ( 0.875 x RTT0 + 0.125 x S1 ) + 0.125 x S2
  • 추정 RTT3 = 0.875 x {  0.875 x ( 0.875 x RTT0 + 0.125 x S1 ) + 0.125 x S2  }+ 0.125 x S3

 

 

- TCP의 RTT 분산(variance) 추정

  • 분산RTT = (1 - β ) x 분산 RTT x β x | 측정 RTT - 추정 RTT |
  • β = 0.25

※ 위와 같이 지수이동가중분산 기법을 쓴다. (반영비율: 예전 < 최근)

 

 

TCP 재전송 타이머 설정

- 재전송 타이머 값(Timeout)

1) 길면 → 대기 ⬆ → 효율

2) 짧으면 → 불필요한 재전송 ⬆

=> 적절한 재전송 타이머 값 설정 필요!