胡焦24

You got a dream, you gotta to protect it!

站内搜索

选择搜索引擎,输入关键词开始搜索

Google
Bing
Yahoo
百度
💡 小贴士:选择不同的搜索引擎可能会得到不同的搜索结果

关于宽带网络下公网地址的理解

发布日期:2025-10-25 |文章分类: 默认分类

网络分析

登录不同公网节点,使用 netstat -anp|grep tcp|grep ssh 显示本地的公网地址,可以看到多个不同的地址

使用 ip.cn 查询本地的公网地址

通过 ip138 查看本地的公网地址

将以上地址进行去重,得到 5 个公网地址,以下 143 以及 116 网段的两个地址是不同的,如果通过更广泛的测试,应该能拿到更多的公网地址

而且随着时间以及访问目标地址的变化,这里显示的本地公网地址也可能会发生变化

这里也有一个比较明显的 120.228 网段,也就是说一个区域应该是为数不多的几个固定的网段,但一个具体的请求可能会根据链路优化选择不同的 ip 出口

119.39.114.xxx
120.228.143.xxx
120.228.143.xxx
120.228.116.xxx
120.228.116.xxx

事实上,为了负载均衡和优化网络流量,运营商部署了​​多出口(Multi-homed)架构,每个地区运营商都分配了多组庞大的公网地址,提供给下面的宽带用户接入使用

本地网络通过 NAT 转化为运营商的网络,运营商再通过 NAT 转化为公网地址,也就是 CGN(Carrier-Grade NAT),运营商级网络地址转换,总体结构如下

就单个公网 ip 地址,端口只有 65536 个,剔除保留的端口,差不多在 64000 左右,通过四元组/五元组单个公网地址理论可以支持更多的连接

在运营商环境中,CGN 的一个公网 IP 地址通常服务大量的内部用户,为了确保公平性和防止端口资源耗尽,运营商也会对单个/宽带用户限制连接数

一台手机/电脑连接数通常在数百到数千不等,如下是 win10 下资源监视器中显示的连接数,显示的连接数大概在两百左右

因此通过连接数估计,运营商的单个公网 ip 地址同时能对接的家庭用户数(不含企业用户)应该在几百个左右(这里指的是单个用户的所有连接都走同一个公网 ip 出口)

手机移动网络的数据流,也和家庭网络的数据流类似,手机通过接入基站使用移动互联网,但是基站并不负责分配手机接入公网的 ip 地址

应用场景

基于现代网络的融合技术,手机的移动数据以及 PC 的网络数据最终会融合到骨干网上,手机的公网 ip 地址是在接入互联网的时候分配

来考虑一种场景,手机的 app 业务开发中(比如微信应用)怎么检测多个用户登录的是否为同一个网络?这里的同一网络泛指的是同一个宽带网络

手机 app 可以拿到的信息

1、wifi名称

2、内网地址

3、网关地址

4、公网地址

5、基于 traceroute 拿到整个链路的地址

最简单的,可以通过 Bonjour/mDNS (多播 DNS) 技术进行服务发现,设备在本地网络上进行广播和查找特定服务(例如,查找 微信群聊服务AirPlay 服务

由于路由器的默认的隔离状态,以及广播域被分割,除非特别配置,这种广播和查找在下面这种路由架构中就会失败,这里 路由C 对应家庭宽带出口

通过前面的了解,手机连接 wifi 接入互联网,单个宽带接入的公网 ip 可能是多个,但是同一个时间单个应用使用的是固定的 ip 地址

由于公网地址的共享特性,公网地址不能成为唯一的条件;内网地址和网关逻辑相同,相同网关的概率会更高一点,大部分用户的网关都是 192.168.1.1 这种

但是 wifi 名称相同的概率应该比较低,因此:公网地址 + 相同 wifi 名 可以判断两台手机是否处于相同网络,如果前面路由器不同了,这里 wifi 应该也是不同的

基于 traceroute 的逻辑,可以拿到整条链路上的所有节点,因此这是判断两台手机的 app 应用是相同内网的最有力证据

即便中间节点路由器全部丢弃 icmp 协议报文,应用依旧可以通过切换为 tcp 的 traceroute 来获取链路上的所有节点

在 iOS 开发中,开发者通过使用 apple 提供的官方 api 框架,可以实现 traceroute 或本地网络发现等功能,在安卓上权限比 iphone 宽松多就更简单了