2013-03-07 95 views
0

我試圖連接到多播組來接收一些UDP數據包。 我使用的代碼運行良好,我收到了數據包,之前我沒有遇到任何問題。但是現在有一個新的需求需要數據包通過需要看到多播加入消息的交換機。在它剛剛開始愚蠢的開關之前,這不成問題。IGMP加入消息給出錯誤的校驗和

加入多播組,我使用此代碼:

var LocalAddress = "228.12.12.27"; 
var LocalPort = 46715; 
var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddress), LocalPort); 
var RxSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 

RxSocket.Blocking = false; 
RxSocket.ReceiveBufferSize = UInt16.MaxValue; 
RxSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1); 

RxSocket.Bind(new IPEndPoint(IPAddress.Any, LocalEndPoint.Port)); 
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address)); 
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50); 

RxSocket.Close(); 

生成該IGMP的線加入消息是

RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address)); 

以及IGMP加入消息發送出去。

但是,當我使用Wireshark監聽網絡時,發現IGMP消息的校驗和錯誤; http://i.imgur.com/6Ct52QG.png

這是我的代碼或輸入問題嗎?或者還有別的嗎?

回答

0

這是我的代碼

沒有問題,因爲你的代碼不產生IP校驗。這要麼由操作系統的網絡堆棧產生,要麼由尼古拉·費蒂索夫在他的回答中指出的網絡適配器。

如果您的網絡分析器正在發送數據包的計算機上運行,​​並且校驗和由網絡適配器而不是由網絡堆棧生成,那麼由於捕獲您自己的數據包由網絡堆棧「循環數據包返回「到捕獲機制,而不是由網絡適配器捕獲它發送的數據包(如果有適配器,這些數據將很少),捕獲的數據包將不具有計算出的IP校驗和,因此幾乎肯定會出現IP校驗和。

請注意「可能是由」IP校驗和卸載「?」在Wireshark顯示器中。那就是Wireshark正在談論的。

0

這是預計與現代網卡,執行硬件校驗。不要擔心這一點。