networking - 基于 OSI 模型的数据包如何通过 Internet 从一台计算机传输到另一台计算机

标签 networking

我熟悉基本的 OSI 模型,但我总是感到困惑,数据包如何通过 Internet 从一台机器传输到另一台机器,以及 OSI 层是如何形成的?例如,对于以下拓扑:

机器A<----->交换机<---->路由器<---->路由器<---->路由器<---->交换机<---->机器B

其中显示了多个路由器来代表 Internet,当机器 A 向机器 B 发送数据包(例如通过 FTP 的简单“ls”命令)时,在 OSI 层级别会发生什么。

以上只是一个建议的例子,但如果有人可以用任何其他网络拓扑来解释,那也很好。我正在寻找一个非常基本的解释,说明数据包如何在每个节点(机器、交换机、路由器等)处转换为不同的 OSI 层。

最佳答案

路由器使用 IP 层(第 3 层),交换机使用数据链路层(第 2 层)。第 1 层是通过线路的物理 1 和 0,第 2 层是数据链路层,它是以太网和点对点协议(protocol) (PPP) 等协议(protocol),它在相邻节点之间传送有关 MAC 地址的信息,来自和并允许错误检测和重传。第 3 层是 IP 层,它携带有关数据包在整个网络中的来源和目的地的信息,而不仅仅是当前跃点。

传输将是这样的:

机器 A 想向机器 B 发送一个数据包。机器 A 知道机器 B 的 IP 地址,因此它将它放在第 3 层数据包中。但是,机器 A 需要将下一跳的 MAC 地址放入第 2 层数据包中。如果它不知道,那么它将使用目标 IP 向网络发送一个称为 ARP 请求(地址解析协议(protocol),在此处阅读:http://www.tildefrugal.net/tech/arp.php)的东西。这里会发生几件事之一:

  • IP是本地的。具有该 IP 的机器将使用其 MAC 地址回复发件人。
  • IP 是非本地的。网关路由器将检测到这一点并发送其 MAC 地址。
  • IP 是非本地的,并且机器 A 的默认网关和子网掩码已设置。使用此信息,机器 A 可以确定 IP 地址的非本地性并将其发送到路由器的 MAC 地址(如果还不知道,则为 ARPing)。

  • (如果机器 A 早先发现了这个,它将在 ARP 缓存中,机器 A 将使用它。)现在 MAC 地址已发送,数据包可以被传输(物理层 1 执行实际的数据传输)电线)。下一站将是开关。交换机知道列为第 2 层目标的 MAC 地址在哪个出站端口上,因为它跟踪它看到的数据包来自的每个 MAC 地址以及它来自哪个端口 - 如果它不知道,那么它将在每个单一端口,保证它会到达。

    因此,数据包到达路由器。 IP 模型的酷之处在于它将网络/世界中的每个 IP 地址划分为层次结构 - 根据定义,子网不能部分重叠子网,它们要么完全包含它们,要么完全包含在它们之中。因此,只要子网遵循这个层次结构,路由器就可以通过查看 IP 将在其表中属于哪个子网,明确地确定 40 亿个可能的 IP 地址中的每一个在网络上的位置!然后将数据包从该端口发送出去。

    当数据包通过互连的 ISP 的路由器、 Backbone 基础设施等时,它到达机器 B 的路由器,在那里发生相反的过程 - 路由器 B 看到它的目的地是机器 B 并将其发送入站。 (类似地,如果不知道,路由器 B 将不得不使用类似 ARP 的过程来查找机器 B 的 MAC 地址。)从这里开始,其余的应该是微不足道的。

    很好的引用:

    https://web.archive.org/web/20120129120350/http://www.tildefrugal.net/tech/arp.php

    http://en.wikipedia.org/wiki/Data_link_layer

    http://en.wikipedia.org/wiki/Network_switch

    http://en.wikipedia.org/wiki/Network_layer

    http://en.wikipedia.org/wiki/Routing

    http://en.wikipedia.org/wiki/Router_(computing)

    http://en.wikipedia.org/wiki/Address_Resolution_Protocol

    关于networking - 基于 OSI 模型的数据包如何通过 Internet 从一台计算机传输到另一台计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16125987/

    相关文章:

    networking - 将代理转发到 WLAN 接入点的网关

    google-chrome - 仅 Chrome 上的 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误

    java - 单个java程序可以通过两个不同的端口发送和接收数据吗

    c# - 我可以将 TcpClient 从一台服务器传递到另一台服务器吗?

    sockets - Haskell 'timeout' 函数在应用于 'connect' 时不起作用

    linux - 写入 TCP 套接字不断返回 EAGAIN

    c# - 现有连接被远程主机强制关闭

    聊天服务器和客户端实现?

    ios - `application:openURL:options` 期间网络连接丢失

    Android - 强制网络请求通过 wifi 而不是移动网络