UDP正在向数据报的末尾添加字节?

use*_*154 3 sockets udp wireshark

我有一个用C语言编写的Linux UDP服务器,我发送的是16字节的UDP数据报.客户端正确接收所有数据,但wireshark日志显示正在添加两个额外字节:

00 16 00 00 c8 44 01 14 01 01 02 01 02 00 00 10 00 00

这两个字节都是零,我不知道它们来自哪里,我在sendto()函数中发送了16个字节的数据.

必须在Linux Kernel层的填充中添加这些内容吗?反正有没有阻止这种情况发生?

wireshark的屏幕截图,显然这是以太网填充字节...为什么他们在这里?

Wireshark截图

Ant*_*ala 6

以太网帧需要最少64个八位字节,包括屏幕截图中未显示的帧校验序列(FCS)的4个八位字节.如果没有这两个零填充八位字节,那个帧只有62个八位字节长.还要注意,他们不是 UDP包,他们外面.外部 UDP帧的长度为24,包括您发送的数据的16个八位字节; 其余8个八位字节是4个16位数字:源端口,目标端口,长度和校验和.以太网填充字节在UDP和IP帧之外.

最小64字节帧长度的原因是旧的 - 以太网最初设计用于总线拓扑,其中媒体访问通过称为具有冲突检测的载波侦听多路访问(CSMA/CD)的方法来调节.当总线空闲时,任何设备都可以在总线上进行传输,但是它们必须监控总线以进行同步传输.如果发生冲突,则每个当前发送方退回以进行随机延迟.设置最小64字节,以便发送设备在完成发送帧之前在数百米长的电缆上发现碰撞.

Wireshark文档到谷歌搜索"wireshark最小以太网帧":

以太网数据包(标头+用户数据+ FCS)小于最小64字节的以太网数据包填充为64字节,这意味着如果用户数据少于64-(14 + 4)= 46字节,则额外填充数据被添加到数据包中.

注意:通常以64字节提及最小以太网数据包大小,包括FCS.这可能令人困惑,因为Wireshark通常不会显示FCS,仅仅因为底层机制根本不提供它.[...]


顺便说一句,这与C编程语言无关.