突然有个疑问。
如果多个并发线程下载资源(当然不考虑极限情况,我们当做只有 50 线程并发吧),那么这个时候,不同线程之间会不会影响彼此的带宽,甚至导致新的 socket 建立失败。
直觉告诉我是不会相互影响的,不同 TCP 连接,接收端都会给服务器端一个接收窗口大小(滑动窗口协议),只是这个接收窗口大小是怎么定义的呢?是不是整个机器的接收窗口大小,要平均分摊给当前连接中的所有 TCP 连接。
感觉自己的这个猜测是对的,但是暂时找不到资料论证
1
linyinma 2018-07-13 17:34:54 +08:00
神逻辑,你将协议 与 内核协议栈实现混这说,你的描述说错也没错,但就是不是那么回事,比如你说整个机器接受窗口,是否是平群分配.... 首先网卡接收到的数据存放到内核缓冲区内(的却也只有一个),然后内核缓冲区存放的数据根据 TCP 信息将数据移动到具体的某一个 TCP 连接上的接收缓冲区内,也就是接收滑动窗口内, 滑动窗口也不可能向你说的什么平均分配,socket 频繁的创建,按照你的思路内核一直在做平群工作...
而窗口大小是由内核决定也可以修改比如:net.ipv4.tcp_rmem:这个参数定义了 TCP 接收缓冲(用于 TCP 接收滑动窗口)的最小值、默认值、最大值 |