2.1 设计原理
2.1.1 以太网协议
1.以太网的MAC层
(1)MAC层的硬件地址
在局域网中,硬件地址又称为物理地址或MAC地址(用在MAC帧中)。IEEE 802标准为局域网规定了一种48位(6 Bytes)的全球地址,是指局域网上的每一台计算机中固化在适配器的ROM中的地址。
IEEE规定地址字段的第一字节的最低位为I/G位,表示Individual/Group。当I/G位为0时,地址字段表示一个单个站地址;当I/G位为1时表示组地址,用来进行组播。需要说明的是,IEEE 802.3将每一字节的最低位写在最左边,另一种记法将每一字节最高位写在最左边。
适配器从网络上每收到一个MAC帧就先用硬件检查MAC帧中的目的地址,这里的帧包含以下三种:
①单薄(unicast)帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同,又叫点播。
②广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。
③组播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。
所有的适配器都至少能识别点播和广播。只有目的地址才能使用广播地址和组播地址。
在IPV4协议中,组播的MAC地址是特定与IP地址有联系的,如下图,我们这里采用的目的组播地址为224.2.2.2,则目的MAC地址为0x0100_5e68_0202。
图 1 IPV4组播地址对应的MAC地址
如上图中,取IP地址的低23位填充,第一个字节的低位即I/G位为1,表示该帧为组播帧。
(2)MAC帧的格式
常用的以太网MAC帧格式有DIX Ethernet V2标准(即以太网V2标准)和IEEE 802.3标准两种。这里我们采用V2标准,其格式如下。
图 2 MAC层协议
需要说明的是类型字段值为0x0800时,表示上层使用的时IP数据报;数据字段的最小长度由MAC帧最小长度64字节减去18字节的首部和尾部得出;最后一个字段是4字节的帧检验序列(Fram Check Sequence),使用CRC检验。
MAC帧不需要在首部插入长度字段,因为通信传输采用曼彻斯特编码,每个码元的正中间一定有一次电压的转换(从高到低或从低到高)。这样当一个帧传输完毕后,发送方网络适配器的接口上的电压也就不再有变化了,这样接收方就能找到这一帧的结束位置。当数据字段长度小于46字节时,可以在数据字段后面填充整数字节,IP层会根据IP报文首部的长度丢弃填充字段。
图 1数字信号常用的编码方式
实际传输时MAC帧多出的首部8个字节是为了让接收端适配器调整其时钟频率(比如常见的千兆/百兆自适应网口),与接收端进行比特流同步,第一个字段是7个字节的前同步码(7*0x55),第二个字段是帧开始定界符,定义为10101011,它们不在MAC帧的FCS字段的检验范围内。
IEEE 802.3标准规定凡出现以下情况之一即为无效MAC帧:
①非整数字节长度帧;
②收到的FCS检验出错;
③帧长度超出合法范围。
凡无效MAC帧即丢弃,以太网不再传输。
2.网络层的网际协议IP
在网路技术不断发展时,为了满足不同的需求产生了不同的网络协议,同时网络的制造厂家为了提高竞争力也在不断推出新的网络,一般来说,将网络互相连接起来需要使用中间设备:
①物理层使用的中间设备叫做转发器(repeater)。
②数据链路层使用的叫做网桥或桥接器(bridge)。
③网络层使用的叫做路由器(router)。
④在网络层以上使用的叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议转换。
IP地址 ::=
只有网络号相同的主机间才可以直接通讯。后续设计中间将根据C类地址设置主机IP为192.168.1.15,开发板IP为192.168.1.10。
IP地址分为A,B,C,D,E五类,其中A,B,C类都是点播地址,D类为组播地址,E类保留。这里我们只用到了C类和D类。
图 3 IP地址中的网络号字段和主机号字段
A类 :
00000000×××——01111111×××
0.0.0.0 —— 127.255.255.255
B类 :
10000000,00000000×××——10111111,11111111×××
128.0.0.0——191.255.255.255
C类 :
11000000,00000000,0000000×××——11011111,1111111,1111111×××
192.0.0.0——223.255.255.255
D类 :
11100000××——111011111××××
224.0.0.0——239.255.255.255 (组播地址)
E类 :
11110000×××——11110111×××
240.0.0.0——247.255.255.255 (科学实验)
组播地址分类及含义:
地址范围 | 含义 |
---|---|
224.0.0.0~224.0.0.255 | 永久组地址。IANA为路由协议预留的IP地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议、拓扑查找等使用,不用于组播转发。常见的永久组地址如表2所示 |
224.0.1.0~231.255.255.255 233.0.0.0~238.255.255.255 | ASM(Any-Source Multicast)组播地址,全网范围内有效 |
232.0.0.0~232.255.255.255 | 缺省情况下的SSM(Source- Specific Multicast)组播地址,全网范围内有效 |
239.0.0.0~239.255.255.255 | 本地管理组地址,仅在本地管理域内有效。在不同的管理域内重复使用相同的本地管理组地址不会导致冲突 |
表2 常见的永久组地址列表 | |
永久组地址 | 含义 |
224.0.0.0 | 不分配 |
224.0.0.1 | 网段内所有主机和路由器(等效于广播地址) |
224.0.0.2 | 所有组播路由器 |
224.0.0.3 | 不分配 |
224.0.0.4 | DVMRP(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)路由器 |
224.0.0.5 | OSPF(Open Shortest Path First,开放最短路径优先)路由器 |
224.0.0.6 | OSPF DR(Designated Router,指定路由器) |
224.0.0.7 | ST(Shared Tree,共享树)路由器 |
224.0.0.8 | ST主机 |
224.0.0.9 | RIP-2(Routing Information Protocol version 2,路由信息协议版本2)路由器 |
224.0.0.11 | 移动代理(Mobile-Agents) |
224.0.0.12 | DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器/中继代理 |
224.0.0.13 | 所有PIM(Protocol Independent Multicast,协议无关组播)路由器 |
224.0.0.14 | RSVP(Resource Reservation Protocol,资源预留协议)封装 |
224.0.0.15 | 所有CBT(Core-Based Tree,有核树)路由器 |
224.0.0.16 | 指定SBM(Subnetwork Bandwidth Management,子网带宽管理) |
224.0.0.17 | 所有SBM |
224.0.0.18 | VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议) |
224.0.0.22 | 所有使能IGMPv3(Internet Group Management Protocol, Version 3,因特网组管理协议)的路由器 |
224.0.0.19 ~ 224.0.0.21224.0.0.23 ~ 224.0.0.255 | 未指定 |
这里我们采用224.0.1.0~231.255.255.255,233.0.0.0~238.255.255.255内的任意ASM组播地址作为FPGA的目的IP地址,比如224.2.2.2。
(1)网络层的IP地址
不同于MAC层的硬件地址,IP层的地址一般由软件实现,我们这里则由FPGA实现。
(2)IP数据报的格式
图 4 IP层协议
1)版本号:分为IPV4和IPV6,这里我们采用IPV4协议,所以该字段值为0x4;
2)首部长度:IP数据报首部的长度,单位为32位字(4字节),一般为20字节,则该字段值为0x5;
3)区分服务:未应用,填充0值;
4)总长度:IP数据报的总长度,单位为字节;
5)标识、标志、片偏移:未应用,填充0值;
6)生存时间:Time to Live,表示可以经过多少次路由器跳转,该字段为8位,所以最多跳转255次,最少为1次,表示只在本局域网中传输。
7)协议:占8位,表示数据报携带的数据使用什么协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理,比如这里我们采用IPV4协议,则交给IP层模块处理。
图1 协议和相应字段值(十进制)
8)首部校验和:占16位,只检验首部计算方法如下。
图2 首部校验和计算过程
9)源地址:占32位,这里设计FPGA的源地址为192.168.1.10。
10)目的地址:占32位,这里设计FPGA的目的地址为224.2.2.2。
3.运输层的UDP
(1)概述:
①UDP是无连接的;
②UDP尽最大努力交付;
③UDP面向报文,保留报文边界;
④UDP没有拥塞控制;
⑤UDP支持一对一,一对多,多对一和多对多的交互通信;
⑥ UDP首部开销小,只有8个字节。
(2)UDP的首部格式
UDP的首部只有8个字节,但在检验和阶段会临时添加12字节的伪首部得到临时的UDP用户数据报一起检验。
图 5 UDP协议
图 2 计算UDP检验和的例子
2.1.2 RGMII接口
全称Reduced Gigabit Media Independent Interface,千兆传输时,工作时钟125MHz,双边沿传输;百兆传输时,工作时钟25MHz,单边沿;十兆传输。工作时钟2.5MHz,数据传输也是单边沿。
图 3 RGMII发送基本时序
图 4 应用框图
可见当MAC和PHY分布为两个芯片时,RGMII对芯片封装面积要求很低。
图 5 有效帧
数据帧传输前,CTL拉高,传输完毕后,CTL拉低,中间未产生有效ERROR信号。
图 6 无效帧
数据帧传输前,CTL拉高,传输完毕后,CTL拉低,中间产生有效ERROR信号,则该帧无效,应不采用。
NOTE:TX_CTL和RX_CTL分别在各自时钟上升沿表示EN,DV,下降沿都表示ERR;接受和发送的ERR有效条件一致,当前TX_CLK或RX_CLK的下降沿CTL信号为0,且上一个相邻的时钟上升沿CTL为1,此时ERROR信号有效,该帧无效,全部丢弃。
TXD,RXD则分别在各自时钟上升传输[4:0],下降沿传输[7:5]。