FPGA自学11——以太网通信
一、以太网简介以太网(Ethernet)是当今最通用的通信协议标准,他规定了包括物理层的连线、电子信号、介质访问协议的内容。优点:成本低、通信速率高、抗干扰性强标准以太网:10Mbit/S快速以太网:100Mbit/S千兆以太网:1000Mbit/S1.1、以太网接口引脚编号引脚名称说明Pin1TX+发送数据+(发送差分信...
一、以太网简介
以太网(Ethernet)是当今最通用的通信协议标准,他规定了包括物理层的连线、电子信号、介质访问协议的内容。
优点:成本低、通信速率高、抗干扰性强
- 标准以太网:10Mbit/S
- 快速以太网:100Mbit/S
- 千兆以太网:1000Mbit/S
1.1、以太网接口
引脚编号 | 引脚名称 | 说明 |
Pin1 | TX+ | 发送数据+ (发送差分信号:+) |
Pin2 | TX- | 发送数据- (发送差分信号:-) |
Pin3 | RX+ | 接收信号+ (接收差分信号:+) |
Pin4 | NC | 未使用 |
Pin5 | NC | 未使用 |
Pin6 | RX- | 接收信号- (接收差分信号:-) |
Pin7 | NC | 未使用 |
Pin8 | NC | 未使用 |
1.2、PHY芯片
PHY芯片在发送数据时,首先将MAC(主机:单片机或者FPGA)发送过来的并行数据转化成串行数据,按照物理层的编码规则把数据编码转换为模拟信号,通过网口发送出去。
PHY芯片在接收数据时,首先将网络上(RJ45接口)发送过来的模拟信号转化成数据,再通过通信协议(MII、RMII、SMI)发送给MAC(主机单片机或者FPGA)。
当网卡接入网线时,PHY芯片不断发出脉冲信号来检测对端是否有设备,他们互相协商并确定连接速度、双工模式、是否采用流控制等,这个过程叫做“自动协商”。
总结:PHY芯片在网络通信中的作用是:主芯片 和网络设备 之间的 模拟信号 与 数字信号 的相互转换。
1.3、MII接口
MII即媒体独立接口,也叫介质无关接口。它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口。
名称 | 说明 |
ETH_RXC | 该信号提供进行RX(主芯片接收)数据传输时的参考时序 |
ETH_RXDV | RX(主芯片接收)数据有效信号 |
ETH_RXD[3:0] | 数据接收信号。该信号是 4 个一组的数据信号,由 PHY 同步驱动,在MII_RXDV 信号有效时才为有效信号(有效数据)。MII_RXD[0] 为最低有效位, MII_RXD[3] 为最高有效位。 当 MII_RX_DV 禁止、MII_RX_ER 使能时,特定的MII_RXD[3:0] 值用于传输来自 PHY 的特定信息。 |
ETH_TXC | 该信号由主芯片提供,是主芯片TX发送数据传输时的参考时序 |
ETH_TXEN | 发送数据使能信号 |
ETH_RXD[3:0] | 数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TXEN 信号有效时才为有效信号(有效数据) MII_TXD[0] 为最低有效位 MII_TXD[3] 为最高有效位。 禁止MII_TXEN 时,发送数据不会对 PHY 产生任何影响 |
ETH_RESET | PHY芯片复位信号 |
ETH _MDC | 数据线,数据输入/输出比特流,用于通过MDC 时钟信号向/从PHY 设备同步传输状态信息。 (主芯片访问PHY芯片寄存器的接口) |
ETH _MDIO | 时钟线,周期性时钟,提供以最大频率2.5 MHz 传输数据时的参考时序。 MDC的最短高电平时间和最短低电平时间必须均为160 ns。MDC的最小周期必须为400 ns。在空闲状态下,SMI管理接口将 MDC时钟信号驱动为低电平。 (主芯片访问PHY芯片寄存器的接口) |
1.4、其他接口简介
精简介质独立接口:RMII 范降低了 10/100 Mbit/s 下微控制器以太网外设与外部 PHY 间的
引脚数。根据 IEEE 802.3u 标准。
站管理接口:SMI 允许应用程序通过 2 线时钟和数据线访问任意 PHY 寄存器。该接口支持
访问多达 32 个 PHY。
二、以太网通信协议
2.1、以太网数据包格式(UDP为例)
以太网数据包分为几个部分:
- 前导码+帧起始定界符
- 以太网帧头(包含:目的MAC地址 + 源MAC地址 + 长度/类型)
- 以太网数据(IP首部+数据段(UDP首部、数据段、用户数据))
- 校验
前导码 + 帧起始定界符 + 目的MAC地址 + 源MAC地址 + 长度/类型 + 【版本+首部长度】+ 服务类型 + 总长度 + 标识 + 【标志+片偏移】+ 生存时间 + 协议 + 首部校验和 + 源IP地址 + 目的IP地址 + 源端口号 + 目的端口号 + UDP长度 + UDP校验和 + 数据
- 前导码(Preamble):为了实现底层数据的正确阐述,物理层使用7个字节同步码(0和1交替(55-55-55-55-55-55-55))实现数据的同步。
- 帧起始界定符(SFD,Start Frame Delimiter):使用1个字节的SFD(固定值为0xd5)来表示一帧的开始,即后面紧跟着传输的就是以太网的帧头。
- 目的MAC地址:即接收端物理MAC地址,占用6个字节。MAC地址从应用上可分为单播地址、组播地址和广播地址。
单播地址 | 第一个字节的最低位为0,比如00-00-00-11-11-11,一般用 于标志唯一的设备; |
组播地址 | 第一个字节的最低位为1,比如01-00-00-11-11-11,一般用于 标志同属一组的多个设备; |
广播地址 | 所有48bit全为1,即FF-FF-FF-FF-FF-FF,它用于标志 同一网段中的所有设备。 |
- 源MAC地址:即发送端(本机)物理MAC地址,占用6个字节。
- 长度/类型 :长度/类型具有两个意义,当这两个字节的值小于1536(0x0600)时,代表该以太网中数据段的长度;如果这两个字节的值大于1536,则表示该以太网中的数据属于哪个上层协议,例如0x0800代表IP协议(网际协议)、0x0806代表ARP协议(地址解析协议)等。
- 数据:以太网中的数据段长度最小46个字节,最大1500个字节。最大值1500称为以太网的最大传输单元(MTU,Maximum Transmission Unit),之所以限制最大传输单元是因为在多个计算机的数据帧排队等待传输时,如果某个数据帧太大的话,那么其它数据帧等待的时间就会加长,导致体验变差,这就像一个十字路口的红绿灯,你可以让绿灯持续亮一小时,但是等红灯的人一定不愿意的。另外还要考虑网络I/O控制器缓存区资源以及网络最大的承载能力等因素,因此最大传输单元是由各种综合因素决定的。为了避免增加额外的配置,通常以太网的有效数据字段小于1500个字节。
- 帧检验序列(FCS,Frame Check Sequence):为了确保数据的正确传输,在数据的尾部加入了4个字节的循环冗余校验码(CRC校验)来检测数据是否传输错误。CRC数据校验从以太网帧头开始即不包含前导码和帧起始界定符。通用的CRC标准有CRC-8、CRC-16、CRC-32、CRC-CCIT,其中在网络通信系统中应用最广泛的是CRC-32标准。
在这里还有一个要注意的地方就是以太网相邻两帧之间的时间间隔,即帧间隙(IFG,
Interpacket Gap)。帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来
恢复并为接收下一帧做准备的时间,IFG的最小值是96 bit time,即在媒介中发送96位原始数
据所需要的时间,在不同媒介中IFG的最小值是不一样的。不管10M/100M/1000M的以太网,两
帧之间最少要有96bit time
- 10Mbit/s最小时间为:96*100ns = 9600ns;
- 100Mbit/s最小时间为:96*10ns = 960ns;
- 1000Mbit/s最小时间为:96*1ns = 96ns。
2.1.1 IP协议(太网数据帧中的数据段部分)
IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP协议的载体,IP协议规定了数据传输时
的基本单元和格式。 IP协议在以太网数据帧中的数据段部分
前20个字节和紧跟其后的可选字段是IP数据报的首部,前20个字节是固定的,后面可选字
段是可有可无的,首部的每一行以32位(4个字节)为单位。
- 版本:4位IP版本号(Version),这个值设置为二进制的0100时表示IPv4,设置为0110时表示IPv6,目前使用比较多的IP协议版本号是4。
- 首部长度:4位首部长度(IHL,Internet Header Length),表示IP首部一共有多少个32位(4个字节)。在没有可选字段时,IP首部长度为20个字节,因此首部长度的值为5。
- 服务类型:8位服务类型(TOS,Type of service),该字段被划分成两个子字段:3位优先级字段(现在已经基本忽略掉了)和4位TOS字段,最后一位固定为0。服务类型为0时表示一般服务。
- 总长度:16位IP数据报总长度(Total Length),包括IP首部和IP数据部分,以字节为单位。我们利用IP首部长度和IP数据报总长度,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit,所以IP数据报最长可达65535字节。尽管理论上可以传输长达65535字节的IP数据报,但实际上还要考虑网络的最大承载能力等因素。
- 标识字段:16位标识(Identification)字段,用来标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。包序
- 标志字段:3位标志(Flags)字段,第1位为保留位;第2位表示禁止分片(1表示不分片 0:允许分片);第3位标识更多分片(除了数据报的最后一个分片外,其它分片都为1)。
- 片偏移:13位片偏移(Fragment Offset),在接收方进行数据报重组时用来标识分片的顺序。
- 生存时间:8位生存时间字段,TTL(Time To Live)域防止丢失的数据包在无休止的传播,一般被设置为64或者128。(每转发一次-1)
- 协议:8位协议(Protocol)类型,表示此数据报所携带上层数据使用的协议类型,ICMP为1,TCP为6,UDP为17。
- 首部校验和:16位首部校验和(Header Checksum),该字段只校验数据报的首部,不包含数据部分;校验IP数据报头部是否被破坏、篡改和丢失等。
- 源IP地址:32位源IP地址(Source Address),即发送端的IP地址,如192.168.1.123
- 目的IP地址:32位目的IP地址(Destination Address),即接收端的IP地址,如192.168.1.102。
- 可选字段:是数据报中的一个可变长度的可选信息,选项字段以32bit为界,不足时插入值为0的填充字节,保证IP首部始终是32bit的整数倍。
2.1.2 UDP协议(太网数据帧中的数据段部分,跟在IP首部后面)
UPD与TCP相比是:无连接、不可靠、高速率的传输方式,格式如下:
源端口号(16bit) | 目的端口号(16bit) |
UDP长度 (16bit) | UDP校验和(16bit) |
UDP数据 |
UDP首部共8个字节,同IP首部一样,也是一行以32位(4个字节)为单位。
- 源端口号:16位发送端端口号,用于区分不同服务的端口,端口号的范围从0到65535。
- 目的端口号:16位接收端端口号。
- UDP长度:16位UDP长度,包含UDP首部长度+数据长度,单位是字节(byte)。
- UDP校验和:16位UDP校验和。UDP计算校验和的方法和计算IP数据报首部校验和的方法相似,但不同的是IP数据报的校验和只检验IP数据报的首部,而UDP校验和包含三个部分:UDP伪首部,UDP首部和UDP的数据部分。伪首部的数据是从IP数据报头和UDP数据报头获取的,包括源IP地址,目的IP地址,协议类型和UDP长度,其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。在大多数使用场景中接收端并不检测UDP校验和。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)