局域网中的机器如何与外部机器通信?

How does a machine in LAN communicate with external machine?

假设局域网中的主机A有这样的地址192.168.0.123。它通过默认网关 192.168.0.1 连接到 Internet。

加 1

似乎 AB 之间的通信只能由 A 发起。因为外部机器不知道隐藏在局域网中的A

假设有另一台机器 C 位于另一个 LAN 中。 AC 想互相交流。我想做到这一点的唯一方法是让一些像 B 这样的 public 机器充当 中间人 .也许这就是为什么所有像 OICQ 这样的聊天程序都必须先登录服务器的原因,例如 B。所有聊天消息都由该中央服务器转发。而且我认为除非 A-BB-C 连接是持久的,否则 forwarding 只能通过 AC 实现为 pulling,而不是比 Bpushing,因为只有 AC 可以向 B.

发起请求

这称为 NAT:网络地址转换。路由器剥离外发数据包的源地址,并用自己的 public IP 地址替换它,然后转发数据包。在返回途中,路由器收到数据包并将目标地址替换为内部 IP 地址。

嗯 - 一个简短的回答 - 通过网络地址转换

稍微长一点的回答 -

所以这是@A 发生的事情 - 路由查找以获取下一跃点(在这种情况下为默认 gw)。 ARP 解析以找出默认网关的 MAC 地址),然后在网关处进行网络地址转换 - 在数据包进入荒野之前。

路由查找 -

每台配置良好的机器都应该有一个本地路由 table - 通常包含两条路由。一种是默认路由,另一种称为子网路由。可以有不止这两条路线,但这两条路线绝对应该有所帮助。 'subnet route' 有助于到达子网上的节点。 'default route' 有助于联系其他人。所以例如。在你的情况下会有两条路由(0.0.0.0/32 gw = 192.168.0.1)'子网路由不需要网关 - 实际上不会有 gw)。在这种情况下,由于 B 的地址不在子网默认路由上,因此将使用与其对应的 gw。

ARP 解析

A 发送广播 ARP 请求消息,要求网关的 MAC 地址 - 它希望在转发数据包之前使用该地址。由于网关知道它自己的 IP 和 MAC,它用自己的 MAC 地址回复。

NATing -

因此,当节点 A 上的浏览​​器(比如)想要连接到 Internet 节点 B(在 Web 服务器上)上的机器时。它将发送一个包含以下信息的 TCP 数据包 - DIP = B 的 IP/SIP = A 的 IP/DP = 80/SP = 10000(由 A 随机选择)/Proto = TCP.

现在,当此数据包到达节点 B 时。节点 B 可以按原样转发此数据包 - 如果它只是作为网关工作 - 没有 NAT 功能。从技术上讲,该数据包可以出去并到达 B,但 B 的回复无法返回 'A'。 'cos 192.168.X.X 是私有 IP 地址 - 这些数据包路由器不应该转发它们。因此,从 A 发出的数据包应该有一个主机 B 可以访问的 IP 地址。网关通常有一个 'global' IP 地址。该地址用于所有出站数据包。因此 return 路径上的数据包可以到达网关,然后到达 'A'。因此,IP 地址部分已得到处理。端口部分也需要处理。从技术上讲,B 可以简单地在传出 IP 数据包中重复使用源端口,但想象另一个节点(比如 C)使用相同的端口去往同一台服务器,因此网关将不知道将数据包发送给谁 - on return小路。因此,网关通常使用不同的传出端口,并在内部 IP 端口和外部 IP 端口之间保持映射(从技术上讲,这意味着网关只能可靠地转发 64 K 连接的数据包)。通常这不是问题,但对于 LAN 上具有持久 TCP 连接的大量节点,这可能是个问题。因此通常使用多个 IP 地址 - 有效地增加支持的连接数。

希望不会太长!