阴谋论:你家宽带被运营商限制连接数了吗?
这是一个回复:

一直在民间有那么一个说法,宽带运营商会限制宽带用户的连接数。这件事给很多数码小白们唬得一愣一愣的。
先简单的说,限制一个宽带用户的连接数这件事可行,在IT行业中没有什么事情是不可行的,砸钱就行。
先说怎么做:宽带运营商可以通过配置其网络设备(如接入路由器、防火墙或网关)来限制每个用户能够建立的最大并发会话数。例如“最大连接数限制”,要做这个限制运营商可以为每个用户定义一个最大连接数阈值(例如 100 个并发连接)。当用户尝试发起超过这个限制的连接时,新的连接将被拒绝,直到之前的一些连接关闭。或者利用设备级别的 NAT 表限制,在运营商的 NAT(网络地址转换)设备上,连接数也可能受限。NAT 表存储着用户每个外部连接的映射条目,NAT 表的大小可能有限,从而限制了并发连接数。也可以在防火墙、路由器的QoS上做出限制。
关键问题是——控制连接数需要多少成本呢?以天津联通为例子,截止到昨天为止,天津联通的宽带用户一共有579万,“硬控”这些用户的连接数也就成了一个百万用户级别的巨大工程。
为什么这样说,这是由TPC/IP网络的特性决定的。在网络中数据是以数据包的形式进行传输的,所谓的“连接”并不是你家里的设备接入到了无线网络或者有线网络,而是在TCP/IP网络中建立了有效的连接。

客户端会向服务器发送数据包,服务器也会向客户端返回数据包,经过四个数据包的交换三次握手,TCP的连接就可以建立起来。
不过,这是在逻辑层面的连接,在网络设备看来还依旧是一个一个数据包被从一个端口转发到另一个端口。
昨天有人问iN为什么三层交换机要比二层交换机贵呢?原因在于链路层只有协议端口转发并不像网络层一样要解包读取数据包的网络层信息。
因此如果需要控制一个宽带用户的客户端连接数其实就要深入到数据包中来探查解密信息了,这不是一个路由器的默认操作。对于大规模的用户数据分析就需要在服务器上增加业务板了。

骨干路由器和家用路由器不同的是本身是一个大型的机箱,内部要插入不同的业务板来实现特定的功能。

这些业务板就不是标配了,换句话说是要花钱的。
以天津不到600万宽带用户来计算,如果控制TCP连接数,一年所需要花费的成本大约在3720万左右(30个骨干接入节点、5年设备更替、人员、软件、能源)。每年投入3700万做这件事的收益是什么呢?——限制用户的TCP连接数?降低网络使用体验,让用户跑到竞争对手的一边去?典型的花钱不讨好啊!
那么一个用户能有多少个宽带连接呢?

以iN家里负载比较重的情况来看,也就是300出头、不到400个。那这个事情值得限制吗?
这件事是怎么传出来的呢?其实是很多卖专线的销售,本身说不清楚自己卖的线路和家用线路的区别,会硬扯到连接数上来,直接胡诌说专线的连接数没限制,家用网络限制了连接数。于是大家还就真的信了。
道理就是这样的道理。
当然了,这件事是iN凭自己的经验来说给大家的,在iN自己的认知范围内。至于宽带用户是不是被限制了连接数,咱们自己一测试不就可以测试出来嘛?
要验证这件事,直接写个程序就行——通过客户端向服务端发起大量的 TCP 连接 来测试连接数量是否被运营商限制。程序的原理是通过持续发起大量的并发连接,并观察客户端与服务端之间成功建立的连接数量,以此来检测宽带服务商是否对并发连接数量进行了限制。具体来说,这个程序的原理和步骤可以分解为以下几个方面:
TCP 连接的基础原理
TCP(传输控制协议)是面向连接的协议,每次通信都需要建立一条可靠的双向连接,这通常通过三次握手完成:
• 第一步(SYN):客户端向服务端发送一个 SYN(同步)请求,表示想要建立连接。
• 第二步(SYN-ACK):服务端收到请求后回复 SYN-ACK,表示同意建立连接。
• 第三步(ACK):客户端收到 SYN-ACK 后,回复 ACK,表示确认,连接建立。
当客户端成功与服务端建立大量的连接时,我们就可以通过统计这些连接来判断是否存在某种形式的限制。

知道了这一点就很简单了,直接写程序来完成验证就好。
程序分为两个部分,第一个放在远端的服务器中,第二个放在本地。这样在运行python tcp_client.py --server_ip <远端服务器IP地址>的时候,程序就可以不断建立连接,此时,读出已经成功建立的连接数量,我们就可以知道家里的机器到服务器上到底有多少个连接了

反正,iN最后的测试结果是停在了47289个连接上。

相对于平时家用的状态400个不到的连接数量,47289 可能可以算作是没有限制吧。
所以说宽带运营商限制连接数的传言,虽然从技术上是可行的,但实际操作中成本巨大且收益有限。运营商不太可能投入巨资去限制普通用户的连接数,毕竟这不仅会影响用户体验,还可能导致客户流失。而在家用场景中,日常使用的连接数远未达到可能被限制的范围。如果你对自家宽带的连接数存疑,不妨亲自动手,利用简单的程序进行测试,事实胜于猜测。就像iN通过测试发现的那样,47289个连接,足以说明并没有什么限制。
宽带运营商限制用户的连接数,这事情,iN还就真的不信了。

校验提示文案
校验提示文案
校验提示文案
100.开头的IP是CGNAT(运营商nat)内网地址段,这些地址若干个共享nat成一个公网IP对外通信,每个内网IP已经预先分配了一个公网IP 65546个端口的一段端口。以安徽电信为例,是16个内网IP平分1个公网IP的65536个端口,也就是每个内网IP只能用4096个端口(udp tcp各4096个)。运营商只要知道公网端口,就知道内网IP,有问题时倒查用户很方便。
至于你写的程序,如果在100.IP情况下还可以建立几万个连接,原因是仅仅建立了连接,后面的连接建立时nat设备会删除之前建立的连接端口对应关系,前面的连接已经无法传输数据。建议你把服务器端改为echo server,客户端改为建立连接后,等10秒钟,发一个字符串给服务端,测试一下多少连接能正确收到应答。
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案