尝试理解 IP 数据包流

尝试理解 IP 数据包流

所以我很难理解数据包是如何从一台机器传输到另一台机器的。下面我给出了一个计算机 1 尝试连接到计算机 2 的示例。

Computer 1  
IP: 192.168.1.11  
Subnet: 255.255.255.0  
Default Gateway: 192.168.1.1  
MAC: 00:00:00:00:00:aa

Router 1  
IP: 192.168.1.1  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:bb  

Router 2  
IP: 192.168.2.1  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:cc  

Computer 2   
IP: 192.168.2.1  
Subnet: 255.255.255.0  
Default Gateway: 192.168.2.12  
MAC: 00:00:00:00:00:dd

如果我从计算机 1 连接到计算机 2 并跟踪数据包的流动,我相信信息离开路由器 2 的源地址将是 192.168.1.2,源 MAC 地址将是 00:00:00:00:00:cc。据我所知,目的地保持不变,但源将在其路径中更新。这是正确的还是我遗漏了什么?

答案1

呼。考虑到您的情况,这个问题有点棘手。

首先,路由器 2 不应该与路由器 1 共享位于其客户端接口上的接口。

在您的示例中,所有 4 台设备共享同一个 LAN 段,顺便说一下,该段位于 192.168.xy 系列的不可路由(编辑:跨“Internet”)IP 地址范围内。

更好的方法是这么想:

Computer 1
IP: 192.168.1.100
Subnet: 255.255.255.0
Default Gateway: 192.168.1.1
MAC: 03:00:00:00:00:11

Router 1
IP: 192.168.1.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:22
IP: 192.168.12.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:33

Router 2
IP: 192.168.12.2
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:44
IP: 192.168.2.1
Subnet: 255.255.255.0
MAC: 03:00:00:00:00:55

Computer 2
IP: 192.168.2.200
Subnet: 255.255.255.0
Default Gateway: 192.168.2.1
MAC: 03:00:00:00:00:66

忽略 MAC 以 03 十六进制字符开头的事实,这只是为了确保网络势利者的正确性。[编辑] 我必须将其修改为 0x03,以便它既是本地分配的又是全局唯一的。

所以这里发生的情况是:计算机 1 有一根电缆插入路由器 1。这两个共享 192.168.1.x 网络。路由器 1 有一根电缆连接到路由器 2。它们共享 192.168.12.x 网络。路由器 2 有一根电缆连接到计算机 2。它们共享 192.168.2.x 网络。

在您最初的描述中,所有 4 台设备都必须连接到同一个交换机才能工作……在这种情况下,计算机 1 将直接与计算机 2 通信。注意:对于网络奇才,我知道您可以执行静态路由来强制原始网络配置工作,但这不是该用户所问的……

现在来讨论您的具体问题。

您说对了一半。计算机 2 看到的 MAC 地址是路由器 2 的 MAC 地址。在我的示例中,该地址是 MAC 03:00:00:00:00:55。但是,它看到的 IP 地址是计算机 1 的 IP 地址。这就是计算机 2 可以回复计算机 1 的方式。从理论上讲,IP 地址是“全球唯一的”。

根据您的知识水平,网络的工作方式是第 2 层(数据链路/MAC 层 - 在全以太网/IPv4 环境中)地址逐跳更改。逐跳定义为“经过任何第 3 层处理设备”。路由器和计算机几乎总是处理第 3 层。交换机可以处理第 3 层,但它们往往不处理它。

因此,当消息从计算机 1 传输到计算机 2 时,流程如下:

在 HOP 1 处 - 计算机 1 和路由器 1 之间

SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:11 (Computer 1)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:22 (Router 1 - Interface facing Computer 1)

第 2 跳 - 路由器之间

SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:33 (Router 1 - Interface facing Router 2)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:44 (Router 2 - Interface facing Router 1)

在 HOP 3 处 - 路由器 2 和计算机 2 之间

SourceIP: 192.168.1.100 (Computer 1)
SourceMAC: 03:00:00:00:00:55 (Router 2 - Interface facing Computer 2)
DestIP: 192.168.2.200 (Computer 2)
DestMAC: 03:00:00:00:00:66 (Computer 2)

所以您会看到,IP 地址层(第 3 层)地址在整个通信过程中保持不变,但数据链路层(第 2 层)地址每次涉及另一个处理第 3 层地址的设备时都会发生变化。

希望对您有所帮助。如果仍然感到困惑,请随时回复,我会尝试解释您觉得有挑战性的特定子集。

答案2

你的例子有缺陷。(我看到你编辑了它,但它仍然有缺陷。)

在您的示例中,路由器 1 和 2 位于同一子网(即它们具有相同的子网掩码)。因此,计算机 1 不会从默认网关发送任何内容,它只会将数据包从 NIC 中丢弃,并期望交换机或介质将其发送到计算机 2。

现在,如果将路由器 2 和计算机 2 更改为如下形式:

Router 2
IP: 192.168.2.2

Computer 2
IP: 192.168.2.12

[编辑昵称以粗体显示] 然后路由器 2 和计算机 2 将打开(他们有自己的独立子网, 不是:)单独的子网,这个例子就会开始变得更有意义了。

但是,由于您没有提供图表,我在这里假设您希望流量以这种方式移动:

计算机 1 <-> 路由器 1 <-> 路由器 2 <-> 计算机 2

路由器 1 和路由器 2 不能位于同一子网中,否则无法正常工作。实际上,它们之间会存在第三个网络,它们之间会交换流量。(默认路由引用私有网络也有点奇怪,通常是指“Internet”,但肯定是可能的。)

以下是我猜测您要做的事情,对于图片的粗糙,我深表歉意: 在此处输入图片描述

MAC 地址不会在路由器之外传播。计算机 1 想要向计算机 2 发送数据包。计算机 2 不在同一子网中,因此计算机 1 将其发送到默认网关。

这最终是一个从计算机 1 的 MAC 发送到路由器 1 的 MAC 的帧。

路由器转发数据包,转发意味着从不同的接口复制。因此,路由器 1 将看到它从计算机 1 获得的数据包的目的地是计算机 2。(在这种情况下,必须使用静态路由进行编程或使用 RIP/OSPF 等协议才能知道这一点。)

因此,IP 数据包现在具有路由器 1 的第二个 NIC 的源 MAC 和路由器 2 的第一个 NIC 的目标 MAC。依此类推,直到到达计算机 2。

答案3

你说对了一半,MAC 地址随着每次跳跃而改变,但是连接的 IP 地址不会改变,除非有内联 NAT/PAT 技术,或者正在使用应用程序代理。

请注意,我认为 computer2 的地址应该是 192.168.2.12,而不是 1.12。这意味着您的数据包根本不会经过 router2。我认为您正在寻找类似的东西:

Computer 1  
IP: 192.168.1.11  
Subnet: 255.255.255.0  
Default Gateway: 192.168.1.1  
MAC: 00:00:00:00:00:aa

Router 1  
LAN IP: 192.168.1.1  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:bb  

WAN IP: 192.168.3.1  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:b1  

Router 2  
LAN IP: 192.168.2.2  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:cc  

WAN IP: 192.168.3.2  
Subnet: 255.255.255.0  
MAC: 00:00:00:00:00:c1 

Computer 2   
IP: 192.168.2.12  
Subnet: 255.255.255.0  
Default Gateway: 192.168.2.2  
MAC: 00:00:00:00:00:dd

所以我们有三个网络,计算机 1 所在的局域网 (.1.X)、两个路由器之间的网络 (.3.X) 以及计算机 2 所在的局域网 (.2.X)。

MAC 地址用于寻址帧,因此它们与每个 LAN 的实现相关。您可以使用 mac 地址 ::aa 在 Computer1 和 Router1 所连接的网络上发送帧,但如果您尝试在此 LAN 上将帧发送到 ::dd,它将无法到达目的地。因此,mac 地址仅适用于承载具有该 MAC 的设备的网络。

但是,IP 地址是在网络之间传递的,因此它保持不变。数据包每次经过路由器时都会重新封装在新的帧中,但 IP 数据包本身保持不变。这很重要,因为如果您的场景中的 Computer2 收到来自 192.168.1.1 的带有 MAC ::cc 的数据包,它将无法分辨该数据包不是来自路由器,并且当 computer2 响应时,router2 不知道它是在响应谁。

因此,computer2接收的数据包的源IP为192.168.1.11,但MAC地址为::cc。

NAT/PAT 使这变得有点令人困惑,因为需要更多信息来做出源/目的地决策,所以请记住,使用真实家用路由器的场景会更完整一些。

答案4

哎哟。路由器不会只有一个 IP。我建议阅读 Wendell Odom 的“网络第一步”。

您写道“据我所知,目的地保持不变,但源会在经过其路径时进行更新。”

你在说什么不清楚。你写的不多,而且你写的那一点点都是模棱两可的。如果你写不清楚,你就无法清楚地理解。

不要只说“源”和“目标”。请具体说明您指的是源 IP 地址、源 MAC 地址、目标 IP 地址还是目标 MAC 地址。

源 IP 和目标 IP 将保持不变。(除非存在 NAT 或某些非常不寻常的情况,而您没有这种情况)

MAC 地址(源和目标)可以更改。路由器会重写 MAC 地址。虽然您的路由器设置不正确。请参阅 ultra 的图片,了解路由器如何拥有多个 NIC,每个 NIC 在自己的子网上都有自己的 IP。

相关内容