(陈鑫杰)图解TCP/IP ARP协议原理
(陈鑫杰)图解TCP/IP ARP协议原理
如果要在TCP/IP协议栈中选择一个最不安全的协议,那么我会毫不犹豫把票投给ARP协议。我们经常听到的这些术语,包括网络扫描、内网渗透、中间人拦截、局域网流控、流量欺骗,基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP实现。
听上去这么逆天的协议,其实技术原理又简单的难以置信,例如ARP整个完整交互过程仅需要两个包,一问一答即可搞定!但是ARP协议也有它令初学者迷惑的地方,例如由它本身延伸出来的代理ARP、免费ARP、翻转ARP、逆向ARP,而这些不同种类的ARP,又应用于不同的场景。好吧,在深入到技术原理之前,作为初学者,我们先记住下面三句话:
①ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
②在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
③一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。
接下来,我们通过手绘图解的方式来深入了解ARP协议是如何工作的。
(注:所有手绘图解均由杰哥原创绘制,转载请注明出处!)
二、ARP原理之请求应答
同一个局域网里面,当PC1需要跟PC2进行通信时,此时PC1是如何处理的?
vx:pinginglab 官网:pinginglab@www.guifan.net
根据OSI数据封装顺序,发送方会自顶向下(从应用层到物理层)封装数据,然后发送出去,这里以PC1 ping PC2的过程举例==
vx:pinginglab 官网:pinginglab@www.xunwangba.com/read/
PC1封装数据并且对外发送数据时,上图中出现了failed,即数据封装失败了,为什么?
我们给PC1指令-ping ip2,这就告知了目的IP,此时PC1便有了通信需要的源目IP地址,但是PC1仍然没有通信需要的目的MAC地址。这就好比我们要寄一个快递,如果在快递单上仅仅写了收件人的姓名(IP),却没有写收件人的地址(MAC),那么这个快递就没法寄出,因为信息不完整。
那么,现在PC1已经有了PC2的IP地址信息,如何获取到PC2的MAC地址呢?此时,ARP协议就派上用场了。我们接着上面这张图,继续==
vx:pinginglab 官网:pinginglab@www.guifan.net
通过第三和第四步骤,我们看到PC1和PC2进行了一次ARP请求和回复过程,通过这个交互工程,PC1便具备了PC2的MAC地址信息。
接下来PC1会怎么做呢?在真正进行通信之前,PC1还会将PC2的MAC信息放入本地的【ARP缓存表】,表里面放置了IP和MAC地址的映射信息,例如 IP2-MAC2。接下来,PC1再次进行数据封装,正式进入PING通信,如下==
小结:经过上面6个步骤的处理,PC1终于把数据包发送出去了,之后便可以进行正常的通信了。看到了吧,ARP的功能和实现过程是如此的简单:它在发送方需要目标MAC地址的时及时出手,通过一问一答的方式获取到特定IP对应的MAC地址,然后存储到本地【ARP缓存表】,后续需要的话,就到这里查找。
既然是缓存表,意味着它有时效性,并且如果电脑或者通信设备重启的话,这张表就会清空;也就是说,如果下次需要通信,又需要进行ARP请求。在我们的windows/macos系统下,可以通过命令行arp -a查看具体信息=
vx:pinginglab 官网:pinginglab三、ARP原理之广播请求单播回应
上面的图解过程看上去简单又纯粹,好像我们就已经把这个协议的精髓全部get到,但其实,我们只是刚揭开了它的面纱,接下来我们才真正进入正题。例如,上面的图解过程中,整个局域网(LAN)只有PC1和PC2两个主机,所以这个一问一答过程非常的顺畅。
而实际网络中,这个LAN可能有几十上百的主机,那么请问,PC1如何将这个【ARP请求包】顺利的交给PC2,而PC2又如何顺利的把【ARP回应包】返回给PC1? 我们看下面的图:
为了营造出几十上百的效果,这里多添加了2个主机进来 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄,并且增加了有线和无线的环境。那么,在多主机环境下,PC1现在发出的ARP请求包,怎么交到PC2手里?
这时,ARP协议就需要采用以太网的广播功能:将请求包以广播的形式发送,交换机或WiFi设备(无线路由器)收到广播包时,会将此数据发给同一局域网的其他所有主机。
那么,什么是广播?对于初学者而言,我们只需要知道,大部分的广播包,它们有一个共同特征:二层封装时目的MAC是全f(ffff.ffff.ffff)或三层封装时目的IP是全1(255.255.255.255)。可以这样更方便的记住:目的地址最大的,就是广播。
注明:广播根据所在层次可分为二层广播和三层广播,根据发生范围可分为本地广播和定向广播,小伙伴们有兴趣可以自己再去拓展下。
接下来我们来看下这个ARP广播请求包接下来是如何工作的?
根据上图我们看到,PC1发送的请求广播包同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包。
ARP请求是通过广播方式来实现的,那么,PC2返回ARP回应包,是否也需要通过广播来实现呢?答案是否定的。大部分网络协议在设计的时候,都需要保持极度克制,不需要的交互就砍掉,能合并的信息就合并,能不用广播就用单播,以此让带宽变得更多让网络变得更快。
那么,ARP回应包是如何处理的?这里需要特别关注ARP请求包的内容,在上面的图解里面,ARP请求包的完整信息是:我的IP地址是IP1,MAC地址是MAC1,请问谁是PC2,你的IP2对应的MAC地址是多少?
简单来说,ARP请求首先有自我介绍,然后才是询问。这样的话,PC2在收到请求之后,就可以将PC1的IP和MAC映射信息存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。
这张图我们需要得到两个信息:①被询问者PC2先生成了ARP映射信息,然后才是询问者PC1;②PC3和PC4等其他主机,无法收到这个ARP回应包,因为是单播形式。
小结:ARP协议通过一问一答实现交互,但是问和答都有讲究,问是通过广播形式实现,答是通过单播形式。
四、ARP数据包解读
为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现,地址信息如下,部分MAC信息隐去。(建议初学者用GNS3配合Wireshark来抓取协议包进行分析,相比真实网络更加干净,方便分析)
主机1 --- 主机2
主机1:IP1 10.1.20.64MAC1:00:08:ca:xx:xx:xx
主机2:IP2 10.1.20.109MAC2:44:6d:57:xx:xx:xx
【ARP请求包】
【ARP回应包】
vx:pinginglab 官网:pinginglab【ARP协议字段解读】
Hardware type :硬件类型,标识链路层协议
Protocol type: 协议类型,标识网络层协议
Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)
Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应
Sender MAC address :发送者MAC
Sender IP address :发送者IP
Target MAC address :目标MAC,此处全0表示在请求
Target IP address: 目标IP
五、ARP到底是链路层还是网络层?
这个问题的难度堪比另外一个世界级难题:世界上最好的编程语言是什么?
其实早在20世纪时,W.Richard Stevens在《TCP/IP详解卷一》里面就提到了这个难题。这里给出我个人的协议分层思路,给大家作为参考=
协议到底所属哪一层,可以从应用/功能来考虑,也可以从层次/包封装来考虑。
以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议平起平坐,那么IP是网络层,ARP难道就不是网络层?
小结:基于功能来考虑,ARP是链路层协议;基于分层/包封装来考虑,ARP是网络层协议。(此方法对于ICMP协议同样管用)
【up主介绍】
陈鑫杰 拼客科技CEO / 拼客学院院长
多年一线互联网 / 金融 / 政府信息安全技术支撑
擅长网络安全 / Web安全 / 渗透测试 / 数字取证
网警技术顾问 / 多次协助抓获大型诈骗团伙
腾讯安全合作伙伴 / 共同打击灰黑产非法犯罪
51CTO金牌讲师 / 330万+学员 / 安全类Top1
知乎专栏作家 / bilibili知识领域优质up主
人邮签约作者 / 曾出版高等院校指定教材
【精选内容】
① 关于网络安全行业的一切,如何成为一名合格的白帽子黑客?网络安全-Web安全-渗透测试必备指南
② 零基础如何学习Web安全渗透测试?推荐这份史上最详细的自学路线图!
③ 网络安全到底在干啥?搞网络安全就是搞“黑客技术”?聊聊网络安全的知识体系和学习方向
④ B站最壕“搞机”?曝光百万级网络安全实验室!防火墙入侵防御漏洞扫描等都齐了!
【精选班级】
①《全栈渗透测试定向人才班》拼客学院 x 奇安信 | 直播 + 面授 网页链接
②《100天晋升Web白帽子黑客》
③《全栈网络安全专家》
【了解更多】
班主任vx:qiuzhiquanquan、tangtangbzr(添加时请备注“B站”)
vx公众号:拼客学院服务号(ID:pinginglab) 拼客院长陈鑫杰(ID:pingsec)
学院官网:
以上就是((陈鑫杰)图解TCP/IP ARP协议原理)全部内容,收藏起来下次访问不迷路!