(探索千兆网)1. 认识以太网帧的整个结构

最近需要用FPGA控制以太网的芯片传输数据到PC上。既然要打通千兆网的通道而且不打算用IP核,于是需要开始查询一些资料。总算明白了以太帧的整个过程。
当你需要使用千兆网发送数据的时候,你需要先传输8字节的前导码,也就是7个字节的0xAA和1个字节的0xAB,但是因为网络协议规定,传输一个字节时LSB最先传输,所以在程序里,需要先发7个字节的0x55,再发1个字节的0xd5。然后就完成了以太网的数据同步和开始。
接下来就要开始二层MAC帧,里面的内容包括了发送目的地址的MAC地址,源地址的MAC地址以及IP类型,因为MAC帧里面除了IP协议以后,还有其他的比如ATM网络类型。所以这个地方的IP类型选择0x0800,为IPv4类型。
二层发完就需要发送三层的IP数据报首部,这个首部的内容就有点多了。以一个图片来代表,
图片来源网络
这里我们只选用最精简的IP数据报首部,其它的可选项都忽略不表。

  • 因为使用IPv4,版本号肯定是4;
  • 这里的头长度,以4个字节为一个单位,我们选用最精简的版本,所以这里为5;
  • 服务类型默认为0;
  • 总长度以1个字节为一个单位,所以这个长度需要将UDP数据包长度加上4倍的IP包头长度;
  • 标识是每个数据包的计数器,当然发送一个包后,这个计数器就加1;
  • 标志位起到的作用是标志数据包是否有分片,如果有分片该包是否是这个分片的最后一包;
  • 片偏移就是在启用分片的时候标记出,这个数据包在整个数据中的位置;
  • 生存时间是这个数据包能够经过的最大路由器数,当它经过一个路由器转发,这个生存时间就会减1,减到0就会丢弃这个数据包,也就是代表这个数据包找不到它的下家了;
  • 上层协议标识,也就是IP数据包封装的里面的数据包的类型,我们选用相对简单的UDP协议,所以这个地方的值为17;
  • 头部检验和,这个检验和必须按照规则来说,否则接收方会认为这个数据包已经损坏了,它的运算规则可以从网上的资料查到,操作并不麻烦;
  • 接下来就要我们发送方的地址——源IP地址,这样让接收方收到我们的来信可以给我们回信;
    然后就是接收这个数据包的收件人的地址——目的IP地址;

至此,我们的IP数据包首部已经设置结束。

接下来就进入了UDP数据包首部,相对来说,UDP数据包的首部就非常简单,跟MAC帧一样简单。
图片来源网络

  • 它的首部,2个字节的源地址端口,2个字节的目的端口,也就像门牌号一样,即使给你小区的名字,还需要给你一个几期几单元几栋才能找得到人;
  • 接下来就是数据长度,这里的数据长度不是指你要发送的数据长度,而是你要发送的数据长度加上UDP数据包的长度,所以这里的长度等于你要发的数据的长度(1个字节为1个单位)加上8,单位也是1个字节;
  • 最后的检验和可以设置为0,这里设为0不会影响数据的传输;

然后你就可以愉快的发送数据,发送完了之后就可以发送4个字节的CRC校验值。至此整个数据传输结束。
所以到了这里,整个以太网协议的传输过程已经大致了解,接下来就要开始进入写Verilog的阶段。在下一个阶段里,写Verilog也不算太麻烦,但是在时序上碰到的问题却真实存在的困扰了我许久,可能到现在还有部分问题没有很好地解决方法,待我之后整理出来,再和大家进行讨论。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值