来自同一IP的多个客户端

时间:2013-08-25 13:05:21

标签: python sockets networking socketserver

如果你有一个使用特定端口的服务,并且你在同一个ip addess上有多台计算机,这是如何处理的?服务应该指定IP地址上的哪台计算机应该发送信息吗?如果同一个ip上的两台计算机使用相同的服务但​​请求不同的信息怎么办?

此外,如果客户端是动态IP,那么服务如何检测到ip已被更改,但客户端(和会话)是否相同?客户是否应该为每个请求标识自己(很像是基于http的cookie)?

2 个答案:

答案 0 :(得分:1)

你有很多问题,我会尽力回答它们。

  

如果你有一个使用特定端口的服务,并且你在同一个ip addess上有多台计算机,这是如何处理的?

有人提到多台计算机不能拥有相同的IP地址。在原始IP模型中,这是事实,尽管今天这种地址共享(通过NAT)很常见。但即使在原始模型中,如果你稍微重新拟定它,你的问题也是有意义的:

“如果您有一个使用特定端口的服务,并且您在同一个IP地址上有多个客户端,那么这是如何处理的?”

在同一主机上可能有多个客户端进程(因此共享相同的IP地址)尝试联系同一服务器(使用相同的目标地址+端口组合)。这在IP开发时很自然,因为大多数功能足以连接到网络的机器都是多用户机器。这就是TCP(和UDP)双方都有端口号(源和目标,或客户端和服务器)的原因。客户端进程在联系服务器时通常不指定源端口,但是主机操作系统在套接字(连接)的生命周期内将“短暂的”源端口分配给套接字。这就是服务器如何区分来自同一地址的客户端:源端口。

NAT将不同的主机(具有不同的“内部”IP地址)映射到相同的“外部”IP地址,但它还为传出的数据包分配唯一的源端口。因此服务器看起来就像原始情况一样(来自相同“主机”/ IP地址的多个客户端进程)。 NAT然后“解复用”服务器对不同内部主机的响应。

  

服务是否应该指定IP地址上的哪台计算机应该发送信息?如果同一个ip上的两台计算机使用相同的服务但​​请求不同的信息怎么办?

服务器通过将响应发送到不同客户端用作源地址/端口的相同地址+端口组合来完成此操作。这主要由套接字API自动处理。如上所述,两个客户端将获得单独的连接,并且服务器希望将它们作为单独的“会话”处理,并且不会在这些会话之间混淆请求。

  

此外,如果客户端是动态IP,那么服务如何检测到ip已被更改,但客户端(和会话)是否相同?客户是否应该为每个请求标识自己(很像是基于http的cookie)?

现在,这是一整套蠕虫。如果服务想要“生存”客户端IP地址更改,那么它将不得不使用其他一些标识符。 HTTP(会话)cookie就是一个很好的例子。 TCP连接因地址更改而中断 - 这是正常的,因为在设计TCP / IP时,这些更改不会被视为正常操作的一部分。已经尝试使TCP / IP对这些变化更加健壮,例如移动IP,MPTCP和可能的SCTP,但这些都没有真正进入主流。基于HTTP(S)的协议和使用会话cookie可能是您最好的选择。

答案 1 :(得分:0)

我认为我完全不懂你所说的。多台计算机无法在同一个IP上运行,这不是互联网的工作原理。有些协议可以解决这些问题。

您的意思是说您是服务器并且多台计算机尝试连接到您? 如果是这样,你在一个端口监听,当你得到一个连接时,你打开一个新的线程,用于该计算机的服务,主循环仍在监听