Chigogo
V2EX  ›  问与答

刚刚想到了一个问题,关于路由器和网络地址转换,百思不得其解。

  •  
  •   Chigogo · Jan 6, 2016 · 3295 views
    This topic created in 3866 days ago, the information mentioned may be changed or developed.
    大多用户的上网方案:用路由器共享一个公网 IP 上网。(下有轻微排版,手机党横屏观看更加)

    为此,路由器对数据包的地址字段做如下处理:
          服务器地址        客户机地址
    原数据包  <目的 IP+端口号>  +  <内网 IP+端口号>    路由器将其映射到
    新数据包  <目的 IP+端口号>  +  <公网 IP+新的端口号> 然后把数据包发出去

    在接收反馈时再进行相反的映射。





    问题来了,当几十台(保守估计)电脑同时使用路由器,每台电脑有许多进程同时上网时,路由器一共才 65536 个端口号,怎么着也不够用啊。
    如果说,路由器端在硬件上扩充端口数,比如扩充到 655360 个,那么处理后的新数据包到达服务器后,其端口号也是非法的,超过上限。




    所以到底是如何解决的?(只学过教材上的计算机网络,水平太渣,望不吝赐教)
    22 replies    2016-01-07 09:38:37 +08:00
    Chigogo
        1
    Chigogo  
    OP
       Jan 6, 2016
    。。。
    atc
        2
    atc  
       Jan 6, 2016 via Android
    够用的,路由器对外端口号不是一个内网主机独占,可以共用
    wy315700
        3
    wy315700  
       Jan 6, 2016
    对称 NAT
    ayouwei
        4
    ayouwei  
       Jan 6, 2016
    端口并不能扩展, 但是 IP 可以。

    如果并发连接数超过 65535 , 需要增加公网 IP 解决
    abcbit
        5
    abcbit  
       Jan 6, 2016
    你以為運營商 nat 怎麼解決的?就是 100.64.0.0/10 所用的技術
    一個 ip 只有 65535 個端口,不夠用只能擴展 ip 。但實際上家用 nat 下的端口佔用沒那麼誇張,一般情況足夠用
    ChangeTheWorld
        6
    ChangeTheWorld  
       Jan 6, 2016
    多公网 IP 负载均衡,数据包打上回流标记确保源 /目标地址 一致,运营商的 NAT 就是这么玩的
    yexm0
        7
    yexm0  
       Jan 6, 2016 via Android
    同好奇移动的大内网是怎么做到那么多用户共用那几个 ip 的。
    ayouwei
        8
    ayouwei  
       Jan 6, 2016   ❤️ 2
    @yexm0 因为绝大部分连接是短连接, ms 级别就可以完成数据传输, 连接关闭之后端口就可以分配给其它新连接使用; 在某一个时刻连接数达到端口数上限的概率就小了。 如果有 10 个 IP , 那么并发上限就是 65W , 正常用户行为很难同时搞出这么多连接

    需要保持长连接的场景较少
    jasontse
        9
    jasontse  
       Jan 6, 2016 via iPad
    192.168.1.2:52631 -> *:45296 -> 1.1.1.1:80
    192.168.1.3:78996 -> *:45296 -> 2.2.2.2:80

    端口是可以根据不同远程主机复用的,实在不够了就只能加出口 IP 负载均衡。
    jasontse
        10
    jasontse  
       Jan 6, 2016 via iPad
    另外路由器上 655360 个以太网端口也是有挑战的, MAC 地址表没这么大。
    msg7086
        11
    msg7086  
       Jan 6, 2016
    公网端口通过对方 IP 来映射,达到多个连接复用单个端口的效果。
    如果不复用的话需要增加出口 IP 来增加连接数。
    很多大企业的网络接入都会提供多个公网 IP 地址,实际上就有这个效果。
    rrfeng
        12
    rrfeng  
       Jan 6, 2016
    [如果说,路由器端在硬件上扩充端口数]
    你是在逗我= =
    ming2281
        13
    ming2281  
       Jan 6, 2016
    有多个进程没有关系,反正每台电脑分配一个私有网络地址(看这个 ip 池子有多大), 路由器最多到 ip 层, 只管转发 ip 报文就行, tcp 层的事情它管不着, 所以进程的事情与它无关(这是主机应当考虑的问题)

    有多台电脑没有关系,路由器所能连接电脑做了上限(这个连接数应当是进行过充分考虑的,不必担心)
    webjin
        14
    webjin  
       Jan 7, 2016 via Android
    @ming2281NAT 工作在几层?
    auser
        15
    auser  
       Jan 7, 2016 via Android
    生产系统上正在这么用
    SNAT 端口搭配目的 IP 和协议一起用
    这样的话 基本上不会存在不够用的问题
    mhycy
        16
    mhycy  
       Jan 7, 2016
    题主犯了个很常见的错误。

    网络上,一个通讯需要 4 个信息进行标记
    本地 IP:本地端口 <-> 对端 IP:对端端口

    很显然在本地 IP ,对端 IP ,对端端口不变的时候,可用链路=端口的可用数
    理论上对于一个对端服务器 IP 的一个端口, NAT 单 IP 同一时间的可用链路是 65535

    即便是 QQ 这也是大学城等级的使用量了
    Chigogo
        17
    Chigogo  
    OP
       Jan 7, 2016
    @ayouwei 你这个在理
    @abcbit 也许吧但是企业如果同开着 100 台电脑和 100 台手机,连接数还是相当可观的。弄不好就不够了呢?
    @ChangeTheWorld 在理
    @jasontse
    192.168.1.2:52631 -> *:45296 -> 1.1.1.1:80
    192.168.1.3:78996 -> *:45296 -> 2.2.2.2:80
    这么搞得起来?
    @jasontse 不会的,
    @rrfeng 我说的是运输层端口,不是交换机物理端口。好吧,按照你那么理解……
    @msg7086 多 IP 分流我能理解,但是“公网端口通过对方 IP 来映射”,不太好理解
    @ming2281 NONONONO ,路由器是用到运输层端口的
    @auser 稍微讲讲呗。我今天在想这个问题,我们公司可能就几十台电脑,但如果是大企业,好几层楼的,本地局域网用 B 类保留地址,那么还是必须解决这个问题的。书上习题总假设说企业会得到一个地址段,尼玛如今怎么可能好吗?就一个 IP 看来是很难做的。
    Chigogo
        18
    Chigogo  
    OP
       Jan 7, 2016
    @mhycy ??路由器处理大量计算机,每台计算机又有大量连接数,路由器一共才 65535 个连接数,你说怎么办吧。
    mhycy
        19
    mhycy  
       Jan 7, 2016
    @Chigogo
    把话看懂再回复
    Chigogo
        20
    Chigogo  
    OP
       Jan 7, 2016 via iPhone
    @mhycy 看懂就不回复了。看不懂才回复。
    jasontse
        21
    jasontse  
       Jan 7, 2016 via iPad
    @Chigogo
    五元组,源地址 / 源端口 / 协议 / 目标地址 / 目标端口,只要有一项不同它就是另一组。
    lyh3222
        22
    lyh3222  
       Jan 7, 2016
    然后, UDP 和 TCP 是分开的,所以可以看成是 65536*2 个端口号
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   959 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 19:02 · PVG 03:02 · LAX 12:02 · JFK 15:02
    ♥ Do have faith in what you're doing.