一句话总结:由于应用协议的原因可能会导致tcp窗口大小过小致使接收速率变慢,或由于系统的原因导致tcp可变窗口大小不可用,导致窗口大小始终不变(大概率不超过65536b也就是64kb)导致网络速率不理想。
众所周知,我们最近的网络速率越来越快了,但是在高速的上网体验中,总会遇到某些网站加载很慢或下载速度很慢(其实差不多是一回事,只是加载可能要考虑客户端浏览器的渲染速度罢了)。
在计算机网络的学习中,我对网络延迟和网络丢包率以及应用协议对网络速率之间的关系进行了一下学习(虽然学的并不怎么样就是了)。首先是网络延迟对速率的影响
假如网络延迟为10ms,显然这个延迟并不是很高,至少你打fps之类的游戏,大概……差不多……怕是?没有什么明显的感知吧(主要是我吧,不太喜欢打游戏,搞黄色倒是有一套[1](这句划掉,对了,知乎可以打划线)),话说回来继续说延迟的问题,
假如延迟10ms,tcp窗口大小64kb,无丢包,tcp三次握手已协商窗口大小均为64kb,网络无明显波动(但是吧,什么叫明显波动呢?),计算一下,1秒能传输的总大小为((1000[2]/10)*64kb)/1024等于6.4m/s,这个速度大约是50Mbps的宽带速率,这个速度我记得在16年还是算比较快得,我记得我才进移动的时候,我处理的第一条宽带就是98元包50M宽带,当时移动还是sfu的接入,要路由器拨号的,光猫只负责光电转换,当时我第一次接触到pppoe协议,还闹出了一些笑话。
但是在2021年的年初,我个人认为50M比不快,所以我想了一下,ping了一下百度看看延迟(呵,百度,工具人,不过话说回来,百度本来就是工具啊)。
延迟为41ms,计算一下,速率大约是1.5M/s,看上去很糟糕,于是tcp可变窗口大小的意义就显现出来了,如果tcp窗口大小很大会怎么样呢?
还是文字看起来舒服一点点蛤。
窗口倍数=大小 8212b*256=2102272b约等于2053kb,相当于一个单次的tcp最大可以传输2053kb,当然由于mss最大分段大小的原因单次tcp传输只能传输1461b的数据,但是2053kb可以切割成若干过tcp数据传给对方
由于那个2102272找不到了,用这个代替一下吧,顺便提一下,丢包率有点高。
于是通过协商cp窗口大小就可以高效的传输数据了,需要注意我声明的tcp窗口大小是指你可以给我的数据,对方声明的窗口大小是我可以给他的数据,在此,想深入学习的可以看看这篇文章
小林coding:面试官:换人!他连 TCP 这几个参数都不懂
总结:由于tcp窗口大小是系统决定的,所以在使用某些协议(例如我的安卓手机走smb,窗口大小就只有16384b,所以速度比较慢),这个时候可以考虑换一种协议,毕竟安卓的配置不太好更改。
made by qwe
参考
^后来我发现并不能打划线
^1000ms等于1秒,我说的