计算机网络协议分析 第13课 TCP第二部分
第7章 TCP
7.3 TCP的流量控制
- 流量控制:发送方根据接收方给定的“窗口尺寸”,来调整发出报文段的大小
- 全双工:通信双方都有发送缓存和接收缓存,建立连接后,双方可同时发送数据和接收数据
发送缓存
发送缓存包含:
- 发送方TCP准备发送的数据
- 已发送出去,但尚未收到确认的数据
接收缓存
接收缓存包含:
- 按序到达的、已确认但尚未被应用程序提取的数据
- 可能失序到达的数据
根据下图梳理TCP数据传输过程
问:如果上图中的第8个报文丢失会造成什么现象?怎么解决?
答:因为发送方收到第7个报文后不能发送数据,要一直等待第8个报文的到来才开始送数据。而接收方发出第8个报文后一直在等待数据的到来,却迟迟收不到,形成了死锁现象。
发送方过一定时间未收到第8个报文,会发送一个探测报文出去,探测一下现在接收方的窗口值。
接收方送出第8个报文后,过一段时间未收到数据,会重传该报文(有一种特殊情况就是如果发送方已经没有数据发送了,这时接收方一直收不到数据)。
这里的计时器叫做坚持计时器:
- 发送方TCP为每一个连接设置一个坚持计时器
- 当发送方收到接收方的零窗口通告报文,就停止发送数据,并启动坚持计时器
- 当计时器到期,发送一个零窗口探测报文段(仅携带1字节数据),接收方在确认时给出了当前窗口值
- 若窗口不是零,死锁打开
- 若窗口仍然是零,发送方重置计时器。
- 计时器最开始的时间是RTO重传时间,重置后翻倍,直至到60s后不再翻倍,直到收到非零窗口通告或连接被终止
7.4 TCP的差错控制
传输出错:检验和,丢失,不确认,超时重传
丢失:超时重传
乱序:缓存失序报文段,立即确认
重复:丢弃,立即确认
捎带确认
累积确认
- 接收方在确认seq=100报文之前,收到seq=300报文段,则发回ack=500的确认。
- 收到两个连续报文段立即发送确认,或者等待500ms后发送确认
有丢失的累积确认
当seq=300的报文段丢失,只能确认第一个报文段
有重复的累积确认
选择确认
对失序报文段的单独确认
每个不连续的字节块有两个边界:左边界L和右边界R
TCP选择确认是可选项,在建立TCP连接时协商SACK选项
7.5 TCP的计时器
1 超时重传计时器
作用:解决报文段丢失问题
是个变化值,TCP发送方每发送一个报文段,启动超时重传计时器,到期未收到确认,重传
2 坚持计时器
作用:解决死锁等待问题
3 时间等待计时器
作用:解决因最后一个挥手报文段丢失而使TCP连接释放失败的问题
2MSL,一般1个MSL设为2分钟
4 保活计时器
作用:防止TCP连接处于长时间的空闲
- 每当服务器收到客户的数据,就启动保活计时器
- 到期没收到客户数据,就发送一个探测报文,连续(间隔75秒)探测10次后关闭这个连接
7.6 TCP首部选项
选项结束选项
1字节,用作选项区结束时的填充
只能用作最后一个选项,只能使用一次
无操作选项
1字节,用作选项和选项之间的填充符
MSS选项
指TCP报文段中数据部分的最大长度
在建立连接极端由双方协商,在连接期间保持不变
窗口扩大选项
窗口尺寸:取值范围0~65535,在高速网络中可能不够用,受到MTU影响
窗口扩大因子:在连接建立阶段确定,在连接期间保持不变
新的窗口大小 = 窗口尺寸 * 2^扩大因子
时间戳选项
作用:测量往返时间RTT;防止序号绕回
允许SACK选项和SACK选项
- 允许SACK选项:在建立连接阶段由双方协商
- SACK选项:用于数据传输阶段
- 最多8个数据块
例子:
7.7 TCP的拥塞控制
- TCP发送方维持一个拥塞窗口cwnd,根据网络的拥塞情况调整拥塞窗口的大小
- TCP发送方判断网络拥塞的依据是重传计时器超时
- 发送窗口 = MIN (接收方窗口,拥塞窗口)
TCP拥塞控制算法
慢开始
初始swnd=1个MSS,发送方每收到一个ACK,cwnd加1
快重传与快恢复
当发送方收到连续三个重复的确认时,执行快恢复算法:
- 慢开始门限ssthresh = 当前拥塞窗口 cwnd /2
- 新cwnd = 当前ssthresh
- 执行拥塞避免算法
拥塞控制策略
若因重传计时器超时,则:
- 把门限值ssthresh设置为当前发送窗口值的一半
- 把拥塞窗口cwnd重置为1
- 再次进行慢开始阶段
若因受到连续3个重复ACK时,则:
- 把门限值ssthresh设置为当前发送窗口值的一半
- 把拥塞窗口cwnd设置为新的ssthresh值
- 进入拥塞避免阶段
7.8 TCP攻击
慢速拒绝服务LDoS
- 周期性地突发短时高强度攻击数据流,导致正常TCP流大量丢包,使得拥塞控制机制被迫转入满开始
- 进入慢开始,停止攻击
- 当TCP流恢复至即将正常是,下一个LDoS攻击周期开始,导致下一轮拥塞控制
- 如此反复,使TCP流反复进入“拥塞避免”和“拥塞恢复”状态,导致TCP流的吞吐量大大下降
LDoS攻击的三个参数
**T:攻击周期。**基于重传超时(RTO)设定T的值。若保持每轮T=RTO,则网络会一直:拥塞控制–>恢复–>再拥塞
**t:攻击时间。**一个周期内只会存在短时间的高强度攻击流,大部分时间保持静默
**R:攻击速率。**必须大于瓶颈带宽,否则网络不会因攻击流而拥塞
缺一道例题,下次补充
上一课:第12课 TCP第一部分
下一课:第14课 SCTP