发现最大数据包大小

问题描述:

我正在处理与网络相关的项目,并使用DTLS(TLS/UDP)来保护通信。发现最大数据包大小

阅读DTLS的规范,我注意到DTLS要求设置DF标志(不要碎片)。

在本地网络上,如果我尝试发送大于1500字节的消息,则不会发送任何消息。这很有道理。在Windows上,sendto()报告成功,但没有发送。

我明明不能手动取消设置DF标志,因为它对于DTLS是强制性的,我不确定1500字节限制(MTU?)是否可以在某些情况下更改。我想可以。

所以,我的问题是:“有没有办法发现这个限制?”使用API​​?

如果不是,那么可能的最低值是多少?

我的软件UNIX(Linux的/ MAC OSX)和Windows操作系统为每个操作系统,所以不同的解决方案,欢迎下运行;)

非常感谢。

+0

你是否正在推出自己的DTLS实施或其他? RFC建议他们检查“需要的碎片和DF设置”错误并相应地修改估计的MTU。 http://www.rfc-editor.org/rfc/rfc4347.txt – 2010-03-26 10:51:07

+0

不,我不是在滚动我自己的DTLS实现。我正在使用OpenSSL。我需要让MTU在发送数据包之前对数据包进行分片。 所以,我需要一种方法来确保我的数据包足够小,不会被丢弃。 – ereOn 2010-03-26 11:03:33

必须支持的最小MTU - 576个字节,包括IP标头。所以,如果你保持你的数据包低于你的数据包,你不必担心PMTU-D(这就是DNS所做的)。

+0

我不知道最小的帧大小。 我想我没有选择,只能在576字节的部分我的帧。 谢谢你! – ereOn 2010-03-26 13:25:59

+0

@ereOn:记住它是576字节的IP数据包 - 因此包括IP和UDP头,以及每个数据包的DTLS开销。 – caf 2010-03-27 03:13:31

您可能需要通过向目标发送一系列数据包大小来“自动调整”它,然后查看到达的目标。认为binary_search ...

+0

谢谢,但我希望有一些“标准”的方式来做到这一点。我真的不想重新发明MTU路径发现。 – ereOn 2010-03-26 10:44:21