关于IP路由
这里发一篇关于路由的文章,只是一些介绍和概念。网络的概念从其诞生以来,一直在不断得丰富中,但是其基础概念和理论并没有改变,因此希望和大家一起来学习并巩固网络的概念,这对于想成为linux管理员,或者网络工程师的网友会有一点帮助。
IP路由
2.4.1 IP网络
大家可能有这种经历;在写信给某人时,通常会在信封上写明收信人的确切地址,指定
国家、地区、省份,城市以及详细到几栋几号。然后,再把信投入邮箱,邮政服务将把信送
达目的地:先送到指定国家,再由那个国家的邮政服务将其分发到相应的省或地区。邮政服
务的层次结构非常清楚:不管在哪里寄信,本地的邮政主管都知道信件投递路径,并将进行
信件转发,并不注重信件在目标国内的投递方式(注意,邮件投递系统只注重完成任务,而
不管如何去完成任务)。
I P网络其实与邮件投递系统类似。整个因特网由无数个称为独立系统的网络构成。每个
这样的系统都会在各自的成员主机之间执行路由,所以投递数据报的任务实际上就是找出通
往目标主机所在网络的路径。也就是说,只要数据报被传到特定网络上的任何一台主机,怎
样到达最终的目标主机,则由这个特定网络自行负责。
2.4.2 子网
我们还可以从被分为网络部分和主机部分的I P地址中,看出I P网络的结构。默认情况下,
目标网络(即目标主机所处的网络)是从I P地址的网络部分衍生的。所以, I P网络编号相同
的主机应该处于同一个网络内,反之亦然。但一个独立系统中,往往包含不止一个I P网络。
由于一个网络可能由上百个小型网络集合而成,各小型网中还有诸如以太网的更小的物
理网络单元,所以,在这种网络内部提供类似于前面的方案是非常有意义的。这样,我们就
可以把I P网络分成若干个子网。
子网主要负责从自己所处的I P网络,把数据报投到特定范围内的I P地址。A、B或C类地
址的识别,是通过I P地址的网络部分来完成的。但是现在的网络编号被扩展到包含主机部分
的位数。这些被视作子网编号的位数就是所谓的子网掩码(或网络掩码)所赋予的。它同样
是一个3 2位的编号,用于为I P地址的网络编号指定位掩码。
Groucho Marx大学( G M U )校园网就是一个很好的范例。它采用的是B类地址,其网络编号
是1 4 9 . 7 6 . 0 0,所以其网络掩码是2 5 5 . 2 5 5 . 0 . 0。
从其内部结构来说,G M U大学校园网由若干个小型网组成,比如各个系的局域网。所以,
这个I P网络被分为2 5 4个子网, I P地址在1 4 9 . 7 6 . 1 . 0到1 4 9 . 7 6 . 2 5 4 . 0之间。举个例子来说,理论
物理系分配的I P地址是1 4 9 . 7 6 . 1 2 . 0。校园主干网的地址是1 4 9 . 7 6 . 1 . 0。这些子网共享同一个I P
编号,其中的第三个8位元是用来区分它们的。所以,它们的子网掩码将是2 5 5 . 2 5 5 . 2 5 5 . 0。
值得注意的是子网只是一个网络内部分区。子网是由网络拥有者(或管理员)一手炮制
的。通常情况下,子网主要用于反映现有的地址边界,用于各子网间的物理上(两个以太网
之间)、管理上(两个系之间)或地理上的边界。但是,这类结构不仅会影响整个网络的内部
行为,而且子网只能本地识别,其地址仍然被看成是标准的I P地址。
2.4.3 网关
子网不仅能带来结构上的好处,还时常用来反映硬件边界。具体物理网络上的主机,比
16 第一部分Linux 网络管理员指南
下载
第2章TCP/IP网络17
下载
如以太网,是非常受限的:它能够直接与之交谈的主机只能是本网络内的。要对其他的主机
进行访问,只有通过所谓的“网关”来进行。网关是同时连接两个或两个以上物理网络的主
机,被配置为执行网络间的包交换。
对I P网络来说,要想轻松识别主机是否在本地网络,不同的物理网络只能属于不同的I P
网络。比如,网络编号1 4 9 . 7 6 . 4 . 0是为数学系局域网上的主机保留的。在向Q u a r k发送一个数
据报时,E r d o s主机上的网络软件立即就能知道该数据报来自1 4 9 . 7 6 . 1 2 . 4这个I P地址,而且其
目标主机处于另一个物理网络上。因此,这个数据报只能通过一个网关(默认设置是S o p h u s)
抵达目的地。
S o p h u s本身连接了两个子网:数学系的局域网和校园主干网。它分别通过两个不同的接
口(e t h 0和f d d i 0)访问这两个子网。现在,我们为这个网关分配什么样的I P地址呢?应该根
据1 4 9 . 7 6 . 1 . 0子网进行分配,还是根据1 4 9 . 7 6 . 4 . 0子网进行分配?
答案是:两者都要。在提到数学系局域网上的主机时,就应该用1 4 9 . 7 6 . 4 . 1这个I P地址;
在提及校园主干网上的主机时,就应该用1 4 9 . 7 6 . 1 . 4这个地址。
所以,这个网关就有两个I P地址。这两个地址—还有其相应的网络掩码—都绑在接口
上(通过这个接口访问子网)。因此,接口和S o p h u s地址之间的对应关系就会像表2 - 1列出的
那样。
表2-1 接口和S o p h u s地址之间的对应关系
接口地址网络掩码
e t h 0 1 4 9 . 7 6 . 4 . 1 2 5 5 . 2 5 5 . 2 5 5 . 0
f d d i 0 1 4 9 . 7 6 . 1 . 4 2 5 5 . 2 5 5 . 2 5 5 . 0
l 0 1 2 7 . 0 . 0 . 1 2 5 5 . 0 . 0 . 0
最后一条说明的是回送接口l 0,我们在前面已经介绍过它。注意,随两个子网上的主机同
时出现的还有两个地址。
一般说来,把地址附于主机和把地址附于其接口之间有些细微差别,但我们可以忽略它
们之间的差别。对处于同一个网络的主机来说,比如E r d o s,一般能够很确切地指出主机的I P
地址是多少。比如说,这是一个以太网接口,它的I P地址是这样的。但是在提及网关时,其
间的区别则是不容忽视的,必须指明地址是附于主机上,还是附于其接口上。
2.5 路由表
接下来的重头戏是:把数据报投到远程网络时, I P协议是如何选择网关的。
在此之前,我们曾见过E r d o s网关的工作流程:它收到发向Q u a r k的数据报后,便对其目
标地址进行检查,并发现其目标主机不在本地网络内。所以,它把该数据报发给默认网关
S o p h u s,现在就看网关怎样运作了。S o p h u s识别出Q u a r k不在它直接连接的任何一个网络内,
所以,它就开始寻找另一个网关来接替它的工作。于是它选中了N i e l s,这是通往物理系局域
网的网关。如此一来, S o p h u s就需要更多的信息,把目标网络和一个适当的网关关联起用。
它采用的路由选择信息I P实际上就是一个表,把网络和准备抵达的网关链接起来。一般
说来,我们必须提供一个c a t c h - a l l条目(默认路由) ;它是一个与0 . 0 . 0 . 0网络关联在一起的网关。
发向未知网络的所有包都会通过这个默认路由得以发送。针对S o p h u s网关,它的路由表就像
表2 - 2一样:
18 第一部分Linux 网络管理员指南
下载
表2-2 Sophus的路由信息表
网络网关接口
对直接与S o p h u s连接的网络来说,通向它的路由不需要网关,所以显示的网关条目是“ -”。
路由表的建立方式较多。对小型局域网来说,在启动时间(参见第3章),利用r o u t e命令,
手工构建路由表并把它们投入I P网络,通常是最有效的。对于大型的网络,需要根据路由
d a e m o n,在运行时构建路由表并适时进行调整;路由信息运行于网络内的中心主机上,并在
其成员网络间实行路由信息交换,从而计算最佳路由。
根据网络的不同大小,可能会用上不同的路由协议。对独立系统(比如Groucho Marx校
园网)内的路由选择来说,将采用内部路由协议。最优秀的是R I P协议,即路由信息协议。它
是由B S D路由d a e m o n实施的。针对独立系统间的路由,则必须使用诸如E G P(外部网关协议)
或B G P(边界网关协议)之类的外部路由协议;这类协议(包括R I P)已经被用于康奈尔大学
的通道d a e m o n中。
度量值
基于R I P的动态路由信息将根据网关“跳”(h o p)数来选定抵达目标主机或网络的最佳路
由。也就是说,在抵达目标主机或网络之前,数据报必须经过的网关越少,其R I P级别就越高。
一个网关即为一个跳。超长路由将被视为不可用路由而被丢弃。
要想利用R I P来管理本地网络中的路由信息,必须在所有主机上运行g a t e d(通道)。在启
动时,通道将对所有激活的接口进行检查。如果通道发现激活接口不止一个(不包括回送接
口在内),就会假设主机正在进行不同网络间的包交换,从而主动地进行路由信息的交换和广
播。如若不然,它就会被动地接收R I P更新信息,更新本地路由表中的信息。
在广播本地路由表中的信息时,通道将对路由长度进行计算,也就是说用与路由表中的
条目关联在一起的度量值来衡量路由长度。这个度量值是系统管理员在配置路由时设置的,
它应该能反映出利用该路由产生的花费。因为,对主机直接连接的子网来说,通向它的路由
之度量值应该始终为0,而对通过两个网关的路由,其度量值必须是2。但需要注意的是,在
没有使用R I P或通道时,大可不必理睬度量值。
2.6 Internet控制消息协议
I P还有一个“伴侣”协议。它就是I n t e r n e t控制消息协议( I C M P),它是内核联网程序用以
与错误消息和其他主机进行通信的协议。比方说,假设我们又回到E r d o s,并打算登录到Q u a r k
的1 2 3 4 5端口,但这个端口上没有监听进程。所以,发向这个端口的第一个T C P包就会抵达
Q u a r k,网络层将认出这个包并立即向E r d o s返回一条I C M P消息,指出“不能抵达指定端口”。
I C M P能够识别的消息相当多,而且大多数都能对错误情况进行处理。然而,其中有一
条非常有意思的消息,叫作“重定向”消息。它是在有更短路由的情况下,发现另一个主机
正把它用作一个网关时,由路由选择模块生成的。例如,在启动之后, S o p h u s的路由表可能
会不完整,其中包含通向数学系局域网和F D D I主干网的路由,以及通向G r o u c h o计算中心的
网关(g c c 1)的默认路由。因此,任何一个发向Q u a r k的包都会被发送到g c c 1,而不是物理系
局域网的N i e l s网关。在收到这类包后, g c c 1将注意到这一路由非常糟糕,所以在把包转发到
N i e l s时,向S o p h u s返回一条I C M P重定向消息,并将最佳路由告诉它。
现在看来,手动配置路由似乎比必须设立路由简单的多。但要注意,单纯依赖于动态路
由方案以及R I P和I C M P重定向消息,始终不是上策。在验证某些路由信息是否真正可靠时,
I C M P重定向消息和R I P能够提供的选择很少,甚至没有。这样某些恶意的、一无是处的包将
扰乱你的整个网络通信,甚至可能导致网络瘫痪。鉴于此,联网程序有几个版本,对影响网
络路由的重定向消息进行了处理,令其只能对主机路由进行重定向