三次握手、四次挥手、重传机制、滑动窗口、流量控制、拥塞控制、TCP/UDP全解析-蒲公英云 (dandelioncloud.cn)
性能测试-linux 系统 tcp 内核参数 - 周屿森 - 博客园 (cnblogs.com)
linux - 如何在不发送数据包的情况下确定初始TCP窗口大小? - IT工具网 (coder.work)
默认值应为65536字节。也许这就是您要寻找的:
/ proc / sys / net / core / rmem_max-最大TCP接收窗口。
/ proc / sys / net / core / wmem_max –最大TCP发送窗口。
关于linux - 如何在不
sysctl -a :查看所有可读变量
(511条消息) msl、ttl及rtt的区别 TCP控制字段标志_雷电羊的博客-CSDN博客_tcp msl 内核
1、 MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文 (segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文;
2、ip头中有一个TTL域,TTL是 time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经 过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。
(511条消息) TCP零窗口探测_redwingz的博客-CSDN博客_tcp0窗口
TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer - 走看看 (zoukankan.com)
TCP协议三次握手的优化-droplist-ChinaUnix博客
google有一帮人对TCP的建立连接时的三次握手传进行了统计,大概有2%的重传率。
并且为了这2%的重传率,对tcp协议进行了优化:将RTO时间从3秒改为了1秒。
我觉得中国的网络不比美国的好,所以,在实际中重传率应该比2%高很多。
优化之后有什么好处呢:
1) 对于3次握手有重传的情况,缩短超时时间,能够更快的完成3次连接。
2) 在一个拥塞的网络,减少了拥塞窗口值,降低拥塞的恶化。
(509条消息) TCP-带外数据(紧急数据)_不穿铠甲的穿山甲的博客-CSDN博客_带外数据
理解 TCP(二):报文结构 - 简书 (jianshu.com)
TCP系列01—概述及协议头格式 - lshs - 博客园 (cnblogs.com)
MTU:一个网络包的最大长度,以太网中一般为 1500 字节;
MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度;
窗口关闭
在前面我们都看到了,TCP 通过让接收方指明希望从发送方接收的数据大小(窗口大小)来进行流量控制。
如果窗口大小为 0 时,就会阻止发送方给接收方传递数据,直到窗口变为非 0 为止,这就是窗口关闭。
窗口关闭潜在的危险
接收方向发送方通告窗口大小时,是通过 ACK 报文来通告的。
那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,那麻烦就大了。
怎么让接收方不通告小窗口呢?
接收方通常的策略如下:
当「窗口大小」小于 min( MSS,缓存空间/2 ) ,也就是小于 MSS 与 1/2 缓存大小中的最小值时,就会向发送方通告窗口为 0,也就阻止了发送方再发数据过来。
等到接收方处理了一些数据后,窗口大小 >= MSS,或者接收方缓存空间有一半可以使用,就可以把窗口打开让发送方发送数据过来。
怎么让发送方避免发送小数据呢?
发送方通常的策略:
使用 Nagle 算法,该算法的思路是延时处理,它满足以下两个条件中的一条才可以发送数据:
要等到窗口大小 >= MSS 或是 数据大小 >= MSS
收到之前发送数据的 ack 回包
只要没满足上面条件中的一条,发送方一直在囤积数据,直到满足上面的发送条件。
另外,Nagle 算法默认是打开的,如果对于一些需要小数据包交互的场景的程序,比如,telnet 或 ssh 这样的交互性比较强的程序,则需要关闭 Nagle 算法。
TCP 拥塞控制
什么是拥塞窗口?和发送窗口有什么关系呢?
拥塞窗口 cwnd是发送方维护的一个 的状态变量,它会根据网络的拥塞程度动态变化的。
我们在前面提到过发送窗口 swnd 和接收窗口 rwnd 是约等于的关系,那么由于入了拥塞窗口的概念后,此时发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。
拥塞窗口 cwnd 变化的规则:
只要网络中没有出现拥塞,cwnd 就会增大;
但网络中出现了拥塞,cwnd 就减少;
那么怎么知道当前网络是否出现了拥塞呢?
其实只要「发送方」没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了用拥塞。
拥塞控制有哪些控制算法?
拥塞控制主要是四个算法:
慢启动
拥塞避免
拥塞发生
快速恢复
慢启动
TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量,如果一上来就发大量的数据,这不是给网络添堵吗?