【问题标题】:Can be two identical socket established?可以建立两个相同的socket吗?
【发布时间】:2014-07-07 18:57:40
【问题描述】:

套接字是 IP 地址、传输协议和端口号的组合。
例如:位于 NAT 后面的不同 LAN 上的两台主机可以拥有相同的 IP(比如 192.168.0.2)。
当这些主机连接到 Web 服务器时,是否可以建立两个相同的套接字?
我知道端口是随机生成的,但在不同的主机上可能会生成同一个。
或者是服务器告诉这个端口号已经被使用了? 或者是NAT设备,改变IP数据包中的SRC IP? 那么 NAT 设备如何知道将数据包发送回 LAN 上的主机的位置?

谢谢

【问题讨论】:

  • "behind NAT" - 所以他们将公共 IP 作为源 IP,而不是他们的 LAN IP。

标签: sockets


【解决方案1】:

正如您正确猜测的那样,分配临时端口号的是 NAT,因此它们不可能重合。因此,从服务器的角度来看,主机 #1 的目标副本类似于 192.168.0.2:46812,主机 #2 - 192.168.0.2:51378。当 NAT 接收到这些数据包时,它会根据端口号知道数据包属于 NAT 后面的哪个主机。如果您可以访问机器的控制台,您可以使用netstat -anp查看数字

【讨论】:

  • 所以所有的工作都做 NAT,重新封装 SRC IP 地址和端口号。谢谢大家的帮助:)
  • 是的,小修正 - 192.168.0.2 必须是 NAT 的地址。我也不会在这里使用“封装”,它更像是IP头重写。
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多