网络是否允许小于64字节的以太网帧或者报文传输?

同学们在学网络课程的时候都知道,除巨帧外,常见的以太网帧的长度范围是64字节到1518字节,并且因为最初总线型半双工的组网原因,人们制定了csma/cd协议,规定了以太网中最短帧为64字节。然而,互联网的发展日新月异,今天的网络早已不是当初的半双工模式,csma/cd协议也早已不再使用,那么现在网络是否允许小于64字节的以太网帧或者报文传输呢?本文搭建硬件环境进行了验证。
回顾
电磁波在双绞线上传输的速度为0.7倍光速,在1km电缆的传播时延约为5us。传统的网络信道比较差,需要有重传机制保障可靠性。于是,在节点a向节点b发送数据进行通信的时候,要保证以太网的重传,必须保证a收到碰撞信号的时候,数据包没有传完,要实现这一要求,a和b之间的距离很关键,也就是说信号在a和b之间传输的来回时间必须控制在一定范围之内。ieee定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit 时间。(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。因此,传统以太网有如下特点: 1、最大覆盖距离(两个站点最远的距离):2500m; 2、争用期(即一个信号最远来回的传播时间):51.2us;过来这个时间还未监听到冲突,则说明无冲突; 3、最小帧长:64字节;因为传统以太网速率是10mbps,争用期是51.2us;即在这个时间内,帧的数据不能发完,否则将不能监听到冲突了(csma/cd协议是边发边听、不发不听;因为如果帧发完,则不在监听,这个时候即使来了有冲突的信号,不在监听,也不知道已经冲突了),这样的话csma/cd协议可靠性也就大大折扣了;即:b/10m >= 51.2us;即512bit,64个字节; 4、帧间最小间隔:9.6us;相当于发送96bit;即在csdm/cd协议下,一个站点在监测到信道空闲后,需要等待9.6us才能发送数据;(主要目的是留给刚刚接收数据的站点清理接收缓存,做好接下一阵的准备----------流量控制其实也是) 上述所说的以太网帧是针对以太网ⅱ型帧进行的描述。帧格式如下:
那么,现在互联网中发送长度小于64字节的报文时如何传送呢?比如arp报文。有效长度如下: arp报文:4字节+4字节+6字节+4字节+6字节+4字节=28字节,远不够64字节。 事实上,在传送arp报文时,需要进行填充。
arp程序代码里,会增加一个填充程序,填充字段 18字节, 这样以太网数据部分=arp28字节+填充18字节=46字节。这样,dmac 6字节+s mac 6字节+ type 2字节+arp 46字节+fcs4字节=64字节。 从而保证了互联网上可以有效的传输小于64字节的报文。上述内容来源于网络,如有侵权,请联系我删除。网上有很多很多讨论为什么以太网帧最短帧为64字节的文章,大家可以自行百度。我们关注的问题是,如果不填充,而是强行传送小于64字节的报文呢?我们搭建了一个上板实验进行了验证。
实验环境
开发板:zedboard。 网络:双绞线接zedboard四端口扩展板1口和3口并形成回环。 eda工具:vivado2018.2、modelsim10.5。 真实硬件验证环境如下图(请忽略图中纸箱子等杂物):
回环结构
实验目的:为了验证,在实际链路中短于64字节的mac数据帧能否通过双绞线在phy层之间传输,以及mac核对于长度不符合要求的数据帧的处理情况。
事实上,在上图中,最短帧能否通过mac1对应的rj45网口发出来的前提是能否顺利的通过phy芯片,fpga芯片、phy芯片以及rj45接口的关系图如下:
phy与fpga之间的接口为rgmii接口。在fpga内部构建的长度小于64字节的以太网帧,通过fpga芯片与phy芯片之间的rgmii接口首先发给phy芯片,如果能够顺利的通过phy芯片,才能从rj45接口(mac1)通过双绞线发送给mac2的rj45接口,进而再经过mac2对应的rj45接口、phy芯片,最后送回到fpga芯片内部。如下图所示,左侧mac1采用自己写的超短帧产生和接收模块,右侧mac2采用opencores上的开源mac核。
数据流
step1:通过data_gen模块循环发送定长数据32’h12_34_56_78,通过8位数据端口传给ephy_source模块。
step2:ephy_source模块根据接收的数据,以及长度进行mac帧封装,并填写固定目的mac地址:48’h01_01_01_01_01_01以及源mac地址:48’h08_08_08_08_08_08之后依次按单字节发送数据域内数据,并进行crc计算。
step3:通过rgmii接口模块进行8位gmii接口数据到4位rgmii接口数据的转换后接到phy层。
step4:经双绞线传输后来到另一端的phy层,并依次经过phy层、rgmii转换送入mac处理。
step5:mac接收的数据,在去掉前导码、crc校验后,以32位宽的形式将数据部分发送给用户侧,这里直接将数据通过回环发送到mac2的用户发送数据端口,再次通过mac2的组帧、crc计算、8位gmii到4位rgmii的转换之后通过phy2的tx发送回phy1的接收端口。
超短帧长度设置为40字节。从mac1发出,经过phy1芯片,经过双绞线和mac2的phy2芯片,可以在mac2的rgmii接口处收到。
仿真及上板结果如下:
可以看到在数据帧长度不符合标准的时候,是没有办法通过mac2的mac核的,但是能够到达接收端的rgmii_rx部分。
经检查,发现开源ip核接收数据文件mac_rx_ctrl.v中对接收到的数据帧进行了长度判断,把不满足64字节的数据帧给过滤掉了。
通过寄存器可以配置ltu mtu大小,默认的ltu=64bytes mtu=1530bytes。
为了能接收到长度为40直接的数据帧,我们进行了如下修改:
ltu限制改为34, payload=34-4=30,由于接收控制的最小帧长信号是在寄存器组里配置,所以对需要在reg_init中更改。
修改完之后,在mac2处即能接收到40字节的以太网帧了。
数据流可以在mac2处回环了。但从mac2的发送口收到的数据帧长度被自动填充到64字节了。如下图中的打红叉处。
经检查,发现开源代码的发送模块部分会自动的填充补零。相关模块代码如下:
修改成支持传输40字节的超短帧,如下图:
修改过之后,超短帧数据即可形成回环。
上板抓取超短帧
mac1超短帧发送端
ephy_send侧的发送数据,对应抓取数据帧位置如下图。
注意:这里没有抓发送侧的rgmii_txd是因为他是oddr型的驱动,没有办法驱动寄存器,所以没法打拍抓信号,更不能直接抓,所以抓了转换前的8位数据。
mac2超短帧接收端
值得注意的是,这里的rgmii_rx是buf型的驱动,所以是可以抓的信号,并且还未进行4到8的转换,所以这里只有上升沿采到的高半字节偶数,而低半字节需要下降沿采样。抓取位置对应于下图中的箭头处。
结论
通过以上实验可知,超短帧是可以经过双绞线传输的,phy芯片不会对其进行过滤。但笔者没有对商用的交换机进行测试,也许会出现文中提到的mac那样,硬件芯片会自动补零到64字节了。

负离子空气净化器对人体有害吗_浅谈负离子发生器的副作用
Arm公司发布兼具存储和数据处理能力的Cortex-R82芯片
全球5G发展的趋势怎样
FORESEE “G”系列SSD再添主流平台互认证,聚焦国内PC市场
沃尔沃利用无人机作自动清洁机器人的眼睛
网络是否允许小于64字节的以太网帧或者报文传输?
小米6plus什么时候上市?小米6plus即将发布,小米5splus为让路已降至最低价
怎样在Indesign中创建简单徽标
谷景告诉你共模电感坏了有什么影响
工业物联网什么时候才能落地成真
香港将在未来几周内向六家运营商发放虚拟银行牌照,阿里腾讯在列
重磅消息:华为p10将迎来重大创新,你了解的有多少?
特斯拉第一季度交付18.48万辆新能源汽车 ModelS和ModelX产量降至零
中芯国际再获技术重大突破
LED倒装到底好不好?为什么要用倒装
中国已超美国成为AMD的最大市场
物联网混战谁会胜出
防爆高低温试验箱用途及注意事项
日本将使用AR技术 推出《马力欧卡丁车》娱乐项目
12月26日,华为将召开冬季发布会,展示旗下最强AR-HUD技术,敬请期待!