1. 以太网简介
- 水晶头的规格就是RJ45
- 千兆网一般指的就是UDP千兆网
- PHY芯片是用来协商用的 协商匹配最低的通信速率
1.1. OSI模型
- 7层
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image-2.png&pos_id=img-SeubNYVv-1720108026560)
1.2. 几种接口
- FPGA配置PHY芯片的接口 MDIO
- 数据交换相关的接口 MII-RMII-GMII(千兆)-RGMII(千兆)
- MII(Medium Independent Interface,媒体独立接口): MII 支持 10Mbps 和 100Mbps 的操作,数据位宽为 4 位,在 100Mbps 传输速率下,时钟频率为 25Mhz。
- RMII(Reduced MII): RMII 是 MII 的简化版, 数据位宽为 2 位,在 100Mbps 传输速率下,时钟频率为 50Mhz。
- GMII(Gigabit MII): GMII 接口向下兼容 MII 接口, 支持 10Mbps、 100Mbps 和 1000Mbps 的操作,数
- 据位宽为 8 位,在 1000Mbps 传输速率下,时钟频率为 125Mhz。RGMII(Reduced GMII): RGMII 是 GMII 的简化版,数据位宽为 4 位,在 1000Mbps 传输速率下,时钟频率为 125Mhz,在时钟的上下沿同时采样数据。 在 100Mbps 和 10Mbps 通信速率下,为单个时钟沿采样。
- 常用的接口为RGMII和GMII接口。**RGMII接口的优势是同时适用于10M/100M/1000Mbps 通信速率,同时占用的引脚数较少。**但 RGMII 接口也有其缺点,就是在 PCB 布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。
- GMII接口介绍
时钟等于125M的时候 125M*8bit=1000Mbps 实现了千兆网
时钟等于25M的时候 12.5M*8bit=100Mbps 实现了百兆网
通过设置不同的时钟频率来设置不同的传输速率
- RGMII接口介绍
- 有延迟模式和非延迟模式,用的更多的是延迟模式,一般PHY芯片默认配置为延时模式
- 所谓的非延时模式其实就是在时钟的跳变沿传输上一时刻的数据值,延时模式就是在是时钟的跳变沿的此刻传输数据(类似于I2S)
- RGMII与GMII不同的是,RGMII在时钟的上升沿和时钟的下降沿都传输数据,但是GMII只在时钟的上升沿进行数据的传输
- RGMII是后来发展而来的,节省了数据线
RGMII 发送端口在 TXC 时钟的上升沿传输 TXD 的低 4 位和 TX_CTL 的使能信号;下降沿传输 TXD 的高 4 位和 TX_CTL 的错误信号(实际上是使能信号和错误信号的异或值);RGMII 接收端口在 RXC 时钟的上升沿传输 RXD 的低 4 位和 RX_CTL 的使能信号;下降沿传输 RXD 的高4 位和 RX_CTL 的错误信号(实际上是使能信号和错误信号的异或值)
1.3. 数据包介绍
数据包又叫做MAC数据包,存在于PHY芯片和外设(FPGA或者PC等)中
-
红色的是前导码,绿色的是MAC层的有效数据,灰色的是校验码
-
前导码(7Byte,默认为8’h55)+ SFD(1Byte,默认为8’hd5)一般作为帧头,目的MAC地址(6Byte)+源AMC地址(6Byte)+类型/长度(2Byte,小于1536表示长度,大于1536表示类型 ARP:16’h0806 ip:16’0800)
-
MAC数据中 IP头部/首部(20Byte)
- 版本 + 首部长度 1byte,版本ipv4 : 4’h4 ,首部长度 : 4’h5
- 服务类型 1byte,一般为8’h0
- 总长度 2byte,ip首部长度 + ip数据包长度
- 标识 2byte,复位给0,发完一包数据自加1
- 标记 + 分段偏移 2byte,标记:3bit。最高位保留为0;中间位是否开启分段,0不开启,1开启;最低位表示是否存在下一个分段,0表示为最后一个分段,1表示还存在下一个分段。一般默认为3’b010,分段偏移:表示第0段,第1段…
- 生存时间 1byte,表示以太网数据包可以中转进过多少个路由器,每进过一个路由器,改值就会减少1,直到该值变成0,丢包该包。,win系统默认为8‘h80
- 协议 1byte,udp : 8’d17 ,tcp : 8’d6, icmp : 8’d1
- 首部校验和 2byte
- 源ip地址 4byte
- 目的ip地址 4byte
- 说明:MAC数据包的长度不能超过1526
1.4. UDP首部校验和、IP首部校验和计算方法
- 将校验和字段b5 2e置为00 00
- 以两个字节为单位,数据反码求和
- 将进位(3)加到低16位上
- 将上一步的数据取反
1.5. 软件的使用-网络调试助手&Wireshark
- ping是ICMP其中的一个功能
ping的功能就是通过数据的回环,检查网络的连接情况 - ARP
基本功能:知道目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
ARP表 静态绑定MAC地址
2. 实验1-ARP
-
ARP协议介绍
- ARP(Address Resolution Protocol),即地址解析协议,是根据IP地址(逻辑地址)获取MAC地址的一种 TCP/IP 协议。32位的IP地址对应48位的MAC地址
- ARP 协议分为 ARP 请求和 ARP 应答
- ARP 协议位于以太网MAC帧格式的数据段, ARP数据包格式如下图所示:
28 字节的 ARP 数据位于以太网帧格式的数据段。由于以太网数据段最少为46个字节,而 ARP数据包总长度为28个字节,因此在ARP数据段后面需要填充 18 个字节的数据,以满足以太网传输格式的要求。这个填充的过程称为 Padding(填充),填充的数据可以为任意值,但一般为0
-
ARP广播过程
-
ARP请求时,携带发送方的IP地址和MAC地以及目标的IP地址,目标的MAC地址是48位的1,因为要进行广播发送,下面是ARP广播的示意图
-
只有验证成功的主机才能返回一个ARP应答报文(包含了接收方的IP地址和MAC地址)
-
发送方接收到报文,更新自己的ARP缓存表
-
-
以太网的帧格式
ARP协议(在MAC层)通过以太网传输,下面介绍以太网的帧格式,以太网的通信是以数据包的形式传输的
上图中长度/类型比较重要,当这两个字节的数据小于1536的时候 代表数据段的长度,大于1536代表数据属于哪个上层协议 例如0x0800代表IP协议(网际协议) 0x0806代表ARP协议(地址解析协议)
数据的长度最小46个字节,最大1500个字节,最大值1500称为以太网的最大传输单元(MTU)
FCS(Frame Check Sequence),为了确保数据的正确传输 应用最广泛的是CRC-32标准
IFG(Interpacket Gap)帧间隙,IFG 的最小值是96 bit的时间,在不同的媒介中IFG的最小值是不一样的
- ARP和以太网MAC层的关系
TCP(传输控制协议)/IP(网际协议)协议簇。它包括上百个各种功能的协议,如TCP、 IP、ARP、 UDP 等。而其中的TCP和IP协议是保证数据完整传输的两个重要协议,因此TCP/IP协议用来表示Internet协议簇。
TCP/IP协议不仅可以运行在以太网上,还可以运行在FDDI(光纤分布式数据接口)和WLAN(无线局域网)上,反过来,以太网的高层协议不仅可以是TCP/IP协议,还可以是IPX(互联网分组交换)协议。只不过以太网+TCP/IP成为IT行业中应用最普遍的技术。
- ARP实验
上面是FPGA发送给PC的ARP请求,下面是PC向FPGA开发板发送的数据,通过这样的过程,使通信的双方构建起了ARP的通信
3. 实验2-ICMP
3.1. ICMP协议介绍
- ICMP(Internet Control Message Protocol) Internet 控制报文协议。它是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、 路由器之间传递控制消息。
- ping和tracert(显示到达目的主机的路径)都利用ICMP协议来实现网络功能。ICMP就是一个“错误侦测与回报机制”,目的是让我们能够检测网络的连接状况,确保网络连接的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件
- 主要功能有:
- 侦测远端主机是否存在
- 建立与维护路由资料
- 重导资料传送路径(ICMP重定向)
- 资料流量控制
3.2. IP协议介绍
IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP协议的载体,IP协议规定了数据传输时的基本单元和格式
所有的TCP UDP ICMP数据都以IP数据报格式传输,IP数据报的格式如图所示
第二行的标识|标志|片偏移都是和数据包分组发送相关的
第三行的协议:表示数据报所携带上层数据使用的协议类型 ICMP为1 TCP为6 UDP为17;首部校验和:校验IP数据报头部是都被破坏,篡改和修改等
3.3. ICMP协议
3.4. 协议介绍
IP头部就在ICMP报文的前面(ICMP的首部在IP层的数据段),一个ICMP报文包括IP头部,ICMP头部和ICMP报文,IP头部的Protocol为1说明这是一个ICMP报文,ICMP头部的类型(Type)用于说明ICMP报文的作用与格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有的数据都在ICMP头部的后面
3.5. 一帧ICMP报文
-
ICMP首部一共8个字节,同IP首部一样,也是一行以32位(4个字节)为单位
-
类型和代码表示的含义
类型/代码 含义 类型 0,代码 0 表示回显应答(ping 应答) 类型 8,代码 0 表示回显请求(ping 请求) 类型 11,代码 0 超时 类型 3,代码 0 网络不可达 类型 3,代码 1 主机不可达 类型 5,代码 0 重定向 -
标识符(Identifier):占用了 16 bit 位,对于每一个发送的数据报进行标识。
-
序列号(Sequence number):占用了16bit位,对于发送的每一个数据报文进行编号,比如:发送的第一个数据报序列号为 1,第二个序列号为2。
4. 实验3-UDP
4.1. UDP回环系统框图
4.2. UDP回环程序编写
先把从PHY芯片接收到的双边沿的RGMII信号转为单边沿的GMII信号
4.3. demo的调用
- 步骤
- 前提:程序正常烧录到FPGA,网口线接好
- 在win进行ARP地址的映射(这个比较关键)
- 查看ARP缓存:在命令提示符中输入arp -a,就可以列出所有ARP缓存的条目。
- 添加ARP条目:在命令提示符中输入arp -s <IP地址> <MAC地址>,就可以将一个2新的IP和MAC的映射关系添加到ARP缓存中。
- 删除ARP条目:在命令提示符中输入arp -d <IP地址>,就可以将指定的映射关系从ARP缓存中删除。
- 在网络调试助手输入正确的远程主机的IP和端口号