数据包的旅程 - OSI 模型

原文链接

 

开放式系统互联通信模型 (Open Systems Interconnect model - OSI model)是一种概念模型,由国际化标准组织提出,描述了使各种计算机互联为网络的标准框架。

 

OSI 模型分为相互独立的七层,每层实现特定的功能,共同实现计算机之间互相通信互联。以下进行分层讨论

 

数据包的旅程 - OSI 模型

 

OSI 物理层(Physical Layer)

物理层主要负责实现数据的传输,在传输时数据以由 0 和 1 的形式存在。

 

物理层主要是在节点之间传输数据的物理载体。例如,网线等。但物理层并不限于必须具有物理形态,其命名是在 20 世纪 70 年代确定的,彼时无线通信还未出现。因此,像 wifi 无线通信协议,虽然不依赖与具体的物理形态,其仍然是物理层的协议。

 

总的来说,物理层表示实现在节点间进行数据交换功能的任何事物。

 

在“线”上传输时,数据的真实形态随着介质的不同而不同。在以太网中,数据以电脉冲信号的形式传输;在 wifi 中,数据以无限电波的形式传播;在光缆中,数据以光脉冲信号的形式传播。

 

数据包的旅程 - OSI 模型

 

除了物理线缆外,中继器(Repeater)和集线器(Hub)也在这一层工作。

 

中继器通过在链式或环状(daisy chain)连接的网络拓扑中进行信号的重复,使得信号可以突破单个介质可以传输的限制,扩大信号传输范围。这在 wifi 网络中非常常见,通过设置无线接入点(access-points),可以扩大 wifi 信号的覆盖范围。

 

集线器可以视为一个多端口的中继器。如果有一个连接着四个网络设备的集线器,那么其中任何一个端口发送的信号都会被复制发送至其他三个端口。

OSI 数据链路层(Data Link)

数据链路层(以下简称 Layer 2)负责接入物理层的数据。换句话说,Layer 2 负责将数据写入传输介质,或者从传输介质上读取数据。

 

我们插入网线的网络接口卡(网卡)(Network Interface Card, NIC)负责实现数据链路层的功能。网卡从网线上接收信号,或者向网线上传输信号。

 

wifi 网卡也类似,通过接收和传输无线电信号实现数据传输。

 

Layer 2 将由 1 和 0 构成的数据划分成数据帧(Frames)。

 

在 Layer 2 , 存在一套被称作 Media Acess Control (MAC) address 的寻址系统。网卡的 MAC 地址是其唯一标识,每块网卡设备在出厂前都被预设置了一个 MAC 地址。事实上,有时 MAC 地址又被称为烧录地址(Burned In Address, BIA)。

 

数据包的旅程 - OSI 模型

 

除了网卡,交换机也工作在 Layer 2. 交换机主要负责实现一个网络内部的通信

 

总的来说,Layer 2 的主要职责是负责在网卡之间传输数据包。或者换句话说,Layer 2 的主要职责是负责节点间传输数据(hop to hop)。

OSI 网络层(Network)

网络层主要负责端到端(end to end)的数据包传递

 

网络层主要通过另外一套寻址体系实现其职责,这套寻址体系在逻辑上能够唯一标识接入互联网的每一个设备。这套寻址体系就是熟知的 IP 地址(Internet Protocol Address, IP Address)。

 

IP 地址之所以被视作是逻辑地址,是因为这套寻址体系并不能作为计算机的永久地址,不像 MAC 地址,IP 地址并未在计算机出厂时就设定。

 

路由器(Routers)是工作于 Layer 3 的另一个个设备。其主要负责实现网络间的数据通信。路由器可以被视作在两个网络之间创造了一个边界。为了实现于不在当前网络中的其他设备的通信,必须借助于路由器。

OSI Layer 2 和 Layer 3 的关系和对比

理解 Layer 2 和 Layer 3 之间的交互关系和区别对于理解数据在计算机间进行传输非常关键。例如,既然已经有了工作于 L2 的 MAC 寻址体系,为什么还需要 L3 的 IP 寻址体系?

 

答案是:两种寻址体系分别负责不同的职责。

 

  • Layer 2 采用 MAC 地址,负责实现数据在相邻网络节点间的传递(hop to hop)。

  • Layer 3 采用 IP 地址,负责实现数据的端到端传递(end to end)。

 

当一个计算机需要通过网络进行数据传输时,会在数据包的 IP 头(IP header)中封装源端和目标端的 IP 地址,用来标识通信的两端。

 

进一步的,IP 头和数据会一同被进一步封装,添加 MAC 地址头(MAC address header),MAC 地址头包含了当前节点和下一跳(next hop)目标节点的 MAC 地址信息。

 

下图进一步阐释了这个过程。

 

数据包的旅程 - OSI 模型

 

注意到,当经过路由器时,MAC 地址会被解析并替换为下一跳的目标 MAC 地址。源端封装的 IP 头在传输过程中并不会被解析,仅在传输至目标计算机时才会被解析,因此,IP 头用于完成“end to end”的数据传输,而传输过程中的 MAC 头则用于完成“hop to hop”的数据传输。

OSI 传输层(Transport)

传输层主要负责区分网络数据流。

 

在任何时刻,一个个人计算机上可能同时存在:打开的浏览器、网络音乐播放器、在线聊天工具等多个应用。这些应用都会通过网络接收数据,而所有的数据都会以 0 和 1 的形式到达这个计算机的同一个网卡。

 

因此,必须有一种机制来区分这些数据是音乐播放数据,或者是聊天数据,或者是浏览器中的网页数据。Layer 4 负责实现这一功能:

数据包的旅程 - OSI 模型

Layer 4 也通过一套寻址体系实现这一机制,这就是端口号。

 

更进一步,有两种方式实现对网络上的数据流进行区分。他们分别被称为 TCP(Transmission Control Protocol) 和 UDP(User Datagram Protocol)协议。

 

TCP 和 UDP 最大都可以分配 65536(2^16)个端口,通过源端口和目标端口(加上源 IP 地址和目标 IP 地址)可以唯一区分某一个应用的网络数据流。

 

TCP 和 UDP 分别采用不同的数据传输策略。理解这种两种机制同样非常重要,但这里并不进行讨论。

 

小结一下,Layer 2 负责 hop to hop 的数据传输,Layer 3 负责 end to end 的数据传输,Layer 4 负责 service to service 的数据传输。

OSI Layer 5, 6, 7

OSI 模型中的会话层(Session)、展现层(Presentation)和应用层(Application)负责将数据呈现给用户前的最后工作。

 

从纯粹的网络工程角度看,5,6,7 层之间的区别并不显著。事实上,在著名的 TCP/IP 网络模型中,这三层被统一归为一层。

 

这三层的区别从软件工程的视角去看的话更加显著。这里不加进一步讨论。

 

许多网络工程师一般将这几层称作 L5-7, L5+或者 L7。

数据的封装和解析

在进一步讨论之前,需要对数据的封装和解析进行一下解释。这两个名词分别表示了在数据发送和接收时,经过各层时所做的工作。

 

在通过网络进行数据发送时,数据会首先经过各层处理,经过每一层时,各层都会添加为完成数据的准确传达所需的必须要信息。

 

  • Layer 4 会添加包含源端口和目标端口的 TCP 头。

  • Layer 3 会添加包含源 IP 地址和目标 IP 地址的 IP 头。

  • Layer 2 会添加包含源 MAC 地址和目标 MAC 地址以太网头(Ethernet header)

 

在接收端,每一层会一次解析数据头的信息,并逐层将数据传递至应用层,下图表示了这一过程:

 

数据包的旅程 - OSI 模型

 

需要注意的是,上图只是一个实例,随着通信协议的不同,各层添加的包头会不同。例如,UDP 协议会添加 UDP 的包头,Layer 3 可能会添加 IPv6 包头等。

 

不论如何,这里的重点在于,数据在通过物理介质传输的前后,会依次通过协议栈的各层进行封包或者解包,最终送达应用层。

 

本文将网络传输中的各项功能分解到 OSI 模型的各层当中。

需要注意的是 OSI 只是一个概念模型,并不是每一个协议都严格的属于某一层当中。

数据包的旅程 - OSI 模型

上一篇:Vue 之keep-alive的使用,实现页面缓存


下一篇:理解GL管线(二)着色器(认识顶点着色器和片段着色器)