2010-03-26 48 views
0

我正在處理與網絡相關的項目,並使用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

回答

3

必須支持的最小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

0

您可能需要通過向目標發送一系列數據包大小來「自動調整」它,然後查看到達的目標。認爲binary_search ...

+0

謝謝,但我希望有一些「標準」的方式來做到這一點。我真的不想重新發明MTU路徑發現。 – ereOn 2010-03-26 10:44:21