2013-08-26 52 views
5

如果我打開一個原始套接字,併發送錯誤校驗和的udp數據包,那麼數據包是否會被tcp/ip堆棧丟棄?當UDP包頭校驗和不正確時,UDP包是否被丟棄?

+0

您可能能夠在遠程主機上嗅探它們,但這會使您能夠區分未到達的pkts與由於格式錯誤的數據而丟棄的pkts –

+1

這就是校驗和*的作用。* – EJP

回答

5

是的,他們將被丟棄。如果您需要更可靠的通信,則使用TCP會更好。

瞭解更多信息,看看這個:http://www.diffen.com/difference/TCP_vs_UDP

UDP沒有保證數據包甚至會被髮送,更不用說接受。如果他們實際上已經收到,他們會被檢查。如果他們失敗校驗和,他們將被丟棄。

編輯:還補充到,UDP默認順序有,因爲它們發出的報文,在應用層面做到沒有。記住這一點,如果你仍然打算使用UDP。

+0

我可以禁用打開套接字時UDP頭校驗和驗證? – innosam

+1

是的,UDP標頭校驗和是可選的。只需將其設置爲0(意味着未使用) –

+0

要小心,因爲根據維基百科的文章(http://en.wikipedia.org/wiki/User_Datagram_Protocol)就指出,在IPv6的它已經不再能夠發送數據包,而不校驗和。這裏是從維基百科的東西從... http://tools.ietf.org/html/rfc2460 – user2366842

4

如果自帶包與校驗和錯誤,操作系統將它傳遞給套接字之前刪除它。

目標應用程序不能確定數據包丟失或帶有校驗和錯誤。 我認爲它也不能強迫其他行爲。

+1

的函數可以強制它忽略,至少在ipv4中。在ipv6中,這不再是這種情況。 – user2366842