一. OSI 七层模型
OSI(Open Systems Interconnection)七层模型是由国际标准化组织(ISO)制定的一个概念模型,用于描述网络中各部分如何通信。这个模型将网络通信分解为七个不同的层次,每一层都有特定的功能,并且依赖于下一层提供的服务来实现其功能。下面是OSI七层模型的详细介绍:
-
应用层(Application Layer):
- 提供应用程序之间的接口。
- 支持文件传输、电子邮件、虚拟终端等服务。
- 协议示例:HTTP, FTP, SMTP。
-
表示层(Presentation Layer):
- 负责数据格式化、加密和解密等功能。
- 确保发送的数据对应用层来说是可理解的。
- 协议示例:JPEG, MPEG, ASCII, Unicode, PGP, SSL/TLS。
-
会话层(Session Layer):
- 控制会话的建立、管理和终止。
- 可以提供同步点,以便在发生错误时恢复数据。
- 协议示例:RPC, SQL, NFS, NetBIOS, RPC, LDAP。
-
传输层(Transport Layer):
- 提供端到端的数据传输服务。
- 保证数据的可靠传输,包括错误检测、流量控制和拥塞控制。
- 协议示例:TCP, UDP。
-
网络层(Network Layer):
- 负责路由选择和数据包交换。
- 提供逻辑寻址和路径选择服务。
- 协议示例:IP, ICMP, ARP, RARP, OSPF。
-
数据链路层(Data Link Layer):
- 提供物理地址(MAC地址),并确保数据帧的正确传输。
- 进行错误通知、帧序列以及流控。
- 协议示例:Ethernet, Wi-Fi (802.11), PPP, HDLC, VLAN。
-
物理层(Physical Layer):
- 定义连接介质的标准,如电压、电缆规格、物理接口等。
- 负责比特流的传输。
- 协议示例:RJ45, BNC, AUI, RS-232, V.35。
每一层都与相邻的上一层和下一层进行交互。数据从发送方的应用层开始向下传递,经过每一层的封装过程,最终通过物理层传输到接收方,接收方则相反,数据从物理层向上逐层解封装。这种分层结构有助于清晰地定义不同组件的功能,并且使得各个部分能够独立发展。
二. FPGA 在 UDP 通信中的角色
FPGA在这样的通信系统中的主要职责是处理数据的低层级传输,通常只实现传输层,网络层和数据链路层,而更高层级的功能,如会话层和表示层的服务,则通常由软件或其他硬件来实现。
在基于FPGA的UDP通信系统中,FPGA主要负责以下几项任务:
1. 数据包的构建与解析:
构建UDP数据包,包括添加源端口号、目的端口号等信息。
解析接收到的UDP数据包,提取必要的信息,如端口号和数据负载。
2. 错误检测:
实现CRC校验等机制来检测传输过程中可能出现的错误。
在接收到的数据包中计算CRC值,并与数据包中携带的CRC值进行比较以验证数据的完整性。
3. 数据的封装与解封装:
封装数据进入IP数据包,并将UDP数据包嵌入其中。
解封装接收到的数据包,提取出UDP数据段。
4. 与PHY的接口:
FPGA需要与PHY(Physical Layer,物理层)芯片进行交互,完成物理层的数据传输。
PHY芯片负责比特流的编码与解码,例如4b/10b编码。
三. GMII和RGMII接口
1. GMII 接口:
GMII(Gigabit Media Independent Interface)是一种千兆位媒体独立接口,用于连接以太网MAC(介质访问控制)层与PHY(物理层)层。它提供了一种全双工的数据传输方式,支持10Mbps、100Mbps和1000Mbps三种速率。GMII接口通常由7个数据信号线(发送和接收各3个,加上一个时钟信号线)组成,并且还需要额外的控制信号线来协调数据传输。
2. RGMII 接口:
RGMII(Reduced Gigabit Media Independent Interface)则是简化版的GMII接口,减少了所需的引脚数量。RGMII 的时序分为两种:延时模式和非延时模式,可以通过配置 PHY 芯片改变模式。
四. UDP 首部校验和、IP 首部校验和计算方法、
校验字节强制设置0,IP头部20字节按2字节即16比特分隔分别相加,若结果大于FFFF那么把高16位与低16位相加,直到最终结果为16比特数据。将计算结果取反作为IP首部校验和。
例如:抓取IP数据包,取IP数据报头部分(20B),数据如下,
45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d, 计算IP 首部校验和。
(1) 将校验和字段 b5 2e 设置为 00 00,数据变为:
45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d
(2) 以 2 字节为单位,数据反码求和:
4500+0030+804c+4000+8006+00d3+d343+117b+cb51+153d=34ace
(3) 进位(3)加到低16位(ace)上:
0003+4ace=ad1
(4) 将 ad1 取反:
checksum = b52e