ARP相关知识点

在腾讯实习生面试时,一个有关ARP的知识点被面试官问到了,但是当时对ARP知识点一点也不懂。今天根据《TCP/IP详解》上对ARP的学习,在这里做下笔记。

当时问的题目是:ARP从源主机到目的主机在内核中被拷贝了几次?

ARP知识点:

1、ARP在哪一个层工作?

ARP在数据链路层工作。


2、ARP的作用

ARP是通过请求/应答模式根据目的主机的IP地址获取目的主机的MAC地址。

HTTP也是基于请求/应答模式工作的。


3、ARP的工作方式

源主机想要向目的主机发送数据,需要通过ARP协议来获取目的主机的物理地址(MAC地址)。ARP请求分组以广播形式发送,以单播形式应答。


4、ARP缓冲机制

ARP是计算机中的一缓冲区,里边存放着最近访问的目的主机的IP--->MAC的映射(目的主机IP------>目的主机MAC)。如果某条映射超过一定的时间不被使用(20Mins),就会被删除掉。


5、ARP分组格式

ARP分组中最为重要的是:发送端的IP地址、发送端的MAC地址、目的端的IP地址、目的端的MAC地址。

当一个分组的MAC地址为 "ff-ff-ff-ff-ff-ff" 时,说明这个分组以广播形式在该局域网上发送,即发送给该网段的每个主机。如果某个主机是分组中目的IP地址,那么将对应主机的MAC地址填充进去,并返回一个ARP应答分组。

ARP请求分组中的目的MAC地址就是"ff-ff-ff-ff-ff-ff",目的主机收到后会将自己的MAC地址填充进去。


6、ARP如何实现IP到MAC地址的映射?

主机A想要向主机B发送数据前要知道主机B的MAC地址。首先A在自己的ARP缓冲表查找,看有没有主机B的IP--->MAC的映射,如果有则直接取出使用。

如果没有,要通过ARP请求/应答报文的形式获取目的主机的MAC地址。在获取目的主机B的MAC地址时,我们要分两种情况分析:case1、源主机A与目的主机B在同一个网段(子网掩码相同)

                    源主机以广播形式发送ARP请求报文给该网段的每一个主机,其中请求报文的目标MAC为'ff:ff:ff:ff:ff:ff'表明为广播地址。每个主机收到这个ARP请求报文后,首先将源IP---->源MAC添加到自己的ARP缓冲中,然后将请求报文中的目的IP与自己匹配,如果一样则将自己的MAC地址填充到ARP分组中,以单播形式向源主机返回一个ARP应答报文。如果与自己的IP不一样,就丢弃该ARP分组。(如果你是这个IP的拥有者,请你回答你的MAC地址)

源主机收到ARP应答后,将目的IP----->目的MAC的映射添加到自己的ARP缓冲中。

                     case2、源主机A和目的主机B不在同一个网段(中间隔离若干台路由器)

这时是通过ARP分组广播形式获取该网段的某个路由器的MAC地址,将分组发送给这个路由器。但是路由器收到数据后发现数据的目的主机不是我,那么路由器还需要继续往下转发,同样以广播形式发送ARP获取下一个路由器的MAC地址,将数据发送给下一个路由器,......,直到将数据发送到目的主机。


7、总结

ARP请求分组都是以广播形式发送给本网络的所有主机,然后会以单播形式回应。

如果数据发送方是主机,接收方是本网络上得另一个主机:直接使用ARP获取目的主机的MAC地址;

如果数据发送方是主机,接收方是另一个网络上的主机:使用ARP获取本网络上的路由器的MAC地址,将数据发送到这个路由器上,剩下的工作交给这个路由器;

如果数据发送方是路由器,接收方是路由器所在网络上的主机:使用ARP获取目的主机的MAC地址;

如果数据发送方是路由器,接收方是另一个网络上的主机:使用ARP获取下一个路由器的MAC地址,将数据发送给下一个路由器,剩下的工作交给下一个路由器;


简单一句话说,ARP在每一个网段中都是以广播形式发送,以单薄形式返回。


8、例子


如上图,主机A、B通过路由器连接,属于两个不同的网段子网掩码24(255.255.255.0),这两个主机之间ARP发送过程为:

1>主机A有数据发往主机B,数据封装IP之后发现没有主机B的mac地址;然后查询ARP,ARP回应:“我在192.168.3.0/24网段,目标地址在192.168.4.0/24,不属于同一网段,需要使用默认网关”;ARP发现默认网关是192.168.3.2,但是没有网关mac地址,需要先进行查询

2>主机将数据包先放到缓存中,然后发送ARP查询报文:封装自己的mac地址为源mac,目标mac地址写全F的广播地址,请求网关192.168.3.2的mac地址。然后以广播方式发送出去

3>路由器收到广播数据包,首先将原192.168.3.1添加到自己的mac地址表中,对应mac地址为0800.0222.2222。路由发现是请求自己的mac地址,然后路由回复一个ARP应答:封装自己的IP地址为源IP自己的mac地址为源mac,主机A的IP为目的IP主机A的mac为目的mac,发送一个单播应答“我是192.168.3.2.我的mac地址为 0800.0333.2222”

4>主机收到应答后,将网关mac地址对应192.168.4.2(跨网关通信,其他网段IP地址的mac地址均为网关mac),然后将缓存中的数据包,封装网关mac地址进行发送

5>路由收到数据包,检查目的IP地址,发现不是给自己的,决定要进行路由,然后查询路由表,需要发往192.168.4.0网段中的192.168.4.2地址。路由准备从相应接口上发出去,然后查询mac地址表,发现没有主机B的映射。路由器发送arp请求查询主机B的mac地址(原理同2、3步,主机B收到请求后首先会添加网关的mac地址,然后单播回复arp请求)。

6>路由器收到主机B的mac地址后,将其添加到路由mac地址表中,然后将缓存中的数据2层帧头去掉,封装自己的mac地址为源mac,主机B的mac地址为目的mac(源和目的IP地址不变),加上二层帧头及校验,发送给主机B。

7>主机B收到数据之后,进行处理,发送过程结束。

8>如果主机B收到数据后进行回复,主机B会进行地址判断,不在同一网段,然后决定将数据发送给网关,主机B查询mac地址表获得网关mac地址,将数据封装后发送(arp地址解析的过程不再需要了,mac地址表条目有一定的有效时间),网关收到数据后直接查询mac表,将二层帧mac地址更改为A的mac发送出去。如此,主机A收到主机B的回复。

9、Question

Q1、有了IP地址,为什么还需要MAC地址?

注意没经过一个路由器,分组的目的MAC地址会发生改变,但是目的IP地址不会发生改变。报文的目的MAC地址为吓一跳的路由器的MAC地址,IP地址仍然为目的主机的IP地址(目的主机在另外一个网络上)。


Q2、为什么不能广播到目的主机所在网络?

因为路由器是一个广播域,路由器会隔离广播的报文。广播报文无法穿过路由器,每个网段形成一个广播域。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值