数据包如何知道如何到达目的地?

问题描述

因此,我想知道如果存在 IP 伪装(将单个设备的 IP 隐藏在网络中),数据包如何知道其目的地,但其中一个线程向我解释了这一点: “基本上客户端在发送请求时在网络地址转换器上注册自己的本地地址和唯一端口(NAT)设备/“路由器”。所以当服务器回复时只有公共 IP 地址,它使用保留端口来查看子网中的何处发送信息。”

好的,但是这个“请求”(我相信是 3 次握手中的 SYN)如何知道他应该请求哪个设备连接?

示例: 我想向某个网络中的 Computer1 发送一些数据。该网络中还有 3 台计算机:Computer2、Computer3 和 Computer4。 我与 Computer1 执行 TCP 连接的第一件事是 3 次握手(在此期间我将自己的本地地址和唯一端口放在 NAT 设备中,但是 Computer1 仍然不知道我想联系他)

所以从 Computer1 的角度来看:“某些设备在我的 NAT 路由器中发送了他的本地地址和唯一端口,因为他想连接到我、Computer2、Computer3 或 Computer4(并且可能稍后发送一些数据)。但是我怎么知道是我还是我的 3 个同事之一呢?在数据包头中只有我们路由器的 IP 地址。”

我是网络新手,看过几个教程,但仍然不明白。如果有人向我解释,我会很高兴,如果已经被掩盖了,请不要生我的气。

解决方法

因此,从 Computer1 的角度来看:“某些设备在我的 NAT 路由器中发送了他的本地地址和唯一端口,因为他想与我、Computer2、Computer3 或 Computer4 连接(并且可能稍后发送一些数据)。但是怎么做我知道是我还是我的三个同事之一?在数据包头中只有我们路由器的 IP 地址。”

它不知道,也不在乎。它需要做的就是能够向正确的发起机器发送响应。为此,它需要将数据包发送到一台知道并关心它的机器,那就是 NAT 路由器。

NAT 路由器如何知道?因为它看到了创建请求的原始数据包的本地源地址。

服务器如何到达NAT路由器?它只是将响应数据包寻址到它收到的请求的源地址,这将是 NAT 路由器的公共地址。

,

路由器使用转发表来确定数据包应该去哪里和从哪里接收来完成这个任务。当数据包到达路由器时,它将查看目标地址以确定将数据包发送到何处。基本上是一个精心设计的概念,所有路由器都可以计算,在发送和接收数据时,它们还会保存日志,并在某些情况下与 mac、设备、IP 和 DNS 地址以及位置数据协调更新这些表。

就您的问题而言,您的 3 位同事通过同一路由器将数据包发送到目的地。每台计算机都有一个动态 IP 和分配给每台计算机的 MAC 地址。知道每个数据包来自路由器 NAPT 或 IP 伪装(用这些数据更新转换表)的位置。

这个问题已经在下面的不同上下文中得到了回答。

来源:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...