可靠传输基于滑动窗口
存在两个窗口,容许发送窗口和容许接收窗口,
接收窗口当且仅当前缀彻底收到才能右移
发送窗口须要发送且收到确认才能右移(右端点不必定会移动,这取决于窗口值)算法
当确认丢失时须要采用超时重传的机制缓存
超时重传的时机依靠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
解决小报文段的捎带传输的实现:ci
Naggle算法:
1.发送第一个数据字节,后面的进行缓存
2.收到该字节的确认后,把缓存全部字节发送出去,随后到达的继续缓存
3.收到前面的确认后再以此类推路由
此时可改良网络速率慢而数据到达速率快的状况,而且能捎带传输(先缓存下来而不是急于发送)
发送发维护拥塞窗口cwnd,且让发送窗口值等于cwnd
判断拥塞依据:路由器的分组丢弃致使的超时
1.慢启动过程对高RTT不友好,能够把cwnd适当加大
2.避免超时重传可采用受限传输机制:发送方至少接收到一个重复ACK才传输新的数据报文段
(公平队列。。。)
\(BW=delivered/interval_us\)
其中delivered是应答数据的个数,interval_us是应答所用的时间
其中应答部分不区分是正常发送仍是重传
\(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抖动的可能性
计网博大精深,虽然只挑了很小的方面去了解,但目前写的这些都是十分粗略的,各位过客请别嫌弃。。