Loading...
墨滴

PythonCN

2021/08/19  阅读:30  主题:橙心

Packet 的旅行:OSI 模型

开放系统互连模型(OSI 模型)解释了互联网工作所需的所有独立功能。

它是由 7 个独立的功能组合而成,实现了计算机与计算机通信的最终目标。 ​

就像汽车是由独立的功能组成,这些功能结合起来实现了驱动汽车前进的最终目标: 电池给电子设备供电,发电机给电池充电,发动机转动主轴,轴把主轴的转动转移到车轮上,等等。 ​

每个独立的零件都可以独立更换或者工作,只要每个独立的零件都能正常工作,汽车就可以前进。 ​

OSI 模型分为 7 个不同的层,每一层都完成一个非常特定的功能。 当组合在一起时,每个功能都有助于实现完整的计算机到计算机的数据通信。

在本文的其余部分,我们将看到 OSI 模型的每个独立的层以及它们各自的职责。 ​

OSI 第 1 层-物理层

OSI 模型的物理层负责比特(bit)的传输——1 和 0 构成了所有计算机代码。 ​

该层代表承载两个节点之间流量的物理介质。 一个例子是你的以太网电缆或串行电缆。 但是不要太在意“物理”这个词——这一层是在20世纪70年代命名的,远在网络中的无线通信概念之前。 因此,尽管 WiFi 没有物理、有形的存在,但也被视为第 1 层协议。 ​

简单地说,第 1 层是在两个节点之间携带 1 和 0 的任何东西。 ​

“线路”上数据的实际格式可能因每种介质而异。 在以太网的情况下,比特以电脉冲的形式传输。 在 WiFi 的情况下,比特以无线电波的形式传输。 在光纤的情况下,比特以光脉冲的形式传输。 ​

除了物理电缆中继器(Repeater)和集线器(Hub)也在这一层运行。 ​

中继器只是将信号从一种介质转发到另一种介质,允许一系列电缆串联在一起,并增加信号可以传输的范围,超出单根电缆的限制。 这些通常用于大型 WiFi 部署,其中单个 WiFi 网络在多个接入点中“重复”以覆盖更大的范围。 ​

集线器(Hub)只是一个多端口中继器。如果四个设备连接到一个集线器,那么一个设备发送的任何信息都会重复到另外三个设备。 ​

OSI 第 2 层-数据链路层

OSI 模型的数据链路层负责与物理层接口。 实际上,L2 负责将 1 和 0 放在电缆上,并从电缆上取出 1 和 0。 ​

插入以太网线的网络接口卡 (NIC) 处理 L2 功能。 它从电缆接收信号,并将信号传输到电缆上。 ​

你的 WiFi 网卡以相同的方式工作,接收和传输无线电波,然后将其解释为一系列 1 和 0。 ​

L2 将这些 1 和 0 组合成的块称为帧(Frame)。

L2** 存在一个寻址系统,称为媒体访问控制地址或 MAC 地址。 MAC 地址唯一标识每个单独的网卡(NIC)**。 每个网卡(NIC)都由制造商预先配置了一个 MAC 地址; 事实上,它有时被称为 Burned In Address (BIA)。

除了网卡(NIC),交换机(Switch) 也在这一层运行交换机(Switch) 的主要职责是促进网络内的通信(这个概念将在本系列后面的文章中进一步阐述)。 ​

数据链路层的首要功能是将数据包从一个网卡传送到另一个网卡。 或者换句话说,L2 的作用是将数据包从一跳传送到另一跳。

OSI 第 3 层-网络层

OSI 模型的网络层负责端到端的数据包(packet )传输。

它通过使用另一种可以在逻辑上识别连接到互联网的每个节点的寻址方案来实现这一点。 这种寻址方案称为互联网协议地址或 IP 地址。 ​

它被认为是合乎逻辑的,因为 IP 地址不是计算机的永久标识。 与被视为物理地址的 MAC 地址不同,IP 地址不会被制造商刻录到任何计算机硬件中。

路由器是运行在 OSI 模型 L3 的网络设备。 路由器的主要职责是促进网络之间的通信。 因此,路由器在两个网络之间创建了一个边界。 为了与不在你的网络中的任何设备进行通信,必须使用路由器。 ​

OSI 模型-数据链路层 vs. 网络层

L2 层和 L3 层之间的交互和区别对于理解数据如何在两台计算机之间流动至关重要。 例如,如果我们已经在每个网卡(NIC )上有唯一的 L2 寻址方案(如 MAC 地址),为什么我们还需要另一个 L3 寻址方案(如 IP 地址)? 相反亦然? ​

答案是,两种寻址方案实现了不同的功能:

  • L2 层使用 MAC 地址,负责从一跳到另一跳的数据包传递。
  • L3 层使用 IP 地址,负责端到端的数据包传递。

当计算机有数据要发送时,它会将其封装在 IP 报文头中,该报文头将包含通信两端的源和目标 IP 地址等信息。 ​

然后将 IP 报文头和数据进一步封装在 MAC 地址报文头中,其中将包括诸如通向最终目的地的路径中当前“跳”的源和目标 MAC 地址等信息。 ​

这里有一个插图说明了这一点:

注意在每个路由器之间,MAC 地址报文头被剥离并重新生成以使其到达下一跳。 第一台计算机生成的 IP 报文头仅被最终计算机剥离,因此 IP 报文头处理“端到端”传递,而动画中涉及的四个不同 MAC 报文头中的每一个都处理“跳到跳”传递。 ​

OSI 第 4 层-传输层

OSI 模型的传输层负责区分网络流(stream)。

在用户计算机上的任何给定时间,都可能会打开互联网浏览器,同时播放流媒体音乐,同时运行 Messenger 聊天应用程序。 这些应用程序中的每一个都从互联网发送和接收数据,所有这些数据都以 1 和 0 的形式到达该计算机的网卡(NIC)。 ​

必须存在某些东西才能区分哪个 1 和 0 属于 messenger 、浏览器或流媒体音乐。 那个“东西”是第 4 层: L4 通过使用称为端口号的寻址方案来实现这一点。

具体来说,存在两种区分网络流的方法。 它们被称为传输控制协议 (TCP)用户数据报协议 (UDP)

TCP 和 UDP 每个都有 65,536 个端口号,唯一的应用程序流由源和目标端口(连同它们的源和目标 IP 地址)标识。 ​

TCP 和 UDP 在数据流的传输方式上采用了不同的策略,它们的区别和内部工作方式非常有趣和重要,但不幸的是,它们超出了本系列文章的范围。 它们将成为未来文章或系列的主题。 ​

总之,如果 L2 层负责跳到跳的传递, L3 层负责端到端的传递,那么可以说 L4 层负责服务到服务的传递。

OSI 第 5,6,7 层

OSI 模型的会话表示应用层(由第 1-4 层促进)是向最终用户显示通过网络传输的数据之前的最后处理步骤。 ​

从纯粹的网络工程角度来看,第 5、6 和 7 层之间的区别并不是特别明显。 事实上,还有另一种流行的互联网通信模型,称为 TCP/IP 模型,它将这三层组合成一层。 ​

如果你参与软件工程,这种区别将变得更加重要。 但这不是本系列文章的重点,我们不会深入探讨这些层之间的差异。 ​

许多网络工程师简单地将这些层称为 L5-7L5+L7。 对于本系列的其余部分,我们也这样做。 ​

封装和解封装

在我们继续讨论 OSI 模型之前,我们需要讨论的最后一项是封装解封装。 这些术语指的是数据在发送时如何从上层移动到下层,在接收时如何从下层移动到上层。 ​

当数据从一层传递到另一层处理时,在完整的数据报被转换为 1 和 0 并通过电缆发送之前,每一层都会添加完成其目标所需的信息。 例如:

  • L4 将添加一个 TCP 报文头,其中包括源和目标端口
  • L3 将添加一个 IP 报文头,其中包含源 IP 地址和目标 IP 地址
  • L2 将添加一个以太网报文头,其中包括源和目标 MAC 地址

在接收端,每一层从数据中剥离报文头,并从堆栈中向上传递到应用程序层。 以下是整个过程:

请注意,这只是一个示例。 将要添加的报文头将取决于底层通信协议。 例如,可能会在 L4 添加 UDP 报文头,或者可能会在 L3 添加 IPv6 报文头。 ​

无论哪种方式,重要的是要了解当数据通过电缆发送时,它会在堆栈中传递下去,并且每一层都会添加自己的报文头以帮助它实现其目标。 在接收端,当数据被发送回应用层时,报文头被逐层剥离。 ​

本文将不同的网络功能分类到 OSI 模型的不同层中。 虽然对于理解数据包如何在网络中移动至关重要,但 OSI 模型本身并不是一个严格的要求,而是一个概念模型——并非每个协议都能完美地适合 OSI 模型的单个层。

翻译
OSI Model[1]

参考资料

[1]

OSI Model: https://www.practicalnetworking.net/series/packet-traveling/osi-model/

PythonCN

2021/08/19  阅读:30  主题:橙心

作者介绍

PythonCN