(参考文献)TCP/IP详解,卷1:协议

选路是IP最重要的功能之一。需要进行选路的数据报可以有本地主机产生,也可以由其他主机产生。在有一种情况下,主机必须配置成一个路由器,否则通过网络接口搜到的数据报,如果目的地址不是本机就要丢弃。

在以上图中有一个路由守护程序(daemon),通常这是一个用户进程。在Unix系统中,大多数普通的守护程序都是路由程序和网关程序(术语daemon指的是运行在后台的进程,它代表整个系统执行某些操作。Daemon一般在系统引导时启动,在系统运行期间一直存在)。

简单路由表

执行netstat –rn 命令输出如下:

Destination    Gateway         Genmask         Flags  MSS Window  irtt Iface

152.188.7.133  192.168.8.1     0.0.0.0         UGH       0 0          0 eth0

Default        192.168.8.1     0.0.0.0         UG        0 0          0 eth0

169.254.0.0    0.0.0.0         255.255.0.0     U        0 0          0 eth0

192.168.8.133  0.0.0.0         255.255.255.0   U        0 0          0 eth0

第一行表明,如果目的地址是 192.168.8.133 那么网关(路由器)将把分组转发给192.168.8.1。

对于一个给定的路由器,可以打印出5种不同的标志:

U  该路由器可以使用

G  该路由器是到一个网关(路由器),如果没有标志说明目的地址是直接相连的。

H  该路由器是到一个主机,也就是说,目的地址是一个完整的主机地址.

D  该路由是由重定向报文创建的

M  该路由已被重定向报文修改

标志G是非常重要的,他区分了间接路由和直接路由,区别在于,发往路由的分组中不但具有目的端的IP地址,还具有其链路层地址,指明的是网关。当为某个目的地址搜索路由表时,主机地址必须与目的地址完全匹配,如果没有则匹配网络地址;而网络地址只需要匹配目的地址的网络号和子网号就可以了。

输出的第2行是默认路由,每个主机都有一个或者多个默认路由。这一项表明,如果在路由表中没有找到特定的路由,就把分组发送到路由器  192.168.8.1

,这说明当前主机利用这一路由表现就可以通过Internet访问其他的网络系统。

没有到达目的地的路由

前面我们都假定对路由表的搜索都能找到匹配的表项,即使匹配的是默认路由。但如果路由表中没有默认项,又没有找到匹配的项,这时会发生什么呢。

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

ICMP重定向差错

我们假定主机发送一份IP数据报给R1,因为R1是该主机的默认路由。

当R1收到数据报并检查他的路由表,发现R2是发送该数据报的下一站。当他把数据报发送给R2时,R1监测到他正在发送数据报的接口与数据报到达接口是一样的(即R1接收到该数据报的端口和他要发送出去使用的端口是同一个)。这样就给路由器发送重定向报文给原始发送端提供线索。

R1发送一份ICMP重定向报文给主机,告诉他以后把数据报发送给R2而不是R1,。

重定向一般让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时,路由表中可以只有一个默认表项。一旦默认路由发送差错,默认路由器将通知他进行重定向,并允许主机对路由表做相应的改动。ICMP重定向允许TCP/IP主机在进行选路时不需要具有智能特性,而把所有的智能特性放在路由器端。主机只是通过重定向报文来逐步学习。

ICMP路由器发现报文

一般情况下,初始化路由表的方法是在配置文件中指定静态路由。这种方法常用来设置默认路由另一种方法是使用ICMP通告报文和请求报文。

一般认为,主机在引导以后要广播或多播一份路由器请求报文。一台或更多台路由器相应一份路由器通告报文。另外路由器定期的广播或者多播传送他们的路由器通告报文,运行每个正在监听的主机更新他们的路由表。

ICMP路由请求报文格式:

ICMP路由器通告报文:

路由器在一份报文中可以通告多个地址。地址书指的是报文中所含的地址数;地址项大小指的是每个路由器地址32bit的数目;生存时间指的是通告地址有效的时间(秒)。优先级是指出IP地址作为默认路由器地址的优先级。

动态选路

路由器之间的通信使用RIP协议,即选路信息协议(Routing Infromation Protocol),大多数TCP/IP实现都提供这个应用广泛的协议。

当相邻路由器之间进行通信,已告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程,成为路由守护程序,它运行选路协议,并与其相邻的路由器进行通信。路由守护程序更具它从相邻路由器接收到的信息,更新内核中的路由表。

动态选路并不会改变内核在IP层的选路方式(即IP选路)。内核搜索路由表,查找主机路由、网络路由。以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息变了----当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自引导程序文件中的route程序。

路由守护程序将选路策略加入到系统中,选择路由并加入到路由表中。如果守护程序发现前往同一信宿存在多条路由,那么他(以某种方法)将选择最佳路由并加入到路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或者线路不好),他可以删除受影响的路由或增加一条路由以绕过该问题。

在internet这样的系统中,采用了许多不同的选路协议。Internet是由多组自制系统组成的,每个自制系统都有各自的选路协议。常常将一个公司或者大学定义为一个自制系统。每个自制系统可以选择该自制系统中各个路由器之间的选路协议,这种协议我们称之为内部网关协议IGP(Interior Gateway Protocol)或域内选路协议(interadomain routing protocol)。最常用的IGP选路信息协议RIP。(选路协议的作用在于,提供最优路径,并加入到路由表中;他为主题查看路由表提供一套更优质的路由表方案)

IP选路与动态选路协议(六)相关推荐

  1. TCP/IP详解--学习笔记(5)-IP选路,动态选路,和一些细节

    1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ...

  2. TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节

    1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ...

  3. 《TCP/IP详解》学习笔记(五):IP选路、动态选路

    静态 IP 选路 1一个简单的路由表 选路是 IP 层最重要的功能之一.前面的部分已经简单的讲过路由器是如何根据 IP 数据包的 IP 地址来选择路由的. 这里就不重复了. 首先来看看一个简单的系统路 ...

  4. 《TCP/IP具体解释卷2:实现》笔记--选路请求和选路消息

    内核的各种协议并不直接使用前面提供的函数来訪问选路树,而是调用几个函数:rtalloc和rtallocl是完毕路由表查询的两个 函数:rtrequest函数用于加入和删除路由表项:另外大多数接口在接口 ...

  5. 网络:网际协议(IP)的选路表和选路算法

    路由维护和查找 选路软件在理论上可以划分为两组.其中一组由那些用来为数据报选择正确路由的过程组成,另一组由增加.改变或删除路由的过程组成. 因为网关必须为自己所处理的每个数据报判定路由,所以路由查找程 ...

  6. 第十章 动态选录协议

    为什么80%的码农都做不了架构师?>>>    10.2   动态选路 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协 ...

  7. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...

    本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 TCP/IP十个问题 一.TCP/IP模型 TCP/IP协议模型(Trans ...

  8. TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体,

    TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体, 一.TCPsocket 1.TCP是面向连接的 ...

  9. 《TCP/IP详解卷一:协议》 概述

    分层 TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统. 链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.用 ...

最新文章

  1. MyBatis中的大于、小于、like等符号写法
  2. 数据中心如何减少人为故障发生率
  3. Js判断下拉框是否为空值
  4. 走进AngularJs(六) 服务
  5. How Kyma plugin is initiated by WordPress
  6. 01.神经网络和深度学习 W4.深层神经网络
  7. Keil | 解决Keil双击工程名无法打开.map的问题
  8. WebPart的使用
  9. ajax对象的属性和方法
  10. Web 探索之旅 | 第二部分第四课:数据库
  11. Ubuntu 安装 H3C iNode 客户端
  12. 算法篇:最长公共子串(牛客)
  13. MMQ 开源免费 同时支持分布式架构和数据持久化、规则引擎、ACL的MQTT broker。
  14. 计算机无法识别出硬件,电脑检测不到硬盘,电脑硬件故障检测工具
  15. 使用HadoopDruidIndexer向Druid集群中加载批量数据-Batch Data Ingestion
  16. 新手应该如何学习SEO优化
  17. acwing.回文质数
  18. 成都东软学院2016年ACM冬季校赛正式赛 - 题解
  19. T-SQL 编程 --值得你看,真香 --- ( 不会真的有人用 SQL 编程吧 )
  20. Delphi 11.2 配置Android SDK 环境

热门文章

  1. Python安装第三方包package
  2. 计算机视觉方面2016年重要会议deadline
  3. 决策树Decision Tree 及实现
  4. Earth Mover's Distance (EMD)距离
  5. boost源码剖析之:多重回调机制signal(上)
  6. 2015年绿盟面试题
  7. 信息系统项目管理师-配置管理知识点
  8. 人工智能与主体时代变革
  9. 推荐系统-07-lambda架构
  10. 性能优化:Sql语句中HINT不起作用