【TCP/IP详解 卷一:协议】第9章 IP选路
推荐链接:网络地址与主机地址
9.1 引言
路由选择程序(daemon),通常这是一个用户进程。在大多数的Unix系统中,大多数的路由选择程序都是路由程序和网关程序。
路由表经常被IP访问,但是它被路由守护程序更新的频率却低很多,当接收到ICMP重定向报文时,路由表也要被更新。
9.2 选路的原理
在第三章中,介绍了IP搜索路由表的步骤:
- (1)搜索完全匹配的主机地址与网络地址。
- (2) (1)失败,搜索匹配的网络地址。
- (3) (1)(2)失败,搜索default默认表项。(一般被指定为一个网络表项,网络号为0)
在Terminal下执行
netstat -rn
命令,列出路由表打印出主机名。
Flag(标志):
- U 该路由可以使用
- G 该路由是到一个网关(路由器),如果没有设置该标志,说明目的地是直接相连的。
- H 该路由是到一个主机,也就是说目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,则目的地址是一个网络地址:一个网络号,或者网络号与子网号的结合。
- D 该路由是由重定向报文创建的。
- M 该路由是由重定向报文修改的。
标志G:是非常重要的一个标志,区分了直接路由(没有标志G)与间接路由(有标志G)。
- 发往直接路由(不含G)的packet(分组)中不但具有指明目的端的IP地址,还具有链路层的地址。
- 发往间接路由(含G)的packet(分组),IP地址指明目的端,但是链路层地址指明的是下一跳的路由器(网关)。
也就是说,含G与不含G的区别在于,是发往直接路由还是间接路由,以及分组中链路层的地址。
标志H:含有H表明目的地址是一个完整的主机地址,没有设置H表明目的地址是一个网络地址(主机号部分为0)。
- 当为 某一个 目的IP地址 搜索路由表 的时候,主机地址 必须与 目的地址 完全匹配。
- 网络地址 只需要匹配 目的地址的网络号与子网号 就可以了。
拾遗
参考计数 Refcnt 给出的是正在使用路由的活动进程个数。
Use 显示的是通过该路由发送的分组数。
主机路由表的复杂性 取决于主机所在网络的拓扑结构。
- (1)主机没有与任何网络相连接,路由表只有环回接口项。
- (2)主机连在一个局域网上,只能访问局域网上的主机。这时候路由表包含两项:一项是环回接口,另一项是局域网(如以太网)。
- (3)主机能够通过单个路由器访问其他网络时,一般情况下增加一个默认表项指向该路由器。
没有到达目的地的路由
如果路由表中没有找到匹配项,同时没有默认项,发生的情况:
- (1)IP数据报是由主机产生的:给发送数据报的application 返回一个 “主机不可达差错” 或者是 “网络不可达差错” 的错误。
- (2)IP数据报是被转发的:给原始发送端返回一份ICMP主机不可达的差错报文。
9.3 ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发的时候,就要发送一份ICMP“主机不可达”的差错报文。
在教材中的例子中,把连接到路由器sun上的拨号SLIP链路断开,然后试图通过该SLIP链路发生分组给任一指定sun为默认路由的主机,就会出现这种错误。
当接通SLIP链路启动时需要在路由表中增加一项使用SLIP链路的表项,断开时则删除表项。那么当SLIP链路断开的时候,主机sun中的路由表就不存在默认表项了。
顶层选路域:维护大多数Internet网站的路由信息。
9.5 ICMP重定向错误
当主机可以选择路由器发送分组的情况下,才可能看到ICMP重定向报文。重定向 一般用来 让具有很少选路信息的主机 逐渐建立起 更加完善的路由表。
主机启动时 路由默认项 可以只有一项,一旦默认表项出现错误,默认路由器将通知它进行重定向,并允许主机对路由表进行相应的改动。
ICMP重定向 允许 TCP/IP主机 在选路时 不需要具备 智能特性,而把智能特性放在路由器端。
教材P91 介绍了ICMP重定向报文的格式,必须具有以下三个IP地址:
- (1)导致重定向的地址(目的IP地址)
- (2)发送重定向报文的路由器的IP地址
- (3)应该采用的路由器IP地址
注意:重定向报文 只能由路由器生成,不能由主机生成。只能被主机使用,不能被路由器使用。
那么,路由表项可以被 (1)ICMP重定向报文 (2)路由守护程序 所更新及修改。
9.6 ICMP路由器发现报文
一般认为,在主机引导的时候,一般要广播或多播一个 路由请求的ICMP报文。一台或者多台的路由器响应一份 路由通告报文。
路由器在一份通告报文中可以通告多个IP地址。内含一对或多对IP地址和优先级,IP地址必须是发送路由器的某个地址,优先级是一个 有符号的32 bit整数,指明IP地址作为默认路由器地址的优先等级。
路由器操作
当路由器启动的时候,随机在所有广播或多播传送接口上发布通告报文。通告的间隔一般为450s-600s,一份默认的通告生命周期为30分钟。
当路由器的某个接口被关闭的时候,路由器在该接口上发送最后一份通告报文,并把生命周期设置为0。
路由器也监听来自主机的请求报文,并发送路由器通告报文来响应这些请求报文。
主机操作
根据路由通告报文,每一台监听相邻路由器报文的主机都能够建立自己的路由表实现网络通信。
在主机引导的时候,主机一般发送三份路由器请求报文,每三秒发送一次,一旦收到一个有效的通告报文,就停止发送请求报文。
2016/7/28
【TCP/IP详解 卷一:协议】第9章 IP选路的更多相关文章
- TCP/IP详解 卷一(第三章 IP:网际协议)
IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...
- TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)
本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...
- TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...
- TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)
UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示
- 《TCP/IP详解 卷一》读书笔记-----UDP&IP 分片
1.进程每产生一个UDP数据报就由一个IP数据报进行发送,而在TCP中,一个IP数据报并不与每个TCP报文段一一对应 2.UDP的端口号和TCP的端口号是相互独立的,对那些众所周知的端口号TCP和UD ...
- TCP/IP详解 卷一(第十七章 TCP:传输控制协议)
与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- TCP/IP详解学习笔记(3)-- IP:网际协议
1.概述 IP是TCP/IP协议族中最为核心的协议.所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输. IP提供不可靠,无连接的数据报传送服务. 不可靠:它不能保 ...
随机推荐
- python中operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...
- STL学习笔记--特殊容器
容器配接器 (1) stack 栈 后进先出(LIFO), 头文件#include<stack> template<class _Ty, class _Container = deq ...
- Python 之 os.walk()
原文地址https://www.cnblogs.com/JetpropelledSnake/p/8982495.html http://www.runoob.com/python/o ...
- unity3d-绘制贴图
准备贴图 在屏幕在绘制一张静态贴图,需要用到GUI.DrawTexture()方法, 该方法可以设定图片的显示位置.缩放比例和渲染混合等 /* Rect position:表示图片的绘制区域 * Te ...
- Object之clone
一.Object类中clone的实现. 二.clone详解. 看,clone()方法又是一个被声明为native的方法,因此,我们知道了clone()方法并不是Java的原生方法,具体的实现是有C/C ...
- JVM内存模型:程序计数器
一.JVM模型概述 java虚拟机(JVM)在java程序运行的过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有的随着JVM的启动而创建,有的随着用户线程的启动和结束而建立和销毁.一个 ...
- 圆的k次面积并
搬运别人的 https://vjudge.net/problem/SPOJ-CIRUT //china no.1 #pragma comment(linker, "/STACK:102400 ...
- codeforces 461C
这题说的是 给了一张长方形的纸 1*n 然后可以按照不同的做法去折这个纸张 他有两种操作,操作1 给了一个pi 点 然后将左边的纸往右边折,第2种操作是给了一个L 和 R 然后计算出 L和R 之间的纸 ...
- 1.hive开窗函数,分析函数
http://yugouai.iteye.com/blog/1908121 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行.开窗函数指 ...
- [转载]INNER JOIN连接两个表、三个表、五个表的SQL语句
SQL INNER JOIN关键字表示在表中存在至少一个匹配时,INNER JOIN 关键字返回行. 1.连接两个数据表的用法: FROM Member INNER JOIN MemberSort O ...