地址解析协议 ARP
在共享总线型的以太网中
为了简单起见:只有各主机所配置的 IP
地址和其网卡上固化的 MAC
地址
假设主机 B
要给主机 C
发送数据包
主机 B
知道主机 C
的 IP
地址,但是不知道 C
的 MAC
地址
B
的数据链路层在封装 MAC
帧时,就无法填写目的 MAC
地址字段,进而也就无法构建出要发送的 MAC
帧实际上,每台主机都会有一个 ARP
高速缓存表
其中记录有 IP
地址和 MAC
地址的对应关系
例如:主机 A
的 IP
地址与 MAC
地址的对应关系
主机 B
要给主机 C
发送数据包时
会首先在自己的 ARP
高速缓存表中查找主机 C
的 IP
地址对应的 MAC
地址,但是未找到
因此,主机 B
需要发送 ARP
请求报文来获取主机 C
的 MAC
地址
广播
来根据获取目的主机 IP
获取其 MAC
地址)ARP
请求报文的内容:
IP
地址为
192.168.0.2
192.168.0.2
192.168.0.2MAC
地址为
00
−
E
0
−
F
9
−
A
3
−
43
−
77
00-E0-F9-A3-43-77
00−E0−F9−A3−43−77IP
地址为
192.168.0.3
192.168.0.3
192.168.0.3 的主机的 MAC
地址注意
:
这里以比较通俗的语言描述其内容,实际上 ARP
地址有具体的格式
ARP
请求报文封装在 MAC
帧中发送,目的地址为广播地址
主机 B
发送封装有 ARP
请求报文的广播帧
总线上的其他主机都能收到该广播帧
主机 A
的网卡收到该广播帧后,将其交给上层处理
ARP
进程解析 ARP
请求报文IP
地址不是自己的 IP
地址,因此不予理会主机 C
的网卡收到该广播帧后,将其交给上层处理
上层的 ARP
进程解析 ARP
请求报文
发现所询问的 IP
地址正是自己的 IP
地址,需要进行响应
主机 C
首先将 ARP
请求报文中所携带的主机 B
的 IP
地址与 MAC
地址记录到自己的 ARP
高速缓存表中
然后给主机 B
发送 ARP
响应报文,已告知自己的 MAC
地址
ARP
响应报文的内容:
IP
地址为
192.168.0.3
192.168.0.3
192.168.0.3MAC
地址为
00
−
0
C
−
C
F
−
B
7
−
4
A
−
82
00-0C-CF-B7-4A-82
00−0C−CF−B7−4A−82注意
:
这里以比较通俗的语言描述其内容,实际上 ARP
地址有具体的格式
ARP
响应报文封装在 MAC
帧中发送,目的地址为主机 B
的 MAC
地址
主机 C
发送封装有 ARP
响应报文的单播帧
总线上的其他主机都能收到该单播帧
A
的网卡收到该单播帧后,发现其目的 MAC
地址与自己的 MAC
地址不匹配
C
的网卡收到该广播帧后,发现其目的 MAC
地址就是自己的 MAC
地址(数据链路层)
ARP
进程解析 ARP
响应报文C
的 IP
地址与 MAC
地址记录到自己的 ARP
高速缓存表中主机 B
现在可以给主机 C
发送之前想发送的数据包了
ARP
请求的广播帧和 ARP
响应的单播帧是不同的
IP
地址是不是自己的 IP
地址MAC
地址接不接收该帧ARP
高速缓存表中的每一条记录都有其类型
动态
IP
地址与 MAC
地址的对应关系并不是永久性的
IP
地址并没有改变,但主机的 MAC
地址改变了静态
主机 H1
是否可以更用 ARP
协议获取到主机 H2
的 MAC
地址?
否定的。
ARP
协议只能在一段链路或一个网络上使用,而不能跨网络使用对于本例,ARP
协议的使用是逐段链路进行的
除 ARP
请求和响应外,ARP
还有其他类型的报文
IP
地址冲突的 “ 无故 ARP
、免费 ARP
(Gratuitous ARP) ” ;ARP
没有安全验证机制,存在 ARP
欺骗(攻击)问题。
ARP
请求的广播帧时,都会接受该广播帧,然后返回给自己的 IP
地址和 MAC
地址