下图是以太网的帧格式
前导码(Preamble):8 字节,连续 7 个 8’h55 加 1 个 8’hd5,表示一个帧的开始,用于双方设备数据的同步。
目的 MAC 地址:6 字节,存放目的设备的物理地址,即 MAC 地址源
源 MAC 地址:6 字节,存放发送端设备的物理地址
类型:2 字节,用于指定协议类型,常用的有 0800 表示 IP 协议,0806 表示 ARP 协议,8035表示 RARP 协议
数据:46 到 1500 字节,最少 46 字节,不足需要补全 46 字节,例如 IP 协议层就包含在数据部分,包括其 IP 头及数据。
FCS:帧尾,4 字节,称为帧校验序列,采用 32 位 CRC 校验,对目的 MAC 地址字段到数据字段进行校验。
进一步扩展,以 UDP 协议为例,可以看到其结构如下,除了以太网首部的 14 字节,数据部分包含 IP 首部,UDP 首部,应用数据共 46~1500 字节。
ARP 地址解析协议,即 ARP(Address Resolution Protocol),根据 IP 地址获取物理地址。主机发送包含目的 IP 地址的 ARP 请求广播(MAC 地址为 48’hff_ff_ff_ff_ff_ff)到网络上的主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将 IP 地址和物理地址保存到缓存中,并保留一段时间,下次请求时直接查询 ARP 缓存以节约资源。下图为 ARP 数据报格式 。
帧类型:ARP 帧类型为两字节 0806
硬件类型:指链路层网络类型,1 为以太网
协议类型:指要转换的地址类型,采用 0x0800 IP 类型,之后的硬件地址长度和协议地址长度分别对应 6 和 4
OP 字段中 1 表示 ARP 请求,2 表示 ARP 应答
例如:|ff ff ff ff ff ff | 00 0a 35 01 fe c0 | 08 06 | 00 01 | 08 00 | 06 | 04 | 00 01 | 00 0a 35 01 fe c0 | c0 a8 00 02 | ff ff ff ff ff ff | c0 a8 00 03|
[ 以太网地址 以太网源地址 帧类型 ] [ 硬件 协议 硬长|协长 OP 以太网源地址 源IP地址 以太网地址 目的IP地址] 10.53.01.254.192
表示向 192.168.0.3 地址发送 ARP 请求。
|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 ab c1 a2 d5 15|c0 a8 00 03|00 0a 35 01 fe c0|c0 a8 00 02|
表示向 192.168.0.2 地址发送 ARP 应答。
3、 IP 数据报格式
因为 UDP 协议包只是 IP 包中的一种, 所以我们来介绍一下 IP 包的数据格式。下图为 IP 分组的报文头格式,报文头的前 20 个字节是固定的,后面的可变。
版本:占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)
首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节
区分服务:占 8 位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.1998 年这个字段改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用这个字段
总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU
标识:占 16 位,它是一个计数器,用来产生数据报的标识
标志(flag):占 3 位,目前只有前两位有意义
MF 标志字段的最低位是 MF (More Fragment)
MF=1 表示后面“还有分片”。MF=0 表示最后一个分片
DF 标志字段中间的一位是 DF (Don't Fragment)
只有当 DF=0 时才允许分片
片偏移:占 12 位,指较长的分组在分片后,某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位
生存时间:占 8 位,记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit 字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255
协议:占 8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程, 1 表示为 ICMP 协议, 2 表示为 IGMP 协议, 6 表示为 TCP 协议, 17 表示为 UDP 协议
首部检验和:占 16 位,只检验数据报的首部不检验数据部分,采用二进制反码求和,即将 16 位数据相加后,再将进位与低 16 位相加,直到进位为 0,最后将 16 位取反。
源地址和目的地址:都各占 4 字节,分别记录源地址和目的地址
UDP 是 User Datagram Protocol(用户数据报协议)的英文缩写。 UDP 只提供一种基本的、低延迟的被称为数据报的通讯。所谓数据报,就是一种自带寻址信息,从发送端走到接收端的数据包。 UDP 协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
UDP 协议的报头格式:
UDP 报头由 4 个域组成,其中每个域各占用 2 个字节,具体如下:
① UDP 源端口号
② 目标端口号
③ 数据报长度
④ 校验和
UDP 协议使用端口号为不同的应用保留其各自的数据传输通道。 数据发送一方将 UDP 数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。
数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为 65535 字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到 8192 字节。
UDP 协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此 UDP 协议可以检测是否出错。虽然 UDP 提供有错误检测,但检测到错误时,错误校正,只是简单地把损坏的
消息段扔掉,或者给应用程序提供警告信息。
ICMP 是 TCP/IP 协议族的一个 IP 层子协议,包含在 IP 数据报里,用于 IP 主机、路由器之间传递控制消息。控制消息是指网络是否连通,主机是否可达等功能。其中 ping 功能采用回送请求和回答报文,回送请求报文类型为 8’h08,回答报文类型为 8’h00。
串行管理接口(Serial Management Interface),也被称作 MII 管理接口(MII Management Interface),包括 MDC 和 MDIO 两条信号线。 MDIO 是一个 PHY 的管理接口,用来读/写 PHY 的寄存器,以控制 PHY 的行为或获取 PHY 的状态, MDC 为 MDIO 提供时钟,由 MAC 端提供,也就是 FPGA 端。 MDC 的周期最小为 400ns,也就是最大时钟为 2.5MHz。