V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
plko345
V2EX  ›  数学

请教一个高中生就会的简单数学题

  •  
  •   plko345 · 2022-02-27 09:42:20 +08:00 · 2867 次点击
    这是一个创建于 761 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一台 Linux 服务器上, 现在要在上面启动 201 个随机占用独立端口的服务, 1-1024 端口不允许使用, 现已经启动了 200 个, 请问第 201 个服务无法启动的概率是多少?

    现在的我不会解这题😢 😭 😤 😠

    15 条回复    2022-02-27 15:43:30 +08:00
    HeliumTang
        1
    HeliumTang  
       2022-02-27 09:48:45 +08:00   ❤️ 1
    (已启动 200+1024 个不允许使用)/ 总端口数
    ryd994
        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 的,会分配偶数端口。(哪个是奇数哪个是偶数我忘了,反正各自一半)
    plko345
        3
    plko345  
    OP
       2022-02-27 10:04:01 +08:00
    @HeliumTang 真的是这样算吗?


    @ryd994 我理解应该是 65535 - 1024 的剩余端口随机分配, 应该不会有那么复杂的背后潜规则
    Borden
        4
    Borden  
       2022-02-27 10:12:05 +08:00   ❤️ 1
    生日碰撞问题嘛,通解搜一下就有
    plko345
        5
    plko345  
    OP
       2022-02-27 10:17:47 +08:00
    @Borden "生日碰撞" 就是这个, 我想起了数学老师
    netnr
        6
    netnr  
       2022-02-27 10:24:43 +08:00 via Android
    分析一下,当前可用端口数量为 65535-1224=64311 ,在这里面不考虑其他应用程序占用端口的情况,那么就是百分百
    plko345
        7
    plko345  
    OP
       2022-02-27 10:35:15 +08:00
    @netnr 题目里的随机应该是指有概率与已占用的 200 个端口冲突
    ryd994
        8
    ryd994  
       2022-02-27 10:43:34 +08:00 via Android
    @plko345 这根本不是生日碰撞问题。生日碰撞问题是,有 x 个可用端口,随机抽取 200 次可能重复的端口,其中至少两个端口相同的概率是多少。


    你现在这个问题,是已经选取了 200 个已知不重复的端口。问随机抽取 1 个端口,和之前 200 个端口相同的概率是多少。
    whileFalse
        9
    whileFalse  
       2022-02-27 11:49:36 +08:00   ❤️ 1
    随机范围是(1024 - 65535],其中 200 个随机位置有大奖,随机抽到大奖的概率是 200/(65535-1024) = 约千分之三
    duke807
        10
    duke807  
       2022-02-27 11:52:30 +08:00 via Android
    理論上無解,沒有告知 『已经启动了 200 个』之前,系統端口使用情況。服務無法啟動的概率不單是端口被佔用,也有可以代碼有 bug 、內存不夠、硬盤空間等資源不夠,所以概率沒法算。沒錯,我是槓精。

    實際上,會衝突的概率為 0 。
    plko345
        11
    plko345  
    OP
       2022-02-27 12:59:02 +08:00 via Android
    @ryd994 我觉得你是对的。。。
    cmdOptionKana
        12
    cmdOptionKana  
       2022-02-27 13:10:46 +08:00
    如果这不是数学兴趣题,而是为了解决实际问题的话…… 一般 try 端口 catch 异常换端口即可,根本不用管概率。
    plko345
        13
    plko345  
    OP
       2022-02-27 14:57:21 +08:00 via Android
    @cmdOptionKana 就是个简单的数学问题
    plko345
        14
    plko345  
    OP
       2022-02-27 14:58:18 +08:00 via Android
    @cmdOptionKana 应该没人会在一台服务器上起两百多的服务吧
    zmxnv123
        15
    zmxnv123  
       2022-02-27 15:43:30 +08:00 via iPhone
    说这是生日碰撞问题的怕是没搞懂三门问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5370 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:34 · PVG 16:34 · LAX 01:34 · JFK 04:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.