将OSI模型视为一种抽象概念很有用,它使我们能够推断网络上关注点的分离。
译自 Deciphering the Open Systems Interconnection Model,作者 Laura Santamaria。
除非你学习过网络认证,否则开放系统互联 (OSI) 模型对你来说可能多少有些神秘。也许你从同事那里听说过它,也许你在 AWS 上某个产品的营销活动中看到过它。
也许你认为“第 3 层”只是一个新的流行语。然而,对OSI 模型的这种简写引用,如果你能解码它们,就会很有用,因为它们可以帮助你理解工具可能适合的网络堆栈位置,或者在事故呼叫期间查找问题的位置。
在我们深入探讨之前,让我先解决一个有争议的问题。许多人会说理论上的 OSI 模型已经过时了。该模型是理论性的,这是真的,现实世界肯定比它可能让你相信的要复杂得多。它的各层并没有与特定的设备完美对应,并且存在其他更准确地反映现实世界的模型,例如传输控制协议/互联网协议 (TCP/IP) 模型。
图片 1
将 OSI 模型视为一种抽象很有用,它使我们能够推断网络上关注点的分离。当我们的数据无法到达目的地时,我们用它来思考故障排除步骤,并且在我们构建分布式系统时,我们用它来思考架构需求。
它不是一个具有严格边界和规则的定理。它是一种我们在系统科学中发现的理论:试图近似现实世界以帮助我们更好地理解它。
为了理解该模型,让我们跟踪数据从你的计算机到另一个系统,并探索它在此过程中是如何变化的。假设你正在使用你的计算机,需要与同事聊天。你打开你的聊天应用程序并写一条消息。数据移动开始,当你发送它时,OSI 模型就开始发挥作用。该模型的顶层四层称为“主机层”,由于我们位于主机(你的计算机)上,因此我们将从这里开始本练习。
主机层
我们从第 7 层,应用层开始。“应用”在这里并不一定指你的聊天应用程序,而是指它用于发送消息的协议的实现。例如,该协议可能是 WebSocket。此层中的其他协议包括用于电子邮件应用程序的 SMTP(简单邮件传输协议)或用于 Web 浏览器的 HTTP(超文本传输协议)。你使用的应用程序或 API 使用这些协议接受数据。在本例中,你的聊天应用程序实现逻辑以接收你使用的数据并识别正确的传输协议。
第 6 层:表示层
一旦你的应用程序识别出正确的协议,数据就会下降到第 6 层,表示层。在表示层——它仍然在你的机器上,甚至可能在同一个应用程序中!——数据被转换为正确的协议。例如,如果你正在发送 GIF,表示层会获取显示格式并对其进行编码以通过网络传输。由于我们在聊天应用程序中,聊天也可能被计费为加密通信。数据加密也发生在第 6 层,压缩也可能发生在你发送图像时。
第 5 层:会话层
然后我们下降到第 5 层,会话层。(我们仍然在你的计算机上。)如果你刚刚打开你的聊天应用程序,你可能需要登录。第 5 层是我们打开会话并进行身份验证的地方。如果你开发或维护过具有登录或身份验证需求的应用程序,你可能熟悉用户会话。视频或音频会议应用程序在开始呼叫时打开会话,并在终止呼叫时关闭会话。在这种情况下,当你登录应用程序时,它设置并发送了一系列调用和响应中的第一个,以建立连接。根据应用程序的架构,当你与同事发送私信时,可能会打开另一个会话。
第 4 层:传输层
注意,我们已经到达了第四层,但仍然没有离开主机!在这个抽象的世界里,没有任何数据离开你的电脑,它仍然只是一堆没有特定方向的数据。这种情况即将改变。第四层,传输层,是主机中的最后一层。在这里,数据开始打包并准备传输。这种打包的正式术语是“封装”。(在接收端,当数据从较低层移动到较高层时,它会经过“解封装”。)在第四层,例如 TCP/IP 连接,一旦数据到达目标机器(目标端口),就会获得一个要使用的端口号,以及它将从中离开的端口号(源端口)。此时,数据及其报头称为段。从这里开始的段流入将离开你的电脑的数据流中,因此此处生成的所有元数据的报头对于在另一端将其解析回正确的服务至关重要:你同事的聊天应用程序。
最底下的三层称为媒体层。“媒体”一词在这里指的是硬件,这些层主要在专用于网络的硬件上工作。
第三层:网络
在第三层,网络层,数据通常会被分解成较小的块,称为数据包,以便传输。每个数据包都带有一个报头,其中包含主机地址和最终目标地址(如果通过互联网传输,通常是 IP 地址)。在硬件方面,第三层通常由路由器表示。最终目标地址通常是设备存储的路由表的一部分。路由器使用路由算法来决定到达目的地的最佳路径,因为它通常不止一步之遥,并且数据包经常从一个路由器转发到另一个路由器。
第二层:数据链路层
参考路由表获取 IP 地址后,我们下降到第二层,数据链路层。在这里,你的 MAC(媒体访问控制)地址被添加到数据的报头作为源地址,然后系统尝试识别哪个设备应该是数据到达最终目的地的下一站。一旦它拥有中间连接的 MAC 地址,系统就会将该 MAC 地址作为目标地址添加到报头中,创建一个帧。然后系统识别要从中发送帧的端口,准备下降到第一层。如果我们将不同的层与不同的硬件部件关联起来,这一层的物理盒子将是交换机,它保存 MAC 地址表,该表将每个物理端口映射到特定的 MAC 地址。总有一个端口被保存为万能端口,表中没有的所有内容都会被转发。
在我们的示例中,在这个阶段没有涉及独立的交换机。第二层(以及第三层,从技术上讲)的逻辑位于你的计算机内部。第二层逻辑和使用的第一层端口曾经是称为网络接口卡 (NIC) 的物理硬件的一部分。如果你以前组装过台式机,你可能知道它为网卡。(你可能记得通过总线将网卡连接到主板或插入一个加密狗。)现在大多数用户系统都将此接口内置到主板或片上系统中。然而,在更大的环境中,例如办公室网络,在第二层可能会有一个交换机(或交换机路由器组合设备)。
第一层:物理层
最后,我们下降到第一层,物理层。数据现在可以移动了!数据总是以比特流(0 和 1 的流)的形式在物理层移动,这可以意味着物理电缆或无线连接。但是,如果你连接到互联网,数据必须在某些时候穿过物理电缆。第一层中最大的电缆构成了互联网骨干:巨大的光纤和铜缆束,在地下和海洋下在世界各地的不同中心之间运行。骨干网在交换点相遇,数据从一个 ISP 或网络转移到另一个 ISP 或网络。由于存在许多交换点和网络,因此存在许多路由,这就是运输变得复杂的地方。
实际上,你的数据会沿着各种不同的路径传输。它会经过你笔记本电脑上的所有OSI层,然后通过1层连接跳转到你的无线接入点。之后,它可能会在接入点内部上升到2层以获取新的MAC地址目标,然后再下降到1层,跳转到一个将数据转发到路由器的交换机。然后,路由器会查询其路由表以决定使用哪个端口。假设你的数据需要通过互联网传输,路由器会将其发送到你的ISP,并通过各层传输到1层。它也可能被发送到另一个路由器,然后该路由器会将其跳跃式地发送到目的地。设备可以处理多个OSI层,因此如果你试图追踪它,这个概念模型可能会失效。如果你正在使用VPN,那么当你的数据在互联网上传输时,事情会变得更加复杂。
一旦你的数据到达正确的系统,它就开始向上返回到同事的电脑。它可能会通过交换机或路由器(或两者!)到达正确的机器,然后向上层移动,从1层到7层。当它向上移动时,报头会在解封装过程中被剥离,数据会被重新组装、解密并转换为应用程序可以理解的内容。最后,你的猫GIF出现在你同事的屏幕上。
如果你们都在同一个网络上,你的数据会下降到你的机器的1层,然后可能通过连接(1层)到交换机(2层)。在交换机上,其表中已经包含了同事机器的MAC地址,数据不需要到路由器。相反,它会下降到端口并通过连接直接到达同事的机器。这是现实生活中最简单的网络设置,因为我们现在很少再使用直接的物理连接了。在这种简单的设置中,只有当你要跨越多个网络时,才需要跳到3层。如果你在选择的云提供商上有一个虚拟网络,然后尝试连接到另一个虚拟网络,你需要建立一个IP地址并打开一个端口以通过开放的互联网连接,或者使用某种虚拟路由解决方案,例如Equinix的Fabric Cloud Router,来跨网络连接。
OSI抽象之外的世界上的硬件并不那么简单。有具有浅层路由表的3层交换机;能够处理到4层的多层交换机,因为它们理解MAC地址、IP地址、协议和端口;处理1、2和3层的桥接路由器;甚至可以在任何层工作的网关。
使用OSI模型进行故障排除是很常见的。正如开发人员使用回溯和断点来发现代码在哪里中断一样,网络工程师使用OSI模型来发现数据在哪里停止流动。从找到一个关闭的端口到发现HTTP工作但HTTPS不工作,OSI模型可以提供一个清单来验证你的所有网络组件是否正常工作。它不仅适用于数据中心或本地网络。你可以使用OSI模型来排除Kubernetes集群的虚拟网络或Docker容器的端口故障。虚拟网络通常遵循与物理网络相同的许多约定,从端口和连接到VLAN(虚拟局域网)和IP-WAN(互联网协议广域网)。
TCP/IP模型更准确地代表了我们所知的互联网,许多人认为它是更实用的学习模型。然而,许多(如果不是全部)网络工具和硬件供应商都使用OSI模型的层命名方案来引用功能,例如“2层本地网络”或“3层网络连接”。网络安全供应商可能会谈论分布式系统第3层和第4层的攻击。理解这些术语背后的概念很重要,即使只是为了跟上讨论的上下文。
如果你觉得这篇文章有帮助,请在Equinix社区!告诉我们