网络层协议(4):动态选路
来源:互联网 发布:学java跟不上 编辑:程序博客网 时间:2024/06/06 21:43
在网络很小,且与其他网络只有单个连接点且没有多余路由时,使用静态选路的方法是可行的的。但是当我们遇到大的网络,通常使用的是动态选路。
当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态路由。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上一个进程称为路由守护程序(routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。这个程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
动态选路并不改变我们在静态选路中所描述的内核在IP层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由,网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中信息改变了,当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件的route命令。
正如前面所描述的那样,路由守护程序将选路策略(routing policy)加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿(目的主机)存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或者电话线不好),他可以删除受影响的路由或增加另一条路由以绕过该问题。
在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统(AS, Autonomous System)的组织方式,每个自治系统通常由单个实体管理。我们常常将一个公司或大学校园定义为一个自治系统。每个自治系统可以选择该自治系统中各个路由器之间的选路协议,这种协议我们称为内部网关协议IGP(Interior Gateway Protocol)。最常用的IGP就是选路信息协议RIP。
RIP:选路信息协议
RIP报文包含在UDP数据报中,下面来看看RIP报文的格式:
版本字段通常为1,如果使用第二版RIP,将此字段设置为2。紧跟在后面的20字节指定地址系列(地址族,address family)(对于IP地址来说,其值是2),IP地址以及相应的度量,RIP的度量是以跳计数的。采用这种20字节格式的RIP报文可以通告多达25条路由。上限是25是用来保证RIP报文的总长度为20*25+4=504,小于512字节。由于每个报文最多携带25个路由,因此为了发送整个路由表,经常需要多个报文。
让我们来看一下采用RIP协议的routed程序正常运行的结果,RIP常用的UDP端口号是520。
1.初始化:在启动一个路由守护进程是,它先判断启动了哪些接口,并在每个接口上发送一个RIP请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为16。这是一种要求另一端发送完整路由表的特殊请求报文。
2.接收到请求:如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指明地址的路由,则将度量设置成我们的值,否则将度量置为16(度量16是一称为“无穷大”的特殊值,它意味着没有到达目的路由),然后发回响应。
3.接收到响应:使响应生效,可能会更新路由表,可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。
4.定期选路更新:每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送点对点链路的其他终点的。
5.触发更新:每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整的路由表,而只是需要发送那些发生变化的表项。
6.定时器:每条路由都有与之相关的定时器。如果运行RIP系统发现一条路在3分钟内未更新,就将该路由的度量设置为无穷大(16),并标注为删除。这意味着已经在6个30秒更新时间没有收到通告该路由器的更新了。再过60秒,将从本地路由表中删除该路由,以保证路由的失效已被传播开来。
RIP的度量是以跳(hop)计算的。所有直接连接接口的跳数为1。由于每个路由器都发送其路由表给邻站,因此,可以判断在同一个自治系统AS内到每一个网路的路由。如果在该AS内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。跳数的最大值是15,这意味着RIP只能用在主机间最大跳数值为15的AS内,度量为16表示无路由到达该IP地址。
- 网络层协议(4):动态选路
- 网络层:IP选路和动态选路协议
- 网络层协议(3):静态选路
- 【网络协议】数据链路层
- 《网络协议》数据链路层
- 【网络协议】数据链路层
- OSI七层模型详解物理层、数据链路层、网络层、传输层.....应用层协议
- 网络七层协议
- 网络7层协议
- 网络七层协议
- 网络层协议
- 7层网络协议
- 网络七层协议
- 网络七层协议
- (网络层)路由协议
- 网络七层协议
- 网络七层协议
- 网络层协议
- 每天一个 Linux 命令(15):tail 命令
- Qt引用新类,出现LNK2019: 无法解析的外部符号
- 【Unity&C#】如何对一组Bool型变量进行判断
- 一般与特殊结构关系 整体与部分结构关系
- dom02批量禁用文本框和批量拼接字符串
- 网络层协议(4):动态选路
- 1.3. Router Schema in a Spring XML File
- AdaBoost算法理解基于机器学习实战
- Android中的Nine-patch图片
- 并行编程模型
- C#基础小问答
- 广告行业计费模式专业术语
- Java8 LinkedList源码简析
- 1.4. Endpoints