不同阶段的数据发送速度曲线
慢启动阶段cwnd指数变化,曲线对应y=2的x次方(x代表发送方发送次数)
拥塞避免阶段cwnd线性变化,曲线对应y=2的ssthresh次方+x,(x代表拥塞阶段的发送次数)
超时未确认时
慢启动阶段的超时未确认 ssthresh=cwnd/2,cwnd=1,进入慢启动,此时慢开始门限ssthresh的值降低为cwnd的一半,是一个小于8的值
拥塞避免阶段的超时未确认 ssthresh=cwnd/2,cwnd=1,进入慢启动,此时慢开始门限ssthresh的值降低为cwnd的一半,是一个大于8的值,猜测应该是小于16的值
重复确认时
慢启动阶段的重复确认3次及以上 ssthresh=cwnd/2,cwnd/=2,相当于直接从慢启动转向拥塞避免的曲线上,同时唤起快重传、快恢复、拥塞避免算法,此后执行拥塞避免算法,cwnd++
拥塞避免阶段的重复确认3次及以上 ssthresh=cwnd/2,cwnd/=2 ,相当于直接从慢启动转向拥塞避免的曲线上,同时唤起快重传、快恢复、拥塞避免算法,执行拥塞避免算法,cwnd++
各种算法机制的解释
超时算法:超时后,隔一定时间后进行重传(具体重传时间间隔待定)
快重传算法:丢包时唤起
快恢复算法:丢包时唤起,防止继续丢包,通过调整当前阶段变化为拥塞避免阶段和cwnd值减小一半来实现
以下来自CSDN的deoxyribonucleicacid:
原文链接:https://blog.csdn.net/qq_39937902/article/details/82495527
TCP选项:
MSS(maximum segment size)最大报文传输段(数据报不分片的最大值):32bit数据部分字段(不包括TCP头).
应用层往TCP层写数据时,若TCP发送缓冲区满,但还没write完,内核便将write系统调用挂起;TCP发送缓冲区满或网络空闲时,缓冲区数据便被通过ip层发送到链路层发送队列中;发送缓冲区数据成功发送(包括重传等情况)后,才唤醒write.而ip分片会导致TCP重传可能性增大,此时ip层再分片,将可能导致write一直挂起,性能下降.
SACK(selective acknowledgements)选择确认选项.34bytes
目的是为了不重传已经正确到达的数据.eg:A发送1,2,3,4,5数据,B接收到1,3,5,而2,4丢失.不启动SACK,A从2开始重传;启动SACK,A只重传2,4.
tcp首部options最多40bytes,而指明一个序列号边界需4bytes,一个报文需要2个边界:如2丢失,需要1,3序列号指明.故需要8bytes.因此最多指明4个丢失报文.(因为还需要2个功能字节,故40/8-1=4).这个选项大小是34bytes.
时间戳选项(timestamps).10bytes.
1,用来计算往返时间RTT.发送方在放松报文前放入当前时间,接收方只需在应答时复制该时间戳即可,以便发送方计算RTT.
2,PAWS防止回绕的序号:众所周知,32bit序列号在数据超过2^32便会重复.在高速网络(如1Gb/s),则几秒便会重复,从而可能