第三部分 传输层协议

Post on 05-Jan-2016

231 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

第三部分 传输层协议. 传输层概述. 网络层的任务是提供主机到主机的通信,而传输层的任务是提供进程到进程的通信 。. 进程与端口号. 在 TCP/IP 协议中,使用端口号( 0~65535 )来定义进程,端口号只具有本地意义。 TCP/IP 采用客户 - 服务器模式实现进程到进程的通信: 运行在本地主机上的程序称为客户,运行在远程主机上提供服务的程序称为服务器。 客户的端口号通常随机选取,而服务器的端口号一般是由 IANA 指派的熟知端口号。 服务器在熟知端口上等待客户的服务请求,客户向服务器主机上的熟知端口发送服务请求,并得到响应。. 客户 - 服务器模式示意. - PowerPoint PPT Presentation

TRANSCRIPT

第三部分 传输层协议

传输层概述 网络层的任务是提供主机到主机的通信,而传输层的任务

是提供进程到进程的通信。

进程与端口号 在 TCP/IP 协议中,使用端口号( 0~65535 )来

定义进程,端口号只具有本地意义。 TCP/IP 采用客户 - 服务器模式实现进程到进程的

通信: 运行在本地主机上的程序称为客户,运行在远程主机

上提供服务的程序称为服务器。 客户的端口号通常随机选取,而服务器的端口号一般

是由 IANA 指派的熟知端口号。 服务器在熟知端口上等待客户的服务请求,客户向服

务器主机上的熟知端口发送服务请求,并得到响应。

客户 - 服务器模式示意

IP 地址与端口号

端口号分配 熟知端口: 0~1023 ,由 IANA 指派和控制。 注册端口: 1024~49151 , IANA 不指派也不控

制,但需要在 IANA 注册以防止重复。 动态端口: 49152~65535 ,不需要向 IANA 注册,

可以由任何进程使用,也称短暂端口。

套接字地址 一个 IP 地址与一个端口号合起来称为套接字地址

( socket address )。 一个套接字地址唯一标识了一个通信端点:

客户套接字地址唯一定义了客户进程 服务器套接字地址唯一定义了服务器进程

为什么需要传输层 设置传输层的两个原因:

为端系统上运行的多个进程提供复用和分用的功能(用端口号实现)

为应用进程提供所需的数据传输服务

TCP 和 UDP 为应用进程提供不同的数据传输服务 TCP :提供可靠的面向连接的服务(完美的服务) UDP :提供不可靠的无连接服务(最简单的服务)

第 11 章 用户数据报协议 UDP

11.1 用户数据报格式 UDP 报文称为用户数据报,它包括一个 8 字节的固定头部

和数据部分。

检查和计算 计算 UDP 检查和包括伪头、 UDP 头和数据三个部分。 检查和的使用是可选的,若不计算检查和,该字段填入 0 。

检验和计算举例

11.2 UDP 服务的要点 UDP 发送的每一个用户数据报都是独立的,因而

用户数据报没有编号,这意味着只有发送短报文的进程才能使用 UDP 。

UDP 不负责流量控制。 除了可选的检查和之外, UDP 没有差错控制机制。

11.3 UDP 的封装和拆装 封装:

发送端进程将报文、报文长度及一对套接字地址传递给 UDP , UDP 在报文前面加上 UDP 头,然后将用户数据报及源 / 目的 IP 地址传递给 IP 软件。

拆装: 接收端 UDP 使用检查和检错后,取出其中的数据部分

连同发送端的套接字地址一起传递给接收进程。

封装和拆装示意

一对套接字地址 +

一对 IP 地址 +

一对 MAC 地址 +

11.4 端口的实现 端口用队列实现:

客户进程启动时,从操作系统请求一个端口号,创建一个相关联的入队列和一个出队列;服务器进程启动时,使用熟知端口号创建入队列和出队列。

发送进程将报文发送到相应的出队列, UDP 从出队列中取出报文,加上 UDP 头后交给 IP 层。

接收端 UDP 收到用户数据报后,检查与目的端口号相关联的入队列是否存在,若存在将报文加入队列末尾,若不存在丢弃报文,并请求 ICMP 发送端口不可达报文。

接收进程从入队列中接收报文。

用队列实现端口

11.5 复用和分用 复用:发送端多个进程调用 UDP 发送报文 分用:接收端 UDP 为多个进程接收报文,并根据端口号交付到适当的进程。

11.7 UDP 的应用适用于只要求简单的请求 - 响应通信的进程,如

DNS。适用于具有内部流量控制和差错控制的进程,如

TFTP 。 多播和广播应用,多播和广播能力已经内置于 UD

P 软件中。管理进程,如SNMP 。某些路由选择协议,如RIP 。

11.8 UDP 软件包示例控制块表:记录进程、端口和队列的关系

控制块模块:维护控制块表

输入队列:接收UDP交付的报文

输入模块:从 IP接收 UDP 报文,放入相应的队列

输出模块:创建和发送 UDP 报文

UDP 软件包功能模块 假想的 UDP 软件包由控制块表、输入队列、控制块模块、

输入模块、输出模块组成。 控制块表:记录已打开的端口,每个表项记录进程 ID 、端

口号和队列号的对应关系。 输入队列:用来接收由 UDP交付的报文。 控制块模块:维护控制块表。 输入模块:从 IP 接收用户数据报,查找控制块表,将用户

数据报放入相应的队列。 输出模块:负责创建和发送用户数据报。

练习 28 , 33 , 43

第 12 章 传输控制协议 TCP TCP 服务模型 TCP 段格式 TCP 的连接机制 TCP 的传输策略 TCP 的差错控制 TCP 的定时器 TCP 的拥塞控制

12.1 TCP 服务模型 TCP 提供可靠的、有序的字节流服务

TCP 使用连接进行通信,因而数据传输是有序的 TCP 使用确认机制保证数据的正确接收,因而是可靠的 一条 TCP 连接就是一个字节流,每个字节都有一个编号,它不保留报文的边界

字节流交付 TCP 使得进程与进程之间如同由“管道”连接一般。 发送方 TCP 实体将应用程序的输出分为不超过 64k 字节(实际

通常为 1500 字节)的数据片段,每个数据片段封装在一个 IP分组中发送。

接收方 TCP 实体根据字节序号将接收到的各个数据片段组装成连续的字节流交给应用程序。

TCP 服务模型(续) 每条 TCP 连接有两个端点(套接字),一对套接字唯一

标识一条 TCP 连接: 由于 TCP 使用两个端点来识别连接,因此一个套接口可以同时用于多个连接。

每条连接只能有两个端点, 因此 TCP 连接是点到点的,它不支持多播或广播。

TCP 连接是全双工的,数据可以在两个方向上同时传输。 TCP支持紧急数据传输。

12.2 TCP 段格式

TCP 段头结构 TCP 段中的每个数据字节都有一个 32比特的序号, TCP 段的序号即为

第一个数据字节的序号。 确认序号:是对另一个方向上收到的数据的累计确认,表示预期接收的下一个字节的序号,同时表示这之前的数据字节已经全部正确收到。

窗口值:指出接收端为 TCP 连接预留的缓存空间大小,用于流量控制。 检查和:计算方法同 UDP 的检查和,包括伪头、 TCP 段头和数据三个

部分。

重要的 TCP 选项 最大段长度

由接收端指明自己可以接收的最大数据长度(不包括段头),默认值为 536 字节。

窗口扩大因子 用于增大窗口值。若窗口扩大因子为 n,则新的窗口值 =段头中的窗口值×2n。

12.3 TCP 的连接机制 从概念上说,建立连接是指在两个通信端点之间建立一条虚路径,在

这两个通信端点之间传输的所有数据均沿着这条虚路径走,从而保证传输的顺序以及方便数据丢失的检测及恢复。

从实现上说,建立 TCP 连接就是要记录和维护通信的状态,如每个方向上数据传输的序号和确认序号。

TCP 使用三向握手过程建立连接,交换两个方向上数据传输的起始序号并协商相关的参数: 客户 ->服务器: SYN ( seq=x) 服务器 ->客户: SYN+ACK( seq=y, ack=x+1 ) 客户 ->服务器: ACK( seq=x or x+1, ack=y+1 )(取决于该报文段中

是否携带数据) 在以上过程中,可以使用选项协商相关参数。

三向握手过程示意

数据传输过程示意

终止连接 TCP 连接是全双工连接,当一个方向的连接被终止时,另

一个方向的连接仍然可以通信。因此,终止一条 TCP 连接必须在两个方向上都关闭连接。

TCP 使用四向握手过程终止连接 主机 A->主机 B: FIN ( seq=x) 主机 B->主机 A : ACK( ack=x+1 ) 主机 B->主机 A : FIN ( seq=z) 主机 A->主机 B: ACK( ack=z+1 ) 如果B收到 A 的终止请求时,数据也发送完了,则第 2 、 3步可以

合并。 当某一端的 TCP 发现连接异常时,可以使用 RST 置 1 的报

文段复位连接。

终止连接示意

12.4 字节流服务

发送缓存:缓存应用进程要发送的数据,以及已发送但尚未被确认的数据。当发送的数据被确认后,从发送缓存中清除这部分数据。

接收缓存:缓存已正确接收但尚未交付给应用进程的数据。当数据交付给应用进程后,从接收缓存中清除这部分数据。

组成报文段传输

12.5 TCP 的流量控制 流量控制:

用来限制源节点在收到从目的节点发来的确认之前可以发送的数据量,防止接收端被淹没。

滑动窗口机制: 接收窗口:接收端从被确认的序号开始,可以接收的数

据字节。接收窗口大小在 TCP 段的 window size 中通知。

发送窗口:发送端已发送但尚未被确认的数据字节,以及允许发送的数据字节。

发送窗口和接收窗口 图

可变长度滑动窗口 例:下图中发送窗口 =9 ,序号为 200~202 的字节已发送,但尚未收到确认,允许发送序号从 203~208 的 6 个字节。

举例(续) 接上面的例子,发送端收到一个报文段,其中的确认序号=202 ,接收窗口 =9 ,拥塞窗口不变,且在此期间主机又发送了序号为 203~205 的字节,则其发送窗口如下:

举例(续) 接上面的例子,发送端收到报文段,其中的确认序号 =20

6 ,接收窗口 =12 ,在此期间主机未发送,则其发送窗口如下:

举例(续) 接上面的例子,发送端收到报文段,其中的确认序号 =21

0 ,接收窗口 =5 ,拥塞窗口未变,在此期间主机发送了序号为 206~209 的字节,则其发送窗口如下:

大多数实现不允许这种情况。

当窗口为 0 时,发送端一般必须停止发送,但以下两种情况例外: 可以发送紧急数据,例如终止在远端计算机上的运行

进程。 可以发送一个 1 字节的段,以触发一个包含接收窗口大小的响应。

12.6 糊涂窗口综合症 发送方不断发送小数据分组,导致大量带宽浪费,此现象

称为糊涂窗口综合症。 糊涂窗口综合症的产生原因

发送应用程序产生数据很慢,致使发送端 TCP产生只包括少量字节的 TCP 段

接收缓存空间满且接收应用程序消耗数据很慢,致使接收端 TCP

发送具有微小增量窗口的通告

现行的 TCP 标准使用启发式方法来防止糊涂窗口综合症。

糊涂窗口综合症示意

发送端策略 发送端 TCP 在发送报文段之前必须等待,以积累足够多

的数据量,防止发送短的报文段。 问题:发送方 TCP 应该等待多长时间? Nagle 算法:

发送端 TCP 将收到的第一块数据发送出去,哪怕只有 1 个字节; 发送端 TCP 在输出缓存中积累数据并等待,直到收到接收端的确认或者积累的数据足以填满一个最大长度的段,发送一个段;

重复该过程 Nagle 算法简单,且可以适应不同的网络延时、不同的最大段长度和不同应用程序速度的组合情况,而且在常规情况下不会降低网络的吞吐量。

接收端策略 Clark 的解决方法:

仅当窗口大小显著增加之后才发送非零窗口通告,所谓显著增加是指窗口大小达到缓冲区空间的一半或者一个最大段长度(取两者的最小值)。

TCP 标准推荐采用延迟确认的方法,即当缓存空间不够时推迟发送确认: 优点:减少了通信量,不需要确认每一个报文段。 缺点:当确认延迟太大时会导致不必要的重传,也会给 TCP估计往返时间带来混乱。

TCP 标准规定推迟确认不能超过 500ms ,而且接收方至少每隔一个报文段使用正常方式对报文段进行确认,以便准确估计往返时间。

12.7 TCP 的差错控制 TCP 使用检查和、确认和重传来检测和纠正传输错误。 正确接收:

接收端使用确认来报告数据的正确接收。可以采用推迟确认和捎带应答。 报文段出错及丢失:

接收端丢弃出错的报文段,早期实现不做任何响应;现在的实现会发送一个重复的确认。

对于失序的报文段,早期的 TCP 实现将其丢弃,现在的 TCP 实现将其缓存起来,并发送一个重复的确认。

发送端使用超时检测数据丢失,一旦发现超时,重传未被确认的数据。 快速重传:

当定时器超时或收到三个重复的确认时,发送端重传未被确认的数据。 对于 ACK段,不设置重传定时器,也不重传。

正常情形

丢失一个段

快速重传

丢失确认

12.8 TCP 的拥塞控制 什么是拥塞?

TCP拥塞控制要解决的问题 TCP拥塞控制采用端到端的机制,方法是让每一个发送方根据自己感知的网络拥塞程度来调整发送速度。

问题: 发送方如何知道从它到目的节点的路径上发生了拥塞? 发送方如何限制其发送速率? 当发送方检测到拥塞时,采用什么算法来改变其发送速率?

问题一的解决: TCP 用超时来检测拥塞 问题二的解决: TCP 使用拥塞窗口和接收窗口一起限制

发送速率。接收窗口体现了接收端的缓冲能力,拥塞窗口体现了网络当前的处理能力,发送窗口是这两者的较小值。

拥塞控制算法 加性增 /乘性减原则:

乘性减:每发生一次超时事件,就将当前的拥塞窗口减半(最小不低于 1 个 MSS )。

加性增:当拥塞窗口内的段都在预定的时间内被确认时,拥塞窗口增大一个 MSS 。实际操作时,每当收到一个确认,拥塞窗口的增量 Δ按如下公式计算: Δ= MSS ×( MSS/拥塞窗口)。

拥塞控制算法(续)慢启动:在刚建立的 TCP 连接上,或在超时后重新启动数据传输时,以一个 MSS 作为拥塞窗口的初始值;每当收到一个确认之后,将拥塞窗口增加 1 个 MSS ,直至发生超时。

拥塞避免:发生超时时,将当前拥塞窗口的一半作为拥塞阈值;使用慢启动算法将拥塞窗口增大到该阈值;此后进入拥塞避免状态,采用加性增的方法继续增加拥塞窗口。

快速恢复:当收到 3 个重复的 ACK 时,将当前拥塞窗口的一半作为拥塞阈值,进入拥塞避免状态。

拥塞控制算法示意

12.9 TCP 的定时器 TCP 使用四种定时器:

重传定时器,坚持定时器,保活定时器,时间等待定时器。

TCP 重传定时器 TCP 每发送一个报文段,即启动一个重传定时器。若超时

前收到该报文段的确认,撤销定时器,否则启动重传。 问题:重传时间设置为多少合适? 重传时间与 TCP 段平均来回时间( RTT )有关,通常设

置为 2*RTT 。 RTT 的估算公式:

RTT = α* 以前的 RTT + (1-α)*当前的 RTT , α 通常取 90%

估计来回时间的问题: TCP 是对接收到的数据而不是对携带数据的特定数据报进行确认,

因此 TCP 的确认是有二义性的。

TCP 重传定时器(续) Karn 算法

忽略有二义性的确认,只对一次发送成功的报文段测量来回时间,并据此更新 RTT估计值。

定时器补偿:发送方每当重传一个报文段时, TCP就增加重传时间,大多数 TCP 实现采用重传时间加倍的方法。

实际使用的 Karn 算法 先使用 RTT估计值计算初始的重传时间。 每次重传时对重传时间进行补偿,直到成功传输一个报文段为止,

在后续发送时保持这个重传时间值。 当某个报文段没有重传就被确认时,重新计算 RTT估计值并设定

相应的重传时间。

坚持定时器 为防止非零窗口通告消息丢失而设计 每个连接使用一个坚持定时器,当发送端 TCP 收

到零窗口通告时启动该定时器,定时器超时后发送端 TCP 发送一个 1 字节的探测报文段,该报文段将触发一个窗口更新通告。

坚持定时器的时间值设置为重传时间,每重传一次探测报文段,定时器的值加倍,直至达到最大值,此后将一直使用该值,只至窗口重新打开。

保活定时器与时间等待定时器保活定时器:

为避免因端点故障导致出现半开的 TCP 连接,每个连接使用一个保活定时器。

当某一侧的 TCP 收到对方的报文段时,复位并启动该定时器;定时器超时后向对方发送一个探测报文段,如连续发送 10 个探测报文段而没有收到响应,终止连接。

定时器的值通常设置为 2小时 时间等待定时器:

在连接终止期间使用,在定时器超时前连接处于过渡状态。

定时器的值通常设置为报文段寿命期望值的两倍。

练习 41 , 43 , 44 , 45 , 60

第四部分 路由协议

第 13 章 单播路由协议 路由问题描述为:给定一组路由器和连接路由器的一组链路,寻找一条从源路由器到目的路由器的最佳路径。

最佳路径:从源路由器到目的路由器的代价最小的路径。 路由优化较多考虑的目标是最小化分组延迟和最大化吞吐

量,但这是一对矛盾。作为折衷,大多数网络最小化分组跳数。

路由表是由路由算法建立起来的一张表,通常包含了分组转发路径上下一跳地址的信息。

路由协议用于在路由器之间交换网络状态信息,以便动态地更新路由表。

内部网关协议和外部网关协议互联网被划分为多个自治系统( AS)。自治系统是由单一管理机制管辖的一组网络和路

由器。 两个层次的路由选择:

内部路由选择:在自治系统内部进行的路由选择,其协议称为内部网关协议

外部路由选择:在自治系统间进行的路由选择,其协议称为外部网关协议

最流行的内部网关协议: RIP , OSPF 最流行的外部网关协议: BGP

自治系统与域内 /域间路由选择

13.1 距离矢量路由算法 路由问题本质上是图论中的一个问题:找出任意两个节点之间代价最小的路径。

对于源节点 x 来说,即是寻找一个直接邻居 p ,满足: dx(y) = minp{c(x,p) + dp(y)}, p N(x) (Bellman-Ford∈ 方程 )

y 是目的节点, N(x) 是 x 的邻居集合, dx(y) 为从 x 到 y 的最小代价路径的代价, c(x,p) 为 x 到其直接邻居 p 的链路代价。

距离矢量算法采用 Bellman-Ford方程求解任意两个节点之间代价最小的路径,因此该算法也称为分布式 Bellman-Ford 算法。

算法思想 每个节点估计到邻居节点之间的“距离”(代价)。 每个节点维护一张路由表,节点知道的每一个目的节点在表中有一个表项,每个表项包括:目的节点、到达目的节点的距离、下一跳节点。

每个节点定期和邻居节点交换路由表中的距离矢量部分。 若某个节点 x 与邻居 p 的距离为 m , p 发布的距离矢量中

p 与 y 之间的距离为 dp(y) ,则 x判断自己通过 p 到达 y 的距离为 m+ dp(y) 。利用每个邻居节点发来的距离矢量进行同样计算, x 可以找到到达 y 的最佳输出线路。同样可以找到到达所有其它目的网络的最佳输出线路,更新路由表。

距离矢量路由表

起始状态

A 用 C 的距离矢量更新路由表

13.2 路由信息协议 RIP RIP 是一种基于距离矢量的内部网关协议。 每一个路由器维护一个路由表,它所知道的每一

个网络都在路由表中有一个表项,距离按跳数计算。

路由器之间相互交换RIP 报文,每当收到一个 RIP 响应报文时,路由器就更新其路由表。

RIP 报文被封装在 UDP 报文中发送,使用 UDP熟知端口号 520 。

13.2.1 RIP 报文格式 命令:指明报文类型,请求( 1 )或响应( 2 ) 协议族:对于 TCP/IP 协议族,该值为 2 网络地址:定义目的网络地址 距离:从发送 RIP 报文的路由器到目的网络的跳数。

请求报文当路由器刚接入网络或路由器中有一些超时的表项时,路由器使用请求报文询问特定的表项或所有表项。

响应报文 包括请求的响应和非请求的响应两种:

请求的响应仅在回答请求时才发送 非请求的响应定期发送且包括整个路由表中的信息。

RIP 报文示例

13.2.2 路由更新算法 收到 RIP 响应报文 对响应报文中通告的每个目的网络,跳数计数加 1 对响应报文中通告的每个目的网络,重复以下步骤

若目的网络不在路由表中把通告的信息添加到路由表中

否则 若下一跳字段相同,用通告的表项替换路由表中的表项否则

若通告的跳数小于路由表中的跳数 更换路由表中的表项

返回

Chapter14

更新示例

13.2.3 RIP 的计时器 RIP 使用三个计时器:

周期性定时器:控制路由更新报文的定期通告。 过期定时器:管理路由的有效性。当某个表项的过期

定时器超时了,该路由的跳数被设置为最大,表示路由过期了。

无用信息收集定时器:通告路由故障。当某条路由的过期定时器超时时,路由器继续通告该路由,但启动一个无用信息收集定时器。当无用信息收集定时器到期时,从路由表中清除该路由。

13.2.4 RIP 的问题 慢收敛:

由于路由更新的周期较长,网络某处发生的变化需要较长时间才能传播到其它地方。

解决方法:限定网络规模不超过 15跳

Chapter14

不稳定

不稳定性

解决稳定性的方法触发更新:路由器在收到有变化的更新信息时立即发出新的信息,可提高稳定性。

Split horizons :路由器从一个接口收到的路由更新信息,不能再通过这个接口回送过去。

Posion reverse :路由器用收到的信息更新路由表,然后通过所有接口发送出去,但是从某个接口来的路由表表项在通过同样的接口发送出去时要将其距离设为最大( 16 )。

Chapter14

分离范围:路由器从某个接口收到的路由更新,不再通过该接口反送。

毒性逆转:路由器发送的路由更新中,反送的路由表项中的跳数改为 16。

13.2.5 RIPv2 RIPv2 对 RIPv1 所做的改进:

报文格式中增加了自治系统号、掩码和下一跳地址信息,因而 RIPv2支持 CIDR。

增加了身份验证报文 使用多播地址 224.0.0.9 将 RIP 报文发送到网络上的 RIP路由器

( RIPv1 使用广播发送 RIP 报文) 。

RIP 的身份验证报文

13.3 链路状态路由算法 每个节点利用可靠方法获得全网拓扑信息,抽象成一张带权图,计算

到各个目的节点的最短路径。

链路状态路由的工作原理链路状态路由算法包括以下五个部分:

发现邻居,获知邻居的网络地址 测量到每个邻居的延时 将以上信息构造成链路状态分组 向所有节点发送链路状态分组 计算到每个节点的最短路径

发现邻居 路由器启动时向每一条输出线路上发送 HELLO 分组,

收到分组的路由器尽快返回一个应答,告知自己的全局唯一地址。

链路状态路由的工作原理(续) 测量线路延时

在线路上发送 ECHO 分组,收到分组的路由器立即发回应答,测量发送与接收之间的时间并除以 2 ,即得到单向线路延时。

构造链路状态分组 收集了全部的邻居信息及线路延时后,若网络拓扑发生变化,构造链路状态分组。

发送链路状态分组 采用扩散法发送链路状态分组。

计算新路由 利用收到的链路状态信息,建立网络拓扑图,运行 Dijkstra 算法计

算到各目的顶点的最短路径,更新路由表。

利用 Dijstra 算法求最短路径

A 的路由表

13.4 Open Shortest Path First ( OSPF ) OSPF是目前最流行的内部网关协议,它使用链路状态路由算法更新路由表。

OSPF 工作在一个自治系统内部。自治系统边界路由器负责把其它自治系统的信息

传送到本系统中。

13.4.1 区域( area )区域是包含在自治系统中的一些网络、主机和路由

器的集合。 可将一个较大的自治系统划分为若干个区域:

一个特殊区域称为主干,所有区域必须连接到主干上。 每一个区域都有区域标识,主干的区域标识为零。 区域边界路由器连接不同的区域。 主干中的路由器称为主干路由器,主干路由器也可以同

时是区域边界路由器。 区域内的路由器使用扩散法传送路由信息,区域边界路

由器将本区域的信息汇总起来发送给其它区域。

自治系统中的区域

13.4.2 链路的类型 点到点链路转接链路残桩链路虚拟链路

点到点链路仅连接两个路由器,每个路由器在链路的另一端

只有一个邻居。 一般不给这种类型的链路指派网络地址。 用连接两个节点的双向边表示,代价标示在边的

两端。

转接链路 连接若干个路由器的网络,数据可从任何一个路

由器进入网络,并从任何一个路由器离开网络。 所有具有两个或更多路由器的局域网和广域网都属于这种类型。

网络用一个节点(称为指定路由器)表示,真实的节点使用双向边连接到指定路由器上,但仅从节点到指定路由器的边标示有代价。

转接链路的画图表示

残桩链路 只连接到某个路由器的网络,数据仅能从该路由

器进出网络。 用节点表示路由器,指定路由器表示网络,链路表示为从节点到指定路由器的单向边。

虚拟链路当两个路由器之间的链路断开时,管理员在它们

之间创建一条使用更长路径(可能要经过好几个路由器)的虚拟链路。

互连网络的图形表示法

13.4.3 链路状态通告( LSA ) Link State Advertisement 每个路由器发布链路状态通告,宣布实体链路的状

态。根据实体类型的不同,有 5种不同的 LSA :

路由器链路 网络链路 到网络的汇总链路( Summary Link to Network ) 到 AS边界路由器的汇总链路 外部链路

路由器链路真正的路由器使用该 LSA宣布它的所有链路及另

一端邻居的情况。 该 LSA 在一个区域内洪泛发送。

网络链路代表转接网络的指定路由器使用该 LSA宣布连接

到这个网络上的所有路由器的存在。 该 LSA 在一个区域内洪泛发送。

到网络的汇总链路区域边界路由器使用该 LSA 在一个区域内通告到另一个区域内网络的路由信息。

到 AS边界路由器的汇总链路区域边界路由器使用该 LSA宣布到 AS边界路由

器的路由信息。

外部链路 AS边界路由器使用该 LSA 通告到 AS外每一个网

络的代价。

举例 问:图中哪一个路由器发送路由器链路 LSA? 解:每一个路由器都通告路由器链路 LSA

R1 有两条链路, N1 和 N2 R2 有一条链路, N2 R3 有两条链路, N2 和 N3

举例 问:图中哪一个路由器发送网络链路 LSA? 解:

R1 是 N1 的指定路由器,因此R1 通告 N1 R3 是 N3 的指定路由器,因此R3 通告 N3 取决于谁是 N2 的指定路由器, R1 、 R2或R3 通告 N2

13.4.4 链路状态数据库链路状态数据库是一个区域内互连网络拓扑的表

格表示,给出每个路由器与其邻居的关系。 每个路由器根据从其它路由器接收到的路由器链路通告和网络链路通告来构造链路状态数据库。

同一个区域内的每一个路由器具有相同的链路状态数据库。

13.4.5 OSPF 分组格式 OSPF使用 5种类型的分组:

问候分组:节点使用该分组建立邻居关系,测试邻居的可达性。(包含本节点信息及已知邻居的清单)

数据库描述分组:当节点收到一个新邻居的问候分组时,发送数据库描述分组,分组中仅包含数据库中每一行的标题。

链路状态请求分组:由需要一条或几条特定路由的路由器发送。 链路状态更新分组:路由器使用该分组通告它的链路状态。 链路状态确认分组:用于对收到的链路状态更新分组进行确认。

OSPF分组被封装在 IP 数据报中传输, OSPF协议提供确认机制以实现流量控制和差错控制。

13.5 边界网关协议 BGP BGP 是自治系统之间的路由选择协议,目前使用的是第 4版。

BGP 采用基于路径向量的路由选择方法,每条路径定义为到达目的网络所要经过的自治系统的有序列表。

域间路由的复杂性: 因特网的规模极其庞大且结构非常复杂 每个域可运行自己的内部路由协议,使用自己的代价计算方案 一个域可能不信任来自某个域的路由信息 一个域可能不愿意为其它域转发分组

域间路由只能是找到一条可达的路径,且域间路由是以 AS枚举列表的形式通知到达某个特定网络的完全路径。

路径向量路由选择 每个 AS边界路由器利用路径向量报文通告到各个已知目

的网络的完全路径。 收到路径向量报文的路由器验证被通告的路径是否与其策略一致,若一致则更新路由表,并在向下一个路由器发送之前修改报文,将自己的标识及 AS号加入到完全路径中。

路由表中的每个表项包含目的网络、下一个路由器以及到达目的网络的 AS序列。

交换路径向量报文之前的路由表

稳定的路由表

BGP 报文格式 BGP 使用 4种类型的报文:

打开报文:由 BGP路由器用来启动与邻居 BGP路由器的联系。若邻居 BGP路由器同意建立邻居关系,用保活报文进行响应。

保活报文: BGP路由器定期交换保活报文,告知对方自己处于工作状态。

更新报文: BGP路由器使用该报文撤销以前已通告的路由以及宣布新路由。

通知报文:当检测到差错或路由器打算关闭连接时,发送通知报文。 BGP 报文使用 TCP 发送,使用 TCP 熟知端口 179

打开 TCP 连接后,保活报文、更新报文和通知报文就一直交换着,直到发送出停止类型的通知报文为止。

练习 59 , 74 , 75 , 76

第 14 章 多播和多播路由协议 单播:

单播通信涉及一个源端和一个目的端, IP 包的源地址和目的地址都是单播地址。

路由器只从它的一个接口转发收到的分组。

多播 多播通信涉及一个源端和多个目的端,分组的源地址是单播地址,而目的地址是多播地址。

路由器可以从它的多个接口转发收到的分组。

多播和多个单播 多播:

源节点只发送一个分组,然后各路由器复制这个分组 分组副本的目的地址都相同(多播地址) 两个路由器之间只有一个分组的副本在传输

多个单播: 源节点针对每一个目的节点发送一个单独的分组 每个分组携带不同的单播地址 两个路由器之间可以有多个分组副本在传送

14.1 多播路由选择 用单播和广播实现多播的缺点:

用单播实现多播:当多播组很大时,开销很大。 用广播实现多播:当网络规模很大时,开销巨大。

多播路由协议的目标: 为每个组建立多播转发树(能够到达该组所有成员主机的路径树) 多播组中的每个成员应当只收到一个多播分组的副本 非多播组中的成员不能收到多播分组 路由应没有回路 从源节点到每一个目的节点的路径必须是最佳的(最短路径)

多播路由协议使用两种类型的多播树: 基于源的树( source-based tree ) 组共享树( group-shared tree )

基于源的树 源节点建立一棵到多播组内所有成员的最短路径树,源节点和组的每一种组合 <S, G> 构成一棵树。

每一个路由器必须有关于每一个特定树的信息,路由器根据多播分组的源地址及组地址确定使用哪棵多播树转发。

优点:多播分组总是使用最佳路径转发。缺点:路由器需要维护大量的多播树。

基于源的树( source-based tree )

组共享树 每个多播组使用同一棵路径树,树根为该多播组

的核心路由器。优点:路由器对于每个组只要维护一棵多播树,内存消耗减少。

缺点:多播分组使用的转发路径可能不是最佳的,这是组共享树为实现可扩展性而付出的性能代价。

组共享树( group-shared tree )

14.2 多播路由协议

14.2.1 MOSPF MOSPF 扩展了 OSPF协议来实现多播路由,它使用多播链路状态路由创建基于源的树。

基本思想: 所有参与多播的主机定期在局域网上通报其所属的多播组。( IG

MP成员关系报告) 路由器将每条直连链路上对应的多播组集合作为链路状态在网上广播。

每个路由器可计算出从任一源节点到每个多播组的最短路径多播树,而路由器自身是这个树上的一个节点。

MOSPF是数据驱动协议,仅当MOSPF 路由器第一次遇到具有给定 <S, G>的多播分组时,才计算对应的最短路径多播树,并保存在 cache 中。

14.2.2 DVMRP DVMRP扩展了单播距离矢量路由算法来实现多播路由。

在运行 DVMRP 的网络中,起始时路由器并不知道网络中有哪些组,以及这些组的成员在什么地方。

基本思想: 设计一种广播转发机制,确保多播分组能够到达每一个局域网。

设计一种路径剪枝机制,将那些不包含组成员主机的网络排除在外。

逆路径转发( RPF ) 使用逆路径转发( RPF)实现广播发送:

当广播分组到达路由器时,路由器检查分组的源地址与输入线路;若输入线路与单播路由表中去往该地址的输出线路相同,则洪泛该分组,否则丢弃分组。

逆路径转发的基本思想是,只转发沿最短路径到来的广播分组,从而确保每个路由器只转发分组副本一次。

RPF 的问题

逆路径广播( RPB ) 使用逆路径广播( RPB)确保每个网络只收到一

个分组副本: 每个网络选择到源节点路径最短的路由器作为父路由

器,网络只能通过这个指定的父路由器从源端接收多播分组。

RPB创建了从源端到达每一个目的端的最短路径广播树,且每一个目的端收到且仅收到分组的一个副本。

RPF 和 RPB 的比较

逆路径多播( RPM ) RPM 给 RPB增加了剪枝和移植,以支持动态成员变化:

参与多播的主机定期在局域网上通报所属的多播组,局域网上的路由器记录这些信息。

当路由器收到发往组 G的多播分组但它并没有从局域网上监听到组 G的报告时,向上游路由器发送一个剪枝消息,上游路由器停止通过这个接口发送该组的多播分组。

如果一个路由器从它的每个下游路由器都收到剪枝消息,则向其上游路由器转发剪枝消息。

该过程递归进行,直至所有的无关分支都被删除,最终得到一棵以源 S为根的组 G的多播树。

叶子路由器在发送剪枝报文后,如果需要重新接收该组的多播报文,可以发送移植报文,强迫上游路由器继续发送多播报文。

路由器对每个活跃的组维护一个修剪计时器,超时后若没有收到新的剪枝消息,则恢复通信。

RPF 、 RPB 和 RPM

14.2.3 基于核心的树( CBT ) CBT 是一种组共享协议:

自治系统被划分成许多区,每个区选择一个路由器作为核心。

每个多播组只建立一棵由所有组成员共享的多播树,核心作为树根节点。

当需要发送多播分组时,多播分组首先被发送到该组的核心节点(多播分组封装在单播分组中),然后由核心节点取出多播分组进行多播转发。

具有核心路由器的组共享树

在组共享树上的多播传输

共享树的形成 将自治系统划分成若干区,每个区选择一个路由器做为核心(汇聚点),核心路由器的单播地址及组地址 G被通知给每一个路由器。

希望加入多播组 G的路由器 S向核心路由器发送加入报文。 沿途的路由器收到加入报文后,均在转发表中创建一条共享树的记录 <*, G>,加入报文到达的接口被标记为转发组G多播报文的接口,向核心进一步转发加入报文的接口被标记为本节点允许接收组 G多播报文的唯一接口。

加入报文到达核心时,就完成了从源节点 S到核心的分支建立过程。

当核心收到该组的所有加入报文时,共享树就建成了。

多播发送 任何一个源节点想要发送多播分组时,首先将多播分组封装到一个单播分组中,单播分组的目的地址为核心的单播地址,然后将分组发送给核心。

核心取出单播分组中的多播分组,转发到所有感兴趣的接口。

收到多播分组的每一个路由器再将分组转发到所有感兴趣的接口。

14.2.4 协议无关多播( PIM ) PIM 是两个独立的多播路由协议的名称:

PIM-DM (密集模式):当区域中许多或大多数路由器涉及多播路由过程时(如 LAN ),采用广播与剪枝相结合的多播路由算法,类似于 DVMRP 的思想。

PIM –SM (稀疏模式):当只有很小一部分路由器涉及多播路由过程时(如WAN ),采用共享树的方法。但当源节点的数据流量比较大时,可以从共享树切换到基于源的树,以提高分组转发的效率。

从组共享树切换到基于源的树 当树的下游路由器观察到从某个源主机发来的数据量很大时,可以向

源主机发送一个加入报文。加入报文按最短路径传向源节点,沿途每个路由器在转发表中创建树的 <S, G> 状态,最终得到一棵以源节点为根的多播转发树。

RP

R3 R2 R4

R1 R5

图5-12 PIM操作

(a) R4发送 j oi n 到RP,加入共享树 (b) R4和R5建立到R1的特定源树

join

RP

R3 R2 R4

R1 R5

join join

14.3 多播骨干网 MBONE 因特网中只有一小部分路由器是多播路由器,多播路由器之间可能没

有直接的链路连接。也就是说,多播分组在从一个多播路由器传递到另一个多播路由器时必须通过单播网络。

可以采用隧道方式在单播网络上传输一个多播分组。

隧道封装 把多播分组封装在单播分组中就建立了隧道。

MBONE 因特网中的多播路由器以及这些多播路由器之间

的隧道构成了因特网多播骨干网,称为 MBONE( Multicast BONE)。

目前,仅有 DVMRP 协议支持MBONE和隧道技术。

top related