我一直在思考以下场景:
+-------+ +-------+
| ISP 1 | | ISP 2 |
+-------+ +-------+
| |
| +--------+ |
--eth0| ROUTER |eth1--
+--------+
eth2
|
|
+----+
| PC |
+----+
ROUTER 是一台具有三个网络接口的 Linux 机器:
接口 eth0 连接到主互联网提供商,并配置为执行源 NAT。
接口 eth1 连接到备用互联网提供商,并配置为执行源 NAT。
接口 eth2 连接到普通 PC。
接口 eth0 配置为默认路由,因此 PC 将通过 ISP 1 访问互联网。
假设用户开始在 PC 上从互联网下载一个大文件,然后 ISP 1 离线。如果将 ROUTER 上的默认路由更改为 eth1,会发生什么情况?下载会继续吗?
答案1
好吧,建立的下载会话将在 ISP1 的 IP 地址、Eth0 上的外部 NAT 地址和远程主机(假设为 netflix)之间进行,当 ISP1 无法访问时,netflix 将不知道 ISP2,并且不会通过 ISP2 从它与 ISP1 的地址建立的会话发送任何数据。如果 ISP1 路径上的路由器没有创建 ICMP 错误(例如“HOST UNREACHABLE”或“NO ROUTE TO HOST”),则在 TCP 计时器到期后,如果未从您的系统收到带有 ISP1 NAT 地址的 ACK 消息,则连接将超时。
您的系统可能会尝试使用 ISP2 的 NAT 地址确认其最后收到的数据包,但 netflix 会忽略这些数据包,因为会话是在 ISP1 和 netflix 之间进行的。
如果您没有使用 NAT,有自己的可移植 IP 分配,并且与两个 ISP 有 BGP 对等连接,那么您的传输将继续进行,并且中断最少,除非路由器在此期间由于路由表发生变化而发出如上所述的 ICMP 错误。