TCPセグメントの長さがMSSを超えています

TCPセグメントの長さがMSSを超えています

Linux システムで奇妙な動作が見つかりました。Web ページを curl すると、受信した TCP セグメントが MSS よりも大幅に大きくなります。

以下は tcpdump の出力です。

00:00:00.000000 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [S]、シーケンス 248491621、win 29200、オプション [mss 1460、sackOK、TS 値 294137 ecr 0、nop、wscale 7]、長さ 0
00:00:00.004210 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [S.]、シーケンス 1384820706、ack 248491622、win 29200、オプション [mss 1380、sackOK、nop、nop、nop、nop、nop、nop、nop、nop、nop、nop、nop、nop、wscale 7]、長さ 0
00:00:00.000063 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 1、win 229、長さ 0
00:00:00.000082 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [P.]、シーケンス 1:78、ack 1、win 229、長さ 77
00:00:00.004187 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、ack 78、win 193、長さ 0
00:00:00.002929 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [P.]、シーケンス 1:819、ack 78、win 193、長さ 818
00:00:00.000032 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 819、win 241、長さ 0
00:00:00.000075 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [P.]、シーケンス 819:16385、ack 78、win 193、長さ 15566
00:00:00.000016 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 16385、win 485、長さ 0
00:00:00.000016 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 16385:19105、ack 78、win 193、長さ 2720
00:00:00.000009 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 19105、win 527、長さ 0
00:00:00.000086 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 19105:20465、ack 78、win 193、長さ 1360
00:00:00.000009 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 20465、win 548、長さ 0
00:00:00.001338 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 20465:28625、ack 78、win 193、長さ 8160
00:00:00.000015 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 28625、win 676、長さ 0
00:00:00.132259 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 28625:42225、ack 78、win 193、長さ 13600
00:00:00.000027 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 42225、win 888、長さ 0
00:00:00.003511 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [P.]、シーケンス 42225:55825、ack 78、win 193、長さ 13600
00:00:00.000035 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 55825、win 1101、長さ 0
00:00:00.000041 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 55825:58545、ack 78、win 193、長さ 2720
00:00:00.000033 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 58545、win 1143、長さ 0
00:00:00.001683 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 58545:61265、ack 78、win 193、長さ 2720
00:00:00.000012 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 61265、win 1186、長さ 0
00:00:00.000027 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 61265:63985、ack 78、win 193、長さ 2720
00:00:00.000007 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 63985、win 1228、長さ 0
00:00:00.000034 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 63985:69425、ack 78、win 193、長さ 5440
00:00:00.000008 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 69425、win 1313、長さ 0
00:00:00.001476 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、シーケンス 69425:83025、ack 78、win 193、長さ 13600
00:00:00.000033 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 83025、win 1300、長さ 0
00:00:00.004061 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [P.]、シーケンス 83025:89274、ack 78、win 193、長さ 6249
00:00:00.000026 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 89274、win 1380、長さ 0
00:00:00.000139 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [F.]、シーケンス 78、ack 89274、win 1411、長さ 0
00:00:00.004609 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [.]、ack 79、win 193、長さ 0
00:00:00.000038 IP 115.239.210.27.80 > 10.15.71.190.44503: フラグ [F.]、シーケンス 89274、ack 79、win 193、長さ 0
00:00:00.000018 IP 10.15.71.190.44503 > 115.239.210.27.80: フラグ [.]、ack 89275、win 1411、長さ 0

ご覧のとおり、TCP ハンドシェイクでは MSS は 1380 です。

なぜこのようなことが起こるのかわかりません。私のローカル リンクの MTU は 1500 です。また、My Windows でこれを試してみましたが、Windows では問題ありません。

答え1

おそらく、Linux システムの NIC でハードウェア TCP オフロード機能が有効になっているため、NIC がパケットを処理するまで (したがって結果が変更されるまで) カーネルはパケットを認識しません。

関連情報