1 MAC和PHY
2 MDIO接口
MDIO(Management Data Input/Output)接口是根据IEEE 802.3标准定义的一种简单双线串行接口,主要用于以太网MAC(Media Access Control)控制器与物理层(PHY, Physical Layer)器件之间的管理通信。这种接口允许MAC控制器或者上层管理系统读取和修改PHY芯片内部的寄存器设置,以便控制和监测PHY的工作状态。
MDIO接口包含了两条信号线:
MDIO: 这是一条双向数据线,用于在管理器件和PHY之间交换控制和状态信息。在不同的时间段内,这条线既可以用作数据输入也可以用作数据输出。
MDC (Management Data Clock): 这是MDIO接口的时钟信号线,由管理器件提供,用来同步MDIO上的数据传输。
通过MDIO接口,可以实现以下功能:
- 配置PHY芯片的各种参数,比如速度选择、双工模式、自动协商、节能模式等。
- 查询PHY芯片的状态,如链路状态(Link Up/Down)、接收信号强度、错误统计等。
- 控制物理层的特性,例如启动和停止物理层的自动协商过程。
MDIO协议基于特定的时序进行操作,允许MAC控制器按照一定的命令格式读取或写入PHY的多个寄存器,从而实现了对以太网物理层设备的灵活配置和实时监控。
3 以太网帧格式
典型的以太网帧格式主要包括以下几个主要部分:
前导码(Preamble):
- 一组连续的7个字节(56比特)的
10101010…101010
序列,用于接收设备同步时钟和确定帧的开始。
帧起始定界符(SFD, Start-of-Frame Delimiter):
- 第8个字节,值为
10101011
,标志着帧正文的开始。
以太网帧头(Ethernet Header):
- 源MAC地址(Source MAC Address):6个字节,表示发送方的物理地址。
- 目标MAC地址(Destination MAC Address):6个字节,表示接收方的物理地址。
- 类型/长度字段(Type/Length Field):2个字节,指明上层协议类型(如IPv4、IPv6、ARP等)或在某些类型的帧中表示帧的数据部分的长度。
数据负载(Payload):
- 可变长度,最小46字节,最大取决于以太网类型。通常承载的是上层协议数据单元(如IP数据包)。
帧校验序列(FCS, Frame Check Sequence):
- 4个字节(32位),采用循环冗余校验(CRC)算法计算得出,用于检测帧在传输过程中是否出错。
4 ARP
在以太网中,每个设备都有一个唯一的MAC地址,这是其硬件标识符,用于在物理层上识别设备。而IP地址则是网络层为了寻址和路由数据包所使用的逻辑地址。当一台主机想要与同一网络内的另一台主机通信时,即使它知道目标主机的IP地址,也需要知道目标主机的MAC地址以便封装数据包到以太网帧中进行传输。
以下是ARP的工作流程:
ARP请求: 当主机A需要向主机B发送数据,并且只知道主机B的IP地址时,主机A会通过广播的方式发送一个ARP请求到整个局域网中。这个请求中包含了目标主机B的IP地址,并询问:“具有这个IP地址的设备,请告诉我你的MAC地址。”
ARP响应: 主机B收到ARP请求后,发现请求的目标IP地址与自己的IP地址匹配,便会回复一个ARP应答给主机A。ARP应答中包含了主机B的MAC地址。
ARP缓存: 主机A收到ARP应答后,会将主机B的IP地址与其对应的MAC地址存储在本地的ARP缓存中,这样下次再需要发送数据给主机B时,就可以直接从缓存中查找MAC地址,无需再次发起ARP请求。
4.1 以太网 ARP 数据包格式
帧格式:
ARP 数据报文格式:
硬件类型(Hardware Type,2字节)
- 表示物理层地址类型,例如对于以太网,其值通常为0x0001。
协议类型(Protocol Type,2字节)
- 表示要映射的网络层协议地址类型,对于IPv4,其值为0x0800。
硬件地址长度(Hardware Address Length,1字节)
- 指定硬件地址(MAC地址)的字节数,对于以太网,该值为6。
协议地址长度(Protocol Address Length,1字节)
- 指定协议地址(IP地址)的字节数,对于IPv4,该值为4。
操作代码(Operation Code,2字节)
- 定义了ARP请求(0x0001)或ARP应答(0x0002)的操作类型。
发送者硬件地址(Sender Hardware Address,6字节)
- 发送ARP数据报文的设备的MAC地址。
发送者协议地址(Sender Protocol Address,4字节)
- 发送ARP数据报文的设备的IP地址。
目标硬件地址(Target Hardware Address,6字节)
- 在ARP请求中通常填充全0,表明请求未知的目标MAC地址;
- 在ARP应答中填充请求者期望的目标MAC地址。
目标协议地址(Target Protocol Address,4字节)
- 在ARP请求中填充需要解析的远程IP地址;
- 在ARP应答中填充请求者的IP地址。