問題タブ [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.
.net - Web サービスの MTU
すべてのクライアントが WebService を使用して接続する ERP アプリケーションがあります。ネットワーク エンジニアから、Web サービスの MTU が小さすぎるため、パフォーマンスを向上させるために MTU を増やしたいとの連絡がありました。私が知る限り、dotnet Web サービスの MTU の構成セクションはありません。これをどこで設定できるかについてのアイデアはありますか?
c# - TCP経由でパケットを送信すると、2つのパケットに分割されます
サーバークライアントモデルを使用してC#でアプリケーションを開発しています。このモデルでは、サーバーがビット配列を含むバイト配列をクライアントに送信し、クライアントがそれを画面にロードし、サーバーに「OK」を送信し、サーバーが送信します。別の画像など。
画像バッファの長さは異なります。通常は60kbから90kbの間ですが、問題ではないことを確認しました。localhostを使用して、クライアントとサーバーを同じコンピューターに配置すると、すべてが正常に機能します。サーバーはbeginSendを実行し、クライアントはendReceiveを実行し、バッファー全体が送信されます。
しかし、私は現在ワイヤレスネットワークでこれをテストしており、何が起こるかは次のとおりです。
- サーバーは画像を送信します。
- クライアントでコールバック関数data_receivedが呼び出されますが、読み取るのは1460バイトだけです(MTU-なぜ?UDPだけにすべきではないのですか?)
- クライアントでコールバック関数data_receivedが再度呼び出され、残りのバッファー(1000バイトまたは100キロバイト)が使用されます...
これは常にこのように、1460バイトの最初のパケットが受信され、次に2番目のパケットに残りが含まれます。
受信した両方のバイト配列を結合することでこれを回避できますが、これは正しくないようです。なぜこれが起こっているのかさえわかりません。ネットワークに制限はありますか?では、なぜC#はデータ全体が送信されるのを待たないのでしょうか。つまり、TCPです。心配する必要はありませんよね?
とにかく、どんな助けも素晴らしいでしょう!
乾杯
networking - フラグメント化せずに送信できる最大の UDP パケットを見つける方法は?
別のコンピューターに送信できる UDP パケットの最大サイズを断片化なしで知る必要があります。
このサイズは一般に MTU (Maximum Transmission Unit) として知られています。おそらく、2 台のコンピューターの間には、異なる MTU を持つ可能性のある多くのルーターとモデムがあります。
Windows の TCP 実装では、パス内の最大 MTU が自動的に検出されると読みました。
私も実験していましたが、私のコンピューターからサーバーへの最大 MTU は 57712 バイト + ヘッダーであることがわかりました。それ以上のものは破棄されました。私のコンピュータは LAN 上にありますが、MTU は 1500 バイト程度ではないでしょうか?
c - TCP/UDP およびイーサネット MTU フラグメンテーション
オンラインでさまざまなサイトやチュートリアルを読みましたが、まだ混乱しています。メッセージが IP MTU より大きい場合は、send()
送信されたバイトを返します。メッセージの残りの部分はどうなりますか? もう一度電話send()
して、残りのメッセージを送信する必要がありますか? それとも、IP レイヤーが自動的に処理する必要があるものですか?
mtu - POSIXでMTUを取得する方法
MTUサイズ値を取得するPOSIX関数とは何ですか?ありがとう。
windows - 最大パケット サイズの検出
私はネットワーク関連のプロジェクトに取り組んでおり、通信を保護するために DTLS (TLS/UDP) を使用しています。
DTLS の仕様を読んで、DTLS ではDFフラグ (Don't Fragment) を設定する必要があることに気付きました。
ローカル ネットワークで 1500 バイトを超えるメッセージを送信しようとしても、何も送信されません。それは完全に理にかなっています。Windows では、sendto() は成功を報告しますが、何も送信されません。
DTLSには必須であるため、 DFフラグを手動で設定解除できないことは明らかであり、状況によっては1500バイトの制限(MTU?)が変更される可能性があるかどうかはわかりません。できると思います。
だから、私の質問は次のとおりです。「この限界を発見する方法はありますか?」APIを使用していますか?
そうでない場合、可能な限り低い値は?
私のソフトウェアは UNIX (Linux/MAC OSX) と Windows OS で動作するので、OS ごとに異なるソリューションを歓迎します ;)
どうもありがとう。
windows-vista - GetIfEntryとnetshの間のMTUの不一致
私は、TCPの代わりに、信頼性の高いコネクション型通信を提供する、UDP上で実行される疑似トランスポート層ソフトウェアに取り組んでいます。ネットワーク効率を最大化するために、初期化時に「最良の」ネットワークアダプタのMTUを照会します。
オンラインで検索すると、次のnetshコマンドを使用して、コマンドプロンプト(C ++ APIではない)から同じ値を照会できることがわかりました。
厄介な問題は、row.dwMtuが1500に設定されている場合でも、送信側のラップトップでネットワークトラフィックをスヌーピングすると、パケットが1300バイトのパケットに断片化されていることを示します。netshは、MTUが1300であることも報告しています。
明らかに、netshコマンドによって報告された値は実際に使用された値です。netshと同じ値を取得するために呼び出すことができるAPIを知っている人はいますか?
c# - C# でのパス MTU ディスカバリー
接続間のパス MTU を見つけるにはどうすればよいですか? UDP 接続のパケット サイズを定義するためにこれが必要です。.Net に Path MTU Discovery のようなものはありますか?
linux - ソケットごとにMTUを調整しますか?
特定のソケットのMTUを(Linuxシステムで)調整する方法があるかどうか疑問に思いました。(IPレイヤーを実際のデバイスのMTUよりも小さいチャンクにフラグメント化するため)。
特定のソケットについて言うとき、私はそのソケットを所有するアプリケーションのコードでプログラム的に意味するのではなく、外部、たとえばsysfsエントリを介して意味します。
現在それを行う方法がない場合、そのような可能性を実装するためにLinuxカーネルのどこにフック/パッチを適用するかについて何かアイデアはありますか?
ありがとう。
編集:なぜ私はそれをしたいのですか?
Layer3-in-Layer4(例:TCPトンネルを介したIP以上のトンネリング)トンネリングを実行しています。VPNのようなソリューションとは異なり、私はそれを実現するために仮想インターフェイスを使用していません。iptablesを使用してパケットをキャプチャし、通常の方法でドロップして、トンネルソケットに書き込みます。
大きなファイル転送の場合を考えてみてください。すべてのパケットはMTUサイズまでいっぱいになります。それらをトンネリングするとき、オーバーヘッドを追加し、すべての元のパケットをリードして2つのトンネリングされたパケットを生成します。これは最適ではありません。
c - C - MTU が上限に達した場合にのみ TCP パケットを送信する
そのMTUが(ほぼ)いっぱいになったときにのみTCPパケットを送信する機能(フラグ、パラメータなど)が組み込まれていますか?
データは常に送信され、含まれるペイロードの量は問題ではないという私の仮定が正しいことを願っています(wiresharkを介してそれを見つけようとしました)。
よろしくお願いします