IP路由选择, 是思科网络工程师必须要了解的一个基础知识。 其实, IP路由并没有大家想的那么复杂。 笔者在这篇文章中, 将通过一个案例, 来帮助大家深入了解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路由选择的过程, 那么在日后网络故障的排查中, 会更加的得心应手
……