一个IP地址最多可以同时对外发起多少TCP连接

对于客户端来说,linux向外TCP最大的连接数是28232,

为什么呢?

因为它只能打开28232个端口,具体看下面!

当你写程序连接端口的时候,达到28231 - 28233左右这个连接数的时候,就会报错 cannot assign requested address

这个时候去看linux源码你会发现,其实里面就已经设定值了,源码首先判断sysctl_local_port_range这个变量,不符合条件就返回return -EADDRNOTAVAIL; 

sysctl_local_port_range[0] = 32768;
sysctl_local_port_range[1] = 61000;

可以通过这个方法改写

 echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf; sysctl -p

不过这样的话重启后就恢复原来的数据了,要想永远生效可以修改/etc/sysctl.conf文件,增加一行:

net.ipv4.ip_local_port_range= 1024 65000

然后再执行:

sysctl -p

可以通过命令行查看客户端的最多连接数

root@qgfzzzzzz-ubuntu1804:/proc/sys/net/ipv4# cat ip_local_port_range
32768    60999

单机最多有6w多连接,若想模拟实现百万级别的客户端连接,至少需要十几台机器以上,当然也可以在单机上使用多个虚拟ip来模拟实现.

对于服务端来说,最多能接受多少个TCP连接?

理论上是无上限的,为什么?

因为只要你服务端开一个TCP固定端口去监听客户端的连接请求,就可以允许任何的IP主机进行访问,所以说服务端最大的连接数是2^32(IP数) * 2^16(端口数) = 2^48。不过实际情况下会受到服务器配置等条件的制约,往往达不到理论值,不过可以通过增加内存等等,这样的话才可以达到更多的连接数。

 

展开阅读全文

没有更多推荐了,返回首页