第十讲:传输协议性能分析和优化
基础回顾
TCP:端到端,发送端驱动,目标是可靠、公平、高效,拥塞控制是影响TCP性能的核心,采用reactive(响应)模式,发生拥塞后再调整
端到端
连接状态保存在两端,中间路由不保存任何连接信息(有的middlebox会保存)
发送端驱动
通过发送窗口大小控制速率
可靠传输
通过ACK,SACK显式告知是否受到,如果在一段时间里(RTO,超时重传)没有收到ACK,就重发, R T O = S R T T + m a x ( 200 m s ; 4 R T T V A R ) RTO=SRTT+max(200ms;4RTTVAR) RTO=SRTT+max(200ms;4RTTVAR),RTO一般远大于RTT,等RTO会极大影响流完成时间
兼顾高效和公平
理想发送速率=swnd/RTT
公平是指两条相同的连接具有相同的发送速率
拥塞控制
加性增乘性减,初始窗口大小设置为10MSS~10pkts性能比较好,采用慢启动指数增长,直到达到某个ssthresh,慢启动并不慢,是因为初始窗口太小才说它慢
整个过程:慢启动阶段,每收到一个ACK窗口大小+1;达到ssthresh后进入拥塞避免状态,每收到一个ACK窗口大小+1/cwnd,直到有丢包,ssthresh设置为当前cwnd的一半,cwnd置1,重新慢启动
慢启动的瓶颈:**瓶颈1:**使用RTO判断丢包,等待时间长;**瓶颈2:**从1MSS开始太慢
解决1:丢包判断改为3个重复ACK(意味着包可能丢了,也可能乱序到达),触发快速重传。注意如果发的包比较少(比如拥塞窗口比较小),就比较难触发快速重传
一个对比
TCP协议 | 达到的功能 |
---|---|
TCP Tahoe | 慢启动,拥塞避免,快速重传,超时cwnd=1 |
TCP Reno | 慢启动,拥塞避免,快速重传,快速恢复,超时cwnd=1,重复ACK时cwnd减半 |
TCP NewReno | TCP Reno+快速恢复改进 |
TCP cubic | ~ |
TCP Tahoe
慢启动,拥塞避免,快速重传,超时cwnd=1
TCP Reno
慢启动,拥塞避免,快速重传,快速恢复,超时cwnd=1,重复ACK时cwnd减半
比Tahoe添加了快速恢复和重复ACK时cwnd减半
快速恢复阶段:缓解瓶颈2,如果收到重复ACK,说明接收端还在收数据,链路质量还没那么差,那就不需要回退到slow start
快速恢复阶段使用了一个小trick:cwnd的膨胀,也就是收到重复ACK时cwnd继续膨胀以发送更多数据包,当收到新ACK的时候,cwnd回落到进入快速恢复阶段时的cwnd大小
TCP NewReno
TCP Reno+快速恢复改进
收到的ACK并没有把快速恢复阶段发的包全部ACK,说明在一个窗口中有多个丢包。引入部分ACK,当收到部分ACK时立即重传丢失的包,并设置当前接收到的重复ACK包数目为0,停留在快速恢复阶段,直到进入快速恢复阶段发的所有包都被ACK
SACK:接收方告诉发送方哪些报文丢失,哪些报文重传,哪些报文提前收到
初始窗口cwnd:可能会限制效率,短流会在慢启动阶段结束,不能充分利用带宽;outstanding包少的时候触发不了快速重传,因为收集不齐3个ACK
发送速率也不止收到cwnd限制,接收窗口也是
超时重传带来的问题
RTO远大于RTT,在RTO时间内不能传输数据;超时重传会进入慢启动状态;对于短流影响很大(更可能收集不齐3个重复ACK,触发不4了快速重传;短流持续时间短,任何长时间停顿都会极大增加流完成时间)
尽量使用快速重传而不是超时重传
不能直接减小RTO,会造成不必要的重传和窗口减小太多
代表性TCP优化:TLP(tail loss probe)
尾部的包更容易丢,也更难触发快速重传(它后头都没包了,更没有重复ACK)
在具体实现中,公共网络通过提前重发尾包触发快速重发(响应式),私有网络中通过发送包副本避免重传(主动式)
**响应式:**2个RTT后重发新包或尾部包,可以通过SACK发现丢包,加快丢包检测
**主动式:**通过发送包副本避免重传(每个包都发俩),直接从根源上避免丢包检测和恢复
代表性TCP优化:SRTO(smart-RTO)
比TLP更激进的数据包恢复
和原始TCP处理流程的关系是:
小结
在Reno基于丢包的拥塞控制框架下,长流提升空间不大,短流会有很大提升空间;且短流多为交互式流,对延迟敏感
TCP cubic
动机:标准TCP在高带宽、高RTT网络下的带宽利用率不足,且对高RTT流不友好;cubic实现了在不依赖RTT调整窗口的同时保证公平性
算法
每收到ACK, c w n d = C × ( t − K ) 3 + W m a x cwnd=C×(t-K)^3+W_{max} cwnd=C×(t−K)3+Wmax, C C C是个常数, t t t表示当前距离上一次降低拥塞窗口的时间间隔, W m a x W_max Wmax表示上一次降低窗口前的拥塞窗口大小, K K K是参数,在上一次丢包时更新
重新审视TCP
控制系统以丢包为反馈?
收一个ACK,发一个数据包,端到端控制,网络丢包通过ACK来体现
是基于"丢包即拥塞"假设,但在无线网络内不一定成立
是被动响应模式,发生了拥塞再控制
其他拥塞信号?RTT变化
当网络拥塞时,网络内瓶颈设备的buffer逐渐填满,RTT增大
控制信号ECN?
网络设备显式告知网络拥塞,需要路由器配合,在DCN中使用比较广泛
BBR
基本理念是:尽量估算RTT和bottleneck这两个参数,从而
非TCP传输控制协议:QUIC
基于UDP:Quick UDP Internet Connections,是基于UDP的可靠传输,永远是加密的,在应用层实现