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 知道降低数据包发送到 HELP 的频率以防止延迟问题?由于我们无法访问卫星系统,我们无法证明这是问题所在,但似乎他们收到了数据包,只是不要以正确的顺序将它们放回原处。

谢谢。

4

1 回答 1

1

如评论中所述,您无法控制 TCP 数据包的路由。TCP 作为协议会将数据拆分成更小的块(即使数据在 windows 机器上约为 20Kb,TCP 也会将此数据拆分为几个数据包,尽管 windows 中的最大数据包大小约为 60Kb)。

您可以尝试设置 Windows 使用的“MTU”设置。您可以在注册表中执行此操作。这样做是允许您设置较小的“最大传输单元”大小,因为您有一个高延迟连接。尝试将 MTU 设置为 500 或更低。

如果这些都不适合您的需求,您还可以查看 RFC,了解如何编写自己的 TCP 数据包标头以进一步调整数据包的处理方式。在此处查看直接解决此问题的 RFC:https ://www.rfc-editor.org/rfc/rfc1072

于 2012-09-30T00:26:00.663 回答