問題タブ [mtu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - プログラムで C に MTU を設定する
クライアントが MTU 制限を 1492 にするよう要求しました。
ソースコード(Cのプログラム)でそれを行う方法はありますか?
一般的にそれを行う他の方法はありますか?(ifconfig?)
MTU を特定の制限に変更する必要があるのはなぜですか? メリットは何ですか?そして最も重要なこと: MTU を変更すると、コードが壊れるリスクはありますか?
c - 固定長の TCP フレームの送信
TCP を使用して、固定の非標準 MTU (たとえば、1560) でサブネット経由でデータを送信する必要があります。フレームの長さが MTU 未満の場合、このサブネットを介して転送されるすべてのイーサネット フレームは、手動で 0 でパディングする必要があります。
したがって、データ サイズは (1560 - sizeof(IP ヘッダー) - sizeof(TCP ヘッダー)) である必要があります。
これは私がやろうとしている方法です:
TCP_CORK オプションを設定して、データの断片化を減らしました。200 ミリ秒の上限があるため、信頼性は高くありませんが、機能します。
IP ヘッダーのサイズ (20 バイト) はわかっているので、データ長は (1540 - sizeof( TCP ヘッダー )) に等しくなるはずです。
それが問題です。TCP ヘッダーのサイズがわかりません。「オプション」フィールドのサイズは変動します。
問題は、TCP ヘッダーのサイズを取得する方法です。それとも、固定長のヘッダーを持つ TCP フレームを送信する方法があるのでしょうか?
c - 複数のインターフェイスを持つデバイスの MTU を設定する
私は使っている
ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)
インターフェイスの MTU を変更します。
コードはこれに似ています
私の問題は、デバイスに複数のインターフェイスがあり、これらすべての MTU が 1492 に設定されていることです。他のすべてのインターフェイスに影響を与えないようにして、1 つのインターフェイスのみに限定して実行したいと考えています。どうすればいいですか?
bond1:43 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.59 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1
bond1:48 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.60 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1
bond1:49 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.61 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1
linux - MTU の変更は双方向に影響しますか?
ifconfig 1.2.3.4 mtu 1492
これにより、着信パケット、発信パケット、またはその両方の MTU が 1492 に設定されますか? 着信専用だと思います
networking - 奇妙な IPERF 観測: MSS サイズが指定されたサイズから減少する
IPERF を使用して、ある PC から別の PC にパケットを送信しています。IPERF で MSS (Maximum Segment Size) をテストしているときに、次のことが観察されました。
MSS = 20 バイトのパケットを送信します。
上記のコマンドは、MSS = 20 バイト、
MTU = MSS + 40 バイト = 60 バイトのパケットを送信すると予想していましたが、IPERF は MSS = 36 バイト (MTU = 76 バイト) を示しています。
IPERF は常に、指定したサイズよりも 12 バイト小さいサイズの MSS を送信することがわかりました。
ここで、パケットを送信する PC は Linux マシンであり、これらのパケットを受信する PC は Windows マシンであることに注意してください。Linux では IPERF コマンドを使用してパケットを生成しますが、Windows では JPERF の照合が実行され、着信パケットに関する情報が表示されます。
もう 1 つの重要なことは、送信したパケットを受信した後の Windows マシン上の JPERF が次のように表示することです: MSS および MTU サイズが不明です (TCP_MAXSEG は OS でサポートされていませんか?)
MSSがどのように/なぜ減少するのか考えていますか?
icmp - 経路MTU探索-ICMP応答はどこにありますか?
Linuxで経路MTU探索を使っていくつかの実験を行っています。RFC 1191から理解した限りでは、ルーターがゼロ以外のDFビットを含むパケットを受信し、そのパケットを断片化せずに次のホストに送信できない場合、ルーターはパケットをドロップして、ICMPメッセージを最初のホストに送信する必要があります。送信者。
コンピューター上にいくつかのVMを作成し、次の方法でそれらをリンクしました。
Rx-Linuxがインストールされた仮想マシンであり、静的ルートを持つ2つのネットワークインターフェイスがあります。V1からV2にpingを実行し、その逆も成功します。
セグメント100.xおよび150.xにはMTU1500があります。セグメント200.xにはMTU750があります。
DFを有効にしてUDPパケットを送信しようとしています。事実、パケットのサイズが750を超える場合、VM1はパケットをまったく送信しません(send()呼び出しでEMSGSIZEエラーを受け取ります)。
ただし、サイズが1500を超えるパケットでは、このような動作が予想されます。また、VM1は750〜1500のサイズのパケットをR1に送信し、R1(またはR2)はそのようなパケットをドロップしてICMPパケットをVM1に返すと予想します。 。しかし、これは起こりません。
2つの質問があります:
1)なぜですか?
2)RFC 1191に従ってICMPパケットを受信するように仮想ネットワークを設定することは可能ですか?
ありがとう。
windows - Windows2000およびudpデータグラムのサイズMTUサイズ
マルチキャストされたudpデータグラムのWindowsホストレシーバーが1500のMTUを受信できるように設定されていることを変更/確認するにはどうすればよいですか?私がこれまで読んだドキュメントは、PPPPとPPPoEについて言及していますが、これらはudpデータグラムには当てはまらないようです。ありがとうak
networking - ケーブル モデムと ISP の間の MTU を確認する方法は?
MTU の「全体像」を理解しようとしています。具体的には、MTU に関する多くの議論は単一のホップ (ラップトップからルーターへなど) に焦点を当てているため、ケーブル モデムと ISP の間、またはより一般的にはルートの任意のホップについて MTU を決定する方法は自然な問題です。
これで、ラップトップとその間の MTU を簡単に確認できます: Mac OS X で ifconfig を使用する Wi-Fi ルーター:
1500 は、wi-fi フレームの制限の正規値 b/c です (イーサネット フレームに一致するように設計されていると推測しています。間違っている場合は修正してください)。
問題は、ルート内の任意のホップの MTU を決定する方法です。
回答の要約:
以下の回答によると、最善の策は「tcpdump」、「traceroute --mtu」または「tracepath」です
linux - tcpdump によって報告された tcp パケットの「サイズ」は、送信された実際の IP パケットとどのように関連していますか?
tcpdump を実行すると、最小のシーケンス番号と最大のシーケンス番号の後の () の間に報告される数値は正確には何を意味しますか?
- 送信された IP パケットに相関している場合、どうして 1500 の mtu よりも大きくなるのでしょうか?
- このフローの受信側では、tcpdump は常に 1448 以下のパケットを検出します。これらのパケットはどこで最適化され、再構築されますか? tcpdump で確認できますか?
- この数値と tcp ソケット バッファのサイズの間に何か関係はありますか?
すなわち: 送信側の典型的な tcpdump:
11:47:18.278352 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3263771:3272459(8688) ack 1 勝利 54 11:47:18.278371 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3272459:3282595(10136) ack 1 勝利 54 11:47:18.278620 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3282595:3298523(15928) ack 1 勝利 54 11:47:18.278727 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3298523:3301419(2896) ack 1 勝利 54 11:47:18.278731 IP 1.1.1.36.41034 > 1.1.1.37.60960: P 3301419:3301719(300) ack 1 勝利 54 11:47:18.777161 IP.3.3.3 > 1.1.1.37.60960: P 3301719:3301723(4) ack 1 win 54 11:47:18.777175 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3301723:3303171(1448) 攻撃 1 勝 54
そしてレシーバー:
11:47:18.277895 IP 1.1.1.36.41034 > 1.1.1.37.60960: P 990413:990417(4) ack 1 勝利 54 11:47:18.277948 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 990417:991865(1448) ack 1 勝利 54 11:47:18.277953 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 991865:993313(1448) ack 1 勝利 54 11:47:18.277958 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 993313:994761(1448) ack 1 勝利 54 11:47:18.278028 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 994761:996209(1448) ack 1 勝 54
c# - ICMPv6 エコー リクエストの送信
C# で ICMPv6 エコー要求メッセージを送信するにはどうすればよいですか? さらに、実際の帯域幅、RTT、IPv6 を使用するパス上の MTU (IPv6 パケットには DF フラグはありません)、およびパケット損失を指定する必要があります。