1、路由及路由方式 web
路由这个术语用来讲明将数据包从一台设各经过网络发往另外一台处在不一样网络上的设备。路由器并不关心这些主机,它们只关心网络和通向每一个网络的最佳路径。路由器能够从相邻的路由器或从管理员那里认识远程网络。以后,路由器须要创建一个描述如何寻找远程网络的路由表(一张网络地图)。若是网络是直接与路由器相连的,那么路由器天然就知道如何达到这个网络。若是网络没有直接与它相连,路由器必须经过学习来了解如何到达这个远程网络。所采用的方法只有两种:静态路由方式,即必须由人来手动输入全部网络位置到路由表中;和动态路由的方式。在动态路由中,在一台路由器上运行的协议将与相邻路由器上运行的相同协议之间进行通讯。而后,这些路由器会更新各自对整个网络的认识并将这些信息加入到路由表中去。若是在网络中有一个改变出现,动态路由协议将自动将这个改变通知给全部的路由器。若是使用的是静态路由,则管理员将负责经过手工方式在全部的路由器上更新全部的改变。动态路由与静态路由没有绝对的优劣之分,在一个大型网络中,同时使用动态和静态路由是很典型的方式。算法
2、IP路由选择过程windows
IP的路由处理是一个至关简单并无多少变化的过程,它与网络的大小无关。这个过程很是重要,以终端A经过一个路由器访问外网的终端B为例,描述一下IP路由选择过程:缓存
因特网控制报文协议(lCMP)建立一个回应请求数据包网络
——>> ICMP将此包转交给IP 架构
——>>IP协议判断目的IP地址是处在本地网络中,仍是处在一个远程网络上学习
——>> 这是一个远程请求,这个数据包须要被发送到默认网关(这也就是为何要在终端上配置网关)spa
——>>根据ARP缓存中的网关MAC地址,将数据进行帧(Frame)的封装(此时数据已经从网络层到数据链路层).net
——>> 帧到物理层以位(Bit)的形式传输orm
——>>传输完成,校验数据,并向上解包,直到网络层
——>> 在路由表中检查其IP目的地址
——>> 此路由表中必须包含有目的地址网络,不然将丢弃数据,并返回"destination network unavailable"的ICMP信息,并被发送回原设备
——>> 数据包被交换到输出接口的缓存区
——>>检查ARP缓存是否有目的地址,若是没有,则向目的主机发出ARP请求,取得地址
——>>根据网关MAC地址,将数据进行帧(Frame)的封装
——>> 帧到物理层以位(Bit)的形式传输
——>> 传输完成,校验数据,并向上解包,直到网络层
——>> 核对IP,正确后交付给ICMP,ICMP会丢弃这个数据包,产生一个新负荷来做为回应应答
——>>建立应答,添加源方和目的方的地址、协议字段和有效负荷,此时目的方设备为主机A。而后就是经历一个相反的过程,将应答返回终端A。
有一点须要提示一下,当数据包在返回源主机的途中被丢弃时,因为这是一个未知的错误,一般你将会看到“request timed out” 的信息。若是出现的错误是一个已知的错误,如假设在去往目的设各的路途中路由表内没有可用的路曲,你将会获得“destination unreachable” 的信息。根据这些信息,你能够判断问题是发生在去往目的的路上,仍是在返回的途中。在这里要理解的关键问题是,即便对于一个很是大的网络,这个处理过程也将是一样的。在一个较大的互联网络中,数据包在找到目的主机以前,须要经过更多的路由器。
另外,硬件地址老是保存在本地的,它们决不会跨过路由器的接口。理解这个过程是相当重要的,因此要将它刻在你的记忆中! 例如:主机A将向主机B发送出一个ARP请求,路由器将如何响应这个请求?因为MAC地址必须限定于本地网络内,路由器将用链接主机A接口的MAC地址响应这个请求,因而当主机A要发送数据包时,会将全部的数据帧发往路由接口的MAC地址。
1、实例一
在TCP/IP详解这本书中讲解IP路由选择的时候,过程讲解的比较粗略,这里详细介绍下其中的总体过程。在这篇文章中,将经过一个案例,来帮助你们深刻了解IP路由的选择过程。但愿这篇文章可以帮助你们扫清IP路由选择上的一些误区。
以下图,如今这么一个网络。主机甲与主机乙分别在两个不一样的网段上,中间经过路由器进行链接。如今假设主机甲要跟主机乙进行通讯,那么主机甲如何才可以找到主机乙的位置呢?笔者如今就经过这个例子,跟你们详细解释IP路由选择的整个过程。在这里,笔者以Cisco的路由器为例进行介绍。
主机甲<-------------------------->路由器<-------------------------->主机乙
172.16.60.6 172.16.80.8
以上这个十二个步骤就完成了IP路由选择的所有过程。再复杂的网络,也只是中间多了几个节点,多重复了几个步骤而已。网络管理员了解了这个IP路由选择的过程,那么在往后网络故障的排查中,会更加的驾轻就熟。
须要牢记的一个重要的问题是,当主机A发送数据包到主机B时,所使用的目的方硬件地址是默认网关的以太网接口。这里由于数据帧是不能够直接发往远程网络的,它只有首先发送到本地网络上,并且去往远程网络的数据包必需要经过默认网关转发。
实例二
如上图,主机A上某用户ping主机B的IP地址,其中的过程涉及如下步骤:
1. 因特网报文控制协议(ICMP)将建立一个数据包(在它的数据域里只包含字母)
2. ICMP将把这个有效负荷交给因特网协议(IP),而后IP协议会建立一个数据包。这个数据包将包含源IP地址、目的IP地址和值为01h的协议字段。在本例中,当数据包到达目的地时,全部这些内容会告诉接收方主机,它应该将这个有效负荷交给ICMP处理。
3. 一旦数据包被建立,IP协议将判断目的IP地址实在本地网络中,仍是在一个远程网络上。
4. 因为IP协议判定这是一个远程请求,这个数据包须要被发送到默认网关,这样数据包才会被路由到远程网络。在windows中的注册表将被用于查找被配置的默认关。
5. 主机A(172.16.10.2)的默认网关为172.16.10.1,可以发送这个数据包到默认网关,必须知道路由器LAB_A的E0接口(其IP地址被配置为172.16.10.1,即网关地址)的硬件地址,即MAC地址。只有知道了E0的硬件地址数据包才能被下传到数据链路层,并成帧,而后发送给路由器与172.16.10.1网络的链接端口E0。在本地局域网中,主机只能够经过硬件地址进行通讯。
6. 检查ARP缓存,查看默认网关的IP地址是否已经被解析为硬件地址 若是被解析,数据包将被释放,传送到数据链路层并成帧(目的方硬件地址也同数据包一同下传至数据链路层) 若是这个硬件地址在主机ARP中缓存中还没有被解析,一个ARP广播将被发送到本地网络,以搜索172.16.10.1的MAC地址,路由器会响应这个请求并提供Ethernet0的硬件地址,接着主机A将缓存这个地址,同时路由器也将缓存主机A的硬件地址到ARP缓存中。
7. 一旦这个数据包和目的方硬件地址被交付给数据链路层,局域网驱动器将被用来提供 媒体访问以经过所用类型的局域网(在本例中即以太网)。一个数据帧将被产生,使用控制信息封装此数据包,在此帧中包含目的方和源方的硬件地址及以太网类型字段(这个字段里描述的是交付次数据包到数据链路层的网络层协议,在本例中,这个协议为IP协议)。这个帧的结尾处是被称为帧校验序列(FCS)的字段,它是装载循环冗余校验(CRC)计算值的区域。
8. 一旦帧的封装被完成,这个帧将被交付到物理层,以一位一位的方式发往物理媒体(在本例中,是双绞线对)。
9.在此冲突域中的每一个设备将接受这些位并重组成帧。它们都将运行CRC并核对保存在FCS字段中的内容,若是这两个值不匹配,此帧被丢弃。 若是这个CRC值吻合(在此例中指的是路由器的E0接口),而后目的方的硬件地址也将被检查,检查它们是否匹配。 若是它们是匹配的,路由器将查看以太网类型字段,了解在网络层上使用的协议。
10.数据包将从帧中抽出,而后这个帧剩下的部分将被丢弃。数据包被传送给以太网类型字段中中列出的上层协议,在这里是传递给IP协议。(注意这个过程是在路由器上进行的,如今也明白了为何路由器是属于网络层设备的缘由了)
11.IP会接收这个数据包,并检查其目的IP地址。因为数据包的目的地址与接收路由器所配置的任一地址不相匹配,路由器将在路由表中查看目的IP的网络地址。
12.此路由表中必须包含有网络172.16.20.0的表项,不然此数据包当即被丢弃,而后一个携带有“destination network unavailable”信息的ICMP包将会被发送回源方设备。
13.若是路由器的确在它的路由表中查到了目的方的网络,数据包将被交换到输出接口,在本例中是Ethernet1接口。
14.路由器将交换此数据包到Ethernet1的缓冲区内。
15.Ethernet1 的缓冲区须要了解目的方主机的硬件地址,它首先检查ARP缓存。 若是主机B的硬件地址已经被解析,则这个数据包和这个硬件地址将被传递到数据链路层以便造成帧。若是硬件地址没有解析,路由器将从E1发送一个ARP请求,期待172.16.20.2的硬件地址。主机B会用它的硬件地址来响应,而后这个包和硬件地址都会被发送到数据链路层以组成帧。
16.数据链路层将使用这个目的方和源方的硬件地址,以及以太网的类型字段和处于帧尾部的FCS字段来建立一个帧,这个帧将被传送到物理层,以一位一位的方式发送到物理媒体上。
17.主机B接收到此帧并当即运行CRC,若是运算结果与FCS字段中的内容相匹配,这个目的方的硬件地址将被检查。若是主机发现是匹配的,随后将检查以太网类型字段中的值,以判断应该将数据包上传给网络层的什么位置(在本例中为IP协议)
18.在网络层中,IP会接收这个数据包并检查其目的方的IP地址。因为终归它们是匹配的,数据包的协议字段将被检查以了解此有效负荷应该交付给谁。
19.此有效负荷会交付给ICMP,它将知道这是一个回应请求。ICMP会应答这个请求,经过即刻丢弃这个数据包并随后产生一个新的有效负荷来做为回应应答。
20.随后建立的数据包将包含源方和目的方的IP地址、协议字段,如今目的方设备为主机A。
21.而后,IP检查以了解这个目的方的IP地址是否属于本地局域网上的设备,或者是一个存在于远程网络的设备。因为目的方的设备位于远程网络,此数据包将须要被发送到默认网关上。
22.在此WINDOWS设备的注册表上,能够找到默认网关的IP地址,以后将查看ARP缓存,以了解是否已经完成了从IP地址到硬件地址的解析。 23.一旦默认网关的地址被找到,此数据包和目的方的硬件地址都被送往数据链路层以完成帧的封装。 24.数据链路层会封装数据包的内容,并在帧报头包含如下内容:目的方和源方的硬件地址、以太网类型字段0X0800(IP)、将CRC结果填入FCS字段
25.帧将被下传给物理层,以一位一位的方式发送到网络媒体上。
26.路由器的E1接口会收到这些位并重建为一个帧。CRC校验被运行,帧的FCS字段被校验以确认两个结果是相符的。
27.一旦CRC校验经过,硬件目的地址将被检查。因为路由器的接口同这个硬件地址是匹配的,数据包将从这个帧中取出,而后以太网类型字段将被检查以了解次数据包应该投递给网路层上的哪一个协议
28.因为协议被判断为IP,因而IP将获得这个数据包。首先IP对IP报头进行CRC校验,而后检查目的方的IP地址。因为IP目的地址与路由器的各个接口的IP地址并不相匹配,路由器将查看路由表,以了解是否存在一个通往172.16.10.0的路由。若是不存在一个路由能够到达目的网络,该数据包当即被丢弃,这时在主机A上一般会看到request time out的信息。
29.这里路由器确实知道到达网络172.16.10.0的方式,这一输出接口是Ethernet 0,因而数据包将被交换到接口Ethernet 0上。
30.路由器检查ARP缓存,肯定172.16.10.2的硬件地址是否已经被解析
31.因为在将数据包传到主机B的过程当中,172.16.10.2的硬件地址已经被缓存起来了,所以,这一硬件地址和数据包将被传递到数据链路层。
32.数据链路层会使用这个目的方和源方的硬件地址,而后将IP放入以太网类型字段中,并对这个帧进行CRC运算,将结果放入FCS字段中。
33.而后这个帧被传送到物理层,以一位一位的方式发送到本地网络。
34.目的方主机A将接收这个帧,并运行CRC算法,验证目的方硬件地址,并查看以太网类型字段中的内容以判断谁来处理这个帧。
35.因为IP是被指定的接收者,随后这个数据包将被传递给网路层的IP协议,他将检查包的协议字段以肯定进一步的操做。IP发现要将次有效负荷交给ICMP的指示,接着ICMP将肯定次数据包是一个ICMP的应答回复包 36.ICMP将经过发送一个惊叹号(!)到用户接口来代表它已经收到一个回复,这以后ICMP会尝试继续发送四个应答请求到目的方主机。
3、总结
上述连个例子比较详细的介绍了路由选择的过程,虽然说经过ping命令发送数据包的方式来查看,可是数据的传送过程当中的总体流程是正确的,总而言之,对于一个IP数据包来讲,一个数据的流向大致以下:
1.主机A的传输层将数据交给网络层,网络层加上双方IP地址,TTL等IP报头信息,成为IP数据包,网络层将IP数据报交给数据链路层。
2.数据链路层根据IP地址,经过ARP获得MAC,封装为物理帧,经过网卡发出。
3.主机B接收物理帧,根据MAC地址判断:若是目的MAC地址不是本网卡MAC地址,则丢弃;若是是发给本身的,则交给网络层处理。
4.网络层经过IP地址判断:若是是发给本身的,则交给上层协议处理;若是不是发给本身的,则在路由表中查找此IP合理的下一跳地址(即经过哪一个网卡发送到下一个网段),并将数据经过内存,从接收数据网卡的IP程序拷贝到须要发送数据网卡的IP程序。在发送网卡中,IP程序将数据包交给链路层,链路层发送ARP请求,获得下一跳的目的MAC地址,封装为帧,发送。
如此反复,直到IP数据包到达最终正确的接收主机。
本文主要给你们讲述了IP路由选择的过程 ,这是一个基本的知识,本文从一个具体的案例详细说明了具体的注意事项,但愿此文能对你之后选择路由有所帮助。
以下图,如今这么一个网络。主机甲与主机乙分别在两个不一样的网段上,中间经过路由器进行链接。如今假设主机甲要跟主机乙进行通讯,那么主机甲如何才可以找到主机乙的位置呢?笔者如今就经过这个例子,跟你们详细解释IP路由选择的整个过程。在这里,笔者以Cisco的路由器为例进行介绍。
假设如今主机甲的用户利用Ping命令,来确认主机乙的连通性问题。这个网络架构虽然比较简单,可是其路由选择过程的步骤则是一步不缺的。主要经过以下步骤:
第一步:当用户在主机甲上输入PING 172.168.80.8以后,主机甲中有一个因特网控制报文协议,英文简称为ICMP。这个协议将建立一个回应请求数据包,在它的数据域中只包含有字母。
第二步:英特网控制报文协议会将这个有效负荷(即刚建立的数据包)交给因特网协议(英文简称IP)。而后这个因特网协议也会建立一个数据包。在这个英特网协议建立的数据包中,所包含的内容要比因特网控制报文协议所建立的数据包丰富的多。在这个包中包括主机甲的IP地址、目的地主机已的IP地址以及值为01h的协议字段。当数据包到达主机乙时,这些内容就是告诉对方,应该将这个有效负荷交给因特网控制报文协议来处理。
第三步:IP协议会判断目的IP地址是属于远程网络,仍是在本地网络。因为根据IP地址规划规则,主机甲与主机已经是属于不一样的网络。此时,刚才英特网协议(IP)所建立的数据包将会被发送到默认的网关中去。在主机甲的网络属性配置中,除了有自身的逻辑IP地址,还有默认的网关地址。网关地址就是用来不一样网络之间的主机进行通讯的一扇门。只有经过网关,主机甲的数据包才可以被发送到不一样网络的主机乙中。
第四步:确认路由器相应接口的MAC地址。假设主机甲(IP地址为172.168.60.6)的默认网关被配置为172.168.60.1。若主机甲的数据包要发送到这个默认网关上,则就必须知道其对应的路由器接口的物理地址,即MAC地址。由于只有如此,数据包才可以被传递到更下一层的数据链路层并根据必定的规则生成帧。而后主机甲才可以把数据包发送给172.168.60.0网络链接的路由器接口。在本地局域网上,主机只能够经过硬件地址来相互之间进行通讯。因此当主机甲要把数据包发送给特定的网关时,必需要知道这个网关所对应的MAC地址。这一个过程是不可避免的。为了达到这个目的,主机甲首先会检查本身的ARP缓存,查看一个默认网关的IP地址是否已经解析为对应接口的硬件地址。若是在ARP缓存表中已经有对应的记录,表示已经被成功解析。此时,数据包将会被释放并传递到数据链路层并生成帧。其中目的方的硬件地址也将同数据包一块儿下传到数据链路层。一般状况下,在主机甲上,能够经过ARP命令来查看主机当前的IP地址与MAC地址的对应表。以下图。笔者如今电脑所设置的默认网关为192.168.0.254,后面的16位字符就是默认网关所对应的硬件地址。
第五步:生成帧。当这个数据包和目的方的硬件地址被传递给数据链路层以后,局域网驱动器将用来提供媒体访问服务,以经过以太网进行数据传输。一个数据帧即将产生,使用一些控制信息来封装这个数据包。在这个数据帧中会包含有目的方和源方的硬件地址。以及以太网类型字段。这个以太网类型字段主要用来描述的是交付这个数据包岛数据链路层的网络层协议。在这个帧的结尾,是一种被称做为帧校验序列的字段,它是装载循环冗余校验计算值的区域。也就是说,在这个帧中,主要包括目的MAC地址(对应路由器接口的MAC地址)、源MAC地址(主机甲的MAC地址)、以太网类型字段、数据包、帧校验序列五部份内容。注意,这里指的目的地址并非主机乙的地址,而是里主机甲最近的默认网关地址。在第一次通讯时,主机甲并不知道主机乙的MAC地址。一旦完成帧的封装,则这个帧将会被交付到物理层。若是企业网络是利用双绞线组建的话,则将会以一次一位的方式发往物理媒体。
以上五个步骤主要都是在主机甲上完成。这五个步骤执行完毕以后,IP路由选择过过程的前期工做就算完成了。接下来的就要看路由器的表演了。
第六步:在主机甲所在的冲突域中的每台网络设备都将接收这些位并从新合并成数据帧。接收完毕后,他们会运行CRC过程并核对保存在帧校验序列字段中的内容。若是这两个值不匹配的话,则这个帧将会被丢弃。若是两个值相同(主机甲的默认网关,即紧邻主机甲的路由器接口),则网络设备会接收这个帧,并核查目的方的硬件地址,检查他们是否也匹配。若是目的方的硬件地址也是匹配的,那么路由器将会查看这个帧的以太网类型字段,以了解在网络层上采用了什么协议,而后路由器就会抽出帧中的数据包,把其他部份内容丢弃。而后把抽出来的数据包传送给以太网类型字段中列出的上层协议,如英特网网络协议(IP)等等。
第七步:判断路由表项目。英特网网络协议(IP)会接收这个数据包,并检查目的IP地址。在这个案例中,因为数据包中的目的地址与接收路由器所配置的任何地址都不相匹配。此时,路由器就会在本身的路由表中,查看目的IP网络的地址。在这个案例中,因为路由器同时链接着172.16.80.0的网络。因此在这个路由器的路由表中,有相关的纪录。若没有记录的话,则这个数据包会被直接丢弃。若路由器丢弃数据包的话,则会发送一个“目标地址不可达”的错误信息给主机甲。
第八步:路由器转发数据包。若是路由器的确在他的路由表中找到了相应网络的记录,则数据包就会被转发到输出接口。在本例中,就是主机乙所链接的接口。路由器会将这个数据包交换到对应接口的缓冲区内。
第九步:缓冲区中数据的处理。路由器对应接口的缓冲区须要了解目的方主机的硬件地址。由于这个数据包中已经有目的方的IP地址,因此,路由器会先检查ARP缓存表。若是主机甲的硬件地址已经被解析并保存在路由器的ARP缓冲中,则这个数据包和这个硬件地址将被传递到数据链路层以便从新生成帧。一般状况下,若路由器之前跟主机乙通讯过的话,则这个IP地址与MAC地址的对应记录将会在思科路由器ARP缓冲表中保存四个小时。连续四个小时没有通讯的话,则这个对应的记录将会被删除。若是在路由器的ARP缓冲表中没有相关记录的话,则路由器接口会在其链接的网络内部,发送一个ARP请求。这个ARP请求就像一个广播,谁我如今须要知道IP地址为172.12.80.8的MAC地址。此时。其余网络设备发现本身不是这个IP地址,就会抛弃这个包。而主机乙发现有人在问本身的MAC地址,就会进行响应。告诉路由器,个人IP地址就是这个,个人MAC地址是多少。路由器知道目的主机乙的MAC地址以后,就会把数据包连同目的方的MAC地址传递到下一层的数据链路中。
第十步:路由器会重复上面的第五步操做,生成数据帧。并传送到物理层,以一次一位的方式再发送到物理媒体上。在网络中进行传输。
在路由器上的工做也完成。经过以上的分析,咱们能够看到,路由器的做用主要就是进行数据交换。把其收到的数据包根据必定的规则转发到另外一个可达的接口上。路由器就好像是一个十字路口,各个数据包都根据本身所须要到达的目的地,如今合适的出口。
第十一步:主机乙会接收到这个数据帧并运行CRC过程。若是运算结果与帧校验序列中字段的内容相同,则这个帧中目的方的MAC地址将会被读取。主机乙会判断这个MAC地址是否跟本身的MAC地址相同。若相同的话,则会抽取其中的数据包,并根据以太网字段类型中指定的协议,把数据包传递给相应的协议处理。因为这个案例中,数据包中是一个回应请求。主机乙就会把这个数据包交给ICMP协议处理。ICMP协议会应答这个请求,同时把这个数据包丢弃并迅速生成一个新的有效负荷来做为回应应答。而后主机乙会利用一样的过程把数据包以及目的MAC地址(路由器对应接口的物理地址)传递到下一层,让其生成帧。在数据帧上,会带有目的MAC地址、源MAC地址、数据包、以太网字段类型、帧校验序列字段等内容发送到下一层。而后再一位位的传送到物理媒体。
第十二步:路由器再重复第六步到第十步的过程,把数据包从一个接口交换传递到另外一个接口中。而后主机甲就收到一个回应信息,表示到主机乙的道路是通的。
以上这个十二个步骤就完成了IP路由选择的所有过程。再复杂的网络,也只是中间多了几个节点,多重复了几个步骤而已。网络管理员了解了这个IP路由选择的过程,那么在往后网络故障的排查中,会更加的驾轻就熟。