如果没有小说,我会尝试解释并希望它有意义。
我们有一个应用程序处理通过简单的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的频率,以防止延迟问题?由于我们无法访问卫星系统,我们无法证明这是问题,但看起来他们得到了数据包,只是不要按正确的顺序将它们重新组合在一起。
感谢。
答案 0 :(得分:1)
如评论中所述,您无法控制TCP数据包的路由。 TCP作为协议将数据分成更小的块(即使在Windows机器上数据为〜20Kb,TCP也会将这些数据分成几个数据包,尽管窗口中的最大数据包大小约为60Kb)。
您可以尝试设置Windows使用的“MTU”设置。您可以在注册表中执行此操作。这样做可以让您设置较小的“最大传输单位”大小,因为您具有高延迟连接。尝试将MTU设置为500或更低。
如果这些都不适合您的需求,您还可以查看RFC,了解如何编写自己的TCP数据包标头,以进一步调整数据包的处理方式。请看这里直接解决此问题的RFC:http://tools.ietf.org/html/rfc1072