家里手机、电脑、电视同时在线,各拿一个内部地址,各跑各的。但从外面看,这些设备发出的请求全都来自同一个地址。中间那台负责分配的设备同时兼任转换的角色,把内部地址换成一个对外可用的,再把回来的数据分发给对应的设备。这件事是自动完成的,使用者感觉不到,理解了它,就能明白为什么外部无法直接找到家里某一台设备。代理IP使用中也会碰到这层转换。
转换是怎么记住对应关系的
每一条从内到外的连接,设备都会登记一行:内部是谁、用的哪个端口、对外换成了哪个端口。回来的数据按这行记录分发,分发完这行记录就撤掉。所以同一时刻能维持的连接数量是有上限的,这个上限由登记表的容量决定。
- 内部地址换成对外地址,回来的数据再分发
- 每条连接登记一行,用完就撤掉
- 同时能维持多少条,由登记表容量决定
什么情况下会出问题
登记表被占满的时候,新的连接建不起来,表现是部分设备能上网、部分不能,或者时好时坏。这种情况在家用设备上不常见,但在内部设备特别多的环境里会碰到。
外部主动连进来怎么办
默认是连不进来的,因为内部地址不对外。需要外部访问内部某台设备的时候,要提前在设备上留一条固定指向,把外部的某个位置和内部某一台绑起来。这条指向要手工配,配错了的现象是内部一切正常、外部连不上。代理IP环境下如果需要外部访问内部服务,同样要处理这一步。
代理IP使用中如果多条任务共用同一个对外地址,从外面看就是同一个来源。这一点在需要区分来源的场景里要先考虑清楚,否则后面出现相互影响时不容易找到原因。
对外只有一个地址,是转换带来的结果,也是它的代价。
登记表有多少容量,决定了同时能开多少条连接。
一个对外地址背后是一张登记表。连接开得太多建不起来,先看这张表够不够用。
