2016-11-04 66 views
0

我知道,为了连接到一个网站,在TCP层,源端口是一个高随机数,目的地址是80.所以,响应段有80个源端口和该随机端口号作为目标端口。HTTP流量vs套接字流量

我明白,客户端在等待HTTP请求的响应时会监听该随机端口号。

当我建立一个TCP服务器套接字并且我想让它监听特定的端口(47860)时,为什么我应该配置我的路由器并转发端口,而在使用Web浏览器时我不需要这样做? HTTP套接字和通用TCP套接字有什么区别?

+0

HTTP是使用TCP的应用层协议。 '套接字'与TCP层相关,而不是在应用程序中。没有“HTTP套接字” – Prabhu

+0

您必须阅读TCP。客户端不听任何东西,连接已经打开。也没有像HTTP套接字这样的东西。 –

+0

在基于HTTP的进程下,我们找到一个TCP套接字;为此,我使用了“HTTP套接字”术语。 – Engineer

回答

1

当NAT后面的客户端启动到远程主机的流量时,NAT路由器会记住这一点。这样,从该远程主机到本地客户端的响应可以重定向到客户端。

当你有后面NAT服务器,而不转发其侦听端口,任何进入的流量,该端口将被路由器丢弃:有来自NAT 背后没有事先流量客户端,所以没有什么要记住,就路由器而言并没有什么可转发的。

+0

假设我连接到一个网站,并且我的随机源端口号是35691.路由器生成另一个公共源端口号(例如43512)。路由器是否打开此端口(43512)以接收HTTP响应? – Engineer

+0

@Engineer yes .. – CodeCaster

+0

我禁用了路由器防火墙,然后用canyouseeme.org检查了端口。港口仍然关闭。如果它们被ISP阻止,我的路由器如何能够接收HTTP响应? – Engineer

1

@ CodeCaster的答案是正确的,我会试着给出更多细节。

所以我们在这里有两种情况:1)NAT后面的web浏览器2)NAT后面的web-server。它们之间的主要区别是第一个数据包的方向。 (1)网页浏览器发起通信,因此通过路由器发送一个数据包。路由器中的NAT将此数据包注册为将源IP /端口映射到目标IP /端口的表中的条目。当路由器收到来自网络服务器的回复时,它会在NAT表中查找该条目以确定将数据包转发到哪里,然后您的网络浏览器接收到回复。

(2)路由器中的NAT不知道您的网络服务器是否存在。外部Web浏览器使用您的公共IP向您的Web服务器发送请求,并将数据包传送到路由器。现在路由器不知道如何处理数据包,因为NAT表和端口转发都没有注册端口80。换句话说,NAT会自动处理传出连接,并为输入连接配置端口转发。

+0

非常感谢 – Engineer