TCP与BBR

可靠传输

可靠传输基于滑动窗口
存在两个窗口,容许发送窗口和容许接收窗口,
接收窗口当且仅当前缀彻底收到才能右移
发送窗口须要发送且收到确认才能右移(右端点不必定会移动,这取决于窗口值)算法

当确认丢失时须要采用超时重传的机制缓存

超时重传的时机依靠RTT
RTTs样本计算:\(RTTs=(1-α)RTTs+αRTT\)
超市计数器时间RTO计算:\(RTO=RTTs+4RTT_D\)
其中误差值\(RTT_D=3/4RTT_D+1/4|RTTs-RTT|\)网络

流量控制

流量控制基于rwnd并发

注意rwnd的值仅在ACK=1的状况下生效
当rwnd=0时接收方(指接收rwnd值的一方,平时是做为发送方)须要等待发送方一个新的窗口值才会继续发送流量优化

一种状况:B发送rwnd为0后,发现内部存在缓存可用,从新发送窗口值后丢失了,产生死锁spa

解决方法:持续计数器,当且仅当rwnd=0时启动,到期则发送1B大小的零窗口探测报文(接收rwnd一方发出),若得出值为0则维持现状,reset计数器,不然解除死锁队列

TCP传输的时机有ip

  • 到达MSS
  • push
  • TCP内部有缓存且到达计数时间

解决小报文段的捎带传输的实现:ci

Naggle算法:
1.发送第一个数据字节,后面的进行缓存
2.收到该字节的确认后,把缓存全部字节发送出去,随后到达的继续缓存
3.收到前面的确认后再以此类推路由

此时可改良网络速率慢而数据到达速率快的状况,而且能捎带传输(先缓存下来而不是急于发送)

拥塞控制

发送发维护拥塞窗口cwnd,且让发送窗口值等于cwnd

判断拥塞依据:路由器的分组丢弃致使的超时

  • 慢开始
    避免开始把大量数据注入网络,cwnd设置为2-4个SMSS
    且每次cwnd增长量=MIN(N,SMSS),N为刚确认的字节数
    一个轮次须要一次RTT时间,每次都会把cwnd翻倍
    细节:并非RTT事后直接倍增,是收到一个确认马上增长对应的大小,详看页尾注释
  • 拥塞避免
    1.慢开始过程具备门限ssthreash,一旦cwnd超过该门限则进入拥塞避免算法,进行线性递增,使网络不易拥塞
    2.当出现超时(认为拥塞)时,ssthresh折半且cwnd=1,回到慢开始环节
  • 快重传
    为了尽早让发送方得知个别报文丢失而不是误判为拥塞,接收方不使用捎带确认的缓存算法,而是当即发送确认(失序也要)
    好比2 4 5 收到,认为3丢了,会发送2的确认,此时2的两次确认(4没确认)表示3丢了,日后5也会发送2的重复确认,当ACK达到3时发送方确信是丢失了而马上重发(3-ACK)
  • 快恢复
    当得知只是部分丢失时,发送发直接把ssthread=cwnd/2且cwnd=ssthread,直接进入拥塞避免过程

四个阶段的优化

1.慢启动过程对高RTT不友好,能够把cwnd适当加大
2.避免超时重传可采用受限传输机制:发送方至少接收到一个重复ACK才传输新的数据报文段
(公平队列。。。)

BBR原理

组成

  • 即时带宽
  • RTT跟踪
  • pipe状态机
  • pacing rate和cwnd

BW计算

\(BW=delivered/interval_us\)
其中delivered是应答数据的个数,interval_us是应答所用的时间

其中应答部分不区分是正常发送仍是重传

pacing rate和cwnd计算

\(pr=G \cdot BW\)\(G\)为增益系数

BBR中RTT只论曾经到达的最佳RTT,而不会加权平均(目标是再次令RTT最小)

此时\(cwnd = G' \dcot BDP\)
其中BDP为带宽和时延的乘积

G和G'由BBR状态机给出

状态机

每一次ACK都会计算BW,且把结果反馈给pipe状态机,从而获得G和G'
注意状态机的多种状态是具备必定针对性的,这里不展开

补充说明

传统TCP中输出只有cwnd,而BBR还多输出了一个pacing rate,用于控制cwnd的发送状况,前者会在cwnd富裕的状况下一并发出,然后者是根据pacing rate表示窗口内的数据包以多久的时间间隔发送,减小RTT抖动的可能性

补充补充说明

计网博大精深,虽然只挑了很小的方面去了解,但目前写的这些都是十分粗略的,各位过客请别嫌弃。。

相关文章
相关标签/搜索