![同一网络内的数据包转发](https://linux22.com/image/1629424/%E5%90%8C%E4%B8%80%E7%BD%91%E7%BB%9C%E5%86%85%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E8%BD%AC%E5%8F%91.png)
我知道端口转发是如何工作的。但是,如果同一网络中的两个设备运行相同的进程,例如假设两个设备正在请求 HTTP 响应。由于两个服务都将在同一个端口上运行,路由器如何识别正确的设备来转发数据包
答案1
服务器识别数据包如下:
Level 2: Mac Addr:
Level 3: IP Addr
Level 4: Port
因此,为了演示,假设您的网络中有 3 个主机:ClientA、ClientB 和 ServerC。您在 ServerC 的端口 80 上运行了一个 Web 服务。
当 ClientA 发出请求时,会话如下:
ClientA (IPa, Porta) <-> ServerC(IPc, Portc)
可以是:
ClientA (192.168.1.51,10001) <-> ServerC(192.168.1.10,80)
当ClientB发出请求时,会话如下:
ClientB (IPb, Portb) <-> ServerC(IPc, Portc)
可以是:
ClientB (192.168.1.52,10001) <-> ServerC(192.168.1.10,80)
因此在服务器上,它有 2 个 uniq 会话:
192.168.1.51,10001-192.168.1.10,80
192.168.1.52,10001-192.168.1.10,80
如果 ClientA 向 ServerC 发出第二个请求,则:
ClientA (IPa, Porta2) <-> ServerC(IPc, Portc)
可以是:
ClientA (192.168.1.51,10002) <-> ServerC(192.168.1.10,80)
因此在服务器上,它有 3 个 uniq 会话:
192.168.1.51,10001-192.168.1.10,80
192.168.1.51,10002-192.168.1.10,80
192.168.1.52,10001-192.168.1.10,80
我希望我已经表达得足够清楚了。
菲利普。
答案2
简单来说,每个互联网数据包都有:源 IP、目标 IP、源端口和目标端口。源端口或多或少是随机的,这是关键。
您的路由器会构建一个表映射表,该表会考虑以上所有因素,并使用源和目标重写往返于其 IP 的数据包 - 因此,如果 2 个设备同时访问同一个 IP,则可以使用源端口。