《TCP/IP 卷1》笔记:IP选路

感情迁移 提交于 2020-01-06 14:32:22

IP选路

引言

选路是IP最重要的功能之一。

IP层工作流程

  • 网络接口把IP数据报放入IP输入队列
  • 处理IP选项
  • 是目标主机的ip地址是本地的IP地址,则传给上层协议。如果端口没有进程监听则发送ICMP报文
  • 本机如果配置成了路由器,则根据路由表转发数据报
  • ICMP数据报根据路由器决定发往目的地
  • TCP/UDP都可以利用IP层发送数据,再由路由表决定发往目的地
  • route命令和netstat命令(netstate -r)可以编辑查询路由表。
  • IP可以访问路由表,守护程序更新的频率很低。当收到ICMP重定向报文时,路由表也要被更新。

选路的原理

IP搜索路由表的步骤

  1. 搜索匹配的主机地址,找到则去下一站路由(标志:G)或者直接相连的网络接口(标志:H),标志字段决定。
  2. 搜索匹配的网络地址,找到则去下一站路由(标志:G)或者直接相连的网络接口(标志:H),标志字段决定。
  3. 搜索默认表项(一般为一个网络表项,其网络号为0)

IP层进行的选路实际是一种选路机制,搜索路由表并决定向哪个网络接口发送分组。
选路策略是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略

简单路由表
简单路由表
destination是目的地址(主机地址或者网络地址,由H标志决定),gateway是下一站路由地址。0.0.0.0是默认地址
flags的含义

  • U 该路由可以使用
  • G 该路由是到一个路由器。如果没有说明目的地是相连的
  • H 该路由是到一个主机。目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络。目的地址是网络号或者网络号和子网号的组合。
  • D 该路由是由重定向报文创建的
  • M 该路由已被重定向报文修改

标志G用来区分间接路由和直接路由。

  • 间接路由的意思是目标地址与本机不在一个网络上,需要经过路由器。
  • 直接地址是目的地址是与本机在一个网络上(比如在同一个以太网),标志不带G

主机路由表的复杂性取决于主机所在网络的拓扑结构

  1. 最简单的是主机没有与任何网络相连。TCP/IP可以使用这样的主机,只能与本身通信。只包含环回接口
  2. 主机连在一个局域网上,只能访问局域网上的主机。路由表包含两项:环回接口和局域网
  3. 主机通过单个路由器访问其他网络。包含环回接口和默认表项指向该路由器
  4. 主机与局域网相连还跟网络路由相连。环回接口,局域网,默认表项指向网络路由器。

举个例子
举例

  1. 假设目标主机时sun,140.252.13.33。首先匹配主机地址,flags带H的,发现不匹配。再匹配不带H的网络号(网络号+子网号)。发现140.252.13.32完全匹配。链路层的地址是目的端的地址,因为不带G表明是直接路由
  2. 假设目标主机时slip,140.252.13.65。首先匹配主机地址,匹配上了,因为带G,所以链路层地址指向Gateway(140.252.13.35)的物理地址
  3. 这一次通过Internet给主机aw.com(192.207.117.2)发送一份数据报。主机地址和网络地址都不匹配,则发送给默认的路由。链路层是gateway的地址(140.252.13.33)
  4. 给本机发送一份数据报。有四种方式完成这件事:ftp svr4/ ftp ip / ftp localhost/ ftp 127.0.0.1
    在前两种情况中,找到了匹配的网络号地址140.252.13.32,并把IP报文送给以太网驱动程序。IP地址的目的地址是本机地址,因此被送给环回驱动程序,驱动程序把报文放入IP输出队列。
    以上四种情况都被逼送到环回驱动程序,但是路由决策不同

初始化路由表
每当初始化一个接口时(通常是用ifconfig命令设置接口地址),就为接口自动创建一个直接路由。对于点对点链路和环回接口,路由是到达主机,对于广播接口,路由是打到网络的。
到达主机或网络的路由如果不是直接相连的,就必须加入路由表。可以使用route命令
route add default sun 1
route add slip bsdi 1
第三参数是目的端,第四个参数时代表网关(路由器),最后一个参数代表路由的度量。route命令在度量值大于0会为路由设置G标志。
初始化路由表的其他方法是运行路由守护程序,或者使用较新的路由器发现协议

没有到达目的地的路由
如果本机没有匹配到路由表项。如果本机是路由器,那么判断IP数据报是本机发送的还是转发的,是本机发送的就给应用程序返回一个差错,类此ICMP主机不可达的错误。如果时转发的,就发给信源一份ICMP的主机不可达的差错报文。

ICMP主机与网络不可达差错

当向一个不存在的ip地址发送数据时,一般局域网的主机会转发给默认的路由表目,只有到了NSFNET骨干网等网络才会发现目标IP不存在,返回ICMP主机与网络不可达差错报文。该类骨干网上知道连接到Internet上的每个网络信息

转发或不转发

路由器才转发,主机不转发。主机可以被设置成路由器。

ICMP重定向差错

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

  1. 我们假定主机发送一份IP数据报给R1。这种选路决策经常发生,因为R1是该主机的默认路由。
  2. R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器所在的LAN)。这样就给路由器发送重定向报文给原始发送端提供了线索。
  3. R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。
    重定向让有很少选路信息的主机建立更完善的路由表。主机启动时往往只有一个默认表项。由路由器不断地进行重定向。显然路由器需要知道相连网络的更多拓扑结构信息。

ICMP重定向报文
有四种不同类型的重定向报文,不同的代码值。
四种类型重定向报文的代码
ICMP重定向报文的接收者必须查看三个IP地址:

  • 导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部)
  • 发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址)
  • 应该采用的路由器IP地址(在ICMP报文的4-7字节)

ICMP路由器发现报文

主机在启动后要广播或多播传送一份路由器请求报文,一台或多台路由器响应一份路由器通告报文。

ICMP路由器请求报文格式
ICMP路由器通告报文格式
优先级是指该IP地址作为默认路由器地址的优先等级

路由器操作
路由器启动后定期广播,间隔450s或600s,还要监听来自主机的请求报文,并响应。
主机操作
主机在启动时发送三份路由器请求报文,每3s发送一次。接收到一个有效的通告报文,就停止发送请求报文。也监听来自路由器的通告报文,根据优先级修改。

小结

IP路由操作对应运行TCP/IP系统来说是基本的。路由的表项包含5个内容(目的地址,下一站路由,子网掩码,标识,网络接口)。系统转发或者产生报文要搜索路由表,可以被路由守护程序或ICMP重定向报文修改。route命令可以crud路由表。

习题

9.1为什么你认为存在两类ICMP重定向报文—网络和主机?
:用来区分flag中的G

9.2在9.4节开头列出的svr4主机上的路由表中,到主机slip(140.252.13.65)的特定路由
是必需的吗?如果把这一项从路由表中删除会有什么变化?

:非必须需。删除后,如果svr4有要发送IP数据报到slip主机的,就会发送给默认表目的下一站路由。下一站路由器发现slip和svr4是在同一个网络,会发送ICMP主机重定向报文。

9.3考虑有一电缆连接4.2BSD主机和4.3BSD主机。假定网络号是140.1。4.2BSD主机把主机号为
全0的地址识别为广播地址(140.1.0.0),而4.3BSD通常使用全1的主机号(140.1.255.255)发
送广播。另外,4.2BSD主机在默认条件下要尽力转发接收到的数据报,尽管它们只有一个
接口。
请描述当4.2BSD主机收到一份目的地址为140.1.255.255的IP数据报时会发生什么事。

9.4继续前一个习题,假定有人在子网140.1上的某个系统ARP高速缓存中增加了一项(用arp
命令)内容,指定IP地址140.1.255.255对应的以太网地址为全1(以太网广播地址)。请
描述此时发生的情况。

9.5检查你所使用的系统上的路由表,并解释每一项内容

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!