我家里有三台计算机连接到路由器。我确定我的路由器只有一个地址。当数据包从计算机 1 到达时,源 IP 被转换为路由器 IP 地址。
假设计算机 1 和计算机 2 都访问同一个目的地,此时 NAT 中的条目将具有相同的目的地址。那么,数据包在这里是如何转发的呢?
当数据包从目的地到达时,计算机 1 和计算机 2 之间的数据包如何区分?我有一台 Belkin 路由器,它会生成许多源地址吗?例如,动态 NAT,每个源 IP 都会转换为不同的 IP 地址?它如何生成地址池。
答案1
路由器不仅转换源地址,还转换源端口。当网络上的两台计算机发出类似请求时,例如访问 198.252.206.16:80 上的 superuser.com,路由器会将源端口转换为唯一的。当回复到达时,路由器可以根据它们的目标端口区分两者,并查阅连接表以查看哪个端口要转发到哪台计算机。在两个人浏览 Super User 的示例中,连接表可能如下所示:
root@FAKEROUTER:~# grep 198.252.206.16 /proc/net/ip_conntrack
tcp 6 3597 ESTABLISHED src=192.168.1.1 dst=198.252.206.16 sport=50000 dport=80 packets=8 bytes=1637 \
src=198.252.206.16 dst=203.0.113.1 sport=80 dport=50000 packets=14 bytes=14747 [ASSURED] mark=20 secmark=0 use=1
tcp 6 3598 ESTABLISHED src=192.168.1.2 dst=198.252.206.16 sport=50000 dport=80 packets=8 bytes=1637 \
src=198.252.206.16 dst=203.0.113.1 sport=80 dport=50001 packets=14 bytes=14747 [ASSURED] mark=20 secmark=0 use=1
答案2
家用路由器会执行 NAPT(网络地址和端口转换)。这意味着不仅修改源地址,还会修改源端口。通常,每个连接都会被赋予一个唯一的外部端口号,这是路由器识别连接的方式。这也意味着无论路由器后面有多少设备,您只能同时拥有 65535 个连接。