相关基础传送门:
【TCP】:一个靠谱 Man 的自白
窗口的概念:
就像队列一样,起到缓存的作用。 当双方开始建立连接时,会将各自的发送 / 接收 最大的窗口大小告知其,然后使其发送接受速率相同。
抓包图(如果看不清楚可以 按住 ctrl + 鼠标滚到的那个进行放大): 注意看 ip 地址这部分,一开始是我的 PC 向浏览器所监听的端口发送建立请求,这时你看橙色框起来的部分— 那部分双方告知自己的窗口大小,以及 WS(理解成缓存窗口) 注: 这很容易乱,收/发窗口 和拥塞窗口不是一个概念,我这里画个容易理解的图:
流量控制(避免将缓存塞满):
[ 作用] : 通信两端处理数据速度不一致问题。
(毕竟个人电脑的性能相比于服务器还是逊色一点)
问: 若当 xp 再一次 发送 rwnd=5 时的数据包,在传输时被丢弃,那双方一直会处于等待状态,都等待对方的消息,那此时 web 有啥措施可以避免这种情况发生?
简单点说,就是通信双方维持一个窗口大小,当我处理不过来时,你停下来等等我,等我处理完后,通知你继续和我通信。
拥塞控制(避免将网络塞满):
-
产生拥塞原因(A+B+…+E 的数据量大于 网线带宽最大量):
类似于高速公路的堵车,导致一个车都不能行驶。 -
作用
类比成交通警察,当发生堵车时,需要警察的指挥,才能快速恢复交通。 -
解决办法
- 慢恢复算法
也就是,第一发送一个,收到对方的 ACK,第二次发送两个,也都收到,那么继续增加… 直到出现丢包现象则控制 cwnd 为刚开始发送时的大小。
- 快重传 / 快恢复算法
原理:
算法图:
这个算法是,当出现丢包,马上控制拥塞窗口为最大时的一半。
- 慢恢复算法
================ >.< =================
小结:稳住,真的没那么难。 ============== ?。? ==========