TCPIP协议——ARP详解
本⽂主要讲述了ARP的作⽤、ARP分组格式、ARP⾼速缓存、免费ARP和代理ARP。
1.学习ARP前要了解的内容
建⽴TCP连接与ARP的关系
应⽤接受⽤户提交的数据,触发TCP建⽴连接,TCP的第⼀个SYN报⽂通过connect函数到达IP层,IP层通过查询路由表:
  如果⽬的IP和⾃⼰在同⼀个⽹段:
  当IP层的ARP⾼速缓存表中存在⽬的IP对应的MAC地址时,则调⽤⽹络接⼝send函数(参数为IP Packet和⽬的MAC))将数据提交给⽹络接⼝,⽹络接⼝完成Ethernet Header + IP + CRC的封装,并发送出去;
  当IP层的ARP⾼速缓存表中不存在⽬的IP对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP⼴播请求⽬的IP的MAC,收到ARP应答之后,将应答之中的<IP地址,对应的MAC>对缓存在本地ARP⾼速缓存表中,然后完成TCP SYN的IP封装,调⽤⽹络接⼝send函数(参数为IP Packet和⽬的MAC))将数据提交给⽹络接⼝,⽹络接⼝完成Ethernet Header + IP + CRC的封装,并发送出去;。
  如果⽬的IP地址和⾃⼰不在同⼀个⽹段,就需要将包发送给默认⽹关,这需要知道默认⽹关的MAC地址:
  当IP层的ARP⾼速缓存表中存在默认⽹关对应的MAC地址时,则调⽤⽹络接⼝send函数(参数为IP Packet和默认⽹关的MAC)将数据提交给⽹络接⼝,⽹络接⼝完成Ethernet Header + IP + CRC
  当IP层的ARP⾼速缓存表中不存在默认⽹关对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP⼴播请求默认⽹关的MAC,收到ARP应答之后,将应答之中的<;默认⽹关地址,对应的MAC>对缓存在本地ARP⾼速缓存表中,然后完成TCP SYN的IP封装,调⽤⽹络接⼝send函数(参数为IP Packet和默认⽹关的MAC)将数据提交给⽹络接⼝,⽹络接⼝完成Ethernet Header + IP + CRC的封装,并发送出去。
ARP的位置
  OSI模型有七层,TCP在第4层传输层,IP在第3层⽹络层,⽽ARP在第2层数据链路层。⾼层对低层是有强依赖的,所以TCP的建⽴前要进⾏ARP的请求和应答。
  ARP⾼速缓存表在IP层使⽤。如果每次建⽴TCP连接都发送ARP请求,会降低效率,因此在主机、交换机、路由器上都会有ARP缓存表。建⽴TCP连接时先查询ARP缓存表,如果有效,直接读取ARP表项
的内容进⾏第⼆层数据包的发送;只有表失效时才进⾏ARP请求和应答进⾏MAC地址的获取,以建⽴TCP连接。
ARP的作⽤
  要了解ARP的作⽤,⾸先要分清两个“地址”:
  (1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。
  (2)⽹络接⼝的硬件地址,它是⼀个48bit的值,⽤来标识不同的以太⽹或令牌环⽹络接⼝。在硬件层次上,进⾏数据交换必须有正确的接⼝地址,内核必须知道⽬的端的硬件地址才能发送数据。
  简⾔之,就是在以太⽹中,⼀台主机要把数据帧发送到同⼀局域⽹上的另⼀台主机时,设备驱动程序必须知道以太⽹地址才能发送数据。⽽我们只知道IP地址,这时就需要采⽤ARP协议将IP地址映射为以太⽹地址。
  要注意⼀点,⼀般认为ARP协议只使适⽤于局域⽹。
2.ARP分组格式
  ARP分组的格式如下图:
  先要清楚,⼀般说以太⽹地址就是指MAC地址。
  字段1是ARP请求的⽬的以太⽹地址,全1时代表⼴播地址。
  字段2是发送ARP请求的以太⽹地址。
  字段3以太⽹帧类型表⽰的是后⾯的数据类型,ARP请求和ARP应答这个值为0x0806。
  字段4表⽰硬件地址的类型,硬件地址不只以太⽹⼀种,是以太⽹类型时此值为1。
  字段5表⽰要映射的协议地址的类型,要对IPv4地址进⾏映射,此值为0x0800。
  字段6和7表⽰硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
  字段8是操作类型字段,值为1,表⽰进⾏ARP请求;值为2,表⽰进⾏ARP应答;值为3,表⽰进⾏RARP请求;值为4,表⽰进⾏RARP应答。
  字段9是发送端ARP请求或应答的硬件地址,这⾥是以太⽹地址,和字段2相同。
  字段10是发送ARP请求或应答的IP地址。
  字段11和12是⽬的端的硬件地址和协议地址。
下⾯是抓取的ARP数据包,可以对照上⾯的说明进⾏理解。
图中红框圈起来的是⼀对ARP请求和ARP应答。
下⾯两张图分别是ARP请求和相应的ARP应答的分组格式截图。
  ARP请求分组中,字段11⽬的MAC地址未知,⽤全0进⾏填充。
ARP应答分组中,将ARP请求中的源和⽬的地址进⾏交换,此外,变化的还有字段8 Opcode。其余字段内容不会发⽣变化。
那么我们是如何区分ARP请求和ARP应答分组的呢?
  分组中的地址字段和其他相同的字段⽆法作为区分依据,这时Opcode字段就发挥了作⽤,根据Opcode的值可以确定是请求还是应答,是ARP还是RARP。
3.ARP⾼速缓存
定义
  ARP缓存是⼀个缓冲区,⽤来储存IP地址和MAC地址,本质就是<IP地址,MAC地址>的对应表。表中⼀个条⽬记录了⽹络上⼀个主机的IP地址和其对应的MAC地址。
  每⼀个以太⽹或令牌环⽹络适配器都有⾃⼰单独的表。
  当地址解析协议被询问⼀个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域⽹查询。
ARP缓存表项的⽣存时间TTL
  ARP缓存包含动态和静态项⽬:
  动态项⽬随时间推移⾃动添加和删除,每个动态ARP缓存项都有都设置了TTL(⽣存时间),TTL为0时此项⽬就从表中删除,Windows下TTL⼀般不超过10分钟。
  静态 ARP 缓存条⽬是永久性的,可以使⽤ TCP/IP ⼯具⼿动添加和删除。静态 ARP 缓存条⽬⽤来禁⽌节点发送对常⽤的本地IPv4地址(例如路由器和服务器的 IPv4 地址)的ARP请求。
ARP⾼速缓存的使⽤
  当主机发送⼀个ARP请求时,先查看ARP⾼速缓存表,如果存在对应条⽬,则直接返回MAC地址,否则向局域⽹发送ARP请求⼴播。
ARP⾼速缓存的优缺点
  优点:从ARP⾼速缓存的使⽤中可以看到,ARP⾼速缓存可以减⼩⼴播量,进⽽减⼩⽹络通信量,提⾼计算机之间的通信效率。
  缺点:造成安全隐患(参考下⾯免费ARP的作⽤)。
4.免费ARP
定义
  免费ARP指主机发送ARP查⾃⼰的IP地址,通常发⽣在系统引导期间进⾏接⼝配置时。
  与标准ARP的区别就是免费ARP分组的⽬的IP地址字段封装的是⾃⼰的IP地址,即向所在⽹络请求⾃⼰的MAC地址。
作⽤ 
  免费ARP的作⽤有:
  1) ⼀个主机可以通过它来确定另⼀个主机是否设置了相同的 IP地址。
   正常情况下发送免费ARP请求不会收到ARP应答,如果收到了⼀个ARP应答,则说明⽹络中存在与本机相同的IP地址的主机,发⽣了地址冲突。
  2)更新其他主机⾼速缓存中旧的硬件地址进⾏。
   如果发送免费ARP的主机正好改变了硬件地址,如更换了接⼝卡。
   其他主机接收到这个ARP请求的时候,发现⾃⼰的ARP⾼速缓存表中存在对应的IP地址,但是MAC
地址不匹配,那么就需要利⽤接收的ARP请求来更新本地的ARP⾼速缓存表表项。
  3)⽹关利⽤免费ARP防⽌ARP攻击
  有些⽹关设备在⼀定的时间间隔内向⽹络主动发送免费ARP报⽂,让⽹络内的其他主机更新ARP表项中的⽹关MAC地址信息,以达到防⽌或缓解ARP攻击的效果。
tcpip协议分为哪几层作用
  4)利⽤免费ARP进⾏ARP攻击
  ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使⽤应答中的IP和MAC地址对本地的ARP缓存进⾏更新。
  主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到⽹络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报⽂就会被转发到错误的MAC地址,从⽽实现了ARP欺骗的攻击。
5.代理ARP
定义
  代理ARP就是通过使⽤⼀个主机(通常为router),来作为指定的设备使⽤⾃⼰的 MAC 地址来对另⼀设备的ARP请求作出应答。
为什么需要代理ARP?
  先要了解,路由器的重要功能之⼀就是把局域⽹的⼴播包限制在该⽹内,阻⽌其扩散,否则会造成⽹络风暴。
  ARP请求是个⼴播包,它询问的对象如果在同⼀个局域⽹内,就会收到应答。但是如果询问的对象不在同⼀个局域⽹该如何处理?路由器就提供的代理ARP为这个问题提供了解决⽅案。
⼯作过程
  两台主机A和B处于同⼀⽹段但不同的⼴播段时,主机A发送ARP请求主机B的MAC地址时,因为路由器不转发⼴播包的原因,ARP请求只能到达路由器。如果路由器启⽤了代理ARP功能,并知道主机B属于它连接的⽹络,那么路由器就⽤⾃⼰接⼝的MAC地址代替主机B的
MAC地址来对主机A进⾏ARP应答。主机A接收ARP应答,但并不知道代理ARP的存在。
代理ARP的优缺点
  优点:代理ARP能在不影响路由表的情况下添加⼀个新的Router,使⼦⽹对该主机变得透明化。⼀般代理ARP应该使⽤在主机没有配置默认⽹关或没有任何路由策略的⽹络上。
  缺点:从⼯作⼯程可以看到,这其实是⼀种ARP欺骗。⽽且,通过两个物理⽹络之间的路由器的代理ARP功能其实互相隐藏了物理⽹络,这导致⽆法对⽹络拓扑进⾏⽹络概括。此外,代理ARP增加了使⽤它的那段⽹络的ARP流量,主机需要更⼤的ARP缓存空间,也不会为不使⽤ARP进⾏地址解析的⽹络⼯作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。