【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提供不可靠,无连接的数据报传送服务. 不可靠:它不能保 ...
随机推荐
- 订阅号助手App发布 手机也能管理公众号了
盼着许久的微信订阅号助手app终于发布了!“ 微信团队发布「订阅号助手」App,支持公众号运营者在手机上发表内容.查看和回复消息.管理已关注用户和帐号.暂时只支持iOS平台,Android平台敬请期待 ...
- 帝国cms栏目别名怎样调用?栏目名称太短了
在用帝国cms创建栏目时一般会填写栏目名称(较短)和栏目别名(为空则与栏目名相同),栏目别名可以设置长一些作为栏目标题,可是如何调用帝国cms栏目别名呢?默认的模板标题调用是<title> ...
- android返回到第一个activity
问题:Android顺序打开多个Activity,如何返回到第一个Activity(一般为首页)? 情形:如 A 打开 B, B 打开 C, C 打开 D, 然后如果从 D 一步返回到 A,并清楚掉 ...
- maven指定本地仓库
在settings.xml文件中添加:<localRepository>E:\jihui\maven\jar</localRepository><!--指定本地仓库路径- ...
- HTML输入框的默认显示内容
在某些情况下我们会需要在输入框里默认显示一些内容,比如在登录的时候不在输入框前面显示用户名和密码,直接在输入框里显示,这时只要在input的标签里添加属性 placeholder="用户名 ...
- ios 工作日志
1.设计模式 1.1 想用一个controllerK控制多个页面的切换 但是每一个页面必须要引用这个controller,这样才能控制进度, 所以必须是弱引用.controller必须被某一个实例强引 ...
- Selenium - Css Selector 使用方法
什么是Css Selector? Css Selector定位实际就是HTML的Css选择器的标签定位 工具 Css Selector可以下载火狐浏览器插件,FireFinder 或 FireBug和 ...
- python sys.path[0] 的解释
sys.path是python的搜索模块的路径集,返回的结果是一个list path[0] 此列表的第一项,path[0],在程序启动时初始化,是包含用来调用Python解释器的脚本的目录.如果脚本目 ...
- linux服务后台管理
把进程放到后台有两种方法 1.cmmand & 2.ctrl+z 暂停到后台 查看后台服务 jobs 把后台进程移到前台 fg %2 工作号 恢复到前台 后台服务继续执行 bg ...
- Devenv 命令行开关
Devenv 可用来设置集成开发环境 (IDE) 的各个选项,以及从命令行生成.调试和部署项目.使用这些开关从脚本或 .bat 文件(例如每夜生成的脚本)运行 IDE,或以特定配置启动 IDE. 说明 ...
