TCP 연결 관리 기능을 확장시키는데 주로 사용되는 옵션 필드로 TCP 헤더 내에 포함된다. 그 크키는 가변 (0~40 바이트 즉, 최대 40 바이트까지 옵션을 넣을 수 있음)적이다.
TCP 최대 세그먼트 크기 옵션인데 실제로는 최대크기의 데이터 크기를 의미한다. 이는 초기 연결을 set-up할때 결정되는 값이기에 SYN flag와 함께 전송되고 송신측이 아닌 수신측의 세그먼트에 의해 결정된다. TCP 데이터 세그먼트의 최대 길이로 이더넷은 약 1500 바이트이고, 여기서 데이터의 크기는 IP Header와 TCP Header를 제외한 1460 byte이다. 요새는 기존 default값인 536byte가 너무 작아 1460byte를 default값으로 한다.
Window size는 수신측 TCP의 수신가능한 버퍼 사이즈를 의미한다. TCP header에서 window size는 16bit로 2^16(0~65535,65K)이다. 하지만 65K byte가 표현 가능한 수신측 window의 최대값이 아니며 window-scaling option 값을 통해서 이 값을 shift 할수 있다.
TCP 헤더 내 윈도우 크기 필드 값을 윈도우 스케일 옵션 값(비트) 만큼 왼쪽으로 시프트하여 크기 스케일을 변환시칸다. 만약 쉬프트 값이 2라면 새로운 윈도우 사이즈는 2^18 (262144)이 된다. 이 옵션은 SYN flag와 함께 전송된다. 그래서 이를 'Shift Count'라고도 한다.
💡 Utilization
RTT = ms로 표현, 거리/속력
예를 들어, 1.5Mbit/sec의 T1 전송 라인이 513ms 왕복 시간 (RTT)의 위성 링크를 통해 사용된 경우 대역폭 지연 곱은 다음과 같습니다. 1,500,000 bit/sec * 0.513 sec=769,500 bit 또는 약 96,187바이트입니다. 64KB의 최대 버퍼 크기를 사용하면 버퍼가 (65,535 / 96,187) = 이론적 최대 속도인 1.5Mbit/초 또는 1.02Mbit/s의 68%까지만 채워질 수 있습니다.
RTT를 계산하기 위해 사용한다.재전송시 언제 보낸것에 해당하는 ack인지 알기가 쉽고 retransmission timer 설정시에 유용하다. 파일 용량이 큰 경우 주어진 seq 번호를 다 쓰고 기존에 사용했던 번호를 재사용할 수도 있다. 동일한 패킷 번호가 들어오면 혼동할 수 있기 때문에 출발시간을 함께 써 놓으면 receiver는 두 패킷을 수월하게 구별할 수 있다. ex. 400:12001 and 700:12001 are different segments, 400초와 700초에 발생한 것 각각을 표시
선택 확인응답(SACK) 옵션 허용여부를 판단하기 위함으로 여러 패킷 중 손실된 패킷 만 선택적으로 재전송하기 위한 TCP 연결 설정 시의 협상 옵션이다.
선택 확인응답 (SACK) 옵션 데이터로 수신측에서 손실되어 재전송을 원하는 불연속적인(순서 어긋난) 세그먼트 블록을 명시하기 위한 것이다. 성능 향상을 위해 사용하고 쓸데없는 데이터를 중복해서 전송하지 않기 위함이다.