这是我一直想知道但找不到答案的事情。为这个愚蠢的问题道歉,但它是这样的:
如果两台计算机具有静态 IP,则它们可以轻松地通过 TCP/IP 相互发送数据包。
如果计算机位于防火墙/路由器/其他将其连接到 Internet 的设备后面,则该计算机没有外部 IP 地址。相反,它有一个 LAN 地址,例如 192.168。. . 如果这台计算机要访问网页,它会知道网络服务器的 IP 地址,或者使用 DNS 获取它。它发送一个 TCP/IP 数据包,但是服务器如何知道将答案发送到哪个 IP?
我想象如下:
Request: A --[send to C, return to A]-> B --[send to C, return to B]-> C
Response: A <-[send to A, return to C]-- B <-[send to B, return to C]-- C
有A
问题的计算机在哪里,B
它背后的路由器是什么,C
是目标网络服务器。但这似乎并不现实,因为B
必须记住将每个路由出去的数据包的回复转发给谁。这可能很多。
所以我的问题 1是:如何C
回复A
?
在另一种情况下,计算机A
想要向D
位于不同 LAN 网络中的计算机发送数据包。如果没有中央服务器,这可能E
吗?我想象这样的事情:
Request: A --[s.t. D, r.t. A]-> B --[s.t. D, r.t. B]-> C --[s.t. D, r.t. C]-> D
但是,没有办法A
知道 的地址D
,因为D
实际上没有外部 IP 地址。使用中央服务器的唯一解决方案E
是:
A connects to E; has an id in E's system which is id_A
D connects to E; has an id in E's system which is id_D
A sends a message to D indirectly, by sending it to E and saying it is for id_D
E forwards the message to D, as it knows how to communicate with D
即使在这种情况下,如果没有请求,我也不太明白如何E
向 发送消息(因为我的 PC <-> 服务器通信模型取决于 PC 请求和服务器响应的假设;见问题 1)。D
D
我的问题 2是:如果它们在不同的 LAN 中,是否有可能以及如何仅具有 LAN IP 的两台计算机直接通信。
如果你能给我指出一些初学者的文献,那就足够了。
感谢您的时间。