web-dev-qa-db-ja.com

1472より大きいUDPパッケージは受信されていません

私はc#クライアントアプリを持っています。 UDPを使用してサーバーにデータを送信します。

ただし、Windows 2019 Serverにアップグレードすると、これは機能しなくなります。

動作を停止した理由は、次のリンクに含まれています。

https://social.technet.Microsoft.com/Forums/Windows/en-US/965e107e-d9b0-4240-ac3f-74797c91b476/unable-to-send-udp-packets-larger-than-the- mtu-with-windows-build-1809-using-c-udpclient?forum = win10itpronetworking

本質的に、それは言う:

私の結論は、この最適化(UDPチェックサムオフロード)は1809リリースで壊れており、1903年も壊れたままです。今のところ回避するには、最適化を無効にする必要があります(デフォルトで有効になっているようです)。これは、デバイスマネージャーで実行できます。リストからネットワークアダプタカードを見つけて、[詳細設定]タブに移動します。 IPv4のみを扱いますが、IPv6も影響を受ける可能性があるため、両方を無効にする必要がある場合があります。

そして、これは私にとってはうまくいきません:

最新のWindows10バージョン1903をテストしましたが、それでもこの問題は解決しません。

したがって、私の製品では、シンプレックスメカニズムを介して送信できる必要があります。 TCPですが、シンプレックス '設定'が表示されませんか?

何かアドバイス?

追加

したがって、シンプレックスを使用する理由は、Raspberry Piに接続されたGSMモデムを使用して、バイト配列データをサーバーに送信したいからです。何も与えられていない、つまりフレーミングに関する情報が受信されているため、サーバーからの応答を待機するため、UDPを使用することを好みます。

GSMモデムは二重接続が好きで、常にDHCPアドレスをリセットして、アプリケーションを役に立たなくすることがわかりました。

だから、私が言ったように、それはすべて古いウィンドウズOSで動作しますが、この新しいものでは動作しません。

私はまだUDPを使用したいと思います。そのリンクの提案は機能しません。

だから、私はTCP接続-それが私のアプリケーション構造では機能しないことを知っている-しかし、それが二重プロトコルではなくシンプレックスプロトコルとしてセットアップできるかどうか疑問に思ったので、「必要なハンドシェイク」を回避しました。

グーグルの結果は、シンプレックス法に関して全く何も生み出しませんでした。

だから私は他に見る場所がないので絶対的な絶望からここで質問をします、

1
Andrew Simpson

TCPは全二重接続ですが、TCPを介してシンプレックスデータを送信できます。下位層では、tcpが接続をセットアップし、パケットを送信します。受信者は、受信するセグメントごとにackを送信しますが、rawソケットを使用している場合を除き、ネットワークスタックで処理する必要があります。

ウィンドウスケーリングを有効にし、クライアントで大きな受信ウィンドウを使用するようにしてください。これにより、tcpウィンドウがいっぱいになる問題を防ぐことができます。送信者と受信者が同じネットワーク上にある場合、これはデフォルト設定で問題になることはありません。

WANリンクまたはインターネットを経由する必要がある場合は、BDPまたは帯域幅遅延積を計算する必要があります。これは、送信する帯域幅とラウンドトリップ時間を使用して、必要な受信ウィンドウ。

1
Kevin