计算机网络总结( 四 )


3) 确认丢失和确认迟到
确认丢失 :确认消息在传输过程丢失 。当A发送M1消息 , B收到后 , B向A发送了一个M1确认消息 , 但却在传输过程中丢失 。而A并不知道 , 在超时计时过后 , A重传M1消息 , B再次收到该消息后采取以下两点措施:1. 丢弃这个重复的M1消息 , 不向上层交付 。2. 向A发送确认消息 。(不会认为已经发送过了 , 就不再发送 。A能重传 , 就证明B的确认消息丢失) 。
确认迟到 :确认消息在传输过程中迟到 。A发送M1消息 , B收到并发送确认 。在超时时间内没有收到确认消息 , A重传M1消息 , B仍然收到并继续发送确认消息(B收到了2份M1) 。此时A收到了B第二次发送的确认消息 。接着发送其他数据 。过了一会 , A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息) 。处理如下:1. A收到重复的确认后 , 直接丢弃 。2. B收到重复的M1后 , 也直接丢弃重复的M1 。
4.1.2 连续ARQ协议
连续 ARQ 协议可提高信道利用率 。发送方维持一个发送窗口 , 凡位于发送窗口内的分组可以连续发送出去 , 而不需要等待对方确认 。接收方一般采用累计确认 , 对按序到达的最后一个分组发送确认 , 表明到这个分组为止的所有分组都已经正确收到了 。
优缺点:
优点: 信道利用率高 , 容易实现 , 即使确认丢失 , 也不必重传 。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息 。比如:发送方发送了 5条 消息 , 中间第三条丢失(3号) , 这时接收方只能对前两个发送确认 。发送方无法知道后三个分组的下落 , 而只好把后三个全部重传一次 。这也叫 Go-Back-N(回退 N) , 表示需要退回来重传已经发送过的 N 个消息 。
4.2 滑动窗口和流量控制
TCP 利用滑动窗口实现流量控制 。流量控制是为了控制发送方发送速率 , 保证接收方来得及接收 。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小 , 从而影响发送方的发送速率 。将窗口字段设置为 0 , 则发送方不能发送数据 。
4.3 拥塞控制
在某段时间 , 若对网络中某一资源的需求超过了该资源所能提供的可用部分 , 网络的性能就要变坏 。这种情况就叫拥塞 。拥塞控制就是为了防止过多的数据注入到网络中 , 这样就可以使网络中的路由器或链路不致过载 。拥塞控制所要做的都有一个前提 , 就是网络能够承受现有的网络负荷 。拥塞控制是一个全局性的过程 , 涉及到所有的主机 , 所有的路由器 , 以及与降低网络传输性能有关的所有因素 。相反 , 流量控制往往是点对点通信量的控制 , 是个端到端的问题 。流量控制所要做到的就是抑制发送端发送数据的速率 , 以便使接收端来得及接收 。
为了进行拥塞控制 , TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量 。拥塞控制窗口的大小取决于网络的拥塞程度 , 并且动态变化 。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个 。
TCP的拥塞控制采用了四种算法 , 即 慢开始 、 拥塞避免 、快重传 和 快恢复 。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM) , 以减少网络拥塞的发生 。
慢开始: 慢开始算法的思路是当主机开始发送数据时 , 如果立即把大量数据字节注入到网络 , 那么可能会引起网络阻塞 , 因为现在还不知道网络的符合情况 。经验表明 , 较好的方法是先探测一下 , 即由小到大逐渐增大发送窗口 , 也就是由小到大逐渐增大拥塞窗口数值 。cwnd初始值为1 , 每经过一个传播轮次 , cwnd加倍 。
拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大 , 即每经过一个往返时间RTT就把发送放的cwnd加1.
快重传与快恢复: 在 TCP/IP 中 , 快速重传和恢复(fast retransmit and recovery , FRR)是一种拥塞控制算法 , 它能快速恢复丢失的数据包 。没有 FRR , 如果数据包丢失了 , TCP 将会使用定时器来要求传输暂停 。在暂停的这段时间内 , 没有新的或复制的数据包被发送 。有了 FRR , 如果接收机接收到一个不按顺序的数据段 , 它会立即给发送机发送一个重复确认 。如果发送机接收到三个重复确认 , 它会假定确认件指出的数据段丢失了 , 并立即重传这些丢失的数据段 。有了 FRR , 就不会因为重传时要求的暂停被耽误 。当有单独的数据包丢失时 , 快速重传和恢复(FRR)能最有效地工作 。当有多个数据信息包在某一段很短的时间内丢失时 , 它则不能很有效地工作 。


推荐阅读