【原创作品,禁止转载,如要转载,请私信公众号engineer-along】
有读者在新浪微博私信阿龙,关于ARP的困惑:
本期,我就来解答一下关于ARP的工作原理吧!
(今后,各位读者,要是有遇到什么困惑,或者有什么建议,也欢迎来私信,虽然我现在好久没搞路由交换了,但只要阿龙会的,还是会尽力帮大家解答的。别忘了,当初我们的初衷就是:是为了集结所有热爱网络技术的爱好者,大家一起交流、分享知识、分享你我的见解、一起成长。交流的方式有很多,比如大家一起在文章下面进行评论,大家看了,就多收获了解决问题的一种思路、思想。)
本篇适合初学者、在校大学生阅读,本公众号也存在许多技术很厉害,甚至比阿龙强得多的读者,看到本篇,您就饶过阿龙了,就飘过好了。或者当初复习一下也挺好的。
1、思考ARP到底是干嘛的? 为什么要有它?why?
2、掌握ARP的工作原理。
技术人,要掌握一种技术,绝对离不开以上两点基本思路,带着这两个思路去学习新技术,你绝对是不可能学不会的。再笨,你也会学得很深刻的。甚至,你还可以有更多的思路,比如,可不可以没有它? 有它?跟没有它的情况又是什么样的?等等。
我们都知道局域网里面通信,都是靠MAC地址来通信的。ARP简单说,就是用来把IP地址转换成MAC地址,就是某个去往目的IP地址翻译成MAC地址。
交换机的工作原理就是基于源MAC地址学习,基于目的MAC地址转发的。大家都知道网络的参考模型,我们在电脑上要发送消息时,电脑内部的处理机制是先从上层开始一层一层往下封装的。如图:
电脑从上层往下封装,到了二层,要封装帧头部时,就需要把目的mac地址封装上,形成完整的二层头部后,就可以发送出去了。
现在的问题就是,电脑如何知道对方的MAC地址?
当用户计算机A在上使用QQ聊天工具,输入:你好,约吗?
回车,计算机A就先从上层往下封装头部。如IP头部就将
目的IP:1.1.1.2 , 源IP就是:1.1.1.1 等信息进行封装,到了二层,就需要将目的MAC地址,源MAC地址进行封装。计算机A肯定知道自己网卡的mac地址,为1111.1111.1111.1111。但是目的mac地址(计算机E的mac地址)就不知道了,因为他们是第一次通信,哪里知道啊~ 要是知道,就上天了!
于是,这时候,计算机A就执行ARP程序,发送一个ARP请求报文的广播包:
该数据包的关键字段如下:
二层:
目的MAC地址:ffff.ffff.ffff.ffff
源mac地址:1111.1111.1111.1111
类型:0x0806
arp的关键内容如下:
source mac:1111.1111.1111.1111.1111
source IP: 1.1.1.1
target mac:ffff.ffff.ffff.ffff (因为第一次通信,不知道对方的mac地址)
target IP:1.1.1.2
这样,交换机收到这个报文,看到目的mac地址是全F就进广播!
阿龙这里要提醒初学者的是,因为交换机是二层设备,只会拆包、解析到二层信息而已,不会进行更深入的解析,如网络层信息。换句话说,就是交换机根本不知道里面是什么数据,只知道这个数据包的源、目mac地址而已。
这样,所有的计算机收到这个广播包,会进行更深入的解析,看到里面的target IP 是1.1.1.2, 与自己的IP地址进行对比,发现不一样,就丢弃。发现一样,就回应ARP报文。单播回应喔!
ARP的响应报文里的关键字段如下,
二层:
目的MAC地址:1111.1111.1111.1111
源mac地址:2222.2222.2222.2222
类型:0x0806
arp的关键内容如下:
source mac:2222.2222.2222.2222
source IP: 1.1.1.1
target mac:1111.1111.1111.1111 (从请求包里得知A的mac地址,于是单播)
target IP:1.1.1.1
这样,计算机A收到这个报文后,就将计算机E的mac地址记录下来,存在计算机A的一个数据库,叫做ARP缓存表。下次通信时,如果缓存未超时,就可以直接使用了。如果超时了,就再次进行arp请求广播了。
如果你还不信的话,那龙哥就亲自动手做实验吧!
计算机A的信息:
计算机E的信息:
用计算机A ping 计算机E来模拟A发送消息给计算机E,并且抓包:
抓包就会发现抓到了2个ARP的报文:
1、
2、
这时,你就可以在计算机A看到arp缓存表了:
不知道,那位同学明白了没? 如以上有讲错地方,欢迎大家在下方评论地方指出! 如您还有其他见解,也欢迎您在下方评论的地方进行参与。
感觉您的阅读! 祝您学习愉快!