Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 连接到同一路由器=相同的ip和端口?_Sockets_Tcp_Server_Ip_Client - Fatal编程技术网

Sockets 连接到同一路由器=相同的ip和端口?

Sockets 连接到同一路由器=相同的ip和端口?,sockets,tcp,server,ip,client,Sockets,Tcp,Server,Ip,Client,连接到同一路由器的三台计算机将具有相同的公共IP。如果这些计算机向我的服务器发送请求,它们是否也具有相同的端口,或者是否存在异常 编辑:当我从浏览器收到请求时,它创建的每个连接的端口都不同。浏览器客户端是否只选择路由器上可用的随机端口 连接到同一路由器的三台计算机将具有相同的公共IP 正确,从服务器的角度来看,而不是从客户端的角度来看 如果这些计算机向我的服务器发送请求,它们是否也具有相同的端口,或者是否存在异常 不,它们在路由器上没有相同的端口(不过,它们可能在每台客户端PC上) TCP连接由

连接到同一路由器的三台计算机将具有相同的公共IP。如果这些计算机向我的服务器发送请求,它们是否也具有相同的端口,或者是否存在异常

编辑:当我从浏览器收到请求时,它创建的每个连接的端口都不同。浏览器客户端是否只选择路由器上可用的随机端口

连接到同一路由器的三台计算机将具有相同的公共IP

正确,从服务器的角度来看,而不是从客户端的角度来看

如果这些计算机向我的服务器发送请求,它们是否也具有相同的端口,或者是否存在异常

不,它们在路由器上没有相同的端口(不过,它们可能在每台客户端PC上)

TCP连接由元组
{protocol,local ip,local port,remote ip,remote port}
唯一标识。因此,当多个TCP连接具有相同的
{remote ip,remote port}
(即,当多个客户端连接到同一服务器时),则每个
{local ip,local port}
必须是唯一的。反之亦然,当多个TCP连接具有相同的
{local ip,local port}
(当然,当客户端连接到多个服务器时),则每个
{remote ip,remote port}
必须是唯一的

当通过路由器时,在客户端看到的每个TCP连接将是
{TCP,lan ip,lan端口,服务器ip,服务器端口}
,而在服务器端,每个连接将被看作
{TCP,listen ip,listen port,client ip,client port}
,其中
{client ip,client port}
将是路由器的
{public ip,public port}
,因此每个
{public ip,public port}
必须是唯一的

因此,通过路由器连接到同一服务器的多个客户端根本无法使用路由器上的同一传出端口,否则服务器将无法区分这些连接

当我从浏览器收到请求时,它创建的每个连接的端口都不同

浏览器客户端是否只选择路由器上可用的随机端口

不,浏览器也不关心路由器是否存在。浏览器创建一个本地套接字端点,并将其绑定到可用的
{local ip,local port}
,然后使用它连接到服务器的
{server ip,server port}
。数据包进入操作系统,操作系统将其发送到路由器,路由器打开自己可用的
{public ip,public port}
对于每个新连接,然后将这些数据包转发给服务器。当服务器发回数据包时,路由器将在其公共NIC上接收这些数据包,并将它们转发给相应的客户端操作系统,后者将它们传递给相应的套接字端点

------------- | Client PC A | ------------- {tcp, client-lan-ip, client-lan-port, server-ip, server-port} /|\ | \|/ {tcp, router-lan-ip, router-lan-port, client-lan-ip, client-lan-port} -------- | Router | -------- {tcp, router-public-ip, router-public-port, server-ip, server-port} /|\ | \|/ {tcp, listen-ip, listen-port, router-public-ip, router-public-port} -------- | Server | -------- ------------- |客户端PC A| ------------- {tcp,客户端lan ip,客户端lan端口,服务器ip,服务器端口} /|\ | \|/ {tcp,路由器lan ip,路由器lan端口,客户端lan ip,客户端lan端口} -------- |路由器| -------- {tcp,路由器公共ip,路由器公共端口,服务器ip,服务器端口} /|\ | \|/ {tcp,侦听ip,侦听端口,路由器公共ip,路由器公共端口} -------- |服务器| --------
这里有一些关于临时港口的信息,可以帮助你完善。谢谢