OSI层:以太网和IP地址

网络工程 转变 路由器 ip 奥西 IP地址
2021-07-30 07:17:24

我想了解主机将数据传输到本地 LAN 中的另一台主机与主机将数据发送到远程 LAN 中的另一台主机的区别我正在读的一本书引用了这个”

“...了解路由器,在网络层工作,不关心特定房屋的位置。他们只关心网络的位置以及到达它们的最佳方式。”

另一部分说:

“...每次在路由器之间发送数据包时,数据链路层都使用硬件寻址。每次在路由器之间发送数据包时,它都会稍后在数据链路上与控制信息一起构成帧。但是,该信息在接收路由器&只有原始的packet是完全完整的。这个数据包的这种框架在每一跳中都会继续,直到数据包最终被传送到正确的接收主机。”

自绘网络图

使用上图作为参考,我有一些问题:

  1. 是不是这样说,当Alice想向Charlie传输数据时,过程是这样的:

    • Alice 的数据包将包含 Alice IP 地址(SOURCE)和 Charlie 的 IP 地址(DESTINATION)。该信息被传递到数据链路层。
    • 在数据链路层,添加了 Alice MAC 地址(SOURCE)和 Charlie 的 MAC 地址(DESTINATION)。
    • 数据将被传输到交换机 A。交换机 A 检查目标 MAC 地址,并且由于交换机 A 知道 Charlie 所在的位置,它将数据传递到 Charlie 连接到的相应接口。
    • Charlie 将检查目标 MAC 地址以查看其是否正确。如果正确,它会将数据传递给网络层
    • 在网络层,数据链路层信息被剥离,查理检查目标 IP 地址。如果正确,查理将接受数据。

那是对的吗?

  1. 当 Alice 想向远程 LAN 中的主机发送数据时,在这种情况下,Bob,

    • Alice 是否将 DESTINATION IP ADDRESS 作为 ROUTER A IP ADDRESS(路由器 A 是默认网关)?因为 Alice 不知道 Bob 的 IP 地址,只有远程路由器 B 知道。

    • 目的MAC地址是BOB电脑的MAC地址吗?或者 Alice 连接到的交换机 A 的接口的 MAC 地址?

    • 这是否意味着当数据从路由器A传输到路由器B时,数据中的MAC地址被忽略了,路由器关心IP地址,知道将数据路由到哪里?

我希望我的问题有意义。在进入主题之前,我试图让我的基本知识正确。对不起,如果我的英语不好。

2个回答

首先 - 你的英语在我看来非常好。其次,您对桥接(问题 1)的总结以及您对该主题的理解非常好。我可能会说一些略有不同的说法,但您的总结是公平的,而且您的理解似乎很好。

让我们在这一点上做一个假设以保持简单——这都是以太网和 IP。

话虽如此,我将添加到您的桥接总和中的两个步骤可能会稍微澄清您对路由(问题 2)的理解:

  1. 当您的网络堆栈传递数据进行传输时,会完成路由表查找(IP 网络上的每个设备都包含一个路由表 - 从命令提示符查看它 - 在 linux 上键入“route”,在 windows 上键入“route print” ".)来确定两件事:

a) 将数据传输出去的接口

b) 如果目的地是可直接到达的或者是远程的(在路由器之外)。

  1. 一旦确定了路由,网络堆栈将为 MAC 地址进行 ARP。

因此,当 Alice 向 Charlie 发送数据时,她会进行路由查找 - 确定他的机器可以在 LAN 上直接访问。然后她为他的 MAC 地址发送 ARP。一旦确定了路由并获得了 MAC 地址,网络堆栈就可以组装数据包进行传输。您提到的此特定对话仅在检查目标 MAC 时遍历交换机 A。

现在我们已经更好地充实了问题 1,让我们将其中一些概念应用于问题 2。

当 Alice 希望向 Bob 发送数据时,第一步是路由查找。确定 Bob 不在 LAN 上。因此到 Bob 的路由是默认路由(假设路由器 A 是这样配置的)。(正如你的书指出路由器 A - 以及扩展爱丽丝 - 不知道鲍勃在哪里。他们只知道一般方向 - 或“路由”。)所以爱丽丝路由器 A 的 ARP。然后将数据包与目标 IP 地址组合在一起Bob 的(网络层)和路由器 A 的 MAC 地址(数据链路层)。收到此数据包后,路由器 A 1)剥离 Alice 的 MAC 地址(数据链路层) 2) 进行路由查找 3) 路由器 B 的 ARP 4)然后用路由器 B 的 MAC 地址重新组装数据包。路由器 B 为 Bob 重复这些步骤 ARPing 并转发数据包。

所以网络层是在开始时组装的——源 Alice 和目标 Bob——永远不会改变。另一方面,数据链路层被删除并重新组装行程的每一段。

在 1):

  • Alice 查看 dst IP/前缀,如果它认为它是本地子网,则会在她的 ARP 查找表中查找 Charlie 的 IP 的 MAC
  • 如果有,则发送数据
  • 如果没有,爱丽丝发出一个 ARP 广播,即:“谁拥有查理 IP 的 MAC?”
  • Charlie 用他的 MAC 响应并发送数据
  • 如果 MAC 数据不正确,查理将永远不会收到帧

在 2):

  • Alice 将 dst 地址放入 IP 数据包中。src 和 dst 地址永远不会改变(除非你在做 NAT 或其他诡计)
  • Alice 将她默认网关的 MAC 地址放入以太网帧
  • 为简单起见,我们只说 Alice 的默认网关 (rtr A) 将在其路由表中有一条路由,说明“Bob 所在的子网是通过路由器 B 的 IP 地址”
  • 然后,rtr A 将使用与 Alice 的计算机在查找 Charlie 时相同的 MAC 查找方案来查找 rtr B 的 IP,一旦找到,数据包就会从 rtr A 发送到 rtr B
  • rtr B 的远端与 Bob 在同一个子网上,所以再次进行 MAC 查找,最后 rtr B 将数据包发送给 Bob

编辑:本地子网上的 ARP 查找示例。

首先,我查看本地机器的 (10.0.48.1) ARP 表,发现没有 10.0.0.7 的条目:

$ arp | grep 10.0.0.7
# no output

因此,在使用tcpdump(使用我的本地 MAC 作为 src 和 dst(捕获传出帧和传入帧))在线侦听时,我在不同的终端窗口中从本地机器 ping 10.0.0.7。第一次 ping 有时会失败,因为它必须执行 ARP 查找:

$ ping 10.0.0.7
PING 10.0.0.2 (10.0.0.7) 56(84) bytes of data.
64 bytes from 10.0.0.7: icmp_seq=1 ttl=64 time=0.430 ms
^C

tcpdump窗口中,您可以看到我开始 ping 后发生的情况:

$ sudo tcpdump -nn -i eth0 arp and ether src a0:d3:c1:0e:73:68 or ether dst a0:d3:c1:0e:73:68

10:23:55.576782 ARP, Request who-has 10.0.0.7 tell 10.0.48.1, length 28
10:23:55.576950 ARP, Reply 10.0.0.7 is-at 00:21:9b:65:c9:b9, length 46

命令启动后的第一行,我的电脑发出“who-has 10.0.0.7 tell 10.0.48.1”。10.0.48.1 是我的电脑。此后,远程计算机用其 MAC 地址“10.0.0.7 is-at ...”进行响应。

查找和回复后,我的本地ARP表更新了。此条目将保持存在并且不需要对该 IP 的 MAC 进行另一次查找,直到该 IP 发生 ARP 缓存超时(Ubuntu 上的默认值为 60 秒):

$ arp -a | grep 10.0.0.7
? (10.0.0.7) at 00:21:9b:65:c9:b9 [ether] on eth0