问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

给程序员的网络知识扫盲:计算机网络的层次

创作时间:
作者:
@小白创作中心

给程序员的网络知识扫盲:计算机网络的层次

引用
1
来源
1.
https://catboy.blog/net101-layers/

在数字化时代,程序员需要掌握一定的网络知识。本文将从实际问题出发,深入浅出地介绍计算机网络的五层模型,帮助读者理解网络层次的概念及其在实际应用中的重要性。

引言

我们接触网络层次这一概念,大多情况来自于课本,而在实际使用网络的过程中,这一概念又很少用到。往往在遇到一些问题的时候,才能意识到这一概念的重要性。例如,请看下面这些问题:

Ping 能不能指定端口?Ping 通为什么不代表能连上这个网站?

Ping 使用 ICMP 协议,他是一个三层协议,与 IP 协议同一层。这一层没有「端口号」的概念,只有 IP 地址的区分。Ping 通仅能说明三层协议与该主机互通,不能保证更高层服务的存在,以及联通。而我们通常说的 “网站” 使用 HTTP 协议,他是一个五层协议,基于 TCP 这一第四层协议。即便这个主机可以 Ping 通,也不代表主机上存在一个网站服务,或是网站能够访问。

交换机和路由器有什么区别?有交换机为什么还需要路由器?

交换机是一个二层设备。他的作用是根据 MAC 地址,将数据包分发,作用仅限于局域网。而路由这一概念是三层概念,指根据数据包要发送到的 IP 地址,找到数据包应该通过哪一个网卡进行发送。IP 地址众多,可以覆盖全球互联网。因此通过指定 IP 地址,便可以根据互联网的层层路由器,找到目标的主机。

这些问题都是因为对于网络分层不了解而提出的。要解答这些问题,就需要清楚网络分层的概念。

网络分了哪几层?

注:在计算机网络中有多种分层方式,比如 OSI 的七层模型、TCP 的四层模型等。本文将以五层模型为基础进行介绍。与五层模型相比,OSI 的七层模型对应用层进行了更细致的拆分,但也因此更复杂 —— 毕竟应用层的协议非常多样,如 HTTP、DNS,以及不断涌现的 QUIC 等新协议。由于七层模型在应用层细分得较多,理解起来可能会更费力。因此,为了便于入门和理解,这里选择更为简明的五层模型来进行阐述。

下面的图片,描述了网络的五个分层,以及属于每个分层的常见概念:

如图所示,网络分为了五层,从下向上分别是:

  • 物理层:负责数字信息与信号的转换。如将数字信息转变为电信号、光信号等。
  • 链路层:将接收或发送的信号组合成基础的数据数据帧,并确保帧在局域范围内被正确传输与接收。
  • 网络层:在不同网络之间寻找路径,确保数据能够从发送方抵达接收方。
  • 传输层:负责端到端的数据传输,为应用提供可靠或快速的连接服务。
  • 应用层:开放给使用网络的应用程序,进行自己的业务。

下面的图片描述了网络各层的职责,以及数据如何在各层次之间流转:

为什么需要这些层次?

简要的回答:这样的设计,在于将数据在网络中的发送与接收过程,拆分为各自独立,又互相衔接的功能阶段,使得网络的开发、维护和扩展都更加容易和灵活。

要理解上面的话,我们不妨站在网络的设计者角度去尝试理解网络的设计。同样,我们自底向上,理解为何如此设计。

物理层

计算机存储的是数据,即 1 与 0 的组合。若要让两个计算机之间能够相互通讯,则必须将数据导出计算机,再导入另外一个计算机。要实现这一功能,最直接的方式,就是使用电力。将数据转换为电信号发出,在另外一台计算机上再从电信号转变为数据,就完成了计算机之间的通讯。

考虑到拓展性,首先传输距离长短的不一,对电信号与传输介质可能有不同的要求。其次,计算机之间的传输,不单单可以靠电力进行传输,还可以通过光信号(光纤)、声音(拨号)等介质传播。因此,具体负责数据与信号转换的硬件元器件,可能是多种多样的。

因此,我们可以把这一功能组件,统一归为网络传输的物理层,使得职责明确与独立。

链路层

有了数据与信号的转换,便可以实现两台计算机之间的通讯。那么如何实现多个计算机之间的通讯呢?

首先,物理层面,可以将多台计算机用物理连线连接在一起,保证信号可以到达每台计算机。其次,我们还需要一种方法,能够区分数据是发往哪一台计算机,或是群发的。实现这一功能的最简单方法,就是引入「地址」的概念,并且约定一种传输的数据格式。这种数据格式要求所有的计算机在开始传输数据前,首先传输数据要发送到的计算机「地址」,以及数据包发出的「地址」。通过在传输的数据中,增加发件人与收件人信息,便可以区分每一个计算机了,这样最基本的网络就形成了。

链路层的「地址」,即是我们所说的物理地址(现代网络最常见的物理地址是以太网 MAC 地址)。其标识了在局域网内的一个计算机,且要求不能与他人重复。

拓展阅读:嵌入式领域中,广泛应用的其他的计算机网络

现代计算机网络最常见的链路层是以太网,以太网的地址成为 MAC 地址。除过以太网之外,嵌入式领域还有其他的很多硬件总线,拥有类似的概念,并可以实现网络功能,例如以下的总线:

  1. CAN:连接在 CAN 总线上的所有设备均拥有自己的 ID,根据 ID 可以找到不同的设备。
  2. I2C:连接在 I2C 总线上的设备,包括一个主机,与若干个从机。通讯由主机发起,并依靠从机的地址来区分数据发往某一个从机。
  3. MIL-STD-1553B:连接在 1553B 总线上的设备,包括一个总线控制器(BC)、若干个远程终端(RT),以及若干个总线监视器(BM)。通讯由 BC 发起,并依靠 RT 地址区分数据发往某一个 RT。
  4. RapidIO:连接在 RapidIO 上的设备,拥有自己的 Device ID。依靠 Device ID 可以区分设备。

网络层

链路层实现了基本的计算机互联。不同的计算机之间,依靠链路层提供的互联功能,便可以组成一个区域性的网络,在该网络内进行通讯。若要跨越更广阔的范围,就需要给每台计算机一个唯一的「地址」,并让信息知道如何一步步地传递到目标。网络层就是为此而设计:它为每台计算机分配一个能在更大范围内识别的地址,并让数据在传输过程中逐步找对方向,最终成功送到对方,使得原本只在有限范围内通信的系统可以扩展到全球范围。

最广泛应用的网络层协议是 IP 协议。IP 协议首先引入了 IP 地址的概念。IP 地址相对于 MAC 地址而言,拥有标记全球互联网上所有计算机的能力,使得全球计算机都能够获得自己的「网络身份」。通过这一「网络身份」,全球计算机便可以在数据层面实现互联。

IP 协议同时引入了路由与网关的概念,来引导数据按照正确的方向,传输到正确的计算机上。通过数据中包含的 IP 地址信息,寻找该数据包通过哪一个网卡发出的过程,称为「路由在一个局域网内,能够连接到外部网络的计算机,称为「网关」

将访问局域网外部的 IP 地址的流量,发送至网关计算机,通过网关计算机访问外部,便可以实现局域网与外部网络的互联。

传输层

有了网络层提供的更加广域的计算机互联,则可以在其基础上进行数据传输。应用程序的开发者可以选择直接在网络层之上直接进行数据传输(即 RAW,通讯格式为裸 IP 包)。同时,网络的设计者针对网络的典型使用场景,提供了两种通讯方式

TCP

使用 TCP 进行通讯时,两个主机之间首先会建立一条可靠的传输信道,随后在该信道中传输具体数据。信道保证到达的数据正确,与数据到达的先后顺序正确。同时,信道还提供对于数据传输的高级控制功能。

由此可见,TCP 适用于对数据传输可靠性有要求的场景。代价是牺牲了通讯速度,增加了使用的难度,以及操作的复杂度。

UDP

只需填写数据要到达的目标地址,即可将想要的数据直接发送出去。不关心数据到达与否,也不关心数据是否按照顺序到达,也不关心传输控制等高级功能。

由此可见,UDP 适用于对数据传输可靠性没有要求的场景。带来的好处是通讯过程的处理时间短,使用难度低,复杂度也低。

拓展阅读:为什么会有对数据可靠性没有要求的场景?

TCP 协议较好理解,对于传输可靠性的要求也容易理解。UDP 所适用的对传输可靠性没有要求的场景,反而不易理解。

这些场景有一些显著的特征,例如数据会持续提供,即便丢失几次,也不会影响整体,例如:

  1. 多人游戏:多人线上游戏会不断使用 UDP 发送数据包,包括玩家位置、动作等信息。因为这些信息一直在发送,因此即便数据有丢失,下一次到达的数据,也能及时更新状态,纠正错误。
  2. 数据源与数据采集:在嵌入式领域,很多传感器采用 UDP 来持续提供数据,作为数据源。例如采集的温度、机器运行状态等。这些数据会通过 UDP 持续发送,在采集者需要这些数据的时候,可以直接取最新收到的 UDP 数据,作为最新的状态。

应用层

应用层用于开放给大众,实现自己具体的业务数据的传输。用户可以选择基于 TCP/UDP 等传输层协议直接传输数据,也可以选择继续扩展更加上层的协议,以实现更为复杂的功能,如 HTTP、SSH、FTP 等等。

这些层次之间怎么交互?

层次间的交互,是通过在数据中添加属于自己层次的特征信息完成的。这种特性信息包含了自己所在层所关心的数据,被称为「头部(Header)」,如下图所示:

当数据发送时,自顶向下,数据每经过一层,便会添加属于这一层的信息。最终到达物理层,物理层将数据转变为信号发出。

当数据接收时,自底向上,每一层会识别属于自己的信息。并将自己的信息删除,交由上一层处理剩下的信息。剩下的信息,成为「载荷(Payload)」,表示通过本层要搭载的具体数据。对于任意一个层次而言,载荷的内容该层次不关心。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号