个人曾在旧文中算过一次,但当时的算法太保守了,遂决定在本文重新给出自己的答案。
为了简化问题,这里限制最多只允许使用一层NAT,不允许NAT的嵌套使用,且IP也不区分公私。
在旧文中,自己是将100个IP分为对等两部分,一部分的50个IP作为内网IP,另一部分50个IP作为每个子网的路由器IP,于是计算结果就是49乘以49等于2401,是直接分配100个IP时可服务主机数量的24倍多(旧文未考虑网关消耗的一个IP,用50乘以50算的,这里修正为49乘以49)。
图片
现在看当时还是太谨慎了,既然是用了NAT,其实不光兄弟子网间不用担心IP重复导致的冲突,内、外子网之间也是一样不用担心了。
NAT服务会像“虫洞”一样连接不同的子网,无论它们之间是兄弟关系,还是父子关系,都不会相互影响,各子网之间就像“平行宇宙”一般。
还是100个IP,只是用一层NAT的情况下,其中1个IP作为默认网关地址,另外99个IP分配给主机,其可服务的主机数量最大其实就是99乘以99等于9801。规模是直接使用100个IP的98倍多。
图片
前面一直强调不嵌套使用NAT,就是因为随着NAT的嵌套使用,会构成一棵层数越来越高的树形结构。
这棵树的非叶子节点就可以视为路由器等网络设备,叶子节点则是连接的主机。而作为满树,这棵树最底层的叶子节点则会随着树的高度的增加呈现指数级增加的趋势。
图片
基于此,如果不限制NAT嵌套的层次,100个IP可以服务的主机数理论上是无限的。
但这里难免让人疑惑,不是说IPv4不够用了吗?按本文的意思,100个IP不断嵌套NAT就能服务无限主机,那还搞IPv6的意义何在?
另外,对于私有IP的存在意义,很多解释也都说是为了解决IPv4不够用的问题,可是从本文看,似乎不用区分私有IP,纯用NAT就能解决问题了,那私有IP被划分出来的意义是什么呢?
上述两个问题正好也是自己想继续回答的,为了让文章不致于臃肿拖沓,这就留到以后再单独回答吧。