每块网络设备都至少有一个地址, 称为MAC地址
, 也称物理地址。 MAC地址长6B
, 一般由冒号(或连字符)分个的6个十六进制数表示, 如:02-60-8c-e4-b1-21
, 高24位为厂商代码, 低24位为厂商自行分配的网卡序列号。
常用的以太网MAC帧格式有两种标准: DIX Ethernet V2
标准 和 IEEE 的 802.3
标准, 最常用的MAC帧格式是以太网V2的格式:
MAC帧字段说明:
前导码
: 8个字节可分两部分, 第一部分7个字节, 是前同步码, 用来迅速实现MAC帧的比特同步; 第二个字段是帧开始定界符,表示后面的信息就是MAC帧。地址
: 6B的地址(MAC地址)类型
: 用来标志使用的是什么协议, 以便把收到的MAC帧的数据上交给这个协议处理数据
: 46 ~ 1500B
, 由于CSMA/CD
算法的限制, 以太网帧最小长度为64B
(其他字段共占了18B
, 数据字段最少46B
), 因此当数据字段长度小于46B
时, 必须在数据之后进行, 保证以太网的MAC帧长不小于64B
。FCS
: 4B
校验字段, 校验范围从目的地址到数据段的末尾, 算法采用32位的CRC。ARP
无论在网络层使用什么协议, 在实际网络的数据链路上传送数据时, 最终必须使用硬件地址。 所以需要一种方法来完成IP地址
到MAC地址
的映射, 这就需要用到地址解析协议(Address Resolution Protocol, ARP
)。 每台主机(路由器)上单独存放一个从IP地址
到MAC地址
的映射表, 称ARP表
, 使用ARP协议来动态维护此ARP表。
ARP帧格式如下:
以太网目的地址
: 目的主机的硬件地址。目的地址全为1表示广播地址以太网源地址
: 源主机的硬件地址帧类型
: 对于ARP协议
, 该字段为0x0806
; 对于RARP协议
, 该字段为0x8035
硬件类型
: 表示硬件地址的类型, 值为1时表示以太网地址。也就是说ARP协议不仅仅应用于以太网协议, 还可以支持别的链路层协议协议类型
: 表示要映射的协议地址类型。值为0x0800
表示IP协议。硬件地址长度
: 与硬件类型
对应的硬件地址长度
, 以字节为单位。如果是以太网,则是6字节(MAC长度)协议地址长度
: 与协议类型
对应的协议地址长度
, 以字节为单位。如果是IP协议, 则是4字节(IP地址长度)操作类型(op)
: 四中操作类型。1
表示ARP请求
; 2
表示ARP应答
; 3
表示RARP请求
; 4
表示RARP应答
发送端硬件地址
: 如果是以太网, 则是源主机以太网地址, 此处和以太网头中的源地址对应发送端协议地址
: 如果是IP协议, 则表示源主机的IP地址目的端硬件地址
: 如果是以太网, 则是目的以太网地址, 和以太网头中的目的地址对应目的端协议地址
: 如果是IP协议, 则表示源主机要请求硬件地址的IP地址另外, 需要注意:
以太网首部(14B)
就是上一部分内容中的MAC帧
的格式以太网首部
与ARP报文体
的部分内容是重复的。对应ARP请求包来说, 以太网首部
中的目的物理地址为FF-FF-FF-FF-FF-FF
, 报文体中的目的端的硬件地址
字段无需填充, 其他字段都需要填充。28B
, 需要进行填充, 使得MAC帧
数据部分最少为46B
(首部14B, 数据46B, FCS 4B, 总共64B)在以太网(ARP协议只适用于局域网
)中, 如果本地主机想要向某一个IP地址的主机发数据报, 但是并不知道其硬件地址, 此时利用ARP协议提供的机制来获取硬件地址,具体过程如下:
主机B
发送IP数据报时, 就先在自己的ARP缓冲表中查看有无主机B的IP地址MAC帧
(链路层协议), 然后通过局域网将该MAC帧
发往目的主机FF-FF-FF-FF-FF-FF
(MAC地址为6B)的帧来封装并广播ARP请求分组注意: ARP解决的是同一个局域网上的主机或路由器的IP地址与MAC地址的映射问题。如果要找的主机和源主机不在同一个局域网上, 那么需要通过ARP协议找到一个位于本局域网的某个路由器的硬件地址, 然后把分组发送给这个路由器, 让这个路由器把分组转发给下一个网络