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) 짧으면 → 불필요한 재전송 ⬆
=> 적절한 재전송 타이머 값 설정 필요!
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터네트워크] Chapter3.7 TCP 혼잡 제어 (0) | 2023.12.14 |
---|---|
[컴퓨터네트워크] Chapter3.6 TCP 신뢰 전송과 흐름 제어 (0) | 2023.12.14 |
[컴퓨터네트워크] Chapter3.5 TCP 연결관리 (0) | 2023.12.04 |
[컴퓨터네트워크] Chapter3.4 오류복구3_Selective_Repeat ARQ (1) | 2023.12.03 |
[컴퓨터네트워크] Chapter3.4 오류복구2_Go-Back_N ARQ (0) | 2023.12.02 |