etharp_output真是个大玩意,为了这个我竟然整整画了3集,整体流程就是.
memcpy->添加数据
udp_sendto_if_src_chksum->添加UDP头
ip4_output_if_src->添加IP头
ethernet_output->添加以太网头
但是其实完整的调用如下.
而在正常发包里面竟然有填充字符,而我又没有真正的给发这些00啊.
因为以太网最小帧是60Byte,换算有效数据最少18Byte数据才能不padding.而且其实太短的话,也不利于数据传输.测试果真如此.
数据数组改成这样了.
那么这个padding是谁完成的.记得七层模型里面的,这个是MAC层完成的,也就是我们发出去时候,STM32自动补的.以便满足MAC标准,我们没法改掉.不够60Byte总长就会补0.因为这个补0并不改变UDP头,所以不属于UDP数据.
至此,发送流程终于完结了.