大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:
- 11 ARP协议详解 。
- 往期检索:程序设计学习笔记——目录
创建时间:2021年1月25日
软件: eNsp_Client 、SecureCRT 、MindMaster
- 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。
ARP协议详解:
1. ARP协议协议:
- 当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。
1. 1 什么是ARP协议?
- 在局域网中,交换机通过MAC地址进行通信,要获得目标主机的MAC地址就需要使用ARP协议将目的IP地址解析成目的MAC地址。
- ARP地址解析协议(Address Resolution Protocol )的基本功能:是负责将一个已知的IP地址解析成MAC地址,以便在交换机上通过MAC地址进行通信。
ARP实际上是一个广播。
1. 2 ARP协议报文:
- ARP报文分为
ARP请求
和ARP应答报文
报文类型 | 描述 |
---|---|
硬件类型 | 16位字段,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。 |
协议类型 | 16位字段,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议 |
硬件地址长度 | 8位字段,用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6 |
协议地址长度 | 8位字段,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4 |
操作类型(OP) | 16位字段,用来定义报文的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2) |
发送端MAC地址 | 这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节 |
发送端IP地址 | 这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节 |
目标MAC地址 | 这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址 |
目标IP地址 | 这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节 |
- 补充:
- ARP报文的总长度为64字节。
- 首先要知道帧的概念 帧是在数据链路层传输的数据格式,比如以太网v2,以太网IEEE802.3和PPP等。
- 所以Wireshark抓到的帧是包含帧头的,即包含以太网v2的帧头,长14 bytes;
- 而ARP数据包的长度固定为28 bytes;
- 帧总长度 = 帧头 + 网络层包头 + 传输层报文头 + 应用数据;
- 而ARP请求中ARP包已经是最高层,之上没有传输层和应用层,所以总长度为:帧总长度 = 帧头 + ARP包头 = 14 + 28 = 42 bytes;
- 而真正 发包的时为了保证以太网帧的最小帧长为64 bytes,会在报文里添加一个padding字段,用来填充数据包大小。
- 使用wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长扫了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段。
- CRC字段是为了校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的CRC字段中。当接受端收到数据包后,会同样使用算法计算一个值,然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改。
1. 3 ARP协议的解析过程:
- ARP协议的解析过程:假设主机A给主机B发送一个Ping包
- 先封装一个ICMP数据包。
| ICMP数据包 |
- 再在网络层封装原IP地址和目的IP地址。
|目的MAC(不知道)|原MAC地址(AA)|10.0.0.3(目的IP地址)| 10.0.0.1 (原IP地址) | ICMP数据包|
- 数据链路层封装原MAC地址和目的MAC地址——因为不知道目的MAC地址所以数据包不能正常封装,触发ARP请求。
- 发送ARP报文(目的IP的MAC地址是多少?发送给所有主机)
ARP请求报文:|全F(MAC地址的广播地址)|原MAC地址(AA)|10.0.0.3 的MAC是多少?|
- 主机收到之后解封装。
不是自己的数据包丢弃
是自己的数据包回复:ARP-reply(10.0.0.3 对应的MAC地址为多少)
- 得到准确的目的MAC数据包得以封装,数据得以传输
|目的MAC(CC)|原MAC地址(AA)|10.0.0.3(目的IP地址)| 10.0.0.1 (原IP地址) | ICMP数据包|
- 注释:(广播与广播域)
广播:将广播地址作为目的地址的数据帧
广播域:网络中能接收到同一个广播的所有节点的集合
广播地址为FF-FF-FF-FF-FF-FF
1. 4 实验演示ARP协议解析过程:
实验设备:eNSP 、Wireshark
实验步骤:
- eNSP上搭建如下实验环境:3台PC 、HUB
- 配置PC端上的IP地址与子网掩码。
- 在PC1端上ping 192.168.1.3 验证实验环境是否搭建成功。
- 在PC1端进行数据抓包:ping 192.168.1.3查看数据包情况
- 根据抓取到的数据包情况来进行分析:
1. 5 ARP协议的类型:
1.5.1 正向ARP:
- 就是上面所讲述的ARP协议
1.5.2 反向/逆向ARP:
- 反向/逆向ARP:当一台设备知道对方的MAC地址,不知道对方的IP 地址时,启动ARP,发送ARP Request请求广播包到其他主机,收到广播包的主机查看,只有该请求的设备才会单播回答ARP Reply响应包。
1.5.3 代理ARP:
- 什么是代理ARP:如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP)。
- 为什么需要代理ARP?
一个网络范围的设备如果想和另一个网络范围的设备通信时,无法获得另一个网络范围设备的MAC,为什么?网络中的路由器挡住了广播包。需要找到网关,且要知道网关的IP,把数据传到网关才能到达目标,进而需要获得网关的MAC。路由器的一个重要功能就是把局域网广播包限制在该网内,不让扩散,否则会造成网络风暴。ARP request是广播包,它询问的对象若在同一个局域网内,就会回答。但如果不在同一个局域网内,就需要路由器提供一个服务:代理ARP
- 代理ARP的意义:代理ARP功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。
- 代理ARP的优点:它可以只被应用在一个设备上(此时该设备的作用相当于网关),不会影响到网络中其他设备的路由表。代理ARP功能可以在IP主机没有配置缺省网关或者IP主机没有任何路由能力的情况下使用。
- 代理ARP分为
普通代理ARP
和本地代理ARP
- 普通代理ARP: 处于同一网段内的主机,当连接到设备的不同三层接口时,可以利用设备的代理ARP功能,通过三层转发实现互通。
- 本地代理ARP::应用于不同网段、不在同一个广播域下。
- 代理ARP分为普通代理ARP和本地代理ARP,二者的应用场景有所区别:
普通代理ARP的应用环境为
:想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。本地代理ARP的应用环境为
:想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。
1.5.4 免费/无辜ARP:
- 免费ARP报文是一种特殊的ARP报文,该报文中携带的发送端IP地址和目标IP地址都是本机IP地址,报文源MAC地址是本机MAC地址,报文的目的MAC地址是广播地址。
- 免费/无辜ARP的作用:公告自己,检测重复地址,在ARP报文中请求的IP地址为自己的IP地址。
重复地址检测,清除主机ARP 缓存,通告数据链路链接标识。
- 补充:
如何实现检测重复地址功能 ?
确定其它设备的IP地址是否与本机的IP地址冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。
设备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表项。
1. 6 ARP表:
- 设备通过 ARP 解析到目的 MAC 地址后,将会在自己的 ARP 表中增加 IP 地址和 MAC地址映射关系的表项,以用于后续到同一目的地报文的转发。
- ARP 表项分为两类:
动态 ARP 表项
、静态 ARP 表项
1.6.1 动态ARP表项:
- 动态 ARP 表项由 ARP 协议通过 ARP 报文自动生成和维护,可以被老化,可以被新的 ARP 报文更新,可以被静态 ARP表项覆盖。当到达老化时间、接口状态 down 时,系统会删除相应的动态 ARP表项。
1.6.2 静态ARP表项:
- 静态 ARP 表项通过手工配置和维护,不会被老化,不会被动态 ARP 表项覆盖。配置静态 ARP 表项可以增加通信的安全性。静态 ARP 表项可以限制和指定 IP 地址的设备通信时,只使用指定的 MAC 地址,此时攻击报文无法修改此表项的 IP 地址和 MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。
- 静态 ARP 表项分为:
短静态 ARP 表项
、长静态 ARP 表项
和多端口 ARP 表项。
- 在配置短静态 ARP 表项时:只需要配置 IP 地址和 MAC 地址项。如果出接口是三层以太网接口,短静态 ARP 表项可以直接用于报文转发;如果出接口是 VLAN 虚接口,短静态 ARP 表项不能直接用于报文转发,需要对表项进行解析:当要发送 IP 数据报时,设备先发送 ARP请求报文,如果收到的响应报文中的发送端 IP 地址和发送端 MAC 地址与所配置的 IP 地址和MAC 地址相同,则将接收 ARP 响应报文的接口加入该静态 ARP 表项中,此时,该短静态 ARP表项由未解析状态变为解析状态,之后就可以用于报文转发。
- 在配置长静态 ARP 表项时,除了配置 IP 地址和 MAC 地址项外,还必须配置该 ARP 表项所在 VLAN 和出接口。长静态 ARP 表项可以直接用于报文转发。
- 配置多端口 ARP 表项时,除了配置 IP 地址和 MAC 地址外,还必须配置该 ARP 表项所在的VLAN,当多端口 ARP 表项中的 MAC 地址和 VLAN 信息与多端口单播 MAC/组播 MAC 地址 表项中的 MAC 地址和 VLAN 相同时,该多端口 ARP 表项可用来指导 IP 转发。多端口ARP表项通过手工配置和维护,不会被老化,不会被动态 ARP 表项覆盖。
1. 7 ARP常用命令选项:
- arp -a或arp –g:
用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARp高速缓存中所有项目的选项,而Windows用的是arp
-a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。
- arp -a Ip:
如果我们有多个网卡,那么使用arp -a加上接口的Ip地址,就可以只显示与该接口相关的ARp缓存项目。
- arp -s Ip 物理地址:
我们可以向ARp高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
- arp -d Ip:使用本命令能够人工删除一个静态项目。
例如我们在命令提示符下,键入 Arp –a;如果我们使用过 ping 命令测试并验证从这台计算机到 Ip 地址为 10.0.0.99 的主机的连通性,则 ARp 缓存显示以下项:
——————————————————————
Interface:10.0.0.1 on interface 0x1
Internet Address physical Address Type
10.0.0.99 00-e0-98-00-7c-dc dynamic
——————————————————————
在此例中,缓存项指出位于 10.0.0.99 的远程主机解析成 00-e0-98-00-7c-dc 的媒体访问控制地址,它是在远程计算机的网卡硬件中分配的。媒体访问控制地址是计算机用于与网络上远程 TCp/Ip 主机物理通讯的地址。
至此我们可以用ipconfig和ping命令来查看自己的网络配置并判断是否正确、可以用netstat查看别人与我们所建立的连接并找出ICQ使用者所隐藏的Ip信息、可以用arp查看网卡的MAC地址。
2. ARP欺骗及实验演示 :
3. 其他应用层协议 :
各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。
每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
把握现在 ,展望未来 ,加油 !
由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !