tcp/ip学习笔记--第9章 ip routing(选路)

来源:互联网 发布:辩论赛网络的利与弊 编辑:程序博客网 时间:2024/06/16 04:00

感觉这章比较难,虽然用心读了很久,但是很多细节还是没有理解清楚。


我们都知道,一个ip数据包是通过路由器,逐跳发往目的地的。这一章,讲的就是如何选择下一跳路由器的知识。首先讲了选路原理,简单来说是通过维护一张路由表,并在选路的时候搜索这张路由表。然后讲到,在搜索路由表的过程中,可能发现没有匹配的选项,这时候就会产生ICMP主机或网络不可达错误。还介绍了用于优化路由表的ICMP重定向,以及发现路由器的路由发现协议。


1.选路原理。

在搜索ip路由表确定下一跳地址的时候步骤如下:

1)搜索匹配的主机地址。

2)搜索匹配的网络地址。

3)使用默认项。

这个选路的操作步骤可以称之为路由机制(routing mechanism),而路由策略(routing policy)是用来决定哪些路由项应该被加入这个表中,路由策略一般是由路由守护进程提供的。

使用”netstat -nr“命令可以查看主机上的路由表,作者的网络上的一个简单的路由表,如下图:


说说其中的flag项,比较重要,总共有5种标志。

U:表明这个路由器活着

G:表明下一跳是到一个网关,而不是与目的地直接相连。

H:表明最终的目的地是一个主机,如果没有这个标志则说明最终目的地是一个网络。上面提到在搜索ip路由表确定下一跳地址的时候,会先匹配主机,再匹配网络号,就是通过这个标志来区别是主机还是网络号的。

D:是由ICMP重定向报文创建起来的

M:被ICMP 重定向报文修改过

要明白标志G和标志H之间的不同,标志G是用来描述下一跳路由是否是最终目的地,而H是用来描述最终目的地是网络号还是主机号的。

???对于这个路由表中的最后一条记录实在是不太理解:13.34就是svr4自己,为什么发往13.32这个网络的下一跳地址都是发给自己呢?而且没有G标志,也就是说认为这是直达的。比如说svr4要发送13.35,他就发给自己就行了吗?不需要知道13.35的mac地址?


2.路由表的初始化

route 命令显式操作:

一般在系统启动的时候会执行route add命令显示的操作路由表,用法如下:

route add destination gateway metric

最后一个参数代表路由的度量 ( m e t r i c )r o u t e命令在度量值大于0时要为该路由设置G标志,其他则不设置G标志 。

路由发现协议:

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



需要注意的是,ICMP路由发现协议只会修改默认条目。(???为什么呢)



3.ICMP主机或网络不可达错误

在搜索路由表选择下一跳的过程中,如果默认路由选项被删除,同时主机号和网络号都没有匹配的条目,那么路由器将会产生一个主机或网络不可达的错误,以ICMP报文的形式发送给源主机。


4.ICMP 重定向错误

I P数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送I C M P重定向差错报文给I P数据报的发送端。同时路由器也会把初始数据包向它的目的地转发。ICMP重定向报文的格式如下:
???书上写到,在产生ICMP重定向报文报文以前,以下条件必须全部满足:
1) 出接口必须等于入接口。
2) 用于向外传送数据报的路由不能被 I C M P重定向报文创建或修改过,而且不能是路由器的默认路由。
3) 数据报不能用源站选路来转发。
4) 内核必须配置成可以发送重定向报文

首先,不太明白第二三个条件。更重要的是,书中似乎没有说明,是只要满足这些条件就一定产生ICMP重定向报文,还是说是别人负责产生重定向报文,只是发送之前检查这些条件即可。如果是后者,也并没有提到由谁来产生。

接收到重定向报文的主机也要进行一些检查,这是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表。
1) 新的路由器必须直接与网络相连接。
2) 重定向报文必须来自当前到目的地所选择的路由器。
3) 重定向报文不能让主机本身作为路由器。
4) 被修改的路由必须是一个间接路由。


原创粉丝点击