目录
一、OSI 七层模型
OSI(Open System Interconnection)七层模型是一个网络通信协议的标准化框架,它将计算机网络通信划分为七个层次,每一层负责不同的功能,从物理连接到应用程序的处理。这种模型有助于不同系统间的通信,更好地理解和管理网络通信的过程。对于FPGA数据传输来说,主要关注传输层、网络层、数据链路层、物理层,这四个层,所以本文会着重介绍这四个层的通信。
OSI七层模型的功能
- 物理层:负责在物理媒介上传输原始比特流,定义了连接主机的硬件设备和传输媒介的规范。
- 数据链路层:提供点对点的数据传输服务,负责将原始比特流转换为数据帧,并检测和纠正传输中出现的错误。
- 网络层:负责数据包的路由和转发,以及网络中的寻址和拥塞控制。
- 传输层:为应用程序提供端到端的数据传输服务,负责数据的分段、传输控制、错误恢复和流量控制。
- 会话层:管理应用程序之间的通信会话,负责建立、维护和终止会话。
- 表示层:负责数据的格式化、加密和压缩,以确保数据在不同系统之间的交换是有效的和安全的。
- 应用层:提供用户接口和应用程序之间的通信服务,用户可以访问各种网络应用程序。
二、TCP/IP 协议簇
TCP/IP 协议簇(Transmission Control Protocol / Internet Protocol suite)是一组用于计算机网络通信的协议。它是现代互联网和局域网中广泛使用的基础协议簇,提供了从应用层到物理层的网络通信功能。TCP/IP 协议族包括了很多协议,每个协议负责网络通信的不同方面,下面是主要的协议及其作用,本文重点介绍IP、ARP、UDP、ICMP 通信协议。
- 应用层:HTTP、FTP、SMTP、DNS 等。
- 传输层:TCP、UDP。
- 网络层:IP、ICMP、ARP。
- 数据链路层:Ethernet、Wi-Fi、PPP。
- 物理层:Ethernet(物理媒体)、Wi-Fi(无线传输)等。
三、以太网介绍
以太网是指实现将几个电脑连接进行通信,他不是指一种网络,而是一个技术规范。其主要特点为低成本、通信速率高、抗干扰强,以太网按照不同传输速率分类如下:
- 标准以太网:10Mbit/s
- 快速以太网:100Mbit/s
- 千兆以太网:1000Mbit/s
- 万兆以太网:10Gbit/s
以太网帧格式
以太网链路上的数据包称作以太帧,常见的以太网帧格式有Ethernet Ⅱ、Ethernet802.3等,本文主要介绍Ethernet Ⅱ。以太网帧格式如下图所示:其中,以太网数据段包含其他层的通信协议,即对用户数据进行逐层封装
字段名称 | 字段长度 | 说明 |
前导码 | 7 Byte | 0x55555555555555:固定值 7 个 0x55 |
界定符 | 1 Byte | 0x05 |
目的 MAC 地址 | 6 Byte | 接收端物理地址 |
源 MAC 地址 | 6 Byte | 发送端物理地址 |
长度/类型 | 2 Byte | 当数值大于 16'h0600 的时候,表示以太网的类型,反之表示以太网的长度 类型举例: 0x0800:网际协议(IP) 0x0806:地址解析协议(ARP) |
数据 | 46~1500 Byte | 对用户数据逐层封装之后的数据,不满 46 Byte 剩余部分填充 0 |
CRC-32 校验 | 4 Byte | CRC-32 校验 |
以太网帧间隙
帧间隙(lFG, Interpacket Gap)的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,通信速率越高,帧间隔的时间越短,IFG的最小值是 96 bit time。
- 10Mbit/最小时间为:96 * 100ns = 9600ns
- 100Mbit/最小时间为:96 * 1ns = 960ns
- 1000Mbit/最小时间为:96 * 1ns = 96ns
四、物理层介绍
RJ45 接口说明
十兆网和百兆网引脚说明: 在十兆网和百兆网的 RJ45 只用到了 Pin 1、Pin 2、Pin 3、Pin 6 的引脚,通过差分信号的方式进行传输通信。
引脚编号 | 引脚名称 | 功能说明 | 线序颜色 |
Pin 1 | TX+ | 发送数据+ | 橙白 |
Pin 2 | TX- | 发送数据- | 橙 |
Pin 3 | RX+ | 接收数据+ | 绿白 |
Pin 4 | NC | 未使用 | 蓝 |
Pin 5 | NC | 未使用 | 蓝白 |
Pin 6 | RX- | 发送数据- | 绿 |
Pin 7 | NC | 未使用 | 棕白 |
Pin 8 | NC | 未使用 | 棕 |
千兆网引脚说明: 在千兆网的 RJ45 只用到了所有的引脚,通过差分信号的方式进行传输通信。
引脚编号 | 引脚名称 | 功能说明 | 线序颜色 |
Pin 1 | MDI0+ | 双向数据Data0+ | 橙白 |
Pin 2 | MDI0- | 双向数据Data0- | 橙 |
Pin 3 | MDI1+ | 双向数据Data1+ | 绿白 |
Pin 4 | MDI2+ | 双向数据Data2+ | 蓝 |
Pin 5 | MDI2- | 双向数据Data2- | 蓝白 |
Pin 6 | MDI1- | 双向数据Data1- | 绿 |
Pin 7 | MDI3+ | 双向数据Data3+ | 棕白 |
Pin 8 | MDI3- | 双向数据Data3- | 棕 |
PYH 芯片接口介绍
PYH 芯片与我们设备进行连接,包括两种接口,一个是通信接口, RGMII 接口,主要 W 用来传输以太网数据帧,另一个是配置接口, MDIO 接口,用于配置 PYH 芯片的功能, 以太网PHY芯片是物理层芯片用于信号转换(类似CAN、RS485芯片),连接示意图如下。
通信接口:RGMII 接口
RGMII(Reduced Gigabit Media Independent Interface)接口负责通信设备与 PHY 芯片之间的连接,时常用的千兆网通信接口,采用 4 个数据线进行通信,工作时钟为 125MHz,在上升沿和下降沿都可以进行数据传输,因此,传输速率可达 1000Mbps。常用的接口还有百兆网 MII、RMII,千兆网 GMII 等,本文主要介绍 RGMII,RGMII 接口连接示意图如下。
引脚名称 | 功能说明 |
RXC | 接收时钟线
|
RXCTL | 控制接收有效 |
RXD[3:0] | 接收数据线 |
TXC | 发送时钟线
|
TXCTL | 控制发送有效 |
RXD[3:0] | 发送数据线 |
RST_N | 复位 |
RGMII 接口时序
接收数据时序图如下图所示,RX_CLK 为 125MHz 时钟,双边沿采样,在时钟的上升沿采集 RXD 的低 4 位,时钟的下降沿采集 RXD 的高 4 位,这样一个时钟周期可以采集 8 位数据,RX_CTRL 表示接收有效信号与接收错误信号的异或值,在正常传输中,RX_CTRL 一直为高电平
发送数据时序如下图所示,原理与接收数据时序相同
配置接口:MDIO接口
PYH 芯片有一个配置接口,即 MDIO(Management Data Input/Output) 接口,用于以置 PHY 芯片的工作模式以及获取 PHY 芯片的若干状态信息,例如配置通信速率等,MDIO 接口连接示意图如下。
引脚名称 | 功能说明 |
MDC | 管理数据时钟 |
MDIO | 管理数据 |
MDIO接口时序
MDIO 接口的读写时序如下图所示,用该接口配置PHY芯片工作模式以及获PHY芯片的若干信息(类似IIC配置)
MDIO 接口传输数据格式
字段名称 | 字段长度 | 说明 |
前导码 | 32 Bit | 32'hFFFFFFFF |
帧开始 | 2 Bit | 2'b01 |
操作码 | 2 Bit | 2'b10:读 PHY 芯片 2'b01:写 PHY 芯片 |
PHY地址 | 3 Bit | 可以最多支持8个 PHY 地址 |
寄存器地址 | 5 Bit | 最多有 32 个寄存器地址来配置PHY芯片 |
TA | 2 Bit | 2'bz0: 读取 PHY 芯片,最后一位会被 PHY 芯片拉低,相当于应答信号,用于避免读传输的时候发生冲突,留出时间间隔,给MDIO切换数据传输方向,之后读取数据,Z是高阻态。 2'b10:写 PHY 芯片 |
数据 | 16 Bit | 读写数据 |
IDLE(1bit) | 1 Bit | 空闲状态下会被PHY芯片拉为高电平 |
五、网络层协议介绍
IP 协议
IP(Internet Protocol),即 网际协议,是计算机网络中一种负责数据包传输和寻址的核心协议。它是 TCP/IP 协议簇 中的一个关键协议,主要用于数据在网络中从源设备到目的设备的路由与传输。IP 协议规定了数据传输时基本单元和格式,在网络层工作。
IP 数据报格式
IP 数据报头部内容
字段名称 | 字段长度 | 说明 |
版本 | 4 Bit |
|
首部长度 | 4 Bit | 单位:4 Byte 4'd0101(4'd5):无可选字段,首部长度共 20 Byte |
服务类型 | 8 Bit | 一般为 8'd0 |
总长度 | 16 Bit | 单位:Byte 表示 IP 首部和数据部分总共有多少字节(实际传输基本 1000 Byte 左右) |
标识符 | 16 Bit | 用于标识数据包,每发送一次数据包,数值会加一
|
标志 | 3 Bit | 对数据包进行分片,例如需要传输 10000 Byte 的数据,受到以太网帧格式的限制最大只能传输 1500 Byte 的数据,那么就要对传输的数据进行分片, Bit2:保留位,固定值 0;Bit1:0 表示需要分片,1 表示不需要分片;Bit0:只有在分片的情况下才有含义,0 表示当前数据是最后一个分片,1 表示当前数据不是最后一个分片
|
片偏移 | 13 Bit | 分片的时候才有意义,表示当前的数据包在整个数据包的哪个位置,方便后续解析的时候进行拼接 |
生存时间 | 8 Bit | 一般是 8'd64 或者 8'd128,防止数据包被无休止的转发,数据包每次经过路由器生存时间就会减一,在路由器中转发的次数等于生存时间的时候,路由器就会丢掉当前的数据包 |
协议 | 8 Bit | 数据部分中的协议类型,下面列举部分协议对应的编号
|
头部校验和 | 16 Bit | 对首部数据进行校验 |
源IP地址 | 32 Bit | 发送端 IP 地址,例如:0xC0A8017B(192.168.1.123) |
目的IP地址 | 32 Bit | 接收端 IP 地址,例如:0xC0A80166(192.168.1.102) |
可选字段 | 32 Bit | 可以有可以没有 |
IP 首部校验和计算方法
- 将 16 位检验和字段置为0,然后将IP首部按照 16 位分成多个单元
- 对各个单元采用加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位)
- 此时仍然可能出现进位的情况,将得到的和再次分成高 16 位和低 16 位进行累加
- 最后将得到的和的反码填入校验和字段。
举例如下:
- 0x4500 + 0x0032 + 0x0000 + 0x4000 + 0x4011 + 0x0000(计算时校验和置 0)+ 0xc0a8 + 0x017b + 0xc0a8 + 0x0166 = 0x24974
- 0x0002 + 0x4974 = 0x4976(低 16 位再与高 16 位的数字相加,也就是低 16 位加上进位)
- 0x0000 + 0x4976 = 0x4976(上一步没有进位,所以加上 0x0000)
- checkSum = ~0x4976 = 0xb689(按位取反)
IP 数据报数据部分内容
IP 数据报在以太网中传输格式如下图所示。其中, IP 数据包数据部分内容,取决于头部数据中的协议编号,如果是 8'd17 表示数据部分的内容是 UDP 协议的格式,其他TCP、ICMP等协议同理,在 UDP、ICMP 协议的章节会具体介绍 IP 数据报数据部分的内容。
ARP 协议
ARP (Address Resolution Protocol),即 地址解析协议,根据对端设备的IP地址来获取对端设备的MAC地址(物理地址)。
ARP 数据格式
ARP 协议进行请求/应答传输的数据一共有 28 字节,具体数据格式如下:
ARP 协议工作过程
- 设备 A 创建 ARP 请求,并广播到网络上。
- 网络中的所有设备都收到该请求,但只有 设备 B 发现自己的 IP 地址与请求中的目标 IP 地址匹配。
- 设备 B 通过 ARP 响应告诉 设备 A,其 MAC 地址。
ARP 请求数据包内容
假设设备 A 的 MAC 地址 是 00:11:22:33:44:55
,设备 A 的 IP 地址 是 192.168.1.1
,而 B 的 MAC 地址 是 77:88:99:aa:bb:cc
设备 B 的 IP 地址 是 192.168.1.2
(设备 A 想通过 ARP 获取设备 B 的 MAC 地址)
字段名称 | 字段长度 | 说明 |
硬件类型 | 2 Byte | 0x0001:Ethernet |
协议类型 | 2 Byte | 0x0800:上层协议为 IP 协议 |
MAC 地址长度 | 1 Byte | 单位 :1 Byte 0x6:MAC 地址长度 |
IP 地址长度 | 1 Byte | 单位 :1 Byte 0x4:IP 地址长度 |
操作类型 | 2 Byte | 0x0001:ARP 请求(请求数据包使用) 0x0002:ARP 应答 |
源 MAC 地址 | 6 Byte | 发送端 MAC 地址 例如:0x778899AABBCC(77:88:99:aa:bb:cc) |
源 IP 地址 | 4 Byte | 发送端 IP 地址,例如:0xC0A80101(192.168.1.1) |
目的 MAC 地址 | 6 Byte | 接收端 MAC 地址,ARP 请求时为全 0 |
目的 IP 地址 | 4 Byte | 接收端 IP 地址,例如:0xC0A80102(192.168.1.2) |
ARP 应答数据包内容
字段名称 | 字段长度 | 说明 |
硬件类型 | 2 Byte | 0x0001:Ethernet |
协议类型 | 2 Byte | 0x0800:上层协议为 IP 协议 |
MAC 地址长度 | 1 Byte | 单位:1 Byte 0x6:MAC 地址长度 |
IP 地址长度 | 1 Byte | 单位 :1 Byte 0x4:IP 地址长度 |
操作类型 | 2 Byte | 0x0001:ARP 请求 0x0002:ARP 应答(应答数据包使用) |
源 MAC 地址 | 6 Byte | 发送端 MAC 地址 例如:0x001122334455(00:11:22:33:44:55) |
源 IP 地址 | 4 Byte | 发送端 IP 地址,例如:0xC0A80102(192.168.1.2) |
目的 MAC 地址 | 6 Byte | 接收端 MAC 地址 例如:0x778899AABBCC(77:88:99:aa:bb:cc) |
目的 IP 地址 | 4 Byte | 接收端 IP 地址,例如:0xC0A80101(192.168.1.1) |
ARP 数据在以太网中传输格式
ICMP 协议
ICMP (Internet Control Message Protocol),即 互联网控制消息协议,是网络层协议的一部分,主要用于在 IP 网络中传递诊断和控制信息。它不是用于传输应用层数据的协议,而是为主机、路由器等网络设备提供反馈机制,用于报告错误、网络状况等信息,例如 windows 系统下的 ping 命令就是用的 ICMP 协议。
ICMP 数据格式
ICMP 的报文分为查询类报文和差错诊断类报文。查询类报文,通常由请求报文和应答报文组成,用于设备间的信息交互和查询,Windows 下 ping 命令用到的就是查询类报文;差错诊断类报文,用于报告网络错误或异常的报文类型。这些报文帮助设备了解网络通信中可能存在的问题,并提供相应的诊断信息。
ICMP 数据格式
字段名称 | 字段长度 | 说明 |
类型 | 8 Bit | 区分查询报文和差错报文 |
代码 | 8 Bit | 在报文类型上进一步细分 |
校验和 | 16 Bit | 与 IP 协议校验和方法相同 |
标识符 | 16 Bit | 表示进程 |
序列号 | 16 Bit | 类似身份,每次主机发送一个报文,序列号就会加一 |
数据部分 | 18-1472 Byte | 发送数据 |
ICMP 报文类型
类型 | 代码 | 解释 | 种类 |
0 | 0 | 回显应答(ping 应答) | 查询报文 |
8 | 0 | 回显请求(ping 请求) | 差错报文 |
3 | 1 | 主机不可达 | 差错报文 |
3 | 3 | 端口不可达 | 差错报文 |
5 | 0 | 对网络重定向 | 查询报文 |
11 | 0 | 传输期间生存时间为 0 | 差错报文 |
ICMP 数据在以太网中传输格式
ICMP 数据包直接封装在 IP 数据包中,没有使用传输层协议(如 TCP 或 UDP)。其基本结构由 IP 首部 和 ICMP 消息 组成。
六、传输层协议介绍
UDP 协议
UDP(User Datagram Protocol),即用户数据报协议,属于传输层协议,是一种在计算机网络中用于数据传输的协议,用户数据协议,无完整机制确保另一端收到数据(类似串口),是一种无连接(数据包无序),不可靠(无握手、无应答)的通信协议,具有传输效率高,占用资源小的优点。
TCP 与 UDP 的区别
TCP | UDP |
面向连接 | 面向非连接 |
传输可靠 | 传输不可靠 |
传输效率低 | 传输效率高 |
占用资源多 | 占用资源少 |
浏览器、 QQ 文件传输 | QQ 语音、QQ 视频 |
UDP 数据格式
字段名称 | 字段长度 | 说明 |
源端口号 | 2 Byte | 发送端端口号 |
目的端口号 | 2 Byte | 接收端端口号 |
UDP长度 | 2 Byte | 单位:Byte,表示数据段长度 |
UDP校验和 | 2 Byte | 同IP校验和方法一样,一般情况可以不进行校验数值为0x0000,只保证IP校验即可 |
数据部分 | 18-1472 Byte | 用户需要传输的数据 |
UDP 数据在以太网中传输格式
以太帧传输 UDP 数据,其中,以太网数据端包含其他层的通信协议,即对用户数据进行逐层封装