专注SIP通讯产品与方案

细说IP路由选择

IP 路由选择算法
IP 网络的路由选择是由路由器来完成的。路由器每收到一个 IP 数据报,就根据目的 IP 地址查询路由表,找到匹配网络号及下一跳路由器,完成数据转发。如果目的主机在本网络,则转换成该主机的物理地址,重新封装数据报后将其发给主机。如果路巾表指   定至目的主机的下一跳路由器,则按照此路由转发;如果找不到匹配网络,则发往默认路   由器。IP 路由选择的算法如图
IP路由选择的算法
为了判断目的主机是否在某个直接相连的网络上,源主机检查目的主机因特网地址 的网络标识。它将目的主机的网络号与它自己直接连接的网络的网络号相比较,如果网 络号相同,源主机将数据报封装在目的地址为目标硬件地址的帧中直接发送给目标。如 果网络号不同,源主机必须将数据报发送给路由器来传输,然后源主机将数据报封装在目的地址为路由器的硬件地址的帧中。路由器收到帧以后,抽取出数据报,然后将数据报传送给路由器处理。通常,网络管理员会为网上的每一台主机配置一个默认路由器,即“默认网关"。默认路由器提供到远端网络上所有主机的访问。
2. 路由表
IP路由器根据自己路由表中的信息决定是否转发数据报。路由表包括每个 目 的 网络的 IP 地址,而不是每个目的主机的地址。这样就缩减了路由表的大小,因 为路由表 中的信息数措直接与构成因特网的网络数最(而不是主机数晕)成正比。当一个路由器接收到数据报时,它首先检查该数据报的目的 IP 地址,在其路由表中搜索匹配。如果 目 标在远端网络,路由器将该数据报发送到距最终目标更近的另一个路由器。如果目标在与路 由器某个端口直接相连的网络上,则将数据报发送到这个端口。
在巨大的因特网上维护所有路由器上的路由表是很困难的。多数情况下,路由表
是动态维护的,以反映目前因特网系统的拓扑结构,并且允许绕过失效的连接进行路巾 。 路由器一般通过与其他路由器一起分担路由协议实现这样的功能。T CP/I P   环 境下常用 的路由协 议包括:路由信息协议( RIP , Routing Information Protocol) 、开放式最短路径优先协议 C OSPF, Open Shortest Path First ) 和边界网关协议( BGP , Border GatewayProtocol) 。下图列出了一个典型的用RIP创建的路由表:
一个典型的用RIP创建的路由表
路由表中的每一行是一个单独的条目,包括如下信息:
Destina tio n( 目的地址)--- 目 的 网络的 IP 地址。路由器搜索数据报报头中的目的 IP 地址与这个域的匹配。
Next  Router( 下一个路由器)- 距离最终目标更近的 邻接路由器的 IP  地址。要达到目的地址,本地路由器必须把数据报送给这个路由器。这个域中的“连接”    ( conne ct ) 值表示目的网络直接和本地路由器的某个端口直接相连。
Hops ( 跳步) 路由器和目的网络之间的跳步数。数据报必须经过的每一个中 间路山器算做一个跳步。
T ime( 时间) 本条目从上次更新到现在的时间。路由器每次接收到某个路由    的更新信息,都抛弃该路由旧的条目,然后重新初始化时间。
Source( 源地址)己-一-为本条目提供信息的路由协议名称。
3. IP 路由选择示例:下面这个例子说明了 IP 数据报如何从一台主机在因特网上发送路由到另一台主机。下图说明其拓扑结构,包括源主机(主机 A ) 、目的主机(主机 B) 、3 个中间路由器和 4 个不同的物理网络。
数据报转发不例的拓扑结构
假设在网络 128 . 1. 0. 0 上的主机 A 想用 T elnet 协议连接网络 128 . 4. 0. 0 上的主机
B。T elne t 是一个远程终端访问协议,允许主机与另一台主机上的程序通信。
(1 ) 主机 A 将 IP 数据报发送给路由器 A因为主机 A 和主机 B 在不同的网络上,网络 A 必须使用 IP 路由器的服务把数据报传输给主机 B。根据初始设置,主机 A 知道它的默认网关是路由器 A , IP 地址为 128 . 1.0. 2。因此,主机 A 知道所有到主机 B 的数据报都必须送到路由器 A。如果主机 A 的 ARP 缓存中没有路由器 A 的硬件地址,它发出 ARP 请求并等待路由器 A 响应。当地址映射存在后,主机 A 将送给主机 B 的数据报封装到目的 MAC 地址为080002001231( 路由器 A 的端口 1) '  源 MAC 地址为080002001111(主 机A ) ' 类型域为OSOO (IP ) 的 以 太网帧中,如下图所示。
网络128.1.0.0上的数据报
数据报中 的类 烈域的功能是告诉路由器 A  以太网帧中的数据域包含I P包 。 路 由器A 用这个信息来决定使用何种协议处理以太网帧中的内容。
( 2 )路 由器 A 将数据报转发给路由器 B当接收到来 自 主机 A 的数据报时,路由器 A 删除以太网报头,检查类型域,然后将数据报送给 IP 模块(软件进程)。IP 模块检查 IP 包报头中的目的网络号并且在其路 由表(见下图 ) 中定位于 1 28 . 4 . 0 . 0 的路由上。
路由表1
由上图可知,路由器 A 知道目标网络有 2 个跳步的距离,它必 须 将数据报转发给路 由器 B, IP 地址为 1 28 . 2.0. 3。如果路由器 A 的 ARP 缓存中没有路由器 B  的硬 件地址,它会发出一 个 ARP 请求并且等待路由器 B 响应。得到地址之后,路由器 A  将数据报封装在以太 网帧中 ,目 的 MAC 地址为 0 8 0 0 0 20 0 1 2 33 ( 路由器 B 的端口 1) ' 源MAC 地 址为 0 8 0 0 0 2 0 0 1 2 3 2 ( 路由器的 A 端口 2 )' 类 型域为 0 8 0 0 OP), 如下图所示。然后路由器 A 将帧发送到端口2。
路由器A发送的数据报格式
( 3 ) 路由器 B 将数据报转发给路由器 C
接收到来自路由器 A 的数据报后,路由器 B 移掉以太网报头,查看类型域,并且把数据报送给它的 IP 模块。路巾器的 IP 模块检查 IP  包报头中的目的网络号并且在其路由表 2 ( 见图 2- 3-11 ) 中,定位于网络 1 28 . 4. 0. 0 的路由上。
路由表2
根据上图, 路由器 B 知道到目的网络有 1 个跳步的距离,它必须将数据报转发给路由器 C , IP 地址为 1 28 . 3. 0. 3。如果路由器 B 的 ARP 缓存中没有路由器 C 的硬件地址,它会发出一个 ARP 请求并且等待路由器 C 的响应。在得到硬件地址后,路由器 B 将数据报封装在以太网帧中,目的 MAC 地址为 080002001 235( 路由器 C 的端口 1) , 源MAC 地址为 0800020 01234 ( 路由器 B 的端口 2 )' 类型域 0800 (I P ) , 然后路由器 B 将帧发送到端口 2 , 如图 2- 3-1 2 所示
路由器B发送的数据报格式
( 4 ) 路由器 C 转发数据报到目的主机 B
收到来自路由器 B 的数据报后,路由器 C 删掉以太网报头,检查类观域,将数据报送给其 IP 模块。IP 模块检查 IP 包报头中的目的网络号在它的路由表 3 , 并定位千网络 1 28 . 4. 0. 0 的路由上。
网络号 下一个跳步路由器 跳步
128. 1. 0. 0 128. 3. 0. 2 2
128.2.0.0 128. 3. 0. 2 1
128. 3. 0. 0 直接端口 1
128. 4. 0. 0 直接端口 2 1
由上表, 路由 器 C 发现目的网络直接连在端口 2 上 ,它能够直接发送数据报。如果路由器 C 的 ARP 缓存中没有主机 B 的硬件地址 ,它会发出一个 ARP 请求,并 且 等待主机 B 的响应。在得到硬 件地址后 ,路 由 器 C 将数据报封装 在以 太网帧 中,目 的MAC 地址为 08000 200 2 2 2 2 ( 主机 B )' 源 M AC 地址为 08000 2001 23 6 ( 路由器 C 的端口2 )' 类型域 08 00 OP) , 数据报的格式如下图所示。然后路由器 C 将数据报发送到端口 2 。
路由器 B 发送的数据报的格式
网络 128. 4. 0. 0 上的主机 B 收到数据帧后,删掉以太网报头,检查类型域,将数据报送给它的 IP 模块。IP 模块确认该数据报是发给本机的,就删掉 IP 包报头,将 TCP 消息送给T CP 模块。TCP 模块检查端口号,将消息送给本地 Telnet 程序访问的 Telnet 端口。
注意,在本例中由主机 A 定 义的目的主机的 IP 地址一直保持不变。在数据报向其最终目的主机传送的过程中,变化的地址仅仅是源和目的 MAC 地址。最后,当主机 B 的 T e lnet 程序做好响应主机 A 的准备之后,整个过程将反向进行。