如何查询一个公网的ip(估算了一下公网IP地址的数量)
如何查询一个公网的ip(估算了一下公网IP地址的数量)
2024-07-03 06:10:26  作者:假装嚣张  网址:https://m.xinb2b.cn/know/sah135374.html

我们知道,每次拔号上网运营商会给你分配一个IP地址,通常每次都不一样。 我记录了355 次拔号得到的IP地址。其中:

237 个地址是各出现了(仅)1次的;50 个地址是各出现了(仅)2次的;6 个地址是各出现了(仅)3次的。

因为公网IP是稀缺资源,于是就想琢磨一下我这里运营商的IP地址池到底有多大。根据这些数据能否估算出地址池的大小N呢?

如何查询一个公网的ip(估算了一下公网IP地址的数量)(1)

题图

1) 简单的数学模型

上面的实验中总共得到了293 (237 50 6)个IP地址,反过来,未被选中的地址是 N - 293个。 于是可知:

经过355次拔号,某一特定地址不被选中的概率是 (N - 293)/N;另一方面,仅拔号一次,某一特定的地址不被选中的概率是 (N - 1) / N。

于是我们可以得到下面的方程,并在Mathematica里求数值解(注意要限定实数域,否则会得到很多复数解)。

如何查询一个公网的ip(估算了一下公网IP地址的数量)(2)

图:简单模型的方程及其解

显然 N > 293,于是有意义的解是 891.992。这是一个类似于平均值(数学期望)的数。 我们可以说,N在892附近。至于有多近,现在还不清楚,N可能是800,也可能是1000。

不过,这个模型里没有用到[237, 50, 6]这个1,2,3次的分布。这样做对吗?

2) 简单的模拟实验

我准备用Python模拟一下,用到下面一些package。

import randomimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom multiprocessing import Pool

numpy里有一些现成的函数,用很短的代码就可以完成模拟;pandas用来画图,最后为了提升速度会用到多进程。代码在Jupyter Notebook里运行。

如何查询一个公网的ip(估算了一下公网IP地址的数量)(3)

图:简单的模拟实验

一次实验的代码其实只有一行,流程是:

生成355个0~n之间的随机数;统计每个数出现的频次;统计每个频次出现的频次(即出现了0, 1, 2, 3... 次的数有多少个),其中出现0次的数目是不需要的。

把实验得到的频次和目标频次进行比较,相等就把计数加1. 对于每个n值,试验10000次,看看有多少命中的。

可以看到峰值确实是在900附近,大约是0.6%的命中率。也就是说,对于N在900附近时,从中取355次地址,大约有0.6%的可能会出现[237, 50, 6]这样的分布。

尽管这个值很低,但我们要看相对的高低,在900附近,是最有可能出现这个分布的。

3) 程序的改进

前面的代码里可能会匹配到[237, 50, 6, 2](即还有2个地址各出现了4次)这样的分布,所以严谨一点,我们可以把匹配目标设为[237, 50, 6, 0, 0, 0]。再长也没有必要了,因为高频次的数量降低是很快的。

把程序改为多进程模式的。4核8线程的CPU把Pool大小设为8,实测CPU占用率能达到100%(而之前确实是1/8左右的占用率)。把每一个N值的模拟次数增加到2千万,这样可以得到较为平滑的曲线。

如何查询一个公网的ip(估算了一下公网IP地址的数量)(4)

图:改进的模拟程序

这时可以得到最大概率对应的N值是891, 和简单的数学模型非常一致。

4) 概率公式和概率积分

根据“不尽相异元素的全排列”可以推出,出现[237, 50, 6]这个结果的概率p[n],和n的关系,如下图。 用这个结果画出的曲线(图略)和模拟的完全一致,但速度快得多,而且是完全平滑的。

直接把这个概率“积分”(严格讲是累加),得到的结果是1.6. 为什么不是1呢?

因为这个概率p(n)表示的是对于某一个n,出现[237, 50, 6]这个结果的概率(它的反面是出现其它频次的概率);而我们需要的概率q(n)是指,[237, 50, 6]这个结果的对应的N,100%会落在比如说293~10000之间,那么它落在n的概率是多大呢?

让我们假定这两个概率是正相关的,这样把p(n)的积分归一化,就可以得到q(n)。于是我们用概率公式得到下面归一化的积分曲线。

如何查询一个公网的ip(估算了一下公网IP地址的数量)(5)

图:概率公式和概率积分

从图中可以估算出,N 98%的可能会落在700~1200之间。曲线的陡峭程度反映了N的集中程度(如果取样次数比355次更多,结果应该会更集中)。

5) 伯努利试验和二项分布

其实这个问题是概率论中的一类典型问题,可以和伯努利试验及二项分布对应上。

在每次拔号中,选中某一地址为成功,否则为失败。m次拔号中,某个地址被选中k次的分布符合二项分布 b(k, m, p),其中p是被选中的概率(对于大小为n的地址池,p为1/n)。

于是,m次拔号中,被选中k次的地址的总数的期望值为:b(k, m, p) * n。具体如下图所示:

如何查询一个公网的ip(估算了一下公网IP地址的数量)(6)

图:基于二项分布的计算

上图中给出了出现1~5次的地址总数随地址池大小n的分布。下图则给出了目标频次[237, 50, 6]附近( /-10%)所对应的n值。比如,当n取值700~1150时,最有可能出现237个1次地址。因为图中是期望值,所以并不意味着在这个范围之外不会出现237个1次地址,只是图中区域是概率最高的部分。这也可以理解,为什么根据3个条件得出的范围并不是严格一致。

如何查询一个公网的ip(估算了一下公网IP地址的数量)(7)

图:基于二项分布的结果

6) 结语

本文对“我这里”的公网IP地址的数量这一蛋疼的问题,从数学上进行了推演,从程序上进行了模拟。数学简洁但高深,模拟笨拙但直观。殊途同归,两者得出了基本一致的结果。

本题可以作为码农编程的一个小练习,比如有人用了PHP语言,因为它有高精度的数值计算;有人用了R语言,因为它有现成的统计函数;继续的改进甚至可以考虑使用GPU提升模拟速度。

至于“我这里”是多大的范围,根据公里级的IP地理信息应该可以推测出来。这不是本文的重点。

本题在讨论过程中,得到了色影无忌众多网友的见解,@siliconworm, @TakeThat05, @rks, @pipedream,特此致谢。

  • 结婚四十年是什么婚?(结婚四十年属于什么婚?)
  • 2024-07-03结婚四十年属于什么婚?结婚四十年是红宝石婚红宝石晶莹剔透、色彩醇厚,就好比婚姻一样,夫妻二人一起携手走过四十年,共同度过了人生的一大半,两人同甘共苦,感情越来越浓厚、热烈在中国,人们把结婚四十周年叫做红宝石婚,不过在不同的。
  • 君子兰怎么养(君子兰如何养)
  • 2024-07-03君子兰如何养施肥君子兰冬季营养生长速度最快,需要的营养物质最多,因此,施好冬肥很重要花盆入室前用骨粉、炒芝麻、熟大豆等或复合肥,每隔15至20天对水浇施1次,也可用动、植物残体浸泡液浇根要做到肥料腐熟淡施,防止浓。
  • 刘德华梁家辉电影大全 追忆经典刘德华
  • 2024-07-03刘德华梁家辉电影大全 追忆经典刘德华时光回溯,追忆青春,经典影视回顾之《黑金》​《黑金》是由永盛电影制作有限公司出品的警匪动作片,由麦当雄编剧,麦当杰执导,梁家辉、刘德华、李立群、钮承泽等主演,电影于1997年12月23日在香港上映​该。
  • 马季五官争功相声(还记得五官争功)
  • 2024-07-03还记得五官争功2022年5月13日,中国广播艺术团说唱团发出讣告,原铁道兵文工团相声演员、中国广播艺术团说唱团著名作家、相声表演艺术家王金宝先生因病医治无效,于5月13日凌晨2点20分在北京病逝,享年85岁可能有不。
  • 困难群众生活保障排查(措施编密织牢困难群众基本生活安全网)
  • 2024-07-03措施编密织牢困难群众基本生活安全网近年来,全市民政系统紧密聚焦兜底保障和民生改善,坚持精准施策、靶向发力,做实做细低保、高龄、孤残、危重、特困供养等特殊困难群体关爱帮扶工作,以“功成不必在我、功成必定有我”的时代感、使命感和责任感,切。
  • 红枣黄芪水每天喝几次(每天喝三杯黄芪红枣水会有什么变化)
  • 2024-07-03每天喝三杯黄芪红枣水会有什么变化时常会有人来问我,这个能不能吃,那个能不能喝,我都告诉它,干净健康就好有人问,如果每天喝三杯黄芪红枣水,会发生怎样的变化?我的答案是有很多种可能记得上学时候,我们一个宿舍四个姑娘,有一段时间,我们都会。
  • 青少年参加变形计暴打妈妈(将纨绔子弟推向网红)
  • 2024-07-03将纨绔子弟推向网红十五年前,一档叫做《变形计》的节目火遍了大江南北,他们的简介是:“以关爱和反思为视角,关注当代中国青少年教育和成长问题的角色互换纪实节目”他们给自己的定位一个是关注青少年成长,另一个是纪实,所谓纪实就。
  • 显卡显存位宽192和256(分辨率是25601440需要多大显存)
  • 2024-07-03分辨率是25601440需要多大显存不同的单机游戏,比如极品飞车16,尘埃3,GTA4之类的游戏都需要多大的显存这个和游戏本身的设计有关,不同的游戏需要的配置不一样,即使便是相同的分辨率下,分辨率是2560*1440的情况一般情况下1G。
  • 月兔耳养殖方法和注意事项解析(月兔耳如何养殖和禁忌)
  • 2024-07-03月兔耳如何养殖和禁忌浇水生长期每周浇一次水,保持盆里的土微微湿润就可以了,一定要避免积水夏季温度高时,为了防止根部腐烂,要减少浇水,而在冬天,零下5度则要基本断水光照和温度月兔耳喜全日照要求光照充足,否则会引起徒长月兔耳。
  • Mesh组网评测(用红外光追踪手势有哪些优势)
  • 2024-07-03用红外光追踪手势有哪些优势在Quest和Quest2推动下,手势识别技术在VR游戏等C端场景得到广泛应用,你可以用手势拼积木,或是用手直接混合魔药、模拟各种交互等等与手柄相比,手势的优势在于使用更灵活,而且沉浸感更好,直接上手。
  • 聊城智慧城市计划(聚焦六个新聊城)
  • 2024-07-03聚焦六个新聊城齐鲁晚报·齐鲁壹点记者陶春燕为深入学习贯彻宣传聊城市第十四届党代会和2022年两会会议精神,引导聊城市上下聚焦聚力“六个新聊城”美好愿景,3月3日,聊城市人民政府新闻办召开“聚焦‘六个新聊城’”主题系。
  • 王者荣耀钟馗法术出装教学(夺命判官钟馗进阶攻略)
  • 2024-07-03夺命判官钟馗进阶攻略钟馗作为一名拥有团控技能的法师英雄,可走中,可走辅助路线走中的钟馗虽然伤害较高,但身板较脆,自身发育周期较长所以本期给大家带来的是辅助类钟馗,这样的他技能CD短,可以在团战中充分发挥出自己的控制能力下。