Computer Network

[컴퓨터 네트워크] TCP 세그먼트 구조와 재전송 타이머(TCP Segment & Retransmission Timer)

JunsuKim 2022. 10. 13.
728x90

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

  • 큰 applitcation 데이터를 자르는 기능 = segmentation, 이는 transport 계층에서 수행된다.
  • 데이터의 앞에 자신의 헤드를 붙여 IP 데이터로 만든다.
  • IP 데이터그램을 데이터 링크의 프레임으로 캡슐화(Encapsulation)해서 보낸다.

TCP 세그먼트

  • 헤더(control information) 필드 + 데이터(payload) 필드
  • 헤더: mandatory(필수), 데이터: optional(옵션)

MSS(Maximum Segment Size)

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

TCP 세그먼트 구성

TCP 포트 번호(Port Number)

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

순서 번호(Sequencec Number)

  • 번호 부여 원칙: 시작 순서 번호(ISN)부터 이미 송신된 바이트의 다음 바이트 번호(데이터의 첫 번째 바이트 번호)
    • 세그먼트 송신자에 의해 부여된다.
  • ISN + 송신된 바이트 수
  • ISN: 3000, 송신된 바이트 수: 1000 -> 순서 번호 = 4000
    • 즉, 시작 순서 번호는 지금까지 전송된 바이트이다. 
  • 세그먼트 번호가 아니다.

확인 번호(Acknowledgement Number)

  • 번호 부여 원칙: 순서(Byte의 순서)대로 수신된 세그먼트의 마지막 바이트의 다음 바이트 번호(수신을 기대하는 세그먼트의 순서 번호), 세그먼트 수신자에 의해 부여된다. (ACK 세그먼트를 통해 전달)
  • 순서대로 수신된 세그먼트 순서 번호 + 수신 세그먼트 데이터 크기
  • 세그먼트 순서 번호: 4000, 데이터: 1000바이트 -> 확인 번호 = 5000
  • 누적 수신 확인

  • 세그먼트의 순서번호 + 크기 = 수신된 전체 바이트 + 1

헤더 길이(Header Length)

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

수신 윈도우(Receive Window) 크기

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

제어 플래그(Control Flags)

  • URG: Urgent - 긴급 데이터가 있으니 먼저 처리해라 표시
  • ACK: Acknowledgement - 수신한 세그먼트에 대한 ACK 세그먼트
  • PSH: Push - MSS보다 작지만 바로 TCP한테 목적지로 송신하라 표시
  • RST: Reset - 세그먼트 연결을 비정상적으로 해제해야한다 표시
  • SYN: Synchronization - 연결 설정할 때 표시
  • FIN: Finish - 연결 해제할 때 표시

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

  • 긴급 데이터의 위치

TCP RTT(Round Trip Time)

  • 세그먼트 송신 후 ACK 수신까지 걸리는 시간
  • 네트워크 상태에 따라 가변적인 시간
  • RTT를 기반으로 재전송 타이머가 설정된다.

TCP의 RTT 추정

  • 추정 RTT = (1 - α) * 추정 RTT + a * 측정 RTT
  • α = 0.125
  • 지수이동가중평균 -> 최근 측정한 RTT는 12.5%를 반영하고, 측정한 지 오래된 것일수록 지수대로 반영비율을 낮춘다.

RTT 추정 예시

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

TCP RTT 분산 추정

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

재전송 타이머 값(Timeout)

  • 재전송 타이머 값 = 추정 RTT - 4 * 분산RTT
  • 분산 RTT * 4를 해야 적절한 재전송 타이머 값이 나온다.
    • 이보다 길면? -> 불필요한 대기시간 증가 -> 효율 떨어짐
    • 이보다 짧으면? -> ACK가 오고 있는 중에 종료된다 -> 불필요한 재전송 증가

 

728x90

댓글