内部网络里的地址在公网上没有意义,直接发出去会被丢弃。所以请求在离开本地之前,要先经过一层转换:把内部地址换成一个对外有效的地址,同时记下这条连接由谁发起。回来的数据按记录换回原来的内部地址,再交给发起的那台设备。这一层是内部网络能够用一个对外地址撑起很多设备的原因。

转换记录里存的是什么
每次有新连接发起,转换设备就在记录表里加一行:内部地址和编号、对外地址和编号、以及对面是谁。回来的数据先查这张表,找到对应的内部地址再转发。表是有容量上限的,连接太多或者释放不及时,新连接就会被拒。代理IP服务标注的并发上限,性质与这里一样。
- 只记录主动发起的连接
- 外部主动连进来的请求,没有记录就进不去
- 连接关闭后记录被释放,位置让给新的连接
转换记录表的大小决定了能同时维持多少条连接。
为什么会影响速度
转换本身需要额外的处理,设备性能不足时,这一层会成为瓶颈。表现是设备一多,所有人的速度一起变慢,单独某一台反而不明显。判断的办法很简单:把活跃设备数量减一半再测一遍,如果速度明显回升,瓶颈就在这一层。代理IP使用时如果出现整体变慢,也要先想到并发这一层。
固定指向什么时候用
有些连接需要在两个方向上都通,比如外部要主动连到内部某台设备。这时候要提前在转换设备上留一条固定指向,把外部的某个地址和编号绑定到内部某一台。这条指向是手工配的,配错了的现象是外部连不上、内部一切正常。托管环境里让外部访问内部服务,用的就是这种办法。
表满了之后,新连接要等位置空出来。
转换层让有限的地址撑起了更多设备,代价是多了一层处理。代理IP服务同样在并发上限的前提下工作,选型时要看清这一条。
