计算机网络-广域网技术
继续学习广域网技术
参考书 《计算机网络原理》第二版 王志文 陈研
广域网技术
是什么?
广域网从结构上可以分为通信子网和资源子网
圈内即通信子网,用于寻址,收发数据。
圈外为资源子网,即广域网实际上的服务者。
特点
- 网络范围大,传播距离远
- 通常由运营商搭建
- 带宽小,延时大
广域网和网络层
广域网其实是基于局域网的,小范围搭建局域网,然后用广域网将局域网连接起来。所以说广域网相对局域网封装了网络层的功能。
网络层对应广域网中的通信子网,连同数据链路层、物理介质层一同为上层传输层的资源子网提供服务。所以说,网络层和传输层的界面,其实就是通信子网和资源子网的界面。
因此我们不难得出在网络层期望提供的服务和对服务要求
要求:
- 提供的服务要稳定,不能因为网络层技术改变而改变上层使用服务的方式
- 通信子网的规模、类型和拓扑结构对于传输层透明,不需要传输层了解相关信息的情况下,将信息传递给网络层即可使用
- 传输层提供的网络地址采用统一的格式
应该提供的服务:
- 路由选择和中继
- 激活和终止网络连接
- 同一条数据链路上复用网络连接
- 分段和合段
- 差错检测和恢复
- 排序
- 流量控制
- 加速数据传送
- 复位
- 服务选择
- 网络层管理
怎么实现?
广域网的核心是节点交换机,其本质是一个接受、处理,然后通过路由选择表来选择输出链路,转发数据分组的计算机。
所以问题在于如何进行数据收发的连接,如何寻址,如何选择输出链路(路由),如何进行拥塞控制。
数据报和虚电路
通信子网向上提供的数据收发服务主要有数据报和虚电路两种
数据报提供的是无连接的服务,类似于信件。每个数据报上都有源地址和目的地址,并且相互独立。所以端主机(通信子网上层)要提供差错处理、顺序和流量控制的问题。
数据报在每个节点都会被选择一个最好的后继路由,所以相对灵活和方便
虚电路提供的是面向连接的服务,类似于电话。进行通信前,双方需要首先建立一个点对点的连接,然后再进行数据传输。因为是串行发送,所以顺序固定。
为了避免来自不同主机的数据在同一条虚电路上无法分辨的问题,虚电路会使用当前节点未被占用的最低逻辑信道号,以不同的上一个主机区分。
区别
两者之间的区别其实是将顺序、差错控制和流量控制放到传输层还是网络层的区别。
虚电路则将这三者放在网络层,而数据报则是放到上层的传输层。
因为数据报上层提供了流量控制、差错控制和顺序控制,通过重传等方式可以使得数据避免了通信子网出差错的可能,这样会更可靠。所以采用数据报避免在网络层二次检测。数据报在小量数据上也避免了虚电路建立拆除的大量开销。
虚电路则在网络层内部实现了相对可靠的方式,可以避免传输层的这方面开销。同时其实时性也比较好。
路由算法
除了数据收发,路由合理选择可以保证速度和可靠,避免大量数据占用同一信道的拥塞。
基础
虚电路服务时,每次传送都在建立呼叫连接时,选择一次路由,并保持该路由。
数据报服务时,每传送一个分组都要选择一次路由。
分类
根据源节点发送分组是全路、多路还是单路
通过发送路径的冗余保证数据可靠性,但是也因为大量重复造成信道浪费。
扩散式
选择扩散式
单路路由选择算法
单路路由根据健壮性和可靠性分为
是否能够通过当前实际通信量和拓扑变化动态调整路由。
自适应健壮性好,但是算法复杂,实现难度大。
网络规模较小可以使用非自适应降低网络开销,规模较大多采用自适应算法
- 自适应式路由选择算法
- 非自适应路由选择算法
工作流程
测量有关路由选择参数
由于每个节点都只能测量自己相邻节点和链路的运行状态,一般采用分布式的方法。不同路由算法采用的衡量性能参数(链路长度、响应延时、跳数等)不同
将路由信息传送到适合的网络节点
- 孤立式:节点不和其他节点交换信息,单纯靠自己的信息确定策略
- 集中式:所有节点信息集中发送到一个节点,通过这个中心节点来重新计算路由表和分发。这会给中心及靠近中心节点带来负担
- 分布式:每个节点在一定范围内交换路由信息,根据交换后的信息重新计算路由表
计算和更新路由表
根据新路由表执行分组转发
在实际网络中最常采用的路由算法一般有两大类:距离向量法和链路状态法。
分层路由
在大型网络中,随着节点数量增加,每个节点的路由表空间也呈比例增长。广域网大多采用分层路由压缩路由表。
通信子网的节点划分为若干个区域,每个区域有负责和另一个区域连接的节点,区域内节点知道本区域如何选择路由,也知道怎么选择路由将分组送到其他区域即可。
分层路由可以大量减少路由选择条目,路由选择时间也相应减少,但是有时选择的并不是最佳路由。
距离向量路由算法
Distance Vector Routing Algorithm也称 Bellman-Ford 路由算法或 Ford-Fulkerson 算法,其基本思想是在相邻路由器间周期性的交换路由表。当拓扑结构变化时,也会相互通知有关变更信息的数据。
每个路由器都维护一个路由表,记录了目的节点的输出路由和代价。代价可以是转发节点数、队列长度或者延迟时间。可以通过向相邻节点发送 “ 回声 ” 来测定节点间往返时间。
例如,当 J 节点收到 A、I、H、K的路由表,会将 J 到他们节点的延时和路由表延时相加,并取最小值构成新的路由表。
该算法优点在于每个节点只和相邻节点交换信息,所以消耗带宽少。但是由于这一点,更新速度和收敛较慢。
缺点在于存在路由环路的问题,如A节点故障,B更新信息后,BC之间交换信息,C收到B说明B不能到达A,但是C路由表声明其能通过B到达A,此时 B 到 A 的路径指向的是 C,C 到 A 的路径指向的是B,此时就构成了错误的环路。
可以用四种方法来解决这个问题
- 定义向量距离最大值:超出该值标记为无法到达。这样的话如果出现环路一段时间后就会标记为不可到达
- 水平分割:路由器有选择的发送路由表的信息,如AB节点之间交换,B只发送目的端口不是A的路由信息
- 挂起计数器:定义某些情况下的路由改变在一段时间内无法被修改。
- 触发式更新:路由信息交换不单单通过时间周期交换,在突发变化时及时进行交换。
链路状态路由选择算法
每个节点都有全部节点的拓扑图,因此每个节点都能选择出最短路径和将经过的路由器。
- 距离向量大多采用跳数,而链路状态可采用响应时间和吞吐量等更复杂、更能代表网络状况的参数
- 可以采用一些方式避免环路
- 距离向量算法中,节点将整个距离表发送给邻居节点;链路状态将自己收集到的邻居信息广播发送。
- 相对距离向量算法,链路状态路由选择算法可以将更新信息很快的送到所有节点
路由器启动后,广播 Hello 包来发现邻居节点,并记录邻居节点的地址。通过 Hello 包可以实现时钟同步,也可以测定邻居节点之间的延时。
当节点确定了所有邻居及其相关路由信息后,封装成一个包
为了确保新的信息能被更新到路由表,旧的信息不会更新,使用序号进行判断,如果序号大于当前的路由表记录序号,则更新。
为了避免序号出错,路由表错误序号太大导致迟迟无法更新,增加 age 字段,每秒减 1,当 age = 0 时,将路由表序号重置为0。
最后,节点收集到足够的信息后,根据最短路径优先算法(Dijkstra算法)计算最短路径,并将其所使用的网络端口添加到路由表中。
采用链路状态算法,要考虑
路由器的存储空间和处理能力
需要保存链路状态信息、网络拓扑结构和路由表,所以存储空间要大。计算最短路径算法较为复杂,所以也要较好的处理能力
带宽
建立路由表最初阶段,大量的链路状态报文传输,对带宽要求高。如果带宽不够,会影响收敛速度和数据传输。
路由器
主要工作是将数据分组沿着更接近目的节点的方向转发出去
路由器包括输入输出端口、路由处理器、转发引擎和内部交换等功能模块
输入输出端口
当输入输出端口从物理层接口接收到一个数据时,它将完成
a. 进行数据链路层解封装,提取出网络层分组
b. 根据分组携带的目的地址在路由表中寻找,确定分组转发方向。路由查找可以通过硬件实现。每个端口上都有一个路由表副本,以提高查找速度,副本更新由处理器完成。
c. 确定分组转发方向后,送到输出端口进行数据链路层封装,对数据帧进行存储,排队后通过调度算法确定何时发出去。
可以看出,接口一方面需要加载 SLIP 和 PPP 这样的数据链路层协议,另一方面加载一些网络层协议,以实现路由表查询、转发和排队。如果多个输入端口共享交换开关,那么还需要增加公共资源的仲裁协议
路由处理器
执行路由协议(RIP,OSPF),通过路由选择算法生成和维护路由表。并且要实现路由器的管理功能,以便进行配置和管理
转发引擎
按照分组携带的目的地址寻找路由表,并确认路径。
内部交换
在输入输出端口间提供高速数据通路。
- 总线型:通过共享总线连接输入输出端口,但是一次只能进行一个分组的交换。
- 交叉开关型:提供多条数据通路,具有 N * N 个交换开关,则拥有2N条总线。通过调度器控制开关,调度速度限制开关速度。
- 共享存储器型交换:所有输入数据报都存储在共享存储器中,处理完成后再传送到输出端口
广播和组播
前面介绍的都是发送到一个目的节点的单播算法。但有时需要发送到多个或者所有节点
最简单的方式就是对同一份数据的副本进行 N 次单播,但这样占用了大量的带宽,且效率低。
广播方式
无控制洪泛算法
要求源节点发送给所有邻居节点分组副本,并且当某个节点收到这样的广播副本要将其转发给来源邻居节点之外的其他所有邻居节点
这种方式虽然简单,但是如果拓扑结构存在环路,就会出现无限循环,从而导致广播风暴。
受控洪泛
每个节点在收到广播时有选择的进行转发
序号控制
通过唯一确定的序号标识已经接受过的分组,只有没有转发过的分组才能进行转发
逆向路径转发
接收到分组的节点判断来源链路是否在到达源节点的最佳路径上,如果在,则进行转发。
生成树广播
通过生成一个最优化遍历所有节点的路径(局部到整体)的树状图,沿着这棵树进行广播。
前两种方式能避免广播风暴,但是仍有冗余,生成树为最优方式,但是相对而言代价也高。
组播方式
组播方式相对广播方式则加入了对是否为组内对象的判断
组播协议分为:
- 主机跟路由器之间的组成员管理协议
- 如IGMP,主要负责主机和路由器之间组播成员关系的建立和维护机制
- 路由器之间的组播路由协议
- 如PIM,主要通过建立无环的组播分发树
- PIM-SM为稀疏模式,常用于分散,大规模网络;PIM-DM常用于密集网络,主要为局域网。
- 组播分发树分为共享树和以组播源为根的最短路径树。
- 前者维护一棵单项共享树,选择某一个路由器作为公用根节点(汇聚点RP),所有源主机将分组发送给RP,RP再通过树分享给其他节点
- 后者将源端和所有目的节点直接相连。
- 通过加入/剪枝机制来完成组播分发树的建立和维护。指派路由器(DR)负责为直连的组成员朝着根节点发送“加入/剪枝”信息,或者把相连接的数据发送给组播分发树。运行PIM-SM的节点周期性发送 Hello 信息发现相邻PIM路由器,并负责 DR 选举。
- 如PIM,主要通过建立无环的组播分发树
拥塞控制
分类
根据预防还是反馈调节
开环拥塞控制
- 流量整形
- 漏捅算法
- 令牌桶算法
- 流量整形
闭环拥塞控制
- 发送抑制分组
- (队尾)分组丢弃法
- 根据目前情况检测预警处理算法
- AQM和RED算法
- 基于QoS的拥塞控制
根据算法实现的位置
- 链路算法
- 源算法
开环拥塞控制
虚电路下,在建立连接前请求分组中包含说明传输模式的流说明信息(包括最大分组长度、最大传输速率等),当经过各路由器时,路由器要记录流说明信息。
当目的节点收到该说明信息时,通过说明信息确定能够接受的流量传输模式,然后发送应答分组。然后应答分组经过各路由器时,确认源流说明信息。最终达成一致的传输模式。
在传输时,路由器根据协商好的传输模式对该连接上的流量进行整形。流量整形指通过调整数据传输的平均速率,使得数据按照传输模式规定的速率进行传输,尽量避免由于突发性增大通信量而导致的拥塞问题。通过流量整形可以预防拥塞的发生
漏桶算法
不管流入桶的水速多大,流出水速固定。如果无水则速率为 0,桶满则溢出。相当于在内部实现了有限长度的缓存队列,以恒定速率从缓存队列中取出分组并发送出去。进入缓存的分组被排到队列的尾部,一旦队列饱和,新来的分组就被丢弃。
令牌桶算法
以恒定速度产生令牌放入桶中,每发送一个分组都要消耗一个令牌。令牌为 0 时,新来的分组需要等待。
两者之间区别如下:
- 流量整形策略不同:漏桶不允许空闲节点积累发送权以便以后发送大的突发数据;令牌桶允许,最大为令牌桶大小。
- 漏桶中存放的是数据包,桶满则丢弃数据包;令牌桶则为令牌,令牌满了则丢弃令牌,不丢弃数据包。
闭环拥塞控制
采用数据报的情况下,很难在发送前对源节点和目的节点进行协调。所以通常在拥塞即将出现或者出现后,才触发拥塞控制机制。
发送抑制分组
当一个节点有分组进入时,检查该分组选择的输出线路是否处于告警状态,如果是,则一方面向源节点发送一个抑制分组(choke packet),通知源节点发生拥塞征兆,减缓发送速度。另一方面标记分组为已发送抑制分组,以避免重复发送抑制分组。然后转发分组。
源主机在收到抑制分组后,减缓发送速度。因为在途中分组可能还会产生抑制分组,并且在固定时间间隔中不再理会抑制分组。时间间隔一过,再次检查是否有抑制分组,如果有则再次减少通信量,没有则再增加通信量。
通信量增减的策略:要按照一定比例减少,以便快速解除拥塞;要按常量增加,防止很快再次导致拥塞。
丢弃分组法
当路由器输出缓存队列长度达到最大值时,丢弃新到达的分组,并且通过丢包来向源分组指示拥塞征兆发生。
主动队列管理(AQM)
相较丢弃分组法,在缓存达到最大值之前,丢弃或标记报文
随即早期检测(RED)
通过监控输出端口队列的平均长度来发现拥塞,一旦发现即将拥塞,随机选择连接通知拥塞,在队列溢出丢包前减少拥塞。
基于 QoS 的拥塞控制
QoS时指网络传输数据流时要求满足的一系列服务请求。具体参数有平均速率、最大速率、数据报延时、抖动、数据报损失等。简单说就是网络质量要求的指标。
解决拥塞的方法一般是将影响平均的分配到每个数据流,但是这样并不能最优化损失。但是QoS先把影响分配到延时要求不高的数据流上,从而保证要求高的数据流优先通过,最大化减少数据包损失和延时。
网络互连
基本要求
进行网络互联时,主要问题有:
- 在物理上如何把两种网络连接起来
- 一种网络如何与另一种网络实现互访和通信
- 如何解决协议间差别
- 如何处理速率和带宽的差别
例如下图所示网络
需要解决以下问题:
- 相同的通信协议
- 统一的寻址方式,如IP地址
- 一致的分组或信息帧的长度,因为网络内部分组大小可能不同,需要分段或者扩展
- 采用不同流量控制方式需要协调适配一致
- 考虑跨网时延更大的问题
- 网间传送费用的计算
- 当有更多网络互联的问题时,必须解决路由选择
互联种类有:
- 两个广域网互连
- 广域网和局域网互连
- 两个局域网互连
- 两个局域网通过广域网互连(如Ethernet 通过 Internet互连)
ISO/OSI 为网络互连做的准备:
网络层增加网络互连的子层作为任选项来实现协议转换,通过增加子网增强子层以使得原先的网络层服务上升到网络互连子层要求的水平。
互连设备
主要有以下几大类
- 中继器(repeater)和集线器(HUB)
- 网桥(bridge)和交换机(switch)
- 路由器(router)
- 高层协议转换器(网关,gateway)
这些网络设备工作层次不同,工作层次即设备所能加载的最高层协议。
- 连接的网络的工作层次及以下协议无所谓相同,但是工作层次以上的连接网络内的协议必须相同。
- 这些设备按照工作层次地址进行数据转发。
中继器和集线器
由于存在损耗,线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,从而导致错误。中继器就是为了解决这一问题设计的。它会完成物理线路的连接,对衰减的信号进行整形、放大和转发。
- 中继器
- 工作在物理层,不能完成不同数据链路层协议网络的互连,只能在相同网络的不同网段间转发数据。
- 中继器只是对信号的简单复制,因此差错也会被转发。
- 中继器不存储信息,转发时延小。
- 要注意中继器形成的以太网不能形成环。
- 必须遵循 MAC 协议定时特性,不能用中继器无限连接下去。
- 集线器
- 相当于中继器+广播到连接到的所有线路
- 共享式网络,只能够半双工
- 中继器
网桥和交换机
在不同局域网段间按照物理地址完成帧的存储转发,详见数据链路层
路由器
基本功能是:在网络层上按照逻辑地址转发数据分组。
还有如下功能:
- 根据分组的目的地址选择一条合适的路由,将分组转发到目的节点
- 拆分和组装数据分组。当路由器连接的网络对最大长度要求不同时,需要拆分和组装
- 不同协议之间的网络连接。互连的网络层采用不同协议时,需要使用多协议路由器。多协议路由器需要建立和维护不同的路由表。
- 防火墙的功能。如屏蔽 IP 地址、通信端口过滤等。
路由器和网桥的区别在于:局域网互连既可以用网桥,也可以用路由器。网桥独立于高层协议,只是把物理网络连接起来提供一个逻辑网络。但是路由器使用互联网协议将网络分成几个逻辑子网。
路由器在连接局域网时有以下特点:
- LAN 网络层协议可以相同,也可以不同
- 可以将多个 LAN 的广播通信量相互隔离开
- 转发效率低于网桥
- 可以完成 LAN 和 WAN 的互连
高层协议转换器(网关)
用于连接不同的应用,完成传输层或者网络层的协议转换。网关也可以提供过滤和安全的功能,大多数工作在网络的最高层(应用层),应用级防火墙本质上就是一种完成安全功能的应用层网关。