网络三张表和Arp


http://www.educity.cn/net/1284034.html

一:MAC地址表详解

  说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。

  交换机的工作原理

  交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。

  如下图:详细讲解交换机传输数据帧的过程

  

  1)主机A会将一个源MAC地址为自己,目标MAC地址为主机B的数据帧发送给交换机。

  2)交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为f 0/1) 记录到MAC地址表中。

  3)然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去,如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了f 0/1接口)。

  4)这时,局域网的所有主机都会收到此数据帧,但是只有主机B收到此数据帧时会响应这个广播,并回应一个数据帧,此数据帧中包括主机B的MAC地址。

  5)当交换机收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现单播了。

  如下图:当局域网存在多个交换机互联的时候,交换机的MAC地址表是怎么记录的呢?

  

  1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机

  2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。

  3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。

  4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机1都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。

  5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。

  总结:从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。

  注意:交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。

  二、ARP缓存表详解

  上面我们讲解了交换机的工作原理,知道交换机是通过MAC地址通信的,但是我们是如何获得目标主机的MAC地址呢?这时我们就需要使用ARP协议了,在每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。

  ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。

  如下图:详细讲解ARP的工作原理。

  

  1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。

  2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。

  3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。

  4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。

  路由表详解

  路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没有当今的互联网。在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。路由表中的信息分为直连路由和非直连路由。

  直连路由:是直接连接在路由器接口的网段,由路由器自动生成。

  非直连路由:就是不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路由。

  路由表中记录的条目有的需要手动添加(称为静态路由),有的测试动态获取的(称为动态路由)。直连路由属于静态路由。

  路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置默认路由,就科举默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。

  如下图:详细介绍路由器的工作原理

  

  1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。

  2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。

  3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。

  4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

  5)此时HostB才会收到来自HostA发送的数据。

  总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。

  看完上面的文章是不是感觉原来数据在网络中传输是这么的复杂啊!呵呵...其实这些过程都是计算机自己完成的,我们需要做的很少。

  可能写的不是很全面,请大家多多谅解!希望对大家有帮助。

 

ARP请求详解 

IP地址是不能直接用来进行通信的。这是因为IP地址只是主机在抽象的网络层中的地址。若要将网络层中传送的数据报交给目的主机,还要传到链路层转变成MAC帧后才能发送到实际的网络上。因此,不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。

由于IP地址有32 bit,而局域网的硬件地址是48bit,因此它们之间不存在简单的映射关系。此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网卡也会使主机的硬件地址改变。可见在主机中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还必须能够经常动态更新。地址解析协议ARP很好地解决了这些问题。

每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。

如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的通信量大大增加。ARP将已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的硬件地址而不必再用广播方式发送ARP请求分组。(详解过程请参考第2页)

ARP将保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想有一种情况。主机A和B通信。A的ARP高速缓存里保存有B的物理地址。但B的网卡突然坏了,B立即更换了一块,因此B的硬件地址就改变了。A还要和B继续通信。A在其ARP高速缓存中查找到B原先的硬件地址,并使用该地址向B发送数据帧。但B原先的硬件地址已经失效了,因此A无法找到主机B。但是过了一段时间,A的ARP高速缓存中已经删除了B原先的硬件地址(因为它的存在时间到了),于是A重新广播发送ARP请求分组,又找到了B。

这里需要指出,ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,例如,在TCP/IP详解卷1中,第29页的例子,那么这时就要借助于网络层的协议,配合链路层协议才能将数据报成功的发送到目的主机上。(详解过程请参考第3页)

这里要指出的是,这种从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的硬件地址。

那么就可能会产生这样的问题:既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们不直接使用硬件地址进行通信,而是要使用抽象的IP地址并调用ARP来寻找出相应的硬件地址呢?

这个问题必须弄清楚。

由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。但统一的IP地址把这个复杂问题解决了。连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。

设想有两个主机可以直接使用硬件地址进行通信(具体实现方法暂不必管)。再假定其两个主机的网卡都同时坏了,然后又都更换了一块,因此它们的硬件地址也都改变了。这时,这两个主机怎样能够知道对方的硬件地址呢?显然很难。但IP地址是独立于主机或路由器的硬件地址的。硬件地址的改变不会影响使用IP协议的主机的通信。

因此,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来很大的方便

 

 

经过多次的失败,得出的一点点总结,有需要的朋友可作个参考,也欢迎指正本人的错误。(每个结论都已经验证过!)

 

收到ARP请求后,更新ARP缓存表和应答的条件:

 

1,收到一个请求包,若目的mac是硬件广播地址,且目的IP是本机IP,即请求本机mac,则查看ARP缓存表是否有源主机IP与源主机mac

  地址的对应条目,若有且与收到的不一致则更新,若无,则添加,最后构造一个针对请求主机的ARP单播应答包。

2, 收到一个请求包,若目的mac是硬件广播地址,但目的IP不是本机IP,即不是请求本机mac,那么忽略该请求。

(注:实验表明:目的mac是本机网卡mac,且目的IP是本机IP,主机也会作出应答。分析:收到的这个请求包可能发生了错误,因为既然知道了目的主机mac就无需再请求了,但也不排除是其他协议在检测网络状态)。

(结论:只有目的MAC是硬件广播地址,且目的IP是本机IP,才对条目进行添加或者更新,并回复应答包。)

 

收到ARP应答后,更新缓存表的条件:

 

1,接收到一个应答包,若目的mac是自己,且目的IP也是自己,若缓存表中已经存在对应的项,则更新该项。若缓存中没有,则忽略。

2,接收到一个应答包,若目的mac是自己,但目的IP不是自己,若缓存表中已经存在对应的项,则更新该项。若缓存中没有,则忽略。

3,接收到一个应到包,若目的mac为广播地址,无论IP是不是自己,处理方式与(1,2)相同。

4,接收到一个应答包,若目的mac不是本机mac也不是硬件广播地址,则ARP协议软件忽略该包。

 

(结论,若收到的应答包,目的mac地址是硬件广播地址或是者本机网卡地址,无论目的IP是不是本机网卡IP,只要缓存表中已经存在对应的ARP条目,且与收到的应答条目不一致,那么就要更新该条目。若缓存表中没有存在该条目,那么则忽略该应答。

 

 

 

ARP 请求建立本地ARP表项的过程是怎样的呢?
    先来回忆一下IP包到MAC帧封装的过程,在ARP协议浅析(二)中,已经提出过结论,MAC帧封装是根据路由下一跳的IP地址,进行本地ARP查表,然后封装MAC帧的。如果ARP表项中没有对应的ARP表项,这时数据包的发送设备会发送ARP请求(广播).
广播这里提一下:之前讲到过二层的通信过程,收到MAC帧后会把MAC帧头的目的MAC与本机比较,相同则留下校队后交付上层,不同则丢弃;问题就来了,ARP是三层协议,发送ARP请求就是希望得到目的IP的MAC地址,所以这个目的MAC地址怎么填写呢?答:TCP/IP规定,目的IP为FF-FF-FF-FF-FF-FF为广播地址,所有设备接收到以该地址为目的地址的MAC帧,都需要接收处理后交付上层;
ARP请求的格式是这样的:



简单介绍:
硬件类型指的是网络的类型,这里的讲解都是以以太网为例的,此标志位1
协议类型:如IPV4时此字段为0080;
硬件长度:8位字段,单位:字节,以太网为6,即6字节,6*8=48bit
协议长度:例如IPV4时,此处定义为4
操作:这个地方需要注意,ARP请求和ARP应答的区别之一;1:请求;2:应答。
发送发的IP,MAC;
目的放得源IP,MAC;(注意ARP请求时,由于不知道目的MAC地址,此处为全0)
由于ARP请求的目的地址是FF-FF-FF-FF-FF-FF,同一个广播域内的所有设备都会接收到这个请求,二层对于FF-FF-FF-FF-FF-FF为目的 的MAC帧的处理方式是接收并交付三层处理。三层接收到二层交付的IP包后会对数据段进行分析比较,这时分两种情况:
数据段的目的IP地址是本机:
1.把ARP请求方得IP与MAC对应关系存入本地ARP表(这一点很重要,安全部分还会讲到);
2.发送ARP响应,格式见ARP响应图;

数据段的目的IP地址不是本机:
丢弃该ARP请求;
ARP请求过程(二)
上节介绍了ARP请求的帧格式,和ARP请求发送接收和应答过程;为了大家更好的理解ARP请求,这里举例来介绍一下:
  


如图:
PC A IP:192.168.1.A MAC: AA-AA-AA-AA-AA-AA
PC B  IP:192.168.1.B MAC: BB-BB-BB-BB-BB-BB
PC C IP:192.168.1.C MAC CC-CC-CC-CC-CC-CC
PC D IP: 192.168.1.D MAC DD-DD-DD-DD-DD-DD
PC A与PC B通信,但是由于 PC A的ARP表中没有 PC B的表项,于是进行ARP请求,根据上一节 ARP请求格式应该为:



其中协议字段的0X0806代表ARP协议报文
目的MAC为广播MAC,源MAC为IP A的mac
交换机在接收到此MAC帧后会根据MAC帧的目的地址转发,由于使用全F的广播地址,交换机进行广播域内的广播:PC B PC C PC D 三台PC接收到ARP请求报文后,接收报文,交付三层处理,其中PC C PC D丢弃报文,而由于报文中的目的IP与PC B IP相同,PC B将报文中的源IP MAC对应存入ARP表项(已有则覆盖,这步很关键),并发出ARP响应报文格式为:
  


区别大家自己观察;
结论,ARP请求是以广播形式发出,而ARP响应则是单播形式。

 

 

 

 

ARP表的更新的条件

       在实际的环境中,只有同时满足以下两个条件时,设备的ARP表项才会更新:

1,设备收到来自某IP的ARP请求包或免费ARP包;

2,设备的现有ARP表项中已经存在该IP对应的ARP表项。

其他的非ARP报文不会对设备的ARP表项产生影响。

ARP表的老化时间

       不同的系统对ARP表的老化时间设定不太一样,在Windows2000/XP环境中,ARP表项的老化时间是2分钟,95/98以及NT环境下为10分钟,在大部分Cisco交换机中,该值是5分钟,华为的设备一般为20分钟……这些值可以通过系统注册表或设备的某些命令进行设置,具体设置的命令和参数请自行参考相关文档。

ARP表老化时间定时器的重置

       满足以下任一条件时,设备的ARP表项的老化时间定时器会重置:

1,设备相应的ARP表项更新时;

2.,设备调用(引用)ARP表项转发数据后。

如果ARP更新存在问题我们如何解决?

       在实际的环境中,经常遇到某些设备的ARP表项更新速度非常慢,甚至ARP学习存在问题,从而导致我们的网络连接出现异常,我们如何解决?

       解决的方式就是在ARP表学习或更新出现异常的时候,在该设备上手动静态绑定ARP表项。

---------------------------------

ARP更新cache 的条件

1,主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中。

2,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址。

   (当某台PC更换新的网卡并在新的网卡上配置上原来的IP地址,这时会产生一个无应答广播,当其他电脑收到这个arp 广播时会和ARP缓存做对比,并更新ARP缓存,如果ARP中没有这个IP的记录则直接忽视这个广播包)  (2)用黑客公交直接伪造其他计算机的MAC然后广播到网络中达到ARP欺骗的目的

 

3当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值