MIT-CS144学习随笔-地址解析协议ARP
1.为什么要使用ARP协议?
在计算机网络中,网络实际传输的是“帧”。所以在传输时必须要知道目标主机的MAC地址,仅仅知道ip地址是不够的。而ARP协议的主要功能就是将目标主机的ip地址转化为目标主机的MAC地址。
2.如何获取MAC地址?广播与单播
每一台遵守TCP/IP协议的主机中都会有一个ARP缓存表,里面存有所在局域网上的各个主机和路由器的IP地址到MAC地址的映射表。. 当我们需要与局域网中其他主机进行通信时,主机首先查询自己的ARP缓存表,查看是否有与所查询ip地址对应的MAC地址,如果有,直接添加地址到传输的数据包中。否则,ARP进程在本局域网上广播发送一个ARP请求分组. 其中内容大致为“我的IP地址为xxxxxx, MAC地址为xxxxxx,我想知道IP地址为xxxxxx 的MAC地址 00:00:00:00:00:00(MAC地址为48bit,这里的全0地址表示等待被呼叫方填写)”. 符合该IP地址的被呼叫主机进行响应,其他主机无响应,而被呼叫主机向呼叫方发送响应分组,其中写入自己的硬件地址。响应过程为单播。
接下来给出ARP Packet 格式:

使用wireshark 对 arp进行抓包

3. ARP高速缓存表的生存时间
ARP 对高速缓存表中的每一个映射地址都设置生存时间. 超过生存时间的映射项目都会被删除。这是因为存在以下情况,对于某个主机B,它的网络适配器可能发生故障,因此更换了一张网卡,而之前主机A与主机B通信过,所存的MAC映射地址为原先的网卡地址,但是原先的网卡地址已经失效,因此主机A无法找到主机B.
4.寻找不在同一局域网上主机的MAC地址
对于不在同一局域网上主机的MAC地址解析,往往是通过路由器进行中间转发的,我们都知道路由器负责连接两个不同的网络,其中主机A若是想要知道主机B的MAC地址,首先在自己的局域网中ARP广播寻找到路由器的MAC地址,然后路由器再在另外一个局域网中ARP广播寻找主机B的MAC地址。
举出一个例子

例如主机A 想给主机 B 发送一个数据包,但是发现没有主机B的MAC
则主机A先缓存自己的数据包,先查询自己的MAC地址表,发现没有主机B的MAC地址表,主机A则先要与默认网关进行通信,发现没有网关MAC地址,则主机A发送一个广播ARP数据包,网关单播回复自己的MAC地址,这时候主机A将数据包设置成 target ip address为 主机B的IP, target mac address为网关的MAC,网关接收到数据包后发现,这个数据包不是发给自己的,于是路由查询,我们知道,在数据包路由过程中,目标IP和源IP是不会发生变化的,中间变化的是源MAC和目标MAC地址,在这个例子中,路由器进行路由,发现主机B在192.168.4.0网段,则发送ARP广播,请求B的MAC地址,B单播回复,这时路由器发送的数据包是源IP 主机A ,目标IP 主机B ,源MAC 路由器, 目标MAC, 主机B。

浙公网安备 33010602011771号