0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

网络中发送长度小于64字节的报文时如何传送

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-10-17 17:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

电磁波在双绞线上传输的速度为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才能发送数据;(主要目的是留给刚刚接收数据的站点清理接收缓存,做好接下一阵的准备----------流量控制其实也是) 上述所说的以太网帧是针对以太网Ⅱ型帧进行的描述。帧格式如下:

9486e7d8-4c25-11ed-a3b6-dac502259ad0.png

那么,现在互联网中发送长度小于64字节的报文时如何传送呢?比如ARP报文。有效长度如下: ARP报文:4字节+4字节+6字节+4字节+6字节+4字节=28字节,远不够64字节。 事实上,在传送ARP报文时,需要进行填充。

948dd516-4c25-11ed-a3b6-dac502259ad0.png

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。 真实硬件验证环境如下图(请忽略图中纸箱子等杂物):

949aae94-4c25-11ed-a3b6-dac502259ad0.png

回环结构

实验目的:为了验证,在实际链路中短于64字节的mac数据帧能否通过双绞线在phy层之间传输,以及mac核对于长度不符合要求的数据帧的处理情况。

事实上,在上图中,最短帧能否通过MAC1对应的RJ45网口发出来的前提是能否顺利的通过PHY芯片,FPGA芯片、PHY芯片以及RJ45接口的关系图如下:

94b5c68e-4c25-11ed-a3b6-dac502259ad0.png

PHY与FPGA之间的接口为RGMII接口。在FPGA内部构建的长度小于64字节的以太网帧,通过FPGA芯片与PHY芯片之间的RGMII接口首先发给PHY芯片,如果能够顺利的通过PHY芯片,才能从RJ45接口(MAC1)通过双绞线发送给MAC2的RJ45接口,进而再经过MAC2对应的RJ45接口、PHY芯片,最后送回到FPGA芯片内部。如下图所示,左侧MAC1采用自己写的超短帧产生和接收模块,右侧MAC2采用Opencores上的开源MAC核。

94bdfc00-4c25-11ed-a3b6-dac502259ad0.png

数据流

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接口处收到。

94c5573e-4c25-11ed-a3b6-dac502259ad0.png

仿真及上板结果如下:

94d468d2-4c25-11ed-a3b6-dac502259ad0.png

可以看到在数据帧长度不符合标准的时候,是没有办法通过MAC2的mac核的,但是能够到达接收端的rgmii_rx部分。

经检查,发现开源IP核接收数据文件mac_rx_ctrl.v中对接收到的数据帧进行了长度判断,把不满足64字节的数据帧给过滤掉了。

94e3bef4-4c25-11ed-a3b6-dac502259ad0.png

通过寄存器可以配置LTU MTU大小,默认的LTU=64bytes MTU=1530bytes。

950a3624-4c25-11ed-a3b6-dac502259ad0.png

为了能接收到长度为40直接的数据帧,我们进行了如下修改:

9515d7b8-4c25-11ed-a3b6-dac502259ad0.png

LTU限制改为34, payload=34-4=30,由于接收控制的最小帧长信号是在寄存器组里配置,所以对需要在reg_init中更改。

修改完之后,在MAC2处即能接收到40字节的以太网帧了。

95286b6c-4c25-11ed-a3b6-dac502259ad0.png

数据流可以在MAC2处回环了。但从MAC2的发送口收到的数据帧长度被自动填充到64字节了。如下图中的打红叉处。

95332868-4c25-11ed-a3b6-dac502259ad0.png

经检查,发现开源代码的发送模块部分会自动的填充补零。相关模块代码如下:

953b3c6a-4c25-11ed-a3b6-dac502259ad0.png

修改成支持传输40字节的超短帧,如下图:

954cf55e-4c25-11ed-a3b6-dac502259ad0.png

修改过之后,超短帧数据即可形成回环。

955e7e1e-4c25-11ed-a3b6-dac502259ad0.png

上板抓取超短帧

MAC1超短帧发送端

9586e174-4c25-11ed-a3b6-dac502259ad0.png

ephy_send侧的发送数据,对应抓取数据帧位置如下图。

95ac2e3e-4c25-11ed-a3b6-dac502259ad0.png

注意:这里没有抓发送侧的rgmii_txd是因为他是oddr型的驱动,没有办法驱动寄存器,所以没法打拍抓信号,更不能直接抓,所以抓了转换前的8位数据。

MAC2超短帧接收端

95b22884-4c25-11ed-a3b6-dac502259ad0.png

值得注意的是,这里的rgmii_rx是buf型的驱动,所以是可以抓的信号,并且还未进行4到8的转换,所以这里只有上升沿采到的高半字节偶数,而低半字节需要下降沿采样。抓取位置对应于下图中的箭头处。

95b855ba-4c25-11ed-a3b6-dac502259ad0.png

结论

通过以上实验可知,超短帧是可以经过双绞线传输的,PHY芯片不会对其进行过滤。但没有对商用的交换机进行测试,也许会出现文中提到的MAC那样,硬件芯片会自动补零到64字节了。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    41

    文章

    5923

    浏览量

    179511
  • 电磁波
    +关注

    关注

    21

    文章

    1498

    浏览量

    55388

原文标题:【实测】网络中可以传小于64字节的数据包吗?

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TC334 uart dma发送数据时,只能发送17个字节,怎么解决?

    具体情况:配置串口发送,具体配置情况如下,对于17字节内的数据包能够正常发送,大于17字节的数据包只能发送前17
    发表于 08-04 07:18

    如何使用20829 can-fd发送64字节扩展标识符数据帧?

    numberOfFIFOElements更改为16。 使用两个20829 EVK进行测试,最大传输数据大小为15个字节。DLC范围是0~15 uint32数据,但实际上,另一个节点每帧最多只能接收15个字节。 如何确保它们能够发送
    发表于 08-04 06:56

    USB3014遇到写入字节限制,当写入数据的长度为1024字节或其整数倍时,无法完成写入操作怎么解决?

    ,USB3014 会自动将数据写入 FIFO 并将完整数据包发送至 USB 主机。若要发送的数据不足满包,则需在写入最后一个字节时断言 PKTEND# 信号,以便告知 USB3014 数据包已完成,剩余数据应
    发表于 07-28 08:28

    LC87F0K08A 8位微控制器8K字节闪存ROM/384字节RAM规格书

    电子发烧友网站提供《LC87F0K08A 8位微控制器8K字节闪存ROM/384字节RAM规格书.pdf》资料免费下载
    发表于 07-17 15:33 0次下载

    usb3014不能写入1024字节的原因?

    Hi,各位专家你们好! 在调试usb3014的时候,遇到了一个问题,FPGA不能写入1024字节的数据(或者1024字节的整数倍数据)到FX3,(我设置DMA buffer大小是1024),按理说
    发表于 07-16 06:52

    下位机CY7C68013A发送数据,上位机C#读取数据,510字节一帧,会丢帧或者帧内错位是怎么回事?

    下位机CY7C68013A发送数据,上位机C#在1个while循环内不断地读取数据,510字节1帧,1秒333帧、1秒667帧、1秒1333帧,会整帧丢帧或者帧内丢部分字节导致错位(帧头不在开始的位置),这个怎么回事?
    发表于 05-30 07:43

    使用CyU3PDmaChannelCommitBuffer提交超过1024字节数据时usb包异常大怎么解决?

    。 当我commit 52字节的Leader数据和1022字节的数据时包的大小是正常的。 但是一旦我把commit的字节增加到1024,数据包的大小就大了很多倍 请问我应该如何定位我的问题?
    发表于 05-13 06:11

    如何将小于1024字节的缓冲区从FPGA发送到PC?

    的 PC 请求读取时出现错误,然后我尝试从 FPGA 连续发送到 PC。 最后,我意识到 PC(主机)只能读取 1024 个字节。 非常糟糕,如何将小于1024字节的缓冲区从FPGA
    发表于 05-09 08:18

    如何使用PN7制作具有5180字节UID的身份验证mifare plus?

    我正在开发的读卡器使用 PN5180。 我想读取 7 字节 UID 的 Mifare Plus ev1 卡 但 PN5180数据表仅解释了4字节 UID 卡。 如何使用 PN7 制作具有 5180 字节 UID 的身份验证 mi
    发表于 04-01 06:37

    FreeRTOS进阶使用之流缓冲区:高效处理字节流的秘密武器

    据传输): StreamBufferHandle_t sb = xStreamBufferCreate(1024, 5);// 创建缓冲区(1KB,触发阈值为5字节) char data[] = \"Hello, World
    发表于 03-24 11:37

    FM24C64 64KB的串行存储器中文手册

    AT24C64是一款串行电可擦除编程只读存储器 (EEPROM),存储容量为8192字节,分为256页,每页32字节。 具有低功耗CMOS技术,自定时编程周期,支持SOP-8和DIP-8封装。 适用于智能仪器仪表、笔记本电脑、计
    发表于 02-28 15:48 3次下载

    DS1338 I2C RTC,带有56字节NV RAM技术手册

    DS1338串行实时时钟(RTC)是低功耗、全二进制编码的十进制(BCD)时钟/日历,外加56字节NV SRAM。地址与数据通过I²C总线串行传送。时钟/日历可以提供秒、分、时、日、月、年信息。对于
    的头像 发表于 02-26 17:29 855次阅读
    DS1338 I2C RTC,带有56<b class='flag-5'>字节</b>NV RAM技术手册

    信而泰网络测试仪校准解决方案

    端口设置端口速率1Gbps,发送64Byte字节长度报文,帧头触发器检测到以太网信号中帧头速率,即产生对应速率的计数脉冲,脉冲信号通过BNC
    发表于 01-13 15:29

    百问MQTT协议分析 - 报文分析①

    16.3 报文分析 16.3.1 CONNECT-连接服务端 ​客户端到服务端的网络连接建立(完成三次握手)后,客户端发送给服务端的第一个报文必须是 CONNECT
    发表于 12-13 09:41

    百问MQTT协议分析 - MQTT简述及协议报文格式组成

    )1字节固定报头,2字节心跳报文报文结构紧凑 e)消息QoS支持,可靠传输保证 16.1.3 应用 ​MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。 a
    发表于 12-13 09:29