NAT后面的Web服务器,我是否需要为请求端口启用端口转发?

时间:2014-03-06 01:56:39

标签: sockets networking webserver router nat

这是一个微不足道的问题,但我真的找不到一个好的答案。

当我在一个侦听端口80的NAT后面托管一个网络服务器时,很明显我需要在我的路由器中启用端口转发到网络服务器的端口80。但是,80只是服务器的接受端口,对于实际请求,它将使用不同的临时随机端口。

我的问题是,我是否还需要为现在用于请求的随机端口启用端口转发?如果不是,它是如何工作的,我的意思是如何神奇地通过NAT呢?

让我引用一本书: “服务器(程序)在特定计算机上运行,​​并且具有绑定到特定端口的套接字 服务器侦听套接字以便客户端发出连接请求(请参阅参考资料)。如果一切顺利 好吧,服务器接受连接。接受后,服务器获得一个新的套接字 绑定到不同的端口。它需要一个新的套接字(因此是一个不同的端口号),以便它可以 在为连接的客户端提供服务时,继续监听原始套接字的连接请求。“

New on different port opened by server

我只是想知道这个“新连接”是否适用于Internet上的客户端,如果端口转发仅启用到路由器后面的服务器的侦听端口。

1 个答案:

答案 0 :(得分:0)

在TCP级别,服务器始终使用端口80,此处没有随机端口。当然会有一个新的套接字,但这是因为套接字代表一个连接(serverIP,80,clientIP,clientPort)。

网络网关将客户端(ip,tcp端口)映射到网络内部的唯一地址/端口,并在表中跟踪它。在最简单的情况下,转换后的地址将是网关的私有地址,端口可以是相同的。当服务器响应(从端口80到转换后的地址/端口)时,网关会查找表,转换回包头中的地址,并通过互联网将转换后的数据包发送给客户端。

以下是我从here复制的示例跟踪。您看到192.168.0.102处的服务器始终响应端口80.浏览器似乎打开了几个端口1046和1047.在此示例中,客户端和服务器都位于同一子网中,但假设NAT 192.168.0.103可能是网关的地址和1046,1047可以是转换端口。如果浏览器前面还有一个网关,端口可以翻译两次。

5   14:52:49.543851  192.168.0.103.1046 > 192.168.0.102.80: S 7861110:7861110(0) win 8192 <mss 1460> (DF)
6   14:52:49.543851  192.168.0.102.80 > 192.168.0.103.1046: S 3595122238:3595122238(0) ack 7861111 win 32736 <mss 1460>
7   14:52:49.543851  192.168.0.103.1046 > 192.168.0.102.80: . ack 3595122239 win 8760 (DF)
8   14:52:49.653851  192.168.0.103.1046 > 192.168.0.102.80: P 7861111:7861361(250) ack 3595122239 win 8760 (DF)
9   14:52:49.663851  192.168.0.102.80 > 192.168.0.103.1046: . 3595122239:3595123699(1460) ack 7861361 win 32736 (DF)
10  14:52:49.663851  192.168.0.102.80 > 192.168.0.103.1046: P 3595123699:3595124724(1025) ack 7861361 win 32736 (DF)
11  14:52:49.663851  192.168.0.103.1046 > 192.168.0.102.80: . ack 3595124724 win 8760 (DF)
12  14:52:50.803851  192.168.0.103.1047 > 192.168.0.102.80: S 7862363:7862363(0) win 8192 <mss 1460> (DF)
13  14:52:50.803851  192.168.0.102.80 > 192.168.0.103.1047: S 3701480536:3701480536(0) ack 7862364 win 32736 <mss 1460>
14  14:52:50.803851  192.168.0.103.1047 > 192.168.0.102.80: . ack 3701480537 win 8760 (DF)
15  14:52:50.873851  192.168.0.103.1048 > 192.168.0.102.80: S 7862437:7862437(0) win 8192 <mss 1460> (DF)
16  14:52:50.873851  192.168.0.102.80 > 192.168.0.103.1048: S 2553725067:2553725067(0) ack 7862438 win 32736 <mss 1460>
17  14:52:50.873851  192.168.0.103.1048 > 192.168.0.102.80: . ack 2553725068 win 8760 (DF)
18  14:52:50.973851  192.168.0.103.1048 > 192.168.0.102.80: P 7862438:7862753(315) ack 2553725068 win 8760 (DF)
19  14:52:50.993851  192.168.0.102.80 > 192.168.0.103.1048: . ack 7862753 win 32736 (DF)
20  14:52:50.993851  192.168.0.102.80 > 192.168.0.103.1048: . 2553725068:2553726528(1460) ack 7862753 win 32736 (DF)
21  14:52:50.993851  192.168.0.102.80 > 192.168.0.103.1048: P 2553726528:2553726886(358) ack 7862753 win 32736 (DF)
22  14:52:50.993851  192.168.0.103.1048 > 192.168.0.102.80: . ack 2553726886 win 8760 (DF)
23  14:52:51.023851  192.168.0.103.1047 > 192.168.0.102.80: P 7862364:7862677(313) ack 3701480537 win 8760 (DF)
24  14:52:51.023851  192.168.0.102.80 > 192.168.0.103.1047: . 3701480537:3701481997(1460) ack 7862677 win 32736 (DF)
25  14:52:51.023851  192.168.0.102.80 > 192.168.0.103.1047: . 3701481997:3701483457(1460) ack 7862677 win 32736 (DF)
26  14:52:51.033851  192.168.0.103.1047 > 192.168.0.102.80: . ack 3701483457 win 8760 (DF)
27  14:52:51.033851  192.168.0.102.80 > 192.168.0.103.1047: P 3701483457:3701484633(1176) ack 7862677 win 32736 (DF)

搜索NAT和PAT有很多很好的资源可以更全面地了解其工作原理。