
一台 Linux 服务器上, 现在要在上面启动 201 个随机占用独立端口的服务, 1-1024 端口不允许使用, 现已经启动了 200 个, 请问第 201 个服务无法启动的概率是多少?
现在的我不会解这题
1 HeliumTang 2022-02-27 09:48:45 +08:00 (已启动 200+1024 个不允许使用)/ 总端口数 |
2 ryd994 2022-02-27 09:51:12 +08:00 via Android 题干描述不清 随机占用是否包含 1-1024 ? 是否由内核分配?(如是,则无法启动的概率为 0 ) 65535 个端口,减去 1024 个无法使用的,减去 200 个已经占用的,你说纯随机概率是多少? 实际上,如果你 bind 到 0 ,内核会随机给你一个*可用的*端口,上限是 32768 个或 sysctl 设置的范围的一半。为什么不是整个范围,因为内核对于主动请求 bind 的,会分配奇数端口,对于不 bind 直接 connect 的,会分配偶数端口。(哪个是奇数哪个是偶数我忘了,反正各自一半) |
3 plko345 OP |
4 Borden 2022-02-27 10:12:05 +08:00 生日碰撞问题嘛,通解搜一下就有 |
6 netnr 2022-02-27 10:24:43 +08:00 via Android 分析一下,当前可用端口数量为 65535-1224=64311 ,在这里面不考虑其他应用程序占用端口的情况,那么就是百分百 |
8 ryd994 2022-02-27 10:43:34 +08:00 via Android @plko345 这根本不是生日碰撞问题。生日碰撞问题是,有 x 个可用端口,随机抽取 200 次可能重复的端口,其中至少两个端口相同的概率是多少。 你现在这个问题,是已经选取了 200 个已知不重复的端口。问随机抽取 1 个端口,和之前 200 个端口相同的概率是多少。 |
9 whileFalse 2022-02-27 11:49:36 +08:00 随机范围是(1024 - 65535],其中 200 个随机位置有大奖,随机抽到大奖的概率是 200/(65535-1024) = 约千分之三 |
10 duke807 2022-02-27 11:52:30 +08:00 via Android 理上解,有告知 『已经启动了 200 个』之前,系端口使用情。服法的概率不是端口被用,也有可以代有 bug 、存不、硬空等源不,所以概率法算。,我是精。 上,突的概率 0 。 |
12 cmdOptionKana 2022-02-27 13:10:46 +08:00 如果这不是数学兴趣题,而是为了解决实际问题的话…… 一般 try 端口 catch 异常换端口即可,根本不用管概率。 |
13 plko345 OP @cmdOptionKana 就是个简单的数学问题 |
14 plko345 OP @cmdOptionKana 应该没人会在一台服务器上起两百多的服务吧 |
15 xe2vherd 2022-02-27 15:43:30 +08:00 via iPhone 说这是生日碰撞问题的怕是没搞懂三门问题。 |