第 2 章端到端的传输协议 通信工程学院信息科学研究所
2.4 网络层和运输层的点对 点传输协议
网络层和运输层的点对点传输协议 前一节我们研究了两个相邻节点的数据传输的协议, 这里我们要讨论一个会话过程 (Session) 跨越一个网络中多条链路, 或跨越多个网络的不同传输链路时的分组编号 差错恢复 流量控制和编址等问题, 以保证任意两个网络节点或两个应用进程之间可靠的数据传输 A B C D
网络层和运输层的点对点传输协议 对于网络中的一条链路而言, 它通常被通过该链路的若干 个会话过程所共享 也就是说, 不同会话过程的分组要共 享同一链路 如果要将装载在物理帧中的分组送达不同的 目的地或区分来自不同源的分组, 这就必须对不同会话过 程的分组进行标识 a C Host h1 C.b b d A A.a a b A.c c B.a a B c b Host h2
不同会话过程的标识方法
不同会话过程的标识方法 对于虚电路 (VC) 方式, 对于不同的会话过程, 采用 虚电路号进行标识, 即每个分组含有一个虚电路号 3 VC13 VC7 链路 (3,5) VC4 5 VC7 链路 (5,8) 8 VC3 VC3 链路 (6,5) 7 VC11 VC6 链路 (8,7) 链路 (8,2) VC7 6 (3,5)VC13-(5,8)VC7 2 (3,5)VC7-(5,8)VC4 (6,5)VC3-(5,8)VC3 Each node maintains a table mapping each busy incoming virtual channel on each link onto the corresponding outgoing virtual channel and link for the corresponding session The nice thing about these virtual channels is that each link has its own set of virtual channels, so that no coordination is required between the links with respect to numbering
不同会话过程的标识方法 对于数据报方式, 通常在分组头中应包括 : 源节点地址和目的节点的地址以及相同节点中不同会话过程的标识 利用这些信息, 就可以将任一节点中的任一会话过程中的分组送到任一节点中相应的会话过程
不同会话过程的标识方法 不同 Session 的数据可以在不同的帧中独立传输, 也可以将多个 Session 复接在一个帧中传输 帧头 Session-1 头和分组 Session-n 头和分组帧尾
同一 Session 中的分组的标识 在数据报方式中, 同一 Session 分组可能会经过不同的路径, 这样到达到目的节点的顺序就会不同于源节点发出分组的顺序 另外一方面分组在传输的过程中, 因链路拥塞 传输错误 节点或链路故障等原因会引起分组丢失 因此, 就必须提供一种方式来使目的节点发现上述问题 解决方法就是对同一 Session 发送的分组进行编号 在虚电路方式中, 是否需要编号呢?
同一 Session 中的分组的标识 在虚电路方式中, 可能会有下列原因导致分组丢失或传输出错 : 虚电路号错误导致不正确的帧通过了 CRC 校验, 而把不正确帧误认为是一个正确的帧 ; 当数据分组中的传输错误未能被 CRC 检查出来 ; 节点或链路故障, 可能导致部分分组丢失, 如果没有分组编号, 目的节点就不可以发现丢失的分组 分组编号的大小可以采用 K 个比特表示, 用 mod 2 K 的方式对分组进行循环编号
2.4.1.3 网络层的差错控制
网络层的差错控制 网络层的差错控制与数据链路层差错控制的主要差别在于 : 使用的位置不同 数据链路层的差错控制是用于一条物理链路的两端, 而网络层的差错控制是用于网络中的任意两节点之间 通常网络中的任意两个节点之间的传输路径会由多条链路串联而成 编号的方式不同 在网络层是对一个 Session 中的分组 ( 或者字节, 或者消息 ) 进行统一编号 而在链路层上是对不同 Session 中所有分组 ( 成帧后 ) 进行顺序编号 1 2 3 4 5 6 帧头 Session-1 头和分组 Session-n 头和分组帧尾
网络层的差错控制 传输顺序的差别 在链路层, 所有的帧都是按顺序传输的 ; 而在网络层中, 相同源和目的节点的分组可能会经过不同的路径, 分组的传输可能会出现乱序现象 时延不同 在链路层, 传输时延 ( 包括传播时延 处理时延 帧传输的时延 ) 在小范围内变化 ; 而在网络层, 传输时延会在大范围内变化 1 2 3 4 5 6
网络层的差错控制可靠吗? 假定分组要用 mod m 的编号方式, 则序号为 l mod m 和 (l+m)mod m 的分组在接收端是无法区分的 假定这里使用数据报方式, 由于分组的时延和丢失, 有时必须采用端到端的重传, 即发端在一个给定的时间内没有收到接收端的应答, 发端就会重发某一分组 ( 设其序号为 l mod m) 而该重发分组的前一个拷贝, 可能并没有丢失, 可能会因网络的任意时延而潜伏在网络之中 发端继续发送新的分组直至 (l+m)mod m 分组时, 如果潜伏在网络中的序号为 l mod m 的分组的一个拷贝先于序号为 (l+m)mod m 分组到达接收节点将会导致不可纠正的错误 (l+m)mod m l mod m 7 8 1 2 3 4 5 6
网络层的差错控制 由于分组可能会经过不同的路径, 会出现丢失 乱序和任意的时延, 因而不能保证网络层 ( 和运 输层 ) 的差错恢复 100% 正确 l mod m 7 8 (l+m)mod m 1 2 3 4 5 6
网络层的差错控制 网络层最好采用虚电路方式 ; 分组编号的模值应足够大, 使得上述错误出现的可能性足够地小, 达到可以接受的范围 ; 给每个分组规定一个最大生存时间, 在该区间内, 使得分组的序号在使用 mod m 时不可能出现一个循环
网络层的差错控制 使用某种形式的校验序列, 如 CRC 校验 通常的做法是将分组头中的可变部分 ( 如虚电路号 ) 不参 加校验, 这样每个节点就不需要计算校验和 为了防止分组头的出错, 导致分组被错误地送到其他节点, 使得该节点发生接收错误 可将源节点和目的节点共知的 信息 ( 如地址码等 ) 作为信息比特的附加部分一起参与校 验比特的计算 ( 但这些信息不进行传输 ), 从而可以防止 目的节点出错 3 链路 (3,5) 链路 (6,5) VC13 VC7 VC3 VC4 5 VC7 链路 (5,8) 8 VC3 VC11 VC7 VC6 6 (3,5)VC13-(5,8)VC7 2 (3,5)VC7-(5,8)VC4 (6,5)VC3-(5,8)VC3 7 链路 (8,7) 链路 (8,2)
2.4.1.4 网络层的流量控制
网络层的流量控制 端到端流量控制 ARQ 协议的基本机制是采用滑动窗口 ( 窗口宽度为 n) 来限制在一个 Session 中, 发送节点向网络发送的分组数 即第 j 个分组能够发送给网络的条件是第 j-n 个分组已经被应答 如果网络发生拥塞或传输时延增加, 则应答将被时延, 这样信源的发送速率就会降低 n(=5) 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 对于减少子网内部和目的节点处的拥塞都是非常有效的 已收到确认 将流控功能附在应答的传输过程中 0 1 2 3 4 5 6 7 8 9 10 已收到确认
网络层的流量控制 SN=0 RN=1 超时 SN=0 由于传输出错, 而导致应答未到达发端, 重传
网络层的流量控制 SN=0 RN=1 超时 SN=0 应答因网络拥塞而被时延, 重传
网络层的流量控制 SN=0 RN=1 超时 SN=0 目的节点处于过载状态而导致应答被推迟发送, 重传
网络层的流量控制 应答 + 流控 应答 流控 1. 接收未准备好 来应答对方, 这样既应答了对方, 又表示目的节点处 于忙或拥塞的状态, 从而达到了降速的目的 2. permit scheme 来应答对方, 目的节点向源节点发送两个反馈信息 : RN+Permit(j)
2.4.2 网际层的传输协议
IP 协议 IP 的主要功能有 : 为数据报通过 Internet 提供路由 寻址功能 为源和目的节点提供地址信息 将数据报分段 重装以适应不同的网络对分组长度的限制
2.4.3 传输层的点对点传输协议
2.4.3 运输层的点对点传输协议 运输层的功能是将消息分成报文 如果网络层没有合适的差错控制, 则运输层提供必要的差错恢复 如果网络层没有流控, 则运输层进行流量控制 对 Session 进行复接和分接 1.TCP 中的寻址和复接 2. TCP 中的差错控制 3. TCP 的流量控制
TCP 中的寻址和复接 通常在 TCP 之上有很多的用户 ( 或进程 ), 为了区分 这些用户 ( 或进程 ), 就需要对它们进行编址 S M T P F T P TCP T E L N E T Port Port Port TCP 中将 TCP 之上的每一个用户 ( 或进程 ) 称为一个端口 (port)( 用 16 比特表示 ) 一些常用的 TCP 端口为 :SMTP(25),FTP(21),TELNET(23); 一些常用的 UDP 端为 :RPC(111),SNMP(161) 和 TFTP(69) IP
TCP 中的寻址和复接 在 TCP 中, 一个完整的地址应当由三部分组成 : 网络号 主机号 端口号, 它们被称为一个套接口 (socket) 在 TCP 中, 仅将端口号包括在 TCP 头中, 而以参数的形式将网络号和主机号 (IP 地址 ) 告知 IP 层,IP 层将 IP 地址放入 IP 头中 对于具有相同源和目的节点的不同端口的消息将复接在 IP 分组中传输 而 IP 本身并不关心 TCP 提交的信息内容
TCP 中的差错控制 TCP 中采用的差错控制方式为选择重发式 ARQ SN 和 RN 的长度为 32bit 这里 SN 和 RN 不是分组的编号, 而是对数据字节进行编号 SN 表示所传输的分组数据是从当前 Session 中第 SN 个字节开始的一段数据 RN 表示希望接收到的分组的第一个字节应为当前 Session 中第 RN 个字节 如果当前的 SN=m, 数据长度为 n, 则下一分组中的 SN=m+n
TCP 中的差错控制 重传问题 如何确定重传的间隔 (time-out) 连接建立和拆除时错误 初始化问题
TCP 中的差错控制 由于 TCP 报文可能会经过不同类型不同速率的网络, 因而传输时延的方差很大 如果重发间隔过小, 则会导致很多报文过早的重发, 给网络增加了不应有的负荷 若重发间隔过大, 则网络的传输效率会降低很多 TCP 中采用了一种自适应算法来确定重发间隔
TCP 中的差错控制 往返时延指报文发送时刻到发端接收到相应应答的时刻之间的时延 T = α T + ( 1 α) T old new 平均往返时延 旧的往返时延 新测得的往返时延 重发间隔 = β T β = 2 新旧往返时延对平均往返时延 T 的影响程度 它必须在传输效率和增加 的网络负荷之间取得平衡
TCP 中的差错控制 第一次发送的分组和重发的分组未加任何区分, 收端发出的应答也是未加区分的 当发端发出重发组分组后, 由于网络的随机时延, 它将无法确定所收到的应答是对哪一次发送的分组 ( 第一次还是重发过程的某一分组 ) 这样导致往返时延的不确定性 若分组已进行重发, 就不再计算平均往返时延 即仅计算一次发送成功并收到应答的报文平均往返时延, 并以此来计算重发间隔 每重发一次就将重发间隔增加一次, 即 : 重发间隔 = γ 旧的重发间隔 在系统中,γ 的典型值为 2
TCP 中的差错控制 在连接建立和拆除过程中, 可能会出现如下一些情况 : 第一次连接拆除后仍有分组到达, 这就可能导致在第二次连接建立后, 会有第一次连接的分组到达 建立连接的分组和拆除连接的分组可能混淆 当网络一个节点出现故障, 无法跟踪某一连接时, 而该连接仍存在于另一节点中, 这也将导致混淆 In TCP, the major mechanism used to deal with the initiation and disconnection of sessions is the synchronization of the sequence number and request number at the initiation of a session.
TCP 中的差错控制 源节点和目的节点都有一个 32bit 的时钟计数器, 每 4us 增加一次 ( 节点 间的时钟计数器不同步 ) 建立连接时, 发端以本地的时钟计数器的值作为初始阶段的第一命令分组的序号 (SN) 收端在响应该指令时, 对发端的序号进行响应, 即将 B 节点 RN 置为 SN 发给对方 (A 节点 ) B 采用的初始化 SN 为其本地的时钟计数值,B 在收到对方 (A 节点 ) 的应答前, 不能传送数据 采用这种随机地选择序号的方法, 可以避免新旧连接的序号混淆 32bit 的计数器循环一圈大约需 4.6 小时
TCP 的流量控制 流量控制需要考虑两方面的问题 : 一是接收者的缓冲区容量大小, 二是网络的容量及通过量 假定网络的容量和通过量较大而接收者的缓冲区相对较小, 这时如果发端发送的业务量较大, 就会导致接收缓冲区溢出而引起报文丢失 收
TCP 的流量控制 如果网络已经发生拥塞, 通过量已很低, 这时如果发端仍保持较高的发送速率, 就会进一步加剧网络的拥塞, 降低通过量, 从而导致发端的报文丢失 收
TCP 的流量控制 为了解决接收者缓冲区溢出问题, 在 TCP 中采用了窗口允许机制 TCP 报文格式中, 采用了 16bit 的窗口域 ( 该窗口称为通知窗口 (Advertised Window), 它用来通知发端在未收到应答以前可以发送的最多字节数, 即发端可以发送序号从 RN 到 (RN+ 通知窗口值 -1) 之间的数据字节
TCP 的流量控制 在网络传输过程中, 有两种原因可能导致分组丢弃 : 一是传输出错导致分组被丢弃, 二是因为网络拥塞引起的分组丢弃 由于发端很难区分这两种情况, 所以 Internet 中的 TCP 协议假定分组丢弃都是由于网络拥塞引起的 分组的丢弃将导致发端超时重发
TCP 的流量控制 为了解决接收者缓冲区溢出问题, 在 TCP 中采用了窗口允许机制 采用了 16bit 的窗口域 ( 该窗口称为通知窗口 (Advertised Window), 它用来通知发端在未收到应答以前可以发送的最多字节数, 即发端可以发送序号从 RN 到 RN 加窗口值之间的数据字节 为了控制网络的拥塞, 在 TCP 中还引入了第二控制窗口 拥塞窗口 ( 即发端一次可发送的字节数 ) 拥塞窗口长度是根据网络的拥塞情况 动态调整的 发端真正使用的窗口 ( 称为发送窗口 ) 长度等于通知窗口和拥塞窗口 的最小值, 即发送窗口长度 =min( 通知窗口长度, 拥塞窗口长度 )
TCP 的流量控制 在 TCP 中采用了慢启动 (slow-start) 拥塞避免(congestion avoidance) 和加速递减等技术来进行拥塞控制 发端每传送一次 ( 即发端将发送窗口中的报文段全部发完, 并且收到了对该报文段的所有确认 ) 调整一次发送窗口 为了实现控制过程, 在 TCP 中引入了一个门限窗口 当拥塞窗口大于门限窗口时, 发端要减缓发送速度, 以避免网络拥塞
TCP 的流量控制 拥塞避免 慢启动 设初始状态是通知窗口长度为 64kB( 千字节 ), 门限窗口长度为 64kB, 拥塞窗口长度为 64 kb 假定初始时就发生了传输超时, 算法将第 0 次传输时拥塞窗口调整为 1 kb( 最大的分段长度 ), 门限窗口长度减少到传输超时前拥塞窗口的一半为 32 kb 第 0 次传输后, 每传送一次, 拥塞窗口长度增加一倍 ( 即按指数增加窗口长度 ), 当拥塞窗口长度等于门限窗口长度 ( 第 5 次 ) 后, 每传送一次, 窗口仅线性增加一个最大的分段长度
TCP 的流量控制 拥塞避免 如果再次发生超时 ( 第 13 次传输 )( 拥塞 ), 则下次传输时将门限窗口长度减少到拥塞时 ( 第 13 次 ) 窗口的一半即为 20 kb, 并将拥塞窗口长度调整为 1 kb, 如图 2-34 所示 慢启动 加速递减
TCP 的流量控制 Congestion window (segments) 25 20 15 10 5 0 0 3 After timeout cwnd = 20 ssthresh = 8 ssthresh = 10 6 9 12 15 20 22 25 Time (round trips)
TCP 的流量控制 采用上述流量控制方法使得 TCP 的性能明显改善 但是当 TCP 用于无线信道时, 由于经常会因传输错误而导致发端超时, 这时如果仍采用上述流控方法, 将会引起 TCP 的传输效率下降, 此时需要对 TCP 进行适当的改进
本章小结 本章解决的基本问题是 : 将不可靠的比特管道或一条不可靠的通路 ( 多条链路 ) 变成一条可靠的链路或通路 如何保证在各种异常情况下, 收发双方协同工作 如何进行流量控制
本章小结 数据链路层的点对点传输协议 组帧 检错 各种 ARQ 协议的工作原理与性能分析 标准的 DLC 协议及初始化过程 HDLC 协议的正常响应模式的工作过程 网络层的端对端传输协议 传输层的端对端传输协议 TCP 的流量及差错控制
习题 :2.20 2.21 2.23 2.24 2.25