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

2016-01-06 19:27:35 +08:00
 Chigogo
大多用户的上网方案:用路由器共享一个公网 IP 上网。(下有轻微排版,手机党横屏观看更加)

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

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





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




所以到底是如何解决的?(只学过教材上的计算机网络,水平太渣,望不吝赐教)
2731 次点击
所在节点    问与答
22 条回复
Chigogo
2016-01-06 20:06:39 +08:00
。。。
atc
2016-01-06 20:15:30 +08:00
够用的,路由器对外端口号不是一个内网主机独占,可以共用
wy315700
2016-01-06 20:16:54 +08:00
对称 NAT
ayouwei
2016-01-06 20:17:08 +08:00
端口并不能扩展, 但是 IP 可以。

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

需要保持长连接的场景较少
jasontse
2016-01-06 21:11:58 +08:00
192.168.1.2:52631 -> *:45296 -> 1.1.1.1:80
192.168.1.3:78996 -> *:45296 -> 2.2.2.2:80

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

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

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

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

即便是 QQ 这也是大学城等级的使用量了
Chigogo
2016-01-07 09:01:21 +08:00
@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
2016-01-07 09:03:14 +08:00
@mhycy ??路由器处理大量计算机,每台计算机又有大量连接数,路由器一共才 65535 个连接数,你说怎么办吧。
mhycy
2016-01-07 09:04:41 +08:00
@Chigogo
把话看懂再回复
Chigogo
2016-01-07 09:30:11 +08:00
@mhycy 看懂就不回复了。看不懂才回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248854

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX