一、以太网简介
计算机网络可分为局域网(LAN)、 城域网(MAN)、广域网(WAN)、互联网(Initernet)。局域网按传输介质所使用的访问控制方法可分为:以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(Token Ring)、交换网(Switching) 等,它们在拓朴结构、传输介质、传输速率、数据格式等多方面都有许多不同,其中应用最广泛的当属以太网。
以太网协议(Ethernet Protocol)是一种广泛应用于局域网(LAN)和广域网(WAN)的计算机网络通信协议。它是一种基于共享介质的局域网技术,最早由Xerox、Intel和Digital Equipment Corporation(DEC)于1970年代开发,并在1980年代初由IEEE标准化为IEEE 802.3。以太网根据最大传输速率的不同可以分为标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)、千兆以太网 (1000Mbit/s)和万兆以太网(10Gbit/s)。
二、计算机网络模型
为了实现网络通信的标准化,普及网络应用,国际标准化组织(ISO)将整个以太网通信结构制定了OSI(Open System Interconnection)模型。OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层表示层、应用层),即OSI开放互连系统参考模型。每个层功能不同,网络通信中各司其职,整个模型包括硬件和软件定义。
在一定程度上参考了OSI模型后,产生了TCP/IP协议。TCP/IP (Transmission ControProtocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信传输的协议簇。TCP/IP协议不仅仅指的TCP和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/P 协议中 TCP 协议和I协议最具代表性,所以被称为 TCP/IP 协议。
在TCP/IP协议中,OSI 七层参考模型被简化为五层。
在TCP/IP五层参考模型中,数据链路层又被分为LLC层(逻辑链路层)和MAC层(媒体介质访问层)。 LLC层和MAC层是软、硬件的分界线。如PC的网卡主要负责实现参考模型中的MAC子层和物理层。
之前写计算机网络的时候也写过相关博文:
Linux网络编程(一)_STATEABC的博客-CSDN博客
三、以太网传输格式
IEEE 802.3规定了以太网传输数据包的帧格式:前导码、帧起始界定符、帧头(目的MAC地址+源MAC地址+类型/长度)、数据、校验位。
- 前导码(Preamble):也称报头,用于使收发节点的时钟同步。物理层使用连续7个字节的0x55实现数据的同步。
- 帧起始定界符(SFD,Start Frame Delimiter):用于区分前导码与数据段,固定为1字节的0xD5。字段和帧起始定界符在MAC收到数据包后会自动过滤掉。
- 目的MAC地址:即接收端物理MAC地址,由48位数字组成,占用6个字节,每个设备都有且仅有唯一的MAC地址。MAC地址从应用上可分为单播地址、组播地址和广播地址。单播地址:第一个字节的最低位为0,比如0-00-00-11-11-11,一般用于标志唯一的设备;组播地址:第一个字节的最低位为1,比如01-00-00-11-11-11,一般用于标志同属一组的多个设备;广播地址:所有48bit全为1,即FF-FF-FF-FF-FF-FF,用于标志同一网段中的所有设备。
- 源MAC地址:即发送端物理MAC地址,占用6个字节。
- 数据包类型/长度:2字节,当这两个字节的值小于1536 (十六进制为0x0600)时代表该以太网中数据段的长度;如果这两个字节的值大于1536,则表示与以太网帧相关的MAC客户端协议的类型,例如0x0800代表IP协议(网际协议)、0x0806 代表ARP协议(地址解析协议) 等。
- 数据:数据段是MAC包的核心内容,它包含的数据来自MAC的上层,长度为46-1500字节。最大值1500称为以太网的最大传输单元(MTU,Maximum Transmission Unit)。接收到的数据包如果少于64字节会被认为发生冲突,数据包被自动丢弃。
- 校验(FCS,Frame Check Sequence):确保数据的正确传输,在数据的尾部加入了4字节的循环冗余校验码(CRC)来检验数据是否传输错误。CRC数据校验从目的MAC地址开始。
- 帧间隙(IFG,Interpacket Gap):以太网相邻两帧之间的时间间隔,即网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,最小值是96 bit time(媒介中发送96位原始数据所需要的时间)。
四、ARP协议
在以太网中要想进行通信,首先要知道接收端的物理MAC地址,而ARP(Address Resolution Protocol),地址解析协议就是根据目的设备的IP地址 (逻辑地址)获取MAC地址的一种TCP/IP协议。
ARP协议分为ARP请求和ARP应答,源主机发起查询目的MAC地址的报文称为ARP请求,目的主机响应源主机并发送包含本地MAC地址的报文称为ARP应答。
当主机需要找出网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包含了发送方的MAC地址和IP 地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播,即ARP请求时发送的接收方物理地址为广播地址,用48'hff_ff_ff_ff_ff_ff表示。此时局域网中的所有主机都会进行接收并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址。是则返回ARP应答报文(含接收方的IP地址和物理地址),不是则不响应。
主机B利用收到的ARP请求报文中的请求方物理地址,以单播的方式直接发送给主机A,主机A将收到的ARP应答报文中的目的MAC地址解析出来,将目的MAC地址和目的 P 地址更新至ARP缓存表中。当再次和主机A通信时,可以直接从ARP缓存表中获取,而不用重新发起ARP请求报文。ARP缓存表中的表项有过期时间(一般为20分钟),过期之后,需要重新发起ARP请求以获取目的MAC地址。
ARP数据位于以太网帧格式的数据段中。28字节的ARP数据位于以太网格式的数据段。由于以太网数据段最少为46个字节,而ARP数据包总长度为28个字节,因此在ARP数据段后面需要填充18字节的数据,以满足以太网传输格式的要求,填充的数据可以为任意值,但一般为0。
- 硬件类型(Hardware type):硬件地址的类型,1 表示以太网地址。
- 协议类型(Protocol type):要映射的协议地址类型,ARP协议的上层协议为IP协议,因此该协议类型为IP协议,其值为0x0800。
- 硬件地址长度 (Hardware size):硬件地址(MAC 地址)的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或者应答来说,该值为6。
- 协议地址长度 (Protocol size):IP地址的长度,以字节为单位。对于以太网上 P 地址的 ARP 请求或者应答来说,该值为4。
- OP(Opcode):操作码,用于表示该数据包为ARP请求或者ARP应答。1表示ARP请求,2表示ARP应答。
- 源MAC地址:发送端的硬件地址。
- 源IP地址:发送端的协议(IP) 地址,如192.168.1.102。
- 目的MAC地址:接收端的硬件地址,在ARP请求时由于不知道接收端MAC地址,因此该字段为广播地址,即48'hff_ff_ff_ff_ff_ff。
五、RGMII接口
在物理层,由IEEE 802.3标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个PHY芯片实现其功能的。
FPGA可以看成是MAC侧,接收或发送数据到PHY侧,PHY侧再通过网线接口和其他设备进行连接。PHY在发送数据的时候,接收MAC发过来的数据,把并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号发送出去,收数据时的流程反之。
MII (Media Independent Interface)为媒体独立接口,用以连接以太网MAC层和PHY芯片,常用接口有:MIIRMI、SMI、GMI、RGMII。
- MII (Medium Independent Interface,媒体独立接口):MII支持10Mbps和100Mbps的操作,数据位宽为4位,在 100Mbps 传输速率下,时钟频率为25Mhz。
- RMII(Reduced MII):RMII是MI的简化版,数据位宽为2位,在100Mbps传输速率下,时钟频率为50Mhz。
- GMII (Gigabit MII):GMII接口向下兼容MII接口,支持10Mbps、100Mbps和1000Mbps的操作,数据位宽为8位,在1000Mbps传输速率下,时钟频率为125Mhz。
- RGMII (Reduced GMII):RGMII是GMII的简化版,数据位宽为4位,在1000Mbps传输速率下,时钟频率为125Mhz,在时钟的上下沿同时采样数据。在100Mbps和10Mbps通信速率下,为单个时钟沿采样。
在千兆以太网中,常用的接口为RGMI和GMII接口。RGMII接口的优势是同时适用于10M/100M/1000Mbps通信速率,同时占用的引脚数较少。但RGMII接口在PCB布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。
参考文献:
《开拓者之FPGA开发指南》
《FPGA Verilog开发实战至指南》