[计算机网络]网络层IP协议 选路算法
网络层
不再属于端到端的服务
在主机和路由器中出现
网络层的功能和服务:虚电路和数据报。
概述
发送方和接收方于网络层中作用
发送方 | 接收方 |
---|---|
将来自运输层的每个报文段封装成一个数据报(网络层分组); | 接收来自相邻的路由器R2的数据报; |
将数据报向目的地发送,即向相邻的路由器R1发送 | 解封出报文段,并交付给其运输层。 |
路由器主要作用 | 将数据报从*输入链路“转发”到输出链路。*只实现下三层部分。 |
网络层功能
将分组从发送主机移动到接收主机
转发与路由
转发(forwarding):将分组从路由器的输入端口转移到合适的输出端口。与路由器的内部结构相关
路由(routing):确定分组从源到目的经过的路径。通过选路算法计算路径
路由算法(routing algorithms):通过网络的端到端路径
转发和路由区别
转发 | 路由 |
---|---|
将分组从路由器的一个数据链路接口转移到一个合适的输出链路接口的 本地动作 | 指分组从源到目的地端到端路径的网络范围动作。 |
只涉及分组在路由器中从入链路到出链路的传送。 | 涉及网络中的所有路由器,集体经选路协议交互,决定分组从源到目的地的路径。 |
路由器转发分组过程
转发表:每个路由器有一张
分组首部(目的地址或某个连接标识)和相应输出链路的对照表。
转发表内容:由选路算法决定
- 集中式:选路算法在某个中心点运行。
- 分布式:选路算法分布在多个路由器运行。
- 路由器根据到达分组的首部值在转发表中查询。
- 找到相应的输出链路接口,并将分组转发出去。
常见设备
分组交换机 | 链路层交换机 | 路由器 |
---|---|---|
一台通用分组交换设备,根据分组首部值,从输入链路接口到输出链路接口传送分组。 | 根据链路层字段值作转发决定的分组交换机。 | 根据网络层字段值作转发决定的分组交换机 |
连接建立
ATM,帧中继的网络层会使用
网络层数据分组开始传输前,在所选择的源到目的地路径上的各路由器之间相互握手,建立连接状态。
因特网网络层使用使用IP协议,而不执行连接建立。
传输层连接与网络层连接
网络层连接 | 运输层连接 |
---|---|
网络层数据分组开始传输前,在所选择的源到目的地路径上的各路由器之间相互握手,建立连接状态。 | 如TCP协议,在数据实际传输之前,发送方和接收方经过三次握手建立所需的状态信息。 |
网络服务模型
网络可能提供的服务
确保交付 | 确保分组到达目的地 |
---|---|
具有时延上界的确保交付 | 主机到主机的时延 |
有序分组交付 | 按发送顺序到达 |
确保最小带宽 | 发送主机以低于特定比特率的速率发送比特,分组不会丢失,在一定时延到达 |
确保最大时延抖动 | 发送方发送两个连续分组的时间间隔与接收到的间隔相同 |
网络层服务模型
网络体系结构 | 服务模型 | 带宽保证 | 无丢失保证 | 排序 | 定时 | 拥塞指示 |
---|---|---|---|---|---|---|
Internet | 尽最大可能交付 | 无 | 无 | 任何可能顺序 | 不维持 | 无 |
ATM | CBR | 保证恒定速率 | 是 | 有序 | 维持 | 拥塞不出现 |
ATM | ABR | 保证最小速率 | 无 | 有序 | 不维持 | 提供拥塞指示 |
ATM服务模型
提供多重的服务模型。在同一网络中为不同的连接提供不同类别的服务
CBR与ABR
CBR(Costant bit rate) 恒定比特率服务 | 标准的ATM服务模型。适用于实时、恒定比特率的音频和视频流。 | ABR(Available bit rate)可用比特率服务 | “比尽力服务稍好一点”的服务。 |
---|---|---|---|
服务目标 | 使网络连接看起来就像在发送主机和接收主机之间有一条专用的固定带宽的传输链路。 | 特征 | 可能会丢失信元; |
ATM信元传输时的端到端时延可变性(时延抖动)及丢失、迟交的信元都保证在规定值以下。 | 保证最小信元传输速率 (MCR),或比MCR更高(有足够空闲资源); | ||
能够为发送方提供反馈信息。 |
虚电路和数据报网络
概念辨析
无连接服务与连接服务
无连接服务(connection-less service) | 连接服务(connection service) |
---|---|
不事先为系列分组的传输确定传输路径 | 首先为系列分组的传输确定从源到目的经过的路径(建立连接) |
每个分组独立确定传输路径 | 然后沿该路径(连接)传输系列分组 |
不同分组可能传输路径不同 | 系列分组传输路径相同 |
数据报网络 (datagram network ) | 传输结束后拆除连接 |
虚电路网络(virtual-circuit network ) |
运输层与网络层提供服务异同
运输层 | 网络层 |
---|---|
向应用层提供进程到进程的服务。 | 向运输层提供主机到主机的服务。 |
提供无连接服务和面向连接服务。 | 提供无连接服务和面向连接服务。 |
| TCP:提供连接服务。
UDP提供无连接服务。 | 虚电路网络:提供连接服务。
数据报网络:提供无连接服务。 |
| 面向连接服务在网络边缘的端系统中实现 | 面向连接服务在端系统及网络核心的路由器中实现。 |
虚电路网络
Virtual circuits;根据虚电路号转发分组。
一条从源主机到目的主机,类似于电路的逻辑连接
- 使用分组交换
- 每个分组的传输利用链路的全部带宽
- 源到目的经过的网络层设备共同完成虚电路功能
虚电路组成
可以同时创建多条虚电路
源和目的地之间的一条逻辑连接路径 | 一系列链路和路由器 |
---|---|
VCID | 该路径上每段链路的号码,每条链路上的VC号可能不同 |
转发表 | VC路径上每台路由器中都有该表。根据转发表进行转发 |
沿某条虚电路传输的分组,携带对应虚电路的VCID,而非目的地址
同一条VC,在每段链路上的VCID通常不同
路由器转发分组时根据转发表改写/替换虚电路号
虚电路网络工作过程
- 在源和目的之间创建一个VC;
- 源向该VC发送带有VC号的分组;
- 每经过一台中间路由器,用新的VC号代替原VC号: 从VC号转发表获得。
- 分组在每条链路上的VC号不同。
- 依此规则,直到目的地。
VC号转发表结构
VC路径上每个路由器都需要维护VC连接的状态信息
*物理线路未独占:*可同时建立多条虚电路
服务可靠:到达顺序与发送顺序一致
VC号转发表维持
VC号维持方法 | 只要该路由器创建新的VC,其转发表中就增加一项; |
---|---|
终止一个VC,其转发表中就删除对应项。 | |
路由器必须为正在进行的连接维护连接状态信息,直到该连接释放。 | |
每条链路采用不同VC号的优点 | 减少分组首部VC字段的长度; |
简化虚电路的建立过程。 |
虚电路的三个阶段
虚电路建立
在发送方与接收方之间建立一条虚电路,即决定所有分组要通过的一系列链路与路由器,并为每条链路确定一个VC号。
- 发送方与网络层联系,指定接收方地址,由网络建立虚电路 (VC)。
- 涉及到路径上每个路由器转发表的更新、资源预留等
数据传送
沿该虚电路传输数据分组
虚电路拆除
- 由其中一方通知其网络层终止该虚电路;
- 通知网络另一侧的端系统呼叫结束,并更新路径上每台路由器中的转发表。
虚电路信令协议
signaling protocols
用于VC的建立、维护与拆除
- 路径选择
应用于虚电路网络
- 如ATM、帧中继(frame-relay)网络等
目前的Internet不采用
信令报文:
端系统向网络发送的指示虚电路的启动与终止的报文、以及路由器之间传递的用于建立虚电路的报文。
信令协议:
用来交换信令报文的协议。
数据报网络
网络层无连接
每个分组携带目的地址
路由器根据分组的目的地址转发分组 (相同源和目的地的分组可能采用不同的路径)
- 基于路由选择协议
- 检索转发表
- 每个分组独立选路
传输过程
- 发送方给要发送的分组加上目的端系统地址,并送入网络
- 经过若干中间路由器转发分组,直到目的地。
路由器转发方法
根据到达分组的目的地址在转发表中查询,找到相应的输出链路接口,并将分组转发出去。
- 转发表:每台路由器有一张。
- 目的地址与链路接口的映射表。
- 转发表中的表项数与地址位数有关,每个可能的地址对应一项。
最长前缀匹配
在检索转发表时,优先选择与分组目的地址匹配的前缀最长的入口(entry)
VC网络与数据报网络对比
数据报网络 | VC网络 |
---|---|
Internet | ATM |
简化网络,复杂边缘 | 简化边缘。复杂网络 |
路由器转发表只维持转发状态信息。 由选路算法修改(1~5分钟更新)。 一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致。 |
转发表随虚电路的建立和拆除更新。 |
计算机之间的数据交换: “弹性”服务,没有严格时间需求 | 电话网络演化而来 |
链路类型众多:特点、性能各异;统一服务困难 | 核心业务是实时对话:严格的时间、可靠性需求;需要有保障的服务 |
“智能”端系统 (计算机):可以自适应、性能控制、差错恢复 | “哑(dumb)” 端系统(非智能):电话机,传真机 |
路由器工作原理
网络层转发功能:将分组从路由器的输入链路传送到适当的输出链路
路由器体系结构:
输入端口
- 将输入物理链路端接到路由器的物理层;
- 实现路由器的数据链路层功能
- 实现查找与转发功能,以便分组通过路由器交换结构转发到适当的输出端口
- 将控制性分组从输入端口转发到选路处理器
通常,路由器的多个端口被击中到一块 线路卡(line card)上。
交换结构
- 将路由器的输入端口连接到它的输出端口。完全包含在路由器中
输出端口
- 存储经过交换结构转发给它的分组,并将分组发送到输出链路。
- 完成与输入端口顺序相反的数据链路层和物理层功能
对于双向链路,输出端口与其输入端口通常在同一线路卡上成对出现
选路处理器
- 执行选路协议,维护选路信息以及转发表并执行路由器中的网络管理功能。
输入端口
- 线路端接与数据链路处理:实现与输入链路相关的物理层和数据链路层功能
- 查找,转发,排队
查找/转发
确定将一个到达的分组通过交换结构转发给哪个输出端口,通过查找转发表实现。
分散式转发 | 集中式转发 |
---|---|
选路处理器计算转发表,给每个输入端口存放一份拷贝,能随选路更新。 | 路由器的输入端口处理能力有限 |
在每个输入端口本地做出交换决策,无须激活中央选路处理器。 | 直接将分组转发给中央选路处理器,查找转发表并将分组转发到适当的输出端口。 |
可避免在路由器中某个单点产生转发处理瓶颈。 | 将工作站或服务器用作路由器时采用。选路处理器就是CPU,输入端口是一块网络接口卡。 |
查表速度
*查表:*搜索转发表,查找最长匹配的表项,若无相应表项找出默认选路表项。
*查找速率:*受许多因素影响,如路由器速度、链路速率、查找算法等。
目标: 减少排队 输入端口处理速度要超过线路速度。
- 即 完成一次查找的时间应少于从输入端口接收一个分组所需的时间(对收到的分组的输入处理在下一个接收操作结束之前完成)。
查找方法
线性查找:按顺序找。不适合庞大的转发表
二分查找:将转发表表项存放在一个树形数据结构中。
树的每一层对应目的地址的一个比特,查找某个地址时,从树的根节点开始,依次查地址的每一位。内容可寻址内存(CAM):将一个32bit IP地址提交给CAM,由它以常数时间返回该地址对应的转发表表项内容。如,Cisco8500系列。
将最近被访问的表项保存在高速缓存(cache)中
输入端口可能出现问题
分组阻塞 (blocked): 来自其他输入端口的分组当前正在使用交换结构。
被阻塞的分组必须在输入端口处排队,等待以后调度通过交换结构。
交换结构
将分组从输入端口交换(转发)到输出的端口。
经过内存交换
早期用计算机作为路由器
输入端口与输出端口之间的交换由CPU(选路处理器)控制完成;
输入端口与输出端口类似I/O设备:
当分组到达输入端口时,通过中断向选路处理器发出信号,将分组拷贝到处理器内存中;
选路处理器根据分组中的目的地址查表找出适当的输出端口,将该分组拷贝到输出端口的缓存中。
转发速度
受内存带宽的速度限制 (每个分组穿过两次总线)
若内存带宽为*每秒写入或读出B个分组,*则总的转发吞吐量 (分组从输入端口被传送到输出端口的总速率)小于B/2。
改进
现代路由器改进:
由输入线路上的处理器来执行目的地址的查找,并将分组存储(交换)进适当的存储位置。
类似共享内存的多处理机,用一个线路卡上的处理器将分组存储进适当输出端口的内存中。
如,Cisco 8500。
经总线交换
输入端口通过一条共享总线将分组直接传送到输出端口,不需要选路处理器的干预。
- 每次只能有一个分组通过总线传送。
- 分组到达一个输入端口时,若总线正忙,会被暂时阻塞,在输入端口排队。
- 路由器交换带宽受总线速率限制。
经交换矩阵交换
纵横式交换机:由2n条总线组成,n个输入端口与n个输出端口连接。
到达输入端口的分组沿水平总线穿行,直至与所希望的输出端口的垂直总线交叉点:
- 若该垂直总线空闲,则分组被传送到输出端口
- 否则,该分组被阻塞,在输入端口排队。
输出端口
取出存放在输出端口内存中的分组,并将其传输到输出链路上。
当交换结构将分组交付给输出端口的速率超过输出链路速率,就需要排队与缓存管理功能。
出现排队时机
输入端口和输出端口都会形成分组队列。
- 当队列逐步增长,路由器缓存空间满,在输入端口或输出端口出现分组丢失 (packet loss)。
- 丢失具体位置,取决于流量负载、交换结构的相对速度、线路速度等因素。
假定:
- 输入线路速率与输出线路速率相同
- 有n个输入端口和n个输出端口
- 交换结构速率:将分组从输入端口移动到输出端口的速率。
输入端口不排队时机
若交换结构的速率至少是输入线路速率的n倍,在输入端口处不会出现排队。
最坏情况:有n条输入线路同时接收分组。
交换结构可以在每个输入端口(同时)接收一个分组的时间内将n个分组从输入端口传送到输出端口。
输入端口排队时机
交换结构比输入端口综合的速度慢时产生
- 交换结构不够快:即相对于输入线路速度不能快得使所有到达的分组无延迟地通过它传送。
- 在输入端口出现分组排队:等待通过交换结构传送到输出端口。
输出端口何时排队
设交换结构的速率至少是线路速率的n倍
最坏情况:到达每个输入端口的分组都被发往同一个输出端口。
在一个单位时间(接收或发送一个分组)内,将有n个分组到达同一输出端口,排队(等待)发送到输出链路。在发出队列中一个分组的时间内,又有n个分组到达。
依此类推,最终排队的分组快速增长,很快占满输出端口的存储空间,使后续分组被丢弃。
分组调度程序
在输出端口排队的分组中选出一个发送。
原则:
- 先来先服务FCFS:简单。
- 加权公平排队WFQ:在具有排队分组的不同端到端连接之间公平地共享输出链路。
分组丢弃方法
若缓冲已满,丢弃分组。
丢弃后到的分组(弃尾);
删除一个或多个已排队的分组;
*活动队列管理AQM算法:*在缓存填满前丢弃分组 或 首部加标记,向发送方提供拥塞信号。
如,随机早期检测RED算法: 输出队列长度维护一个加权平均值。
随机早期检测RED算法
纵横式交换结构
假定 | 结果 |
---|---|
所有链路速度相同 | 分组输出端口不同:多个分组可以被并行传送 |
交换结构速率与输入链路速率相同:分组从输入端口传送到给定输出端口的时间与从输入链路接收一个分组的时间相同 | 发往相同输出端口:不同输入队列中的分组发往同一输出队列,其中的一些分组被阻塞,在输入队列中等待(交换结构一次传一个分组到端口) |
分组按FCFS方式从输入队列移动到输出队列中 |
IP 协议
主机,路由器网络层主要功能:
IP数据报(分组)格式(IPV4)
前5行为固定首部
生存期TTL:避免分组无限循环传输。
路由器转发一次分组,TTL减1
如果TTL=0,路由器则丢弃该IP分组
IP分片
概述
最大传输单元(MTU)
网络链路存在MTU (最大传输单元)—链路层数,据帧可封装数据的上限。
不同链路的MTU不同
分片与重组
不同链路的MTU不同,则在小MTU链路上传播的大数据包需要分片
大IP分组向较小MTU链路转发时,可以被*“分片” (fragmented)*
1个IP分组分为多片IP分组
IP分片到达目的主机后进行*“重组”(reassembled)*
IP首部的相关字段用于标识分片以及确定分片的相对顺序
总长度、标识、标志位和片偏移
IP分组中的分片相关字段
标识字段 | 标志位 | 片偏移 |
---|---|---|
占16位:标识一个IP分组 | DF (Don’t Fragment) ;MF (More Fragment) | 字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量 |
IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组 | 片偏移字段以8字节为单位 | |
IP分片过程
假设原IP分组总长度为L,待转发链路的MTU为M | |
---|---|
若L>M,且DF=0,则可以/需要分片 | |
分片时每个分片的标识复制原IP分组的标识 | |
通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片 | |
一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为: | |
需要的总片数为: | |
每片的片偏移字段取值为: | |
每片的总长度字段为: | |
每片的MF标志位为: |
实例
IP编址
addressing
源地址(SA);目的地址(DA)
接口(interface): 主机/路由器与物理链路的连接
实现网络层功能
路由器通常有多个接口
路由器通常有多个IP地址
用于把分组送到目的IP网络。
主机通常只有一个或两个接口 (e.g.,有线的以太网接口,无线的802.11接口)
网络层地址:互连网中主机分配的一个唯一地址。
IP地址:32比特(IPV4),126比特(IPV6)
编号标识主机,路由器的接口 采用2进制或点分10进制
点分十进制表示:将4个字节中的每一个字节分别用十进制数来表示,十进制数之间用 “.” 分隔
IP子网(Subnet )
IP地址具有相同网络号的设备接口
不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口
网络号(NetID);主机号(HostID)
有类IP地址
特殊IP地址
私有(Private)IP地址
子网划分
将IP地址划分为3段,使用子网号进行子网划分
网络号(NetID) – 高位比特
子网号(SubID) – 原网络主机号部分比特
主机号(HostID) – 低位比特
子网掩码
子网地址 + 子网掩码 准确确定子网大小
形如IP地址:
- 10进制
- 点分10进制
取值:
- NetID,SubID全取1
- HostID全取0
A网的默认子网掩码为 | 255.0.0.0 |
---|---|
B网的默认子网掩码为 | 255.255.0.0 |
C网的默认子网掩码为 | 255.255.255.0 |
借用3比特划分子网的B网的子网掩码为 | 255.255.224.0 |
子网掩码应用
将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址。
CIDR与路由聚合
无类域间路由(CIDR: Classless InterDomain Routing)
最长前缀匹配优先使得路由聚合(route aggregation)
CIDR
消除传统的 A 类、B 类和 C 类地址界限
- NetID+SubID→Network Prefix (Prefix)可以任意长度
融合子网地址与子网掩码,方便子网划分
- 无类地址格式:a.b.c.d/x,其中x为前缀长度
提高IPv4 地址空间分配效率
提高路由效率
- 将多个子网聚合为一个较大的子网
- 构造超网(supernetting)
路由聚合
选用更具体的路由:最长前缀匹配优先
层级编址使得路由信息通告更高效
选路算法
选路:确定分组从发送方传送到接收方所要通过的路径(路由)。
- 数据报服务:在给定源和目的地之间传输不同分组可能采用不同的路由。
- 虚电路服务:在给定源和目的地之间的所有分组采用同一路径。
分组通过路由器转发,每个路由器都有一张转发表,选路算法决定转发表内容。
选路算法:根据给定的网络抽象图,找出从源节点到目的节点间的最低费用路径。
好路由算法评判标准;诸多因素,如链路长度,传播时延,价格等。
网络的抽象图模型
用“节点图”表示网络的结构。
图G = (N,E):表示N个节点和E条边的集合,每条边是来自N的一对节点。
- 节点:表示路由器(做出分组转发判决的点)。如u,v,w,x,y,z。
- 边:连接节点的线段,表示路由器之间的物理链路。如(u,v)、 (u,x) 、(u,w)、…
边的值(Costs): 表示对应链路的物理长度、或链路速度、或与链路相关的费用。
- 若结点x与结点y直接相连,则c(x,y) = 链路费用。
- 若结点x与结点y不直接相连,则c(c,y) = 无穷。
路径:路径所经过的结点序列
路径(x1,x2,…,xp)费用:沿途所有边的费用之和。 即c(x1,x2) + c(x2,x3) + …+c(xp-1,xp)
任意两个节点x和y 之间有多条路径,费用不一定相同。
最低费用路径 :该路径上链路费用之和最小。
最短路径:所有链路的费用都相同的情况。即在源和目的地之间经过链路最少的路径。
路由算法分类
静态路由 | 动态路由 | 全局选路算法 | 分散选路算法 | 负载敏感算法 | 负载迟钝算法 |
---|---|---|---|---|---|
路由更新慢 | 路由更新快 | 所有路由器掌握完整的网络拓扑和链路费用信息 | 路由器只掌握物理相连的邻居以及链路费用 | 链路费用会动态地变化,反映出底层链路的当前拥塞水平。 | 某条链路的费用一般不马上反映其当前的(或最近的)拥塞级别。 |
手工配置,一般配置后基本不再变化 | 定期更新 | 邻居间信息交换、运算的迭代过程 | 如果当前拥塞的一条链路被赋以高费用,则选路算法应绕开该拥塞链路来选择路由。 | ||
优先级高 | 机试响应链路费用或网络拓扑变化 | E.g. 链路状态(LS)路由算法:必须知道网络中每条链路的费用 | E.g. 距离向量(DV)路由算法:每个节点维护到网络中所有其他节点的费用(距离)的估计向量 | 如早期的ARPAnet选路算法。 | 因特网的选路算法 |
易受选路循环、路由振荡之类问题的影响。 |
其他选路算法
热土豆选路算法(hot potato routing) | 网络流算法 | 电路交换选路算法 |
---|---|---|
路由器尽可能快地转发输出分组。 | 把分组流量看成是一个网络中源和目的地之间的流。将选路问题形式化为数学上的受限优化问题(网络流问题)。 | 每条链路资源(如缓冲区、部分链路带宽)都要保留给每个要经过该链路的连接。 |
向任意不拥塞的输出链路转发分组,不管目的地在哪里。 | 对分组交换数据网有帮助。 |
链路状态路由算法
前提条件:已知网络拓扑和所有链路的费用作为算法的输入。
获取方法:每个结点向网络中广播链路状态分组(含有它所连接的链路的费用)。
由链路状态广播算法实现。最终使所用结点都有一个相同且完整的网络视图。
每个结点都可以运行链路状态算法并计算出最低费用路径集。
Dijkstra最低费用路径算法
以源节点为起点,每次找出一个到源节点的费用最低的节点,直到把所有的目的节点都找到为止。
Dijkstra 算法 | 符号 |
---|---|
所有结点(路由器)掌握网络拓扑和链路费用 通过“链路状态广播”所有结点拥有相同信息 |
c(x,y): 结点x到结点y链路费用;如果x和y不直接相连,则=∞ |
计算从一个结点(“源”)到达所有其他结点的最短路径 | D(v): 从源到目的v的当前路径费用值 |
迭代: k次迭代后,得到到达k个目的结点的最短路径 | p(v): 沿从源到v的当前路径,v的前序结点 |
N’: 已经找到最小费用路径的结点集合 |
算法组成
- 由一个初始化步骤和其后的循环组成。
- 循环执行的次数与网络中的节点个数(除源节点)相同。
- 结束时,算出从源节点到网络中所有其他节点的最短路径。
实例
算法效率
算法复杂性: n个结点
- 每次迭代: 需要检测所有不在集合N’中的结点w
- n(n+1)/2次比较: O(n2)
- 更高效的实现: O(nlogn)
存在震荡(oscillations)可能:
- e.g., 假设链路费用是该链路承载的通信量:
避免震荡方法:避免所有路由器同时运行LS算法
既使路由器以相同周期运行LS算法,但在每个节点上算法的执行时刻不同。
因特网的自同步问题: 既使路由器初始时以同一周期但不同时刻执行算法,但最终会变为同步并保持
距离向量路由算法
Distance Vector
是一种迭代的,异步的和分布式的算法。
- 分布式:每个节点都从其直接相连邻居接收信息,进行计算,再将计算结果分发给邻居。
- 迭代:计算过程一直持续到邻居之间无更多信息交换为止。
- 自我终结:算法能自行停止。
- 异步:不要求所有节点相互之间步伐一致地操作。
Bellman-Ford方程
动态规划思想
dx (y):=从x到y最短路径的费用(距离)
举例
重点:结点获得最短路径的下一跳,该信息用于转发表。
DV算法思想
核心思想:
每个结点不定时地将其自身的DV估计发送给其邻居
当x接收到邻居的新的DV估计时,即依据B-F更新其自身的距离向量估计:
Dx (y)将最终收敛于实际的最小费用 dx (y)
Dx (y) = 从结点x到结点y的最小费用估计
- x维护距离向量(DV): Dx = [Dx (y): y є N ]
结点x:
已知到达每个邻居的费用: c(x,v)
维护其所有邻居的距离向量: Dv = [Dv (y): y є N ]
DV算法特征
异步迭代 | 分布式 |
---|---|
引发每次局部迭代的因素: | 每个结点只当DV变化时才通告给邻居 |
局部链路费用改变,来自邻居的DV更新 | 邻居在必要时(其DV更新后发生改变)再通告它们的邻居 |
DV算法过程描述与实例
结点x的选路表
节点x选路表(距离表):
列:所有目的节点。
行:该节点的距离向量Dx和其邻居的距离向量Dv
算法过程
初始化
循环
链路费用改变对算法影响
结点检测本地链路费用变化
更新路由信息,重新计算距离向量
如果DV改变,通告所有邻居
链路费用减少的好消息传的快
链路费用增加的坏消息传的慢
某链路费用减少
好消息能在网络中迅速传播
- t0:y 检测到x的链路费用从4变为1,更新其距离向量,并通知其邻居z; Dy(x) =1
- t1:z收到来自y的更新报文,更新自己的距离表,此时*到节点x的最低费用减为2,*并通知其邻居y;Dz(x) =2
- t2:y收到来自z的更新报文,并更新自己的距离表,此时到*节点x的最低费用不变仍为1。*不发送更新报文,算法静止。
- x与y之间费用减少,DV算法只需要2次迭代到静止状态
某链路费用增加
无穷计数(count to infinity)
坏消息传得慢
- 产生**“选路回环”**:为到达x, y通过z选路,z又通过y选路。
即目的地为x的分组到达y或z后,将在这两个节点之间不停地来回反复,直到转发表发生改变为止
毒性逆转
毒性逆转(poisoned reverse)
避免出现选路回环现象使得坏消息能迅速传播。
局限
三个或更多节点的回路:毒性逆转技术检测不到; 因此, “不可计数问题”也未解决。
基本思想
如果一个结点(e.g. Z)到达某目的(e.g.X)的最小费用路径是通过某个邻居(e.g.Y),则:
- 通告给该邻居结点到达该目的的距离为无穷大
例子:z到x
过程描述:
定义最大度量**(maximum metric)**
定义一个最大的有效费用值,如15跳步,16跳步表示∞
LS与DV算法比较
比较方面 | LS算法 | DV算法 |
---|---|---|
每个节点与所有其他节点广播交流,只告知与其直接相连链路的费用。 | 每个节点只与邻居互相交流,得到邻居的新费用,并告知邻居自己的当前最低费用 |
| 报文复杂性 | 知道网络每条链路的费用,需发送O(nE)个报文;当一条链路的费用变化时,必须通知所有节点 | 迭代时,在两个直接邻居之间交换报文
收敛时间受许多因素影响;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用。 |
| 收敛速度 | 需要O(nE)个报文和O(n2)的搜寻。 | 收敛较慢。可能会遇到选路回环,或计数到无穷的问题。 |
| 健壮性:当一台路由器发生故障、操作错误或受到破坏时 | 路由器向其连接的一条链路广播不正确费用。路由计算基本独立(仅计算自己的转发表),有一定健壮性。 | 一个节点可向任意或所有目的节点发布其不正确的最低费用路径。
一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。
一个不正确的计算值会扩散到整个网络。 |
层次路由
按区域或自治系统的形式组织路由器。将一个大的系统划分成若干小系统(自治系统),自治系统之间再互连。
将任意规模网络抽象为一个图计算路由-过于理想化
- 标识所有路由器
- 扁平网络
实际网络中不可行。
自治系统等概念
自治系统AS(autonomous systems) | 按区域划分的系统。每个AS由一组在相同管理者控制下的路由器组成。 |
---|---|
同一AS内的路由器运行相同的路由协议(算法) | 自治系统内部路由协议(“intra-AS” routing protocol);相互拥有信息。 |
不同自治系统内的路由器可以运行不同的AS内部路由协议 | |
网关路由器(gateway router) | 位于AS“边缘”;通过链路连接其他AS的网关路由器 |
路由器转发表 | 由AS内部选路协议和AS间选路协议产生。 |
AS之间的互联
- 自治系统内分别运行各自的内部选路协议
- 自治系统间运行AS间选路协议。
因特网的选路
内部网关协议IGP | |
---|---|
RIP路由信息协议 | (Routing Information Protocol)基于距离向量的路由协议 |
OSPF开放最短路径优先 | (Open Shortest Path First)采用Dijkstra最短费用路径算法,是一种链路状态协议。 |
IGRP内部网关路由协议 | (Interior Gateway Routing Protocol) Cisco私有协议 |
外部网关协议 | |
BGP边界网关协议 | 基于距离向量的路由协议。相邻BGP路由器相互交换路径信息。 |
RIP
早于1982年随BSD-UNIX操作系统发布
适用于小规模路由网络。
距离向量路由算法
- 距离度量:跳步数 (max = 15 hops), 每条链路1个跳步。
- 每隔30秒,邻居之间交换一次DV,成为通告(advertisement)。
- 每次通告:最多25个目的子网(IP地址形式)。
如果180秒没有收到通告→邻居/链路失效
经过该邻居的路由不可用
重新计算路由
向邻居发送新的通告
邻居再依次向外发送通告(如果转发表改变)
链路失效信息能否快速传播到全网
可能发生无穷计数问题
- 毒性逆转技术用于预防乒乓(ping-pong)环路
(另外:无穷大距离 = 16 hops)
RIP路由表是利用一个称作route-d (daemon)的应用层进程进行管理
通告报文周期性地通过UDP数据报发送
OSPF
“开放”: 公众可用
采用链路状态路由算法
- LS分组扩散(通告)
- 每个路由器构造完整的网络(AS)拓扑图
- 利用Dijkstra算法计算路由
OSPF通告中每个入口对应一个邻居
OSPF通告在整个AS范围泛洪
- OSPF报文直接封装到IP数据报中
与OSPF极其相似的一个路由协议:IS-IS路由协议
OSPF优点
安全(security): 所有OSPF报文可以被认证(预防恶意入侵) |
---|
允许使用多条相同费用的路径 (RIP只能选一条) |
对于每条链路,可以针对不同的TOS设置多个不同的费用度量 (e.g., 卫星链路可以针对“尽力”(best effort) ToS设置“低”费用;针对实时ToS设置“高”费用) |
集成单播路由与多播路由:多播OSPF协议(MOSPF) 与OSPF利用相同的网络拓扑数据 |
OSPF支持对大规模AS分层(hierarchical) |
OSPF结构
两级分层:局部区(Area),主干区(Backbone)。
内部路由器IR(Internal Routers) | 区边界路由器(Area Border Routers) | 主干路由器(Backbone Routers) | AS边界路由器(AS boundary routers) |
---|---|---|---|
链路状态通告只限于区内 | "汇总"到达所在区网络的距离,通告给其他边界路由器 | 在主干区内运行OSPF路由算法 | 连接其他AS |
每个路由器掌握所在区的详细拓扑 | |||
只知道去往其他区网络的“方向” (最短路径) |
BGP协议
边界网关协议BGP (Border Gateway Protocol):事实上的标准域间路由协议
相邻BGP路由器相互交换路径信息。
将Internet “粘合”为一个整体的关键
BGP为每个AS提供了一种手段:
- eBGP: 从邻居AS获取子网可达性信息
- iBGP: 向所有AS内部路由器传播子网可达性信息
- 基于可达性信息与策略,确定到达其他网络的 “好”路径
容许子网向Internet其余部分通告它的存在:“我在这儿!”
BGP基础
BGP会话(session) | 两个BGP路由器 (“Peers”)交换BGP报文 |
---|---|
通告去往不同目的前缀*(prefix)*的路径 (“路径向量(path vector)”协议) | |
报文交换基于半永久的TCP连接 | |
BGP报文 | OPEN: 与peer建立TCP连接,并认证发送方 |
UPDATE: 通告新路径 (或撤销原路径) | |
KEEPALIVE: 在无UPDATE时,保活连接;也用于对OPEN请求的确认 | |
NOTIFICATION: 报告先前报文的差错;也被用于关闭连接 |
广播和多播
多播特性
向多个接收方发送相同的数据 | 应用 | 因特网组管理协议IGMP |
---|---|---|
更好的带宽利用率 | 视频/音频广播 (电视,无线电类) | Internet Group Management Protocol |
较少的主机/路由器处理 | 视频会议 | |
更快的参与 | 实时新闻分发 |
[计算机网络]网络层IP协议 选路算法相关推荐
- 计算机网络【IP协议与以太网】
计算机网络[IP协议与核心协议]
- 网络基础网络层--IP协议
网络基础网络层--IP协议 一.IP协议解析 (一)4位版本 (二)4位报头长度 (三)8位服务类型 (四)16位数据报长度 (五)16位分片标识 (六)3位分片标志 (七)13位分片偏移 (八)8位 ...
- 计算机网络 | 网络层ARP协议ICMP协议
目录 IP地址的概述与应用 IP地址就是互联网协议里的地址 配置主机的IP地址(Windows7) 手工配置IP地址 IP包头的格式 子网划分题目 IP路由汇总 路由概述 路由的类型 添加静态路由的步 ...
- 计算机网络-实验5:网络层-IP协议分析
实验报告 IP协议分析与子网转发 实验目的:1.理解IP协议数据报格式,IP数据包分片: 2.了解路由器在不同子网之间转发数据报,配置静态路由. 实验任务1.启动W ...
- 计算机网络(TCP/IP协议簇)
计算机网络 参考模型 主要协议 TCP UDP IP 点对点协议PPP 以太网 物理层 数据通信系统 信号 信道 信号调制 编码(基带调制) 带通调制 信道的极限容量 传输媒体 信道复用 其他 数据链 ...
- 距离矢量路由算法_计算机网络自学笔记:选路算法
网络层必须确定从发送方到接收方分组所经过的路径.选路就是在网络中的路由器里的给某个数据报确定好路径(即路由). 一台主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器,又称为该主机的默认网 ...
- 网络层IP协议—ipv4
什么是IP协议? IP 协议(Internet Protocol)是一个处于垄断地位的网络层协议. IPv4 就是 IP 协议的第 4 个版本,是目前互联网的主要网络层协议.IPv4 为传输层提供 H ...
- 网络:网络层IP协议
目录 一.IP协议 1. IP数据报 1.1 IP首部 2.IP协议的转发 2.1 路由表 2.2 IP协议转发流程 3.子网划分 3.1 分类的IP地址 3.2 划分子网的基本思想 3.3 子网掩码 ...
- 网络层IP协议和数据链路层
目录 IP协议 协议头格式 分片 网段划分 特殊的IP地址 IP地址的数量限制 NAT技术 NAT技术背景 NAT IP转换过程 NAPT NAT技术的缺陷 NAT和代理服务器 私有IP地址和公网IP ...
- 计算机网络——TCP/IP协议网络原理
摘要 本博文主要是介绍的计算机网路中基础知识.这个技术包括了网络中硬件相关的知识,帮助大家更好的理解计算机网络.同时也是对基础概念的巩固学习. 常用的网络协议 (1)TCP/IP协议 T ...
最新文章
- net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
- AppCan用cookie实现记住密码功能 [APP]
- 如何搭建自己的 pip 本地 cache
- 将今天写进历史,即可得出现在的世界是数字的
- 关于U3D场景烘焙的一个想法
- mysql操作语句now_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!
- spark读取文件源码分析-2
- iframe页面改动parent页面的隐藏input部件value值,不能触发change事件。
- 代码校验工具 SublimeLinter 的安装与使用
- 如何控制Nginx并发连接数,Linux 内核优化
- python - 多线程、装饰器
- HIVE SQL DDL语句实例
- 基于微信小程序的商城设计
- Sublime Text2使用教程(转载)
- python-expected an indented block问题解决
- 前馈神经网络中的“前馈”指的是什么意思
- twitter跳过手机验证_twitter跳过手机验证_twitter手机验证不了_攻略
- python输出列表的子列表_python切片(获取一个子列表(数组))详解
- Python List 包含关系判定
- 入网认证遇到的安全受控机制的问题---之Android 5.1.1 AppOps与严格模式