我熟悉基本的 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)的东西。这里会发生几件事之一:
(如果机器 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/