STCP는 OpenVOS 17.1부터 타임스탬프, 선택적 승인 및 창 배율 TCP 옵션을 지원합니다. 이렇게 하면 TCP 세그먼트가 삭제되거나 높은 대역폭 지연 연결을 통해 데이터를 보낼 때 보다 효율적인 데이터 흐름을 허용할 수 있습니다(최소 대역폭 * 전체 대기 시간 > 65536). 이러한 변경의 효과는 응용 프로그램에 투명하지만 packet_monitor 사용할 때 알아야 할 몇 가지 사항이 있습니다.
먼저 STCP가 연결 요청을 보내면 TCP(SYN) 세그먼트에 16바이트가 추가로 포함됩니다.
17:41:26.533 Xmit Ether Dst 00:23:54:52:18:6e Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 3c, ID a789, Flg/Frg 0, TTL 3c, Prtl 6
Cksum f2f6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.55423 to 164.152.77.50.7777
seq 3825990103, ack n.a., window 8192, 20 data bytes, flags Syn.
X/Off 0a, Flags 02, Cksum b717, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 6 4 2 8 a 32 2d bc 85 0 <<<4<<<< <<<2-<>
10 0 0 0 0
|
2 4 5 b4 | 옵션 2(최소 세그먼트 크기), 옵션 4 바이트의 총 길이, 값 05 b4 (1460 소수점) (이 바이트는 새가 아닙니다) |
3 3 6 | 옵션 3(창 축척), 옵션 3 바이트의 총 길이, 값 6 |
4 2 | 옵션 4(선택적 승인 지원), 총 길이 2바이트 |
8 a 32 2d bc 85 0 0 0 0 | 옵션 8 (타임 스탬프), 총 길이 10 바이트, 전송 시간 32 2d bc 85, 반환 시간 0 0 0 0 |
0 | 옵션 0(옵션 의 끝) |
둘째, 연결 회신(SYN/ACK) 세그먼트에서 전송되는 옵션은 원격 호스트의 SYN 세그먼트에 포함된 내용에 따라 달라집니다. STCP는 연결 요청이 포함된 경우에만 회신에 선택적 승인 지원 옵션이 포함됩니다. 응답에는 연결 요청에 두 가지 옵션도 모두 포함된 경우에만 창 규모 및 타임스탬프 옵션만 포함됩니다.
14:31:32.145 Rcvd Ether Dst 00:00:a8:42:34:56 Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 3c, ID 44c, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 95e6, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65007 to 164.152.77.217.7777
seq 3289184624, ack n.a., window 8192, 20 data bytes, flags Syn.
X/Off 0a, Flags 02, Cksum 91e8, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 6 4 2 8 a 30 b8 95 1a 0 <<<4<<<< <<<08><
10 0 0 0 0 <<<<
14:31:32.146 Xmit Ether Dst 00:00:a8:42:52:22 Src 00:00:a8:42:34:56 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 3c, ID 0, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 9a32, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65007
seq 3172667591, ack 3289184625, window 8192, 20 data bytes, flags Syn Ack.
X/Off 0a, Flags 12, Cksum 6b81, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 6 4 2 8 a 1 35 72 23 30 <<<4<<<< <<<<5r#0
10 b8 95 1a 0 8><<
|
기본적으로 Windows 호스트에는 최대 세그먼트 크기, 창 규모 및 선택적 승인 지원 옵션만 포함됩니다. 연결 요청STCP의 회신에 타임스탬프 옵션이 없으면 타임스탬프 또는 창 배율 옵션이 포함되지 않습니다. 창 옵션에 포함된 1은 NO-OP 옵션이며 옵션 바이트 수를 정수 배수4로 만드는 데 사용됩니다. STCP의 회신에 있는 옵션의 끝에 있는 옵션(0's)의 여러 끝은 동일한 이유입니다.
14:54:02.635 Rcvd Ether Dst 00:00:a8:41:34:56 Src 00:23:54:52:18:6e Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 34, ID a4f, Flg/Frg 4000, TTL 80, Prtl 6
Cksum 0c39, Src a4984d32, Dst a4984dd9
TCP from 164.152.77.50.13478 to 164.152.77.217.7777
seq 3499417963, ack n.a., window 8192, 12 data bytes, flags Syn.
X/Off 08, Flags 02, Cksum 65c8, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b8 1 3 3 8 1 1 4 2 <<<8<<<< <<<<
14:54:02.636 Xmit Ether Dst 00:23:54:52:18:6e Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 30, ID b3d5, Flg/Frg 0, TTL 3c, Prtl 6
Cksum e6b6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.7777 to 164.152.77.50.13478
seq 3986949958, ack 3499417964, window 8192, 8 data bytes, flags Syn Ack.
X/Off 07, Flags 12, Cksum 85e0, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 4 2 0 0 <<<4<<
|
혼란스러운 부분은 연결이 설정된 후에 옵니다. 다음 패킷에는 데이터 바이트 필드에 13이 있더라도 1바이트의 데이터만 포함됩니다. 처음 12바이트는 타임스탬프 옵션 뒤에 두 개의 NO-OP 옵션입니다. 데이터 바이트는 끝에 0배입니다.
15:02:36.545 Rcvd Ether Dst 00:00:a8:41:34:56 Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 35, ID 447, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 95f2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.60312 to 164.152.77.217.7777
seq 2814493687, ack 4102208833, window 128, 13 data bytes, flags Push Ack
+.
X/Off 08, Flags 18, Cksum c9d0, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 1 1 8 a 2a 28 5d 8f 38 9f e0 a 0 <<<<*(]> 8>`<
|
옵션과 데이터의 차이를 어떻게 알 수 있습니까? X/Off 값은 TCP 헤더의 32비트 단어 수입니다. 옵션이 없는 경우 이 값은 5이므로 값이 8이므로 3개의 32비트 단어 또는 12바이트를 추가했음을 나타냅니다.
이 다음 패킷은 단지 승인, 그것은 데이터가 포함되어 있지 않습니다. 오프셋이 다시 8이므로 12바이트의 옵션이 있고 데이터 길이는 12바이트에 불과합니다.
15:02:39.758 Xmit Ether Dst 00:00:a8:42:52:22 Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 34, ID 48a, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 95b0, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.60312
seq 4102208833, ack 2814493688, window 128, 12 data bytes, flags Ack.
X/Off 08, Flags 10, Cksum a751, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 1 1 8 a 38 a0 2 91 2a 28 5d 8f <<<<8 <> *(]>
|
다음 패킷은 3블록의 승인 번호가 있는 선택적 승인 옵션을 포함하는 세그먼트의 예입니다. 데이터 바이트로 보고하는 TCP 헤더에서 추가 40바이트((15 ~5) * 4)packet_monitor 를 나타내는 0f의 X/Off 값을 기록합니다.
9:52:39.491 Rcvd Ether Dst 00:00:a8:41:34:56 Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP Ver/HL 45, ToS 60, Len 50, ID 59, Flg/Frg 0, TTL 35, Prtl 6
Cksum 4355, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
seq 1652086450, ack 3779437719, window 4096, 40 data bytes, flags Ack.
X/Off 0f, Flags 10, Cksum c834, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 1 1 8 a 2 9e 86 bd 3c 4b dd 57 1 1 5 1a <<<<<<<< >K<W<<<<
10 e1 45 f6 77 e1 45 f8 83 e1 45 f2 5f e1 45 f4 6b <E<w<E<< <E<_<E<k
20 e1 45 c9 6f e1 45 cb 7b <E<o<E<{
|
TCP 헤더의 승인 번호가 가장 적다. 엣지 지속적으로 수신 된 바이트의. 선택적 승인 옵션의 데이터 블록은 수신된 데이터 블록을 나타냅니다. 블록 사이의 간격은 수신되지 않은 바이트를 나타냅니다.
packet_monitor 옵션으로 보고하는 대신 옵션을 올바르게 보고하면 훨씬 간단합니다. 버그 stcp-2963그냥 그렇게 할 packet_monitor 있도록 추가되었습니다. 버그는 향후 릴리스에서 수정될 예정이며, 그때까지 X/Off 값에 주의를 기울여야 합니다.
창 축척 옵션이 가장 혼란스러울 가능성이 있습니다. 다음 패킷에는 4096바이트의 수신 창이 표시됩니다.
9:52:38.975 Rcvd Ether Dst 00:00:a8:41:34:56 Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP Ver/HL 45, ToS 60, Len 34, ID 8, Flg/Frg 0, TTL 35, Prtl 6
Cksum 43c2, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
seq 1652086450, ack 3779392131, window 4096, 12 data bytes, flags Ack.
X/Off 08, Flags 10, Cksum a3cf, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 1 1 8 a 2 9e 86 39 3c 4b dc e3 <<<<<>><K<<<
|
이것은 매우 작은 창이지만 창 크기 조정이 적용되어 크기가 오해의 소지가 있습니다. 어떻게 알 수 있습니까? 알 수 있는 유일한 방법은 초기 연결 설정을 관찰하는 것입니다. 다음 의 경우 SYN 및 SYN-ACK 세그먼트모두 창 크기 조정 옵션을 포함하고, 두 경우 모두 배율 값이 6이므로 위의 세그먼트의 4096(2^12) 창 크기는 6비트로 이동하여 실제 창을 262144(2^18 또는 256K)로 이동하여 262144(2^18 또는 256K)의 실제 창을 제공합니다.
9:52:38.818 Rcvd Ether Dst 00:00:a8:41:34:56 Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP Ver/HL 45, ToS 60, Len 3c, ID 5, Flg/Frg 0, TTL 35, Prtl 6
Cksum 43bd, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
seq 1652086449, ack n.a., window 8192, 20 data bytes, flags Syn.
X/Off 0a, Flags 02, Cksum 29fd, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 2 18 3 3 6 4 2 8 a 2 9e 86 11 0 <<<<<<<< <<<<>><
10 0 0 0 0
9:52:38.819 Xmit Ether Dst 00:13:d4:59:7a:da Src 00:00:a8:41:34:56 Type 0800
+ (IP)
IP Ver/HL 45, ToS 0, Len 3c, ID a, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 3d18, Src a4984dd9, Dst 866fc8b9
TCP from 164.152.77.217.53828 to 134.111.200.185.ftp-data
seq 3779391082, ack 1652086450, window 8192, 20 data bytes, flags Syn Ack
+.
X/Off 0a, Flags 12, Cksum 3b87, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 6 4 2 8 a 3c 4b dc cf 2 <<<<<<<< <<<<<K<
10 9e 86 11 0 >><
|
이러한 옵션은 STCP 매개 변수의 제어 하에 있습니다.
로: list_stcp_params
STCP 매개 변수:
. . . .
최저 IP 최대 세그먼트 크기 [500-1480] (min_mss) 576
. . . .
최대 송신 창 크기 [4096-107372540] (max_send_ws) 1073725440
최대 거대한 창 [>=0] (max_huge_windows) 0
현재 거대한 창 0
최대 256k 창 [>=0] (max_256k_windows) 25
현재 256k 윈도우 0
. . . . .
TCP RFC-1323 정책 [비활성화/허용/요청] (tcp_rfc_1323_policy) 요청
TCP 요청 창 규모 [0-14] (tcp_window_scale) 6
TCP SACK 정책 [비활성화/허용/요청] (tcp_SACK_policy) 요청
로:
|
tcp_rfc_1323_policy 옵션은 타임스탬프가 사용되는지 여부를 나타냅니다. 매개 변수 값은 비활성화/허용/요청입니다. 요청기본값은 옵션이 연결 요청 세그먼트의 일부이며 수신된 연결 요청에서 요청된 경우 회신 세그먼트의 일부가 됩니다. 허용 값은 옵션이 연결 요청 세그먼트의 일부가 아니라 수신된 연결 요청에 포함된 경우 회신의 일부가 될 수 있음을 나타냅니다. 비활성화는 옵션이 두 유형의 세그먼트의 일부가 아님을 나타냅니다. 값을 사용하지 않도록 설정하면 창 배율 옵션이 세그먼트의 일부가 아님을 나타냅니다.
tcp_window_scale 옵션은 배율 조정 매개 변수를 제어합니다. 0값은 원격 호스트에게 창 크기 조정이 지원되지만 STCP의 창을 배율조정하지 는 않음을 알려줍니다.
15:48:43.409 Rcvd IP Ver/HL 45, ToS 0, Len 3c, ID 450, Flg/Frg 0, TTL 3
+c, Prtl 6
Cksum 95e2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65410 to 164.152.77.217.7777
seq 1987362195, ack n.a., window 8192, 20 data bytes, flags Syn.
X/Off 0a, Flags 02, Cksum b8b3, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 6 4 2 8 a 30 ca ac 69 0 <<<4<<<< <<<0J,i
10 0 0 0 0
15:48:48.575 Xmit IP Ver/HL 45, ToS 0, Len 3c, ID 2, Flg/Frg 0, TTL 3
+c, Prtl 6
Cksum 9a30, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65410
seq 3853608469, ack 1987362196, window 8192, 20 data bytes, flags Syn Ack.
X/Off 0a, Flags 12, Cksum c550, Urg-> 0000
offset 0 . . . 4 . . . 8 . . . C . . . 0...4... 8...C...
0 2 4 5 b4 3 3 0 4 2 8 a 1 47 89 66 30 <<<4<< < <<<<G>f0
10 ca ac 69 0 J,i
|
tcp_sack_policy 선택적 승인 옵션을 제어합니다. 값을 비활성화, 허용 및 요청할 수 있으며 tcp_rfc_1323_policy 옵션에 대해 정확히 동일한 작업을 의미할 수 있습니다.
마지막으로 창 확장을 지원하면 이전 최대 64K보다 큰 창을 가질 수 있으므로 두 개의 새 창 크기 풀이 만들어졌습니다. 이들은 max_256k_windows 및 max_huge_windows 풀에 반영됩니다. max_256k_windows 또는 max_huge_windows 값을 설정하여 256K 창 또는 더 큰 창을 광고할 수 있는 최대 소켓 수를 조정할 수 있습니다.
max_send_ws 매개 변수는 가능한 최대 원격 호스트의 수신 창이 이제 2^30(107372540은 실제로 2^30 ~ 2^14)이라는 사실을 반영합니다. 지정된 소켓의 경우 최소 max_send_ws 매개 변수가 있는 실제 최대 송신 창 크기와 광고된 원격 호스트는 창 크기를 수신합니다.