MSh*_*keG 5 networking router port-forwarding nat
根据相关帖子,端口转发不可能同时为使用相同互联网服务/应用程序/协议(例如 FTP、HTTP 等)的多个客户端主机提供服务,因为每个互联网服务都有 IANA 设置的专用端口。换句话说,仅使用端口转发,同一内部网络中的多个客户端主机不可能同时使用相同的互联网服务,甚至无法在单个主机上运行同一互联网应用程序的多个实例。然而,观察表明,在同一内部网络中并发支持互联网服务的多个实例是可能的。
这在实践中如何解释?
我将你的问题解释为:“当多个客户端主机位于 NAT 后面并共享一个“外部”IP 地址时,多个客户端如何在同一端口上连接到同一服务器?”
这是通过完全相同的机制实现的,该机制还允许单个主机建立与同一服务的多个连接。(例如,您的 Web 浏览器经常使用 2-3 个并发 HTTP 连接到同一 Web 服务器。)
TCP 连接和 UDP 流始终由一对端口标识。每个 TCP 或 UDP 数据包携带两个字段:“源”端口和“目标”端口。
在来自客户端的数据包中,“目标”端口保留 IANA 分配的服务端口(例如 HTTP 的 80),但“源”端口由操作系统自动分配,以便 {source, dest} 对始终是唯一的。例如,客户端可能对第一个 HTTP 连接使用端口 {54794, 80},对第二个连接使用端口 {48973, 80}。服务器以相反的源和目标进行响应 – 其数据包将具有 {80, 54794} 或 {80, 48973}。
当 NAT 后面有多个客户端主机时,该过程保持不变,并且 NAT 设备使用端口组合来识别哪个客户端进行了哪个连接。如果多个客户端设备碰巧选择相同的端口,NAT 设备将转换源端口以确保该对在 WAN 端仍然是唯一的。
同一答案的另一个版本(不太清楚,但有示例):互联网服务器如何响应来自私有 IP 的请求?
一些其他基于 IP 的协议(例如 SCTP)也具有以完全相同的方式工作的端口。
QUIC 为此使用 UDP 封装 – QUIC 端口实际上是 UDP 端口。
ICMP Echo(又名 ping)有一个唯一的 ID 字段,其作用与“源端口”相同。(您可以说 ICMP 类型/代码字段用于“目标端口”的目的。)
IPsec ESP 有安全关联 ID,但据我所知,它们通常不会被 NAT 跟踪 - NAT 设备通常将 ESP 视为没有端口之类的东西,并且只允许单个客户端连接到给定的服务器(甚至更糟糕的是,某些 NAT 设备一次只允许单个客户端使用 ESP)。UDP 封装用于解决这个问题。
| 归档时间: |
|
| 查看次数: |
5259 次 |
| 最近记录: |