如图是 IP 层处理过程的简单流程。需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃(例如,悄无声息地被丢弃)。
上图中包含了将要说明的静态IP选路和动态选路协议。
路由表中的每一项都包含下面这些信息:
完整的主机地址
,也可以是一个网络地址
,由该表目中的标志字段来指定(如下所述)。主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。一个标志指明目的 IP 地址是网络地址还是主机地址
,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口
(我们将在 9.2节中详细介绍这些标志)。IP路由选择是逐跳地(hop-by-hop)进行的。
IP路由选择主要完成以下这些功能:
与目的 IP 地址完全匹配的表目(网络号和主机号都要匹配)
。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。与目的网络号相匹配的表目
。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
寻找标为“默认( default)”的表目
。 如果找到,则把报文发送给该表目指定的下一站路由器。完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。 默认路由,以及下一站路由器发送的 ICMP 间接报文(如果我们为数据报选择了错误的默认路由),是IP路由选择机制中功能强大的特性。
为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是 IP 路由选择机制的另一个基本特性。这样做可以极大地缩小路由表的规模。
总结:路由表项的内容很简单,包括: 5 bit标志、目的 IP 地址(主机、网络或默认)、下一站路由器的 IP 地址(间接路由)或者本地接口的 IP 地址(直接路由)及指向本地接口的指针。主机表项比网络表项具有更高的优先级,而网络表项比默认项具有更高的优先级。
这一部分将集中讨论单个系统(自治系统Autonomous System,AS)是如何利用路由表的。
这样,IP选路的方式就可以更加具体化了。如下
初始化路由表:每当初始化一个接口时(通常是用 ifconfig 命令设置接口地址),就为接口自动创建一个直接路由。到达主机或网络的路由如果不是直接相连的,那么就必须加入路由表。一个常用的方法是在系统引导时显式地在初始化文件中运行 route命令。
没有到达目的地的路由:当一个IP包在某一个路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”
或者“网络不可达”
的ICMP包来报错。
如图,主机与R2实际上在同一个局域网下。
ICMP 重定向报文的接收者必须查看三个 IP 地址:
注意:
在主机引导的时候,一般会发送在网内广播一个路由请求的ICMP报文,而多个路由器则会回应一个路由通告报文。而且,路由其本身不定期的在网络内发布路由通告报文,这样,根据这些报文,每一个主机都会有机会建立自己的路由表而实现网络通信。路由器在一份通告报文中可以通告多个地址,并且给出每一个地址的优先等级,这个优先等级是该IP作为默认路由的等级,至于怎么算的就不深究了。
路由器一般会在450-600秒的时间间隔内发布一次通告,而一个给定的通告报文的寿命是30分钟。而主机在引导的时候会每三秒发送一次请求报文,一旦接受到一个有效的通告报文,就停止发送请求报文。
这一部分将讨论路由器之间是如何交换路由信息的。
动态选路协议是用于动态选路的重要组成部分,但是他们只是使用在路由器之间,相邻路由器之间互相通信。系统(路由选择程序)选择比较合适的路有放到核心路由表中,然后系统就可以根据这个核心路有表找到最合适的网路。也就是说,动态选路是在系统核心网络外部进行的,它只是用一些选路的策略影响路由表,而不会影响到最后通过路由表选择路由的那一部分。
动态选路并不改变内核在 IP 层的选路方式。
这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了 — 当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的 route命令。
有两种基本的选路协议,即用于同一自治系统各路由器之间的内部网关协议( IGP)和用于不同自治系统内路由器通信的外部网关协议( EGP)。下文分别说明这两协议:
Unix系统上面常用的路由守护程序--routed 和 gate。
路由信息协议RIP是一种分布式的基于距离向量
的路由选择协议, 属于内部网关协议(IGP)。RIP协议中的“距离”也称为“跳数”
,每经过一个路由器,跳数就加1。协议规定: 同一自治系统(A.S.)中的路由器每30秒会与相邻的路由器交换路由信息
,以动态的建立路由表。当传输数据时,RIP将选择一条具有最少路由器的路由。
报文格式
RIP报文包含中在UDP数据报中,
一般说来routed要承担如下的工作:
度量
路由器 R1 通过发送广播到 N1 通告它与 N2 之间的跳数是 1(发送给 N1 的广播中通告它与 N1 之间的路由是无用的)。同时也通过发送广播给 N2 通告它与 N1 之间的跳数为 1。同样,R2 通告它与 N2 的度量为 1,与N3 的度量为1。
如果相邻路由器通告它与其他网络路由的跳数为 1,那么我们与那个网络的度量就是 2,这是因为为了发送报文到该网络,我们必须经过那个路由器。在我们的例子中,R2 到 N1 的度量是 2,与 R1 到 N3 的度量一样。
距离向量算法
对每一个相邻路由器发送过来的 RIP 报文,进行以下步骤:
把“下一跳”字段中的地址都改为 X,并把所有的"距离"字段的值加1。
每个项目都有三个关键数据,即:目的网络 N,距离是 d,下一跳路由器是 X。RIP路由协议优缺点
优点是配置简单,非常适用于小规模网络。
RIP协议的缺点包括:
小结:RIP是应用层协议, 它使用UDP传送数据(端口520). RIP协议选择的路径不一定是最短的, 但一定是具有最少路由器的路径.
OSPF 是为克服 RIP 的缺点在1989年开发出来的。
OSPF最主要的特征就是使用分布式的链路状态协议(link state protocol),而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF的四个要点和RIP的都不一样:
所有路由器发送信息
。这里使用的方法是洪泛法(flooding)
,这就是路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。
我们应注意,RIP协议是仅仅向自己相邻的几个路由器发送信息。
与本路由器相邻的所有路由器的链路状态
,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)
。OSPF将这个“度量”表示为费用、距离、时延、带宽等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”(注意:对于RIP协议,发送的信息是:“到所有网络的距离和下一跳路由器”
)。OSPF只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。
而不像RIP那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。OSPF是网络层协议
, 他不使用UDP/TCP而是直接使用IP数据报传送
(其IP数据报首部的协议字段为89).且OSPF数据报较短, 不会导致IP数据报分片, 因此更加高效; 而RIP是应用层协议, 他在传输层使用UDP协议.
除了以上区别之外, OSPF还有以下特点:
OSPF基本工作原理
由于各路由器之间频繁地交换链路状态信息, 因此所有的路由器最终都能建立一个链路状态数据库. 这个数据库实际上就是全网的拓扑结构图, 他在全网范围内是一致的(这称为链路状态数据库的同步). 然后每个路由器就根据这个全网拓扑结构图, 使用Dijkstra最短路径算法计算从自己到各目的网络的最优路径, 以此构造自己的路由表. 在此之后, 当链路状态发生变化时, 每个路由器重新计算到各目的网络的最优路径, 构造新的路由表.
OSPF的链路状态数据库能较快的进行更新, 使各个路由器能及时更新其路由表. OSPF的更新过程收敛得快是其重要的优点.
{注意: 虽然使用Dijkstra算法能够计算出完整的最优路径, 但是路由表不会存储完整路径, 而只存储”下一跳”(只有到了下一跳路由器, 才能知道再下一跳应当怎么走)}
划分区域
为了使OSPF能够用于规模很大的网络, OSPF将一个自治系统再划分为若干个更小的范围, 叫做区域. 每一个区域都有一个32位的区域标示符(用点分十进制表示). 区域也不能太大, 在一个区域内的路由器最好不要超过200个.
划分区域的好处是: 将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统, 这就减少了整个网络上的通信量. 由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。
在一个区域内部的路由器只知道本区域的完整网络拓扑, 而不知道其他区域的网络拓扑情况.
这些区域也有层次之分, 处在上层的域叫做主干区域, 负责连通其他下层的区域, 并且还连接其他自治域;
BGP(Border Gateway Protocol)是一种不同自治系统的路由器之间交换路由信息的协议, 它的基本功能是在自治系统间自动交换无环路的路由信息, 他是一种外部网关协议(EGP), 边界网关协议常常应用于互联网的网关之间. 路由表包含已知路由器的列表, 路由器能够到达的地址以及到达每个路由器的跳数.
由于:
因此, 边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子), 而非要找到一条最佳路由.
BGP采用的是路径向量选择协议, 他与距离向量协议和链路状态协议都有很大的区别. BGP是应用层协议, 他是基于TCP的
;
BGP协议工作原理
每一个自治系统管理员要选择至少一个路由器(可以有多个)作为该自治系统的”BGP发言人”. 一个 BGP 发言人与其他自治系统中的BGP发言人要交换路由信息, 就要首先建立 TCP 连接, 然后在此连接上交换BGP报文以建立 BGP 会话, 再利用 BGP 会话交换路由信息. 当所有 BGP 发言人都互相交换网络可达性信息之后, 各 BGP 发言人就可找出到达各个自治系统的比较好的路由.
每个BGP发言人除了必须运行 BGP 协议外, 还必须运行该 AS 所使用的内部网关协议(如 OSPF,RIP 等), BGP 所交换的网络可达性信息就是要到达某个网络(用网络前缀表示)所要经历的一系列 AS;
BGP协议特点: