1. 主題
使用W5500測試UDP功能,發現收到的數據包和wireshark抓包的數據不同。
原來W5500接收寄存器的數據包並不是網絡上的數據流,而是經過內部處理后展現出來的。
對於這個問題目前沒有查到文檔,技術支持給我的回應是:
寄存器里的數據的格式為: 對方ip(4bytes) +端口號(2bytes)+ 數據長度 (2bytes)+ UDP數據。
2. 問題分析
1)使用TCP助手發送UDP數據,發送3個字節,字符型123.

2. 程序斷點,讀取接收寄存器接收的長度為11字節。前8字節的內容為:C0 A8 01 64 17 70 00 03。
這個正好是源IP,端口,數據長度。 而不是標准UDP協議包頭。

3. 使用wireshark抓包。發現數據流並不是上面芯片寄存器的內容。
UDP實際數據包有11個字節,上面W5500寄存器里面讀出來也是11字節。但是內容卻不一樣。
抓包捕獲的前面8個字節是UDP頭,實際數據3個字節,數據為0x31,0x32,0x33。
源地址為192.168.1.100,已經捕獲到。而上面W5500的數據包里面直接給出這個地址。

4. 分析UDP數據包格式,對比上面的抓包數據,可以知道,W5500作為一個硬件TCP/IP芯片,內部的邏輯處理已經對數據進行了篩選。
顯示出來的數據都是用戶關心的比如IP,端口,用戶數據長度,用戶數據。用戶無關的網絡協議本身的部分數據已經屏蔽掉了。
但是這些問題在芯片手冊上沒有描述數據輸出是什么格式,確實有遺漏之處,難免讓人有些擔心其嚴謹性。

