我需要通过可能有损的网络将数据包从一个主机发送到另一个主机.为了最小化数据包延迟,我不考虑TCP/IP.但是,我希望最大化吞吐量uisng UDP.应该使用的UDP数据包的最佳大小是多少?
以下是我的一些注意事项:
网络中交换机的MTU大小为1500.如果我使用大数据包,例如8192,则会导致碎片.丢失一个片段会导致丢失整个数据包,对吧?
如果我使用较小的数据包,我将产生UDP和IP头的开销
如果我使用一个非常大的数据包,我可以使用的最大数据包是多少?我读到最大的数据报大小是65507.我应该使用什么缓冲区大小来发送这样的大小?这有助于提高我的吞吐量吗?
常见操作系统(例如Windows,Linux等)支持的典型最大数据报大小是多少?
更新:
数据的一些接收器是未实现TCP/IP堆栈的嵌入式系统.
我知道这个地方到处都是那些非常喜欢使用可用内容的人.但我希望能得到更好的答案,而不仅仅关注MTU.
替代答案:小心不要重新发明轮子.
TCP是数十年网络经验的产物.每一件事或几乎每件事都有共鸣.它有几种大多数人不经常考虑的算法(拥塞控制,重传,缓冲管理,处理重新排序的数据包等).
如果你开始重新实现所有的TCP算法,那么你最终可能会遇到一个(paraphasing Greenspun的第十条规则)"临时的,非正式指定的,错误的,慢速的TCP实现".
如果你还没有这样做,那么最好先看看一些最新的TCP/UDP替代方案,比如SCTP或DCCP.它们是为TCP和UDP都不是很好的匹配而设计的,正是为了让人们使用已经"调试"的协议而不是为每个新应用重新发明轮子.
找到理想数据报大小的最佳方法是完成TCP本身的工作,以找到理想的数据包大小:路径MTU发现.
TCP还有一个广泛使用的选项,双方都告诉对方他们的MSS(基本上是MTU减去标题)是什么.