주요 콘텐츠로 건너뛰기
먼저 약간의 배경에서 TCP에는 최대 세그먼트 크기(MSS)라는 개념이 있습니다. 이는 TCP 스택이 허용하는 가장 큰 세그먼트(데이터)입니다. 연결이 설정되면 SYN 세그먼트의 원격 피어에 광고됩니다. 다음 패킷 디코드에는 TCP MSS 옵션이 강조 표시된 SYN 세그먼트가 표시됩니다. 모든 TCP 옵션은 옵션 번호에 대해 동일한 형식, 옵션 번호 1 바이트, 이 경우 2 바이트, 옵션의 총 길이(4) 및 옵션값에 대해 1바이트가 이 경우 5b4 헥스 또는 1460 소수점입니다.

packet_monitor -interface #sdlmux.m16.11-3 -hex_dump -numeric  -time_stamp -verbo
+se -pkt_hdr -filter -host 10.64.77.50
dir                                                 icmp
type
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src  port  ds
+t port  type
10:11:56.751 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:43:52:22  Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   2c, ID be0b, Flg/Frg    0, TTL 3c,  Prtl 6
Cksum  dcdd, Src a404d80, Dst a404d32
TCP from 10.64.77.128.55911 to 10.64.77.50.telnet
seq  1305537174, ack     n.a., window  8192, 4 data bytes, flags  Syn.
X/Off 06, Flags 02, Cksum 815d,  Urg-> 0000
offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .   0...4...8...C...
0     2  4  5 b4                                        <<<4
STCP는 로컬 네트워크의 호스트에 연결하기 위해 1460의 값을 사용합니다. 모든 프로토콜 오버헤드를 추가하면 최대 이더넷 프레임 크기인 1518바이트의 이더넷 프레임으로 끝납니다. 로컬이 아닌 세그먼트의 호스트에 연결하기 위해 STCP는 min_mss 매개 변수에서 파생된 값을 사용합니다. 기본 min_mss 값을 사용하면 MSS 값이 536입니다. 이 값은 모든 IP 기반 네트워크 장비, 즉 라우터가 IP 조각화없이 전달하고자하는 최소 크기이며, 최소 536을 RFC 879에서 1983 년에 작성된 사양 - "TCP 최대 세그먼트 크기 및 관련 주제".

 

오늘날 모든 라우터가 더 큰 크기를 처리할 수 있습니다. 따라서 STCP 최소값은 536에서 더 큰 것으로 올릴 수 있습니다. 얼마나 큰 핵심 질문입니다. 너무 커서 만드는 위험은 조각화입니다. 최악의 시나리오이지만 진단하기 가장 쉬운 시나리오는 라우터가 조각화하는 대신 TCP 세그먼트를 삭제하도록 선택한다는 것입니다. 이 경우 연결을 설정할 수 있지만 데이터를 전송할 때 연결이 실패합니다. 전송 호스트의 추적에는 연결 시간이 꺼질 때까지 대형 TCP 세그먼트의 여러 재전송이 표시됩니다. 추적에는 세그먼트를 삭제하는 라우터에서 ICMP 대상에 연결할 수 없는 메시지가 표시될 수도 있습니다. 라우터가 세그먼트를 조각화하도록 선택하면 조각화 프로세스가 우선 순위가 낮아지므로 실제로 처리량이 감소할 수 있습니다. 또한 부패 또는 혼잡으로 인해 세그먼트를 잃을 확률은 조각 수와 함께 증가합니다. 이 경우 를 알 수 있는 가장 쉬운 방법은 모듈에서 packet_monitor 추적을 실행하는 것입니다. TCP 세그먼트가 조각으로 들어오면 조각화가 발생했다는 것을 알 수 있습니다.

 

다음 세 개의 이더넷 프레임은 세 부분으로 조각화된 하나의 TCP 세그먼트를 나타냅니다. Flg/Frg 값이 2000이기 때문에 첫 번째 프레임이 조각임을 알 수 있습니다. 2는 더 많은 조각 비트가 설정되고 000이 조각 오프셋임을 나타내며,이 경우 0은 첫 번째 조각임을 나타냅니다. 패킷 모니터는 실제로 다음 2 프레임을 조각으로 플래그를 표시합니다. 프레임 2의 Flg/Frg 값은 2048이며, 다시 2는 더 많은 조각 비트가 설정되고 48은 원래 IP 데이터그램에서 데이터의 오프셋(배수 8바이트)임을 나타냅니다. 세 번째 프레임에는 90의 Flg/Frag가 있거나 0090보다 더 정확하게 있습니다. 더 많은 조각 비트가 0이기 때문에 이것이 마지막 조각이라는 것을 알고 있습니다. 우리는 이 모든 프레임이 모두 동일한 IP ID 값인 2e87을 가지고 있기 때문에 함께 속한다는 것을 알고 있습니다. 첫 번째 프레임의 데이터 길이는 이 경우 556을 설정해야 하는 MSS 값을 나타냅니다.
 
15:52:27.081 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:12:3f:82:57:10 Type 0800 +(IP) IP   Ver/HL 45, ToS  8, Len  254, ID 2e87, Flg/Frg 2000, TTL 3f,  Prtl  6 Cksum  1422, Src c0a86432, Dst a404d80 TCP from 192.168.100.50.32781 to 10.64.77.128.ftp-data seq   568258166, ack  840605671, window  5440, 556 data bytes, flags Ack. X/Off 05, Flags 10, Cksum d149,  Urg-> 0000 offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0…4… 8…C… 0    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890 10    31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36 * 1234567890123456 20    37 38 39 30 31 32 33 34  35 36 37 38 39 30 31 32 * 7890123456789012 30    33 34 35 36 37 38 39 30  31 32 33 34 35 36 37 38 * 3456789012345678 40    39 30 31 32 33 34 35 36  37 38 39 30 31 32 33 34 * 9012345678901234 50    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890 60     d  a 31 32 33 34 35 36  37 38 39 30 31 32 33 34 * <<12345678901234 70    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890

 

 

 

15:52:33.793 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:12:3f:82:57:10 Type 0800 +(IP) IP   Ver/HL 45, ToS  8, Len  254, ID 2e87, Flg/Frg 2048, TTL 3f,  Prtl  6 Cksum  13da, Src c0a86432, Dst a404d80 TCP from 192.168.100.50. to 10.64.77.128.  *fragments*,  576 bytes data offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0…4… 8…C… 0    31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36 * 1234567890123456 10    37 38 39 30 31 32 33 34  35 36 37 38 39 30 31 32 * 7890123456789012 20    33 34 35 36 37 38 39 30  31 32 33 34 35 36 37 38 * 3456789012345678 30    39 30  d  a 31 32 33 34  35 36 37 38 39 30 31 32 * 90<<123456789012 40    33 34 35 36 37 38 39 30  31 32 33 34 35 36 37 38 * 3456789012345678 50    39 30 31 32 33 34 35 36  37 38 39 30 31 32 33 34 * 9012345678901234 60    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890 70    31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36 * 1234567890123456

 

 

15:52:33.793 Rcvd Ether Dst 00:00:a8:43:52:22  Src 00:12:3f:82:57:10 Type 0800 +(IP) IP   Ver/HL 45, ToS  8, Len   f8, ID 2e87, Flg/Frg   90, TTL 3f,  Prtl  6 Cksum  34ee, Src c0a86432, Dst a404d80 TCP from 192.168.100.50. to 10.64.77.128.  *fragments.,  228 bytes data offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0…4… 8…C… 0    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890 10    31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36 * 1234567890123456 20    37 38 39 30 31 32 33 34  35 36 37 38 39 30 31 32 * 7890123456789012 30    33 34 35 36 37 38 39 30  31 32 33 34 35 36 37 38 * 3456789012345678 40    39 30 31 32 33 34 35 36  37 38 39 30 31 32 33 34 * 9012345678901234 50    35 36 37 38 39 30  d  a  31 32 33 34 35 36 37 38 * 567890<<12345678 60    39 30 31 32 33 34 35 36  37 38 39 30 31 32 33 34 * 9012345678901234 70    35 36 37 38 39 30 31 32  33 34 35 36 37 38 39 30 * 5678901234567890

 

MSS 값을 늘리는 문제는 모든 TCP 연결에 대해 증가한다는 것입니다. 하나 또는 몇 개의 목적지만 을 늘릴 수는 없습니다. 따라서 모든 연결에 미치는 영향을 측정하려면 이 변경 사항을 신중하게 테스트해야 합니다.
현재 MSS 값을 보고 다음 두 명령으로 변경할 수 있습니다.
analyze_system -request_line 'list_stcp_params min_mss' -quit
OpenVOS Release 17.0.1as, analyze_system Release 17.0.1as
Current process is 357, ptep 8FA86000, Noah_Davids.SysAdmin

maximum tcp segment size [500-1480] (min_mss) 556

ready 10:52:07
analyze_system -request_line 'set_stcp_param min_mss 1480' -quit 
OpenVOS Release 17.0.1as, analyze_system Release 17.0.1as
Current process is 357, ptep 8FA86000, Noah_Davids.SysAdmin

Changing maximum tcp segment size (min_mss)
from 556 to 1480
ready 10:52:24
매개 변수 이름 인 min_mss MSS 값이지만 실제로 MSS 값과 20 바이트의 TCP 헤더 길이임을 의미합니다. 위의 예제에서는 min_mss 값을 556+20 또는 576으로 설정합니다.

 

그렇다면 MSS 값을 늘려 얼마나 많은 부스트를 얻을 수 있을까요? 오버헤드 바이트를 추가하는 VPN 연결이 보급되어 최대 값인 1480(실제 TCP MSS 1460)을 설정하는 것은 권장하지 않습니다. 나는 조금 작은 무언가를 제안, 말 1220 (실제 MSS 1200) 바이트. 536바이트 세그먼트를 사용하여 10메가바이트의 데이터를 전송한다고 가정하면 18657 프레임이 필요합니다. 총 바이트 수 – 오버헤드(8바이트 이더넷 프리앰블 + 14바이트 이더넷 헤더 + 20바이트 IP 헤더 + 20 바이트 TCP 헤더 + 4 바이트 TCP 트레일러 + 이더넷 간 간격을 위한 유효 12바이트)를 포함하였습니다. 1200바이트 세그먼트를 사용하는 경우 총 바이트 수가 10,650,052 또는 9% 조금 이상 작은 8334 프레임이 필요합니다. 그러나 MSS 값은 허용되는 가장 큰 세그먼트의 광고이며 전송 호스트가 실제로 큰 세그먼트를 보낼 필요는 없습니다. 그러나, 그것은 할 그리고 다른 병 목이 없는 가정 당신은 단지 있어 9% 처리량에 부팅.

댓글 2개

© 2024 스트라투스 테크놀로지스.