TCPIP详解Protocol 读书笔记(九) IP选路

TCP/IP详解:Protocol 读书笔记(九)

Chapter9 IP选路

文章目录

  • TCP/IP详解:Protocol 读书笔记(九)
    • Chapter9 IP选路
      • IP选路原理简单回顾
      • 初始化路由表
      • 没有到达目的地的路由
      • ICMP重定向差错
      • ICMP路由器发现报文
        • 路由器操作
        • 主机操作

在前面的笔记中已经单独写了一篇关于IP路由选择的内容。当时在看到《IP协议》那一章节的时候关于路由选择部分有些不理解,因此查了其他资料并将想到的、看到的内容写成了笔记。后面在读到本章《IP选路》的时候,发现书中讲的内容更广、更细,有的内容我前面的笔记没有提到。 这篇笔记我主要针对《IP路由选择》那篇笔记中没有提到的重要内容做补充。

IP选路原理简单回顾

在IP选路过程中,路由表的作用是非常重要的,路由表项的内容包括:5bit标志、目的IP地址(主机、网络或默认)、下一站路由器的IP地址(间接路由)或者本地接口的IP地址(直接路由)及指向本地接口库的指针。主机表项比网络表项具有更高的优先级,而网络表项比默认项具有更高的优先级。

系统产生的或转发的每份IP数据报都要搜索路由表,路由表可以被路由守护程序或ICMP重定向报文修改。系统在默认情况下不转发数据报,除非进行特殊配置。主机在启动时只有一个简单的路由表,它可以被来自默认路由器的ICMP重定向报文动态修改。

路由表的内容、格式以及搜寻步骤已经在《IP路由选择》一文中讲过,这里就不再重复。

初始化路由表

每初始化一个网络接口时,就为接口自动创建一个直接路由。对于点对点链路和环回接口,路由直接到达主机;对于广播接口,路由是到达网络。

到达主机或网络的路由如果不是直接相连的,那就需要加入路由表。一种方法是在系统引导时显式地在初始化文件中运行route命令。如:

route add default [主机名/IP地址] 1

第三个参数代表目的端,第四个参数代表网关(路由器),最后一个参数代表路由的度量(metric)。

但是一般操作系统不会把route命令加入到启动文件中。一些系统允许在某个文件中指定默认的路由器,如/etc/defaultrouter。在每次重启操作系统时都要在路由表中加入该默认项。

初始化路由表的其他方法是运行路由守护程序或用较新的路由器发现协议。后面有章节会涉及到这些内容。

没有到达目的地的路由

正常情况下,路由表中如果有默认项的话,我们对路由表的搜索都能找到匹配项,因为主机和网络项都匹配不上的话,就会自动匹配到默认项上。但是如果路由表中没有默认项,而又没有找到主机或网络匹配项,这时就产生报错信息。

具体报错信息取决于该IP数据报是由主机产生的还是被转发的。如果数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。

ICMP重定向差错

当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。举个栗子:

TCPIP详解Protocol 读书笔记(九) IP选路_第1张图片

  1. 我们假定主机发送一份IP数据报给R1.这种选路决策经常发生,因为R1是该主机的默认路由。
  2. R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到到达接口是相同的(即主机与路由器所在的LAN)。这样就给路由器发送重定向报文给原始发送端提供了线索。
  3. R1发送一份ICMP重定向给主机,告诉它以后把数据报发送给R2而不是R1。

重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。

ICMP路由器发现报文

一般来说,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。

TCPIP详解Protocol 读书笔记(九) IP选路_第2张图片

​ ICMP路由器请求报文格式

TCPIP详解Protocol 读书笔记(九) IP选路_第3张图片

​ ICMP路由器通告报文格式

路由器在一份报文中可以通告多个地址。地址数指的是报文中所含的地址数。地址项大小指的是每个路由器地址32bit字的数目,始终为2。生存期指的是通告地址有效的时间。下面是地址和优先级字段。IP地址是发送路由器的某个地址。优先级是一个有符号的32bit整数,指出该IP地址作为默认路由器地址的优先等级,这是与子网上的其他路由器相比较而言的。值越大说明优先级越高。

路由器操作

当路由器启动时,将随机在所有广播或多播传送接口上发送通告报文。随机发送是为了减少与子网上其他路由器发生冲突的概率。一般两次通告报文间隔450s和600s。通告报文的默认生命周期是30min。

涉及到生命周期的另一个情况是当路由器上的某个接口被关闭时,路由器可以在该接口上发送最后一份通告报文,并把生命周期值设为0。

除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。

如果子网上有多台路由器,由管理员为每个路由器设置优先等级。例如,主默认路由器就要比备份路由器具有更高的优先级。

主机操作

主机在引导期间一般发送三份路由器请求报文,每3s发送一次。当接收到一个有效的通告报文,就停止发送请求报文。

主机同时也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。如果没有接收到来自当前默认路由器的通告报文,默认路由器就会超时。

主机同时也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。如果没有接收到来自当前默认路由器的通告报文,默认路由器就会超时。

一般的默认路由器每隔10min发送通告报文,报文的生命周期是30min。即使主机在一段时间内,没有收到一份或者两份通告报文,主机的默认表项也不会超时。

你可能感兴趣的:(TCP/IP,计算机网络,TCP-IP协议栈)