知识点
1 重传策略包含大量算法
2 累计确认 or 累计应答 , 一个ACK确认多个包
3 窗口划分 : 发送已确认 , 发送未确认 , 未发送可发送 , 未发送不可发送
4 接收方会告知发送方窗口大小 , Advertised Window = 上面第二部分+第三部分
5 接收端窗口划分 : 接收已确认 , 未接受但可以接收的部分 , 不能接收的部分
6 第二部分 = MacRcvBuffer 没被占用的部分
7 这里暂时不打算深入去了解
8 一个乱序和丢包的案例
9 超时重发机制 , 时间必须大于RTT
10 什么是RTT 一个包往返的时间
11 如何估计RTT , 采样RTT , 重传时间不断变化 , 成为自适应重传算法
12 超时时间会根据重发次数加倍
13 快速重传机制
14 什么是SACK Selective Acknowledgment
image.png
15 一个流量控制窗口的变化案例
16 接收方处理太慢的时候 , 可以通过ACK包修改窗口大小 , 甚至改为0 , 让发送方暂停发送
17 上面这种情况 , 发送方会定时发送窗口探测包 , 看看能否调整窗口大小
18 什么是低能窗口综合征 , 不要空出以格就告知一格 , 而是一半的时候才告知
19 rwnd cwnd是什么 ,
20 一个控制发送速度的公式 , 没懂
21 发送方要怎么判断网络是不是满了
22 首先网络情况对TCP来说是个黑盒
23 一个类比 , 往水管里灌水
24 一个拥塞窗口的案例 , 没懂
25 将发送但未确认的大小作为拥塞窗口的大小 , 就可以盛满水管
26 这个时候调大窗口会发生什么 ? 发的多了会阻塞在中间设备的处理队列中 , 增加时延 , 提高了超时几率
27 拥塞控制主要用于避免包丢失和超时重传
28 用漏斗倒水比喻拥塞控制
29 拥塞窗口的变化方式 , 一开始会指数增长 , 到一个设定的值的时候就开始慢下来 , 每次增加1/cwnd , 变成线性增长
30 上面那张情况还是会越来越多 , 直到出现拥塞 , 这时候怎么办
31 拥塞的一种表现是丢包
32 两种减小拥塞窗口的方式 , 第一种sshresh=cwnd/2 然后cwnd直接减为1 , 速度瞬间下降
33 第二种 cwnd = cwnd/2 , sshthresh=cwnd , 比第一种缓
34 这样的拥塞控制还是有问题 , 第一个是丢包不一定代表网络满了 , 可能是信号不好丢包 , 第二个是 ?
35 TCP BBR算法 没打算深入
36 基于TCP或UDP写的程序有什么坑? 之前那个粘包?
37 字节流和包的概念 , 我的理解 , 包是UDP解析后发送给应用层的数据, 字节流是应用层自己去buffer里面读一个一个字节 ? 还是得实践才知道
网友评论