首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >路径MTU发现

路径MTU发现
EN

Stack Overflow用户
提问于 2009-10-22 12:58:29
回答 5查看 1.7K关注 0票数 0

我正在开发一个应用程序,它处理(视频处理等)并通过网络发送大文件(高达数十千兆字节)。我正在使用FTP发送文件。为了提高应用程序的性能/内存消耗,我希望优化缓冲区,这样我就不会发送太大的数据包并使其碎片化。我的问题是,我没有太多的RAM来保存发送时的文件数据。基本上,我只是从磁盘读取足够的字节,处理它,并立即发送到目的地。目前,我正在寻求实现MTU路径发现。

我对如何做的基本概念很熟悉。我想知道windows中是否有.NET API可以跟踪目的地的MTU?

我猜没有这样的事情,但我的一个朋友告诉我windows vista会跟踪。

我正在为windows XP开发这个应用程序,但我想知道windows中是否有这样的网络跟踪API。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-22 14:22:03

winsock不支持报告发现的MTU,即使其他TCP/IP堆栈也支持(例如,通过套接字选项IP_GETPMTU报告AIX )。由于winsock不能报告这一点,所以.NET不能提供API (必须在winsock之上)。

我建议以64kiB为单位发送数据。这是IP数据包的最大大小,并且可能大于MTU,因此堆栈将发送几个完整的数据段。最后一个片段可能更小,但是系统可能会延迟发送它(因为它仍然需要接收早期数据的确认),所以如果您快速跟进64kiB的下一次发送,系统将使用路径mtu将这些块重新组合为数据包。

票数 2
EN

Stack Overflow用户

发布于 2009-10-22 13:09:17

如果您使用的是TCP,这不是您必须自己做的事情。此外,这与发送缓冲区的大小没有关系。可以有多个数据包正在传输(最大为TCP窗口大小),但它们将不再位于您维护的缓冲区中。

票数 0
EN

Stack Overflow用户

发布于 2009-10-22 13:10:27

如果您使用的是UDP,您可能会关心碎片,但如果是这样,为什么要实现自己的协议来传输大文件?改用TCP,不用担心。如果您在UDP上实现自己的协议,并具有拥塞控制和所有其他所需的功能,则在数据包上设置DF位并处理响应。

如果你使用的是TCP,你根本不需要担心碎片,堆栈会帮你做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1605084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档