为什么udp有包长,而tcp没有包长。
首先,send()发送一次发送1k,发送一次缓冲区满了就会返回-1。2k发送出去后缓冲区被清空,send()才会被再次调用。最大传输片会打印四个包发送。而最大传输单元是在数据链路层对网卡的一些限制,如果mss大于mtu时候就会被分割,而mss小于mtu时候就会直接发送。所以udp需要包长,而tcp不需要因为mss+tcp包头就可以完成不需要包长。具体点说,就是帧需要,加上512,可以将包长进行计算出,这里不做重复的事减轻了很多后续工作。
-
发送1m的文件
-
sendbuf 2k
-
mss(最大传输片)=512,mss是在包头的option中设置的。
-
mtu(最大传输单元)=1500
协议头分析
-
ACK表示确认
-
PSH表示应用程序发来数据赶紧处理呀宝贝
-
RST表示告诉对端你的数据不合法,重置
-
SYN表示同步头
-
FIN表示古德拜啦~断开前兆
慢启动的问题
![](https://i-blog.csdnimg.cn/blog_migrate/00761c75926f5e70dd565eb21f050bf1.png)
对数增长慢启动后,线性增拥塞控制,最后是要快速重传。
进入弱网环境,rtt(数据包往返)出现很长时间,这就叫抖动。