0

小説がなくても、私は説明しようとし、それが理にかなっていることを願っています.

シンプルな HTTPS 経由でサーバーへのデータ送信を処理するアプリがありますが、問題なくすべて正常に動作します。ただし、パケットが衛星電話経由で送信される場合、伝送の遅延は、地上回線の高速ネットワーク アクセスで処理される通常のミリ秒よりもはるかに長くなります。そのため、送信されるまったく同じパケットは、次の関数を使用すると、Windows API を介して自動的に分割されます。

DECLARE INTEGER InternetOpen IN WININET.DLL
DECLARE INTEGER InternetCloseHandle IN WININET.DLL
DECLARE INTEGER InternetConnect IN WININET.DLL
DECLARE INTEGER HttpOpenRequest IN WININET.DLL
DECLARE INTEGER InternetQueryOption IN WININET.DLL
DECLARE INTEGER InternetSetOption IN WININET.DLL
DECLARE INTEGER HttpSendRequest IN WININET.DLL
DECLARE INTEGER HttpQueryInfo IN WININET.DLL
DECLARE INTEGER InternetReadFile IN WININET.DLL

私は「パケット」を具体的に制御しているのではなく、リクエスト全体を作成して送信し、回答を得るだ​​けです。

起こっているように見えるのはこれです。大量のデータで典型的なように、パケットは小さなチャンクに分割されています。ただし、衛星に到達するまでに、それらは正しい順序で再構成されていないため、最終目的地での受け入れは失敗します。

それで、今質問です...パケットが送信される頻度を遅くして、遅延の問題を防ぐためにWindowsに具体的に知らせる方法はありますか? 衛星システムにアクセスできないため、これが問題であることを証明することはできませんが、パケットを取得しているように見えますが、正しい順序で元に戻していません。

ありがとう。

4

1 に答える 1

1

コメントで述べたように、TCPパケットのルーティングを制御することはできません。プロトコルとしてのTCPは、データをより小さなチャンクに分割します(Windowsマシンでデータが約20Kbであっても、Windowsの最大パケットサイズが約60Kbであるにもかかわらず、TCPはこのデータをいくつかのパケットに分割します)。

Windowsが使用する「MTU」設定を試してみてください。レジストリでこれを行うことができます。これにより、接続の待ち時間が長くなるため、「最大伝送ユニット」のサイズを小さく設定できます。MTUを500以下に設定してみてください。

これがニーズに合わない場合は、RFCを調べて、パケットの処理方法をさらに微調整するための独自のTCPパケットヘッダーの作成について確認することもできます。この問題に直接対処するRFCについては、こちらをご覧ください:https ://www.rfc-editor.org/rfc/rfc1072

于 2012-09-30T00:26:00.663 に答える