假设我和我的朋友通过 LAN 电缆连接我们的计算机。
我用我朋友的 IP 地址 ping 他的。
它是如何工作的?
因为我们在同一个网络中,所以我们甚至不需要 IP 地址,对吗?
IP 寻址不是仅与网络间通信有关吗?
ping 命令将对他的 IP 地址做什么?它最终将如何找到他的物理地址(NIC地址)?(这里没有 ARP,因为这会涉及网络边缘的路由器,而这里不适用)。
我是不是哪里错了?
答案1
你问的是OSI网络模型,即使您没有意识到这一点,即使 OSI 模型与 TCP/IP 并不十分相关。
计算机网络的工作方式是图层。OSI模型中的层包括:
- 物理(例如铜、光纤等)
- 数据链路(例如以太网、ppp、fddi 等)
- 网络(例如 IPv4、IPv6、IPX 等)
- 传输(例如 TCP、UDP 等)
- 会话(用于 OSI,但这里的大多数内容由 TCP/IP 中的第 4 层处理)
- 演示(例如 ASCII 与 EBCDIC 或 MIME)
- 应用程序(例如 HTTP、SMTP、DNS 等)
为了使两台计算机能够通过网络进行通信,它们必须使用相同的语言网络层协议。它不一定是 IPv4 或 IPv6,可以是 IPX 或 X.25。但它必须是某物。
我们仅假设 IPv4,因为它是最常见的。
两台计算机都需要一个 IP 地址。在当今时代,它们最有可能从 DHCP 服务器分配一个 IP 地址,或者使用 ZeroConf 动态分配自己的 IP 地址。因此它们将要有 IP 地址。
当你 ping 时会发生什么?
第一的发起会话的计算机将发送广播第 2 层 ARP 数据包。ARP 是地址解析协议。ARP 用于发现与特定第 3 层地址关联的第 2 层地址。广播是一种特殊数据包,它指示网络交换机将数据包发送到具有连接链路(即具有 L1 连接)的所有物理端口。具有指示的第 3 层地址的计算机将以单播 ARP 回复进行响应。ARP 完全通过 L2 寻址进行(ARP 结果被缓存以供以后查找,因此它不必继续发送 ARP 请求)。
下一个制作一个 ICMP 回显请求数据包。源 L2 地址将是源计算机的以太网地址。L3 源将是源计算机的 IP 地址。目标 L2 和 L3 地址将是 ARP 发现的地址。然后数据包通过线路发送到交换机。
交换机检查目标 L2 地址,并查找其计算机辅助制造表来识别哪个物理端口具有指定的以太网地址。然后数据包通过正确的物理端口通过线路发送。
什么时候当目标计算机收到数据包时,它首先检查 L2 地址,以确保它与接收数据包的物理接口的 L2 地址匹配。如果匹配,则检查 L3 地址,以确保它与分配给物理接口的 3 层地址匹配。如果所有这些都符合要求,则数据包将由上层协议处理(在本例中为 ICMP,由内核处理)。如果不匹配,则丢弃数据包。
对于 ICMP 回复,工作方式几乎相同,只是响应计算机不需要发送 ARP 请求,因为它收到了带有 L2/L3 对的数据包,它可以将其直接安装到 ARP 缓存中。
答案2
因为我们在同一个网络中,所以我们甚至不需要 IP 地址,对吗?
嗯。严格来说不是。
但如果你想通过 TCP/知识产权那么你就需要一个。几乎所有东西都需要它。
假设我和我的朋友使用 LAN 电缆连接我们的计算机。我用朋友的 IP 地址 ping 他。它是如何工作的?
您的计算机查看目标 IP 是否在同一子网中。
如果是(检查路由表!),则查看是否缓存了 ARP。
无 arp -> ARP 发现然后 ICMP 回显请求(ping)通过 IP 发送到目标 NIC(基于目标 MAC)。
它最终将如何找到他的物理地址(NIC地址)?
它会查看 ARP 缓存,如果目标不存在,则会广播一个数据包,内容是“谁有 IP 号码 abcd?”。PC 会回答“我的 MAC 是 aa:bb:cc:dd:ee:ff。我有 IP abcd”
这里没有 ARP,因为这会涉及网络边缘的路由器,而这不适用于这里。
呃,不。将使用 ARP。ARP 非常本地化。一旦离开本地网络,ARP 将不再使用(因此路由器之外没有 ARP)。
IP 寻址不是仅与网络间通信有关吗?
不。
我甚至不会尝试写一个很长的答案。相反,我会向你推荐这篇之前写得很好的文章:https://serverfault.com/questions/49765/how-does-ipv4-subnetting-work
答案3
如果您通过 IP 进行通信,则需要一个 IP 地址。如果没有目标 IP 地址,ping 就无法运行。
答案4
您的困惑比一篇长文所能回答的还要深。您需要阅读一本好的网络教科书。
如果你不想花时间,你可以尝试阅读维基百科页面亚太裔美国人保护协会,地址解析协议以及网络层和数据链路层,但这仅仅是一个开始。