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,端口,用户数据长度,用户数据。用户无关的网络协议本身的部分数据已经屏蔽掉了。
但是这些问题在芯片手册上没有描述数据输出是什么格式,确实有遗漏之处,难免让人有些担心其严谨性。