处于同一子网下的两台主机需要通信时,不仅需要对方的IP地址,还需要对方的MAC地址。
arp协议可用于网络层地址(IP地址)和链路层地址(MAC地址)间的映射。
假设有A主机192.168.31.2需要和B主机192.168.31.3通信,A已经知道B的IP地址了,接下来需要获取B的MAC地址,这个时候A查询arp表,如果没有对应主机B的表项,就会广播一个arp分组请求B的MAC地址,子网里除B外其他主机都不响应A,B则会将自己的MAC地址发送给A,那么A就能向B发送数据了。
arp表
打开命令行,输入" arp -a " ,你将会看到一些表,这就是arp表,不止一张表是因为每个网络适配器都有它自己的arp表。
每台主机或路由器在其内存中都有arp表,用来储存一些IP地址和对应的MAC地址。一般每个表项存活时间为20分钟。
arp分组格式
一个常见分组格式为
以太网首部 | IP首部 | TCP首部 | 应用数据 |
而arp分组格式一般为
以太网首部(14byte) | arp数据报(28byte) |
从这个角度来讲,arp协议是一个网络层协议,因为它封装在以太网首部后。
接下来我们详细分析arp分组格式,arp分组一般有42byte,依顺序含义如下:
6 byte 目的MAC地址(广播地址为FF-FF-FF-FF-FF-FF)
6 byte 源MAC地址
2 byte 表示帧类型,0x0806表示是arp数据报
2 byte 表示硬件类型,0x00 01 指以太网接口
2 byte 表示协议类型,0x 08 00 指IP协议
1 byte 硬件地址长度(单位:字节)
1 byte 协议地址长度(单位:字节)
2 byte 表示操作类型,1表示arp请求,2表示arp响应
(6byte) 源链路层地址(不一定是6byte,因为有些网络不是以太网)
(4byte) 源网络层地址(不一定是4byte,因为网络层协议不一定是IP协议)
(6byte) 目的链路层地址(不一定是6byte,因为有些网络不是以太网)
(4byte) 目的网络层地址(不一定是4byte,因为网络层协议不一定是IP协议)
从arp数据报内容来讲,arp协议是一个链路层协议,因为一个网络层数据报里不该有链路层信息。
参考《计算机网络自顶向下方法》
参考 《TCP/IP详解,卷一:协议》