网工学习之ARP详解

  • ARP作用

地址解析协议,是根据IP地址获取MAC地址的网络层协议,通常发生在首次通信,在通信后会将IP地址和MAC地址写入本地ARP缓存表中,下次请求时直接读取表中数据以节约时间。如果缓存表中没有对应的MAC地址,则会发送包含目标IP地址的ARP请求广播到局域网所有主机,并接受返回消息,以此获得对方的MAC地址。其他主机收到广播帧后进行解封装,发现是ARP广播包,然后查看自身MAC地址是否匹配,匹配则以单播的方式进行回应,不匹配则直接丢弃

  • 提出假设

在同一网段的主机之间发送消息不需要经过网关,假如两台主机在同一网段,但却被路由器分割为两个物理网段,且不配置网关,这样两台主机是否能够互通?

  •    实验

在模拟器中搭建如下拓扑

网工学习之ARP详解

PC和路由器接口地址如下

端口

IP地址

子网掩码

PC1

1.1.1.1

255.255.0.0

PC2

1.1.2.1

255.255.0.0

MSR GE0/0

1.1.1.2

255.255.255.0

MSR GE0/1

1.1.2.2

255.255.255.0

这样两台PC虽然在同一网段,但实际上被已经被路由器划分为两个不同的物理网段

先在PC1的0/1接口开启抓包,再打开PC1 ping PC2:

网工学习之ARP详解

发现两台主机之间并不互通

打开wireshark查看刚才抓取的数据包

网工学习之ARP详解

可以看出PC1共发出了三个ARP请求以及ARP通告,先打开通告查看它的数据包类型

网工学习之ARP详解

ARP通告为广播发送,其中包含了发送方的IP与MAC地址,还有自己将继续使用的目标地址,相当于是告诉大家,这个IP地址我要用,我是XXX(MAC地址),作为发送方是不希望这个报文收到回应的,因为如果收到回应,意味着将要使用的IP地址已经有其他主机在使用,会产生冲突

    再看看ARP请求报文的内容

网工学习之ARP详解

从上图可以看出

  硬件类型为以太网1;

  协议类型为IPv4;

  操作类型为0x0001,表示报文类型为ARP请求

  以及包含了发送的IP及MAC地址,但接收方的MAC地址为0,并没有填写,只有接收方的IP地址,

这个数据包的大概意思就是我需要知道这个IP地址的MAC地址,如果知道就发给我,但并没有收到回应报文,因此PC1虽然虽然知道PC2的IP地址,但因为不知道对方的MAC地址,所以无法与对方建立联系

  • 解决办法:

给两台PC都添加网关地址或者给路由器配置代理ARP,这里主要讨论ARP,因此暂不考虑第一种方式

进入路由器端口视图,开启代理ARP

网工学习之ARP详解

在PC1的0/1端口开启抓包,然后在PC1上ping PC2

网工学习之ARP详解

显示两台PC可以互通,打开抓包软件查看刚才抓取的数据包

网工学习之ARP详解

可以发现与之前抓取的数据包相比,本次抓取的数据包多了ARP回应报文以及ICMP报文

打开ARP回应报文查看详细信息

网工学习之ARP详解

可以看出回应报文和请求报文的报文格式基本是相同的,有部分区别:

操作类型的值变成了0x0002,表示这是ARP回应报文

发送方和接收方的IP地址与MAC地址与请求报文的发送方与接收方的IP和MAC地址互换了位置,表示这是从PC2所发出的,与请求报文的内容相关联来看,这个回应报文的大致意思就是PC2表示我有IP地址为1.1.2.1的MAC地址,我发给你

其次,我们还可以发现回应报文的数据链路层IP头部数据发生了变化

请求报文:

网工学习之ARP详解

回应报文:

网工学习之ARP详解

对比以上两图可以发现,请求报文中的接收方地址为: ff:ff:ff:ff:ff:ff:ff:ff:是一个广播地址,没有具体的接收方地址,只有发送方的MAC地址;而回应报文中则既有发送方的地址,也有接收方的地址。由此可以看出ARP是以广播发起请求,以单播发起回应。

  • 再次提出假设

为什么在路由器端口上配置了代理ARP就两台主机就可以互通了呢?

  • 验证

将抓包接口换成PC2的0/1口,查看它是如何回应PC1的ARP请求的

网工学习之ARP详解

通过抓包发现,PC2并没有收到来自PC1的请求,而是收到了来自路由器0/1接口的ARP请求,其请求的内容为PC2的MAC地址,由此可以看出,路由器在配置代理ARP后,并没有转发PC1的ARP请求,而是将自己的地址换成PC2的,回应给PC1,再以PC1的名义去访问PC2.整个过程中PC1以为自己访问的是PC2,但实际上并没有,实际上PC1访问的是路由器,路由器再去访问的PC2

  可以看出,开启ARP代理前后的区别就在于路由器会不会修改自身MAC地址;不开启的话,路由器不会发送自身MAC地址,PC1和PC2就无法建立通信;开启后,路由器会作为中间人代理PC1和PC2之间的通信

  • 总结

经过以上实验不难得出结论:

  1. 每台主机会向全网发送ARP通告,告知全网自己所使用的IP地址与对应的MAC地址,以避免局域网中产生IP冲突
  2. 主机在已知对方IP,不知道对方MAC地址时,首先查看自己的MAC地址表,有对应的MAC地址就会直接发送,没有的话则会发出ARP请求
  3. 请求会以广播的形式发出,而接收到的主机会查看自身MAC表,如果不匹配,会直接丢弃,匹配则以单播的方式进行回应
  4. 如果两台主机在同一网段,被路由器隔离为两个物理网段(不在同一广播域),此时需要在路由器上对应端口开启ARP代理,才能使两台主机相互通信
  5. 配置代理ARP后,PC1在与PC2通信时,PC1并没有真正访问到PC2,而是路由器修改自身MAC地址,让PC1以为自己访问到了PC2,但实际上PC1是在访问路由器,路由器去访问的PC2,在整个过程中,路由器在其中处于代理人的身份,因此proxy-arp也叫做代理ARP

以上是我学习NE期间的学习总结,如有不对望各位大佬指正

上一篇:1937270-46-6,PC Biotin-PEG3-azide用于使用点击化学将生物素部分引入含炔生物分子


下一篇:字符串基础 “ “