系列文章目录
什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
Cookie技术
Web缓存/代理服务器技术
传输层服务概述、传输层 vs. 网络层
传输层——多路复用和多路分用
传输层——UDP简介
传输层——可靠数据传输原理之Rdt协议
传输层——可靠数据传输之流水线机制与滑动窗口协议
传输层——TCP特点与段结构
- 系列文章目录
- TCP的可靠数据传输
- RTT和超时
- TCP发送方要处理的事件
- TCP接收方如何生成ACK
- 快速重传机制
- TCP流量控制机制
TCP的可靠数据传输
前面学习了可靠数据传输的原理,而TCP是要提供可靠数据传输服务的,那我们下面来看下TCP运用了哪些前面学过的原理、TCP的可靠数据传输是怎样实现的。
概括地来看:
- TCP 在IP层提供的不可靠服务基础上实现可靠数据传输服务
- 使用流水线机制,以便提高性能
- 使用累积确认
- 使用单一重传定时器
- 触发重传的事件有:超时、收到重复ACK
我们在这里暂时不考虑重复ACK、拥塞控制、流量控制对可靠数据传输带来的影响。所以并不完整。
RTT和超时
要想处理丢失,就要设置定时器的超时时间,那这个时间多少是合理的?
我们有个重要的参考指标可以利用,那就是RTT,首先是要大于RTT。但是RTT是变化的,若超时时间过短可能造成不必要的重传, 若过长则可能对段丢失时间反应慢。
那首先要计算/估计RTT:使用SampleRTT测量对段丢失时间反应慢从段发出去 到收到ACK的时间。在这个过程中要忽略重传。为了更准确,我们测量多个SampleRTT,求平均值 ,形成RTT的估计值EstimatedRTT。使用一种指数加权移动平均的方法。阿尔法的典型值是0.125。
定时器超时时间的设置:EstimatedRTT + “安全边界“。若EstimatedRTT变化大,那就要加一个较大的边界。那我们继续测量RTT的变化值:,计算SampleRTT 与EstimatedRTT的差值,然后得到DevRTT。
然后就可以设置定时器超时时间:
TCP发送方要处理的事件
-
从应用层收到数据
- 创建Segment,序列号是Segment第一个字节 的编号
- 开启计时器,设置超时时间TimeOutInterval
-
如果超时
- 重传引起超时的那一个Segment(这一点和SR一样)
- 重启定时器
-
收到ACK
- 如果确认此前未确认的Segment,就滑动窗口,更新SendBase。如果窗口中还有未被确认的分组,重新启动定时器
上面的过程写成伪代码如下:
TCP接收方如何生成ACK
快速重传机制
TCP的实现中,如果发生超时,超时时间间隔将重新设置,也就是将超时时间间隔加倍,导致其很大。
可以通过重复ACK检测分组丢失。如果发送方收到对同一数据的 3 个ACK,则假定该数据之后 的段已经丢失,那就要执行快速重传机制,即在定时器超时之前就重传。
TCP流量控制机制
接收方会为TCP连接分配buffer。如果发送方传输的数据过快或过多的话,可能导致buffer溢出,这时可能会淹没接收方。所以流量控制的基本思想是发送方不会传输的太多 、太快以至于淹没接收方(buffer溢出)。
所以本质上流量控制机制就是速度匹配机制。
大概实现是这样的:
- 接收方在段的头部字段将RcvWindow告诉接收方,告诉接收方自己还能接收多少字节的数据。发送方就会限制自己已经发 送的但还未收到ACK 的 数据不超过接收方的空闲RcvWindow尺寸。
那如果Receiver告知Sender RcvWindow=0,那么发送方就不再发了,那如果接收方又可以接收数据的话,发送方也还是不知道可以发送数据,这就可能导致死锁。所以要增加一个额外的处理,即使是RcvWindow=0的情况下,发送方仍然可以发送一个很小的段,从而从接收方带回来一个新的RcvWindow信息,避免发生死锁。