0,前置
在实现万兆以太网之前,已经实现了千兆以太网。现在回顾一下以太网的协议规范,为后续开发做准备。
万兆以太网与千兆以太网使用相同的协议,知识万兆以太网使用GT高速接口,基于64/66编码实现。首先需要进行高速接口的学习与开发。
1,以太网协议。
1.1,整体协议
- 前导码 :d5_55_55_55_55_55_55_55;
- 目的MAC:目的设备的mac地址;
- 源头MAC:源端设备的mac地址;
- 类型 :ARP:0806;IP:0800;RARP:8035;
- 数据 :46-1500字节,不足需要补足46字节;
- FCS :帧尾,帧校验序列,采用32为CRC校验。
1.2,UDP协议
1.2.1,ARP协议
帧类型: ARP 帧类型为两字节 0806;
硬件类型:指链路层网络类型, 1 为以太网;
协议类型:指要转换的地址类型,采用 0x0800 IP 类型,之后的硬件地址长度和协议地址长度分别对应 6 和 4;
OP 字段中 1 表示 ARP 请求, 2 表示 ARP 应答
例如:
|ff ff ff ff ff ff|00 0a 35 01 fe c0|08 06|00 01|08 00|06|04|00 01|00 0a 35 01 fe c0|c0 a8 00 02| ff ff ff ff ff ff|c0 a8 00 03|
表示向 192.168.0.3 地址发送 ARP 请求。
|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 ab c1 a2 d5 15|c0 a8 00 03|00 0a 35 01 fe c0|c0 a8 00 02|
表示向 192.168.0.2 地址发送 ARP 应答。
1.2.2,IP协议
版本:占 4 位,ipv4(0100),ipv6(0110);
首部长度:占 4 位;表示一共有多少个32bit(4字节),无可选字段时固定为5;
区分服务:占 8 位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过 1998 年这个字段改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用这个字段;设置为0;
总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535字节总长度必须不超过最大传送单元 MTU(最大传输负载)。数据长度等于总长度-20(IP首部)
标识:占 16 位,它是一个计数器,用来产生数据报的标识;
标志(flag):占 3 位,第一位保留,第二位(1是不分片,0是分片),第三位是否有更多的分片;
片偏移:占 13 位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位;
生存时间:占 8 位,记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit 字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255;
协议:占 8 位,指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程, 1 表示为 ICMP 协议, 2 表示为 IGMP 协议, 6 表示为 TCP 协议, 17表示为 UDP 协议;
首部检验和:占 16 位,只检验数据报的首部不检验数据部分,采用二进制反码求和,即将16 位数据相加后,再将进位与低 16 位相加,直到进位为 0,最后将 16 位取反;
源地址:自身IP地址;
目的地址:接收方IP地址;
1.2.3,UDP层
源端口号:自身的端口号;
目的端口号:接受方的端口号;
UDP长度:UDP首部+数据的长度;
UDP校验和:与IP校验和算法一致;
1.2.3,ICMP协议
type&&code
在FPGA中我们只做 00 (ping回应),80(ping请求)。
在ping功能,如下:
下面是使用wireshark抓取ICMP去ping百度的网页: