一、 ARP 的作用
学习 ARP 协议之前我们先来了解,为啥要有 ARP 协议!
在计算机通信中,只知道其他计算机的 IP 地址是无法通信的! 我们都知道 IP 地址位于三层网络层,我们的数据包在物理层传输是一帧一帧传输的,没办法去传输 IP 数据报文,所以我们需要将报文封装成帧。在二层物理链路层中,是以 MAC 地址进行通信的,所以帧里面必须包含目的计算机的 MAC 地址。所以我们需要一个技术,将 IP 地址映射到 MAC 地址。而 ARP 就是实现这个技术的协议!
- ps:MAC 地址是唯一的,在网卡出厂时已经烧录好了,只要不更改自己的MAC地址,MAC地址在世界是唯一的!
二、 地址转换的过程
1、计算机A、B在同一局域网通信
如果计算机 A 和 B 在同一局域网中,它们之间的通信过程如下:
A 要给 B 发送一个数据包
1、首先 A 知道 B 的 IP 地址,那么 A 直接查看自己的 ARP 表,看看有没有 B 的 IP 所对应的 MAC 地址
2、如果有的话,就直接将数据包封装成帧发给 B
3、如果没有的话,A 就压根不知道 B 在哪,那么 A 就缓存该数据报文,然后以广播的方式发送 ARP 请求(该ARP 请求包含了 A 的 IP 、MAC 和 B 的 IP,其中B 对应的 MAC 地址为 全0)
4、B 听到 A 在广播里叫 B 在哪里?然后 B 一看,这不是叫我吗?然后 B 就将 A 的 IP 地址和 MAC 地址缓存在自己的 ARP 表中,再以单播的形式回一个 ARP 响应报文给 A,里面包含了 B 的 MAC 地址。
5、A 收到 B 的 ARP 响应报文后,将 B 的 IP 和 MAC 地址缓存在自己的 ARP表中,再将先前要发给 B 的数据包封装成帧,发给 B。
2、计算机A、B不在同一局域网
A 要给 B 发送一个数据包
由于 A 和 B 不在同一个局域网,所以 A 只能通过网关将包转发给 B 了。
1、A 要发送数据包给 B,由于不在同一个局域网,所以 A 得将数据包先发到网关,A 和网关是在同一局域网,所以 A 会先查看自己的 ARP 表,看看网关的 MAC 地址是多少(如果没有网关的 MAC 地址,那就通过广播的方式发送一个 ARP 请求,网关对比 IP ,发现 A 找自己,便缓存 A 的 MAC 地址 和 IP 地址到自己的 ARP 表,并将自己的 MAC 地址放进 ARP 回应报文,A 收到 来自网关的 ARP 回应报文之后,便把网关的 IP 和 MAC 缓存进自己的 ARP 表中)
2、当 A 确定了网关的 MAC 地址之后,便将数据包封装成帧(源IP为A的IP,源MAC地址为A的MAC地址,目的IP为B的IP,目的MAC地址为网关的MAC地址),发给网关。
3、网关接收到数据包后,便查看自己的 ARP表,如果没有 B的 IP 所对应的 MAC地址,则广播 ARP请求报文 ,得到 B 的MAC 地址后,将数据包封装成帧发送给 B ;如果 该 网关(路由器) 和 B 不在一个局域网,那么 网关 将 数据包封装成帧((源IP为A的IP,源MAC地址为A的MAC地址,目的IP为B的IP,目的MAC地址为下一跳网关的MAC地址)后发给下一个网关,直到数据包传输到 B
整个传输过程中,数据包的源IP、源MAC地址和目的IP都没有变,变的只是目的MAC地址