枯燥且重要,网络体系结构

  • 为什么设计分层网络模型?
  • 两个模型各有多少层?
  • 模型中每一层的作用和顺序关系?
  • 两个模型的差异点和共同点?

常见的计算机网络体系结构

为了让世界各地的计算机互连,在 1977 年,成立了国际化组织研究该问题。在 20 世纪 90 年代初期,该组织就推出了“开放系统互连参考模型”,简称 OSI 体系结构,作为该问题的解决方案。

OSI 体系结构

该模型是一个 7 层体系结构,从下往上依次是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。

OSI 模型是国际化组织推出的国际标准,但当时因特网的网络体系结构 TCP/IP 体系结构,已抢先在全世界覆盖了相当大的范围。

TCP/IP 体系结构

该模型是一个 4 层体系结构,从下往上依次是网络接口层、网际层、运输层和应用层。

在过去,制定标准的组织中,往往以专家和学者为主。但现在,许多商业公司也加入了制定标准的队伍中。TCP/IP 体系结构是事实上的国际标准,它占领了市场,而 OSI 体系结构是法律上的国际标准。 由于 TCP/IP 体系结构为了兼容不同的网络接口进行互连,例如 WIFI 接入或以太网接入,因此它的网络接口层并没有规定什么具体的内容,然而这对于学习计算机网络的完整体系而言,就会缺少一部分内容,所以在学习计算机网络体系结构时,往往使用 OSI 体系结构和 TCP/IP 体系结构的一种综合体系结构:原理体系结构。

原理体系结构

该模型是一个 5 层体系结构,从下往上依次是物理层、数据链路层、网络层、传输层和应用层。

计算机网络体系结构分层的必要性

先来看最简单的情况,两台计算机如何连接起来?连接起来要解决 3 个问题,如下。

  • 采用怎样的传输介质?例如网线
  • 采用怎样的物理接口?例如电脑上的水晶头接口
  • 使用怎样的信号表示比特 0 和 1 ?例如方波信号 这些问题可以归类到第 1 层,物理层。 实用的计算机网络,往往由多台计算机组成,例如主机 A、B、C、D、E,通过总线互连,构成了一个总线型网络。

假设我们解决了物理层的问题,也就是说主机间可以发送信号传输比特 0 或 1 了,现在我们要从主机 A 传输信号到主机 C,但是,表示数据的信号会通过总线传播到总线上的每一个主机,那么问题来了,主机 C 如何知道该数据是发送给自己的,自己要接收处理?而主机 B、D、E 如何知道该数据并不是发送给自己的,自己应该如何拒绝?这就引出了如何标识网络中各主机的问题,也就是编址问题。我们的计算机网卡上,存在一个 Mac 地址,这就解决了编址问题,通过发送地址和目标地址,就可以知道数据是谁发给谁的了。 现在又出现了一个问题,如何从信号所表示的一连串比特流中区分出数据和地址?也就是数据格式问题,又成为分组问题。 还有一个问题,假设主机 B 和 主机 D 同时向总线发送数据,这必然会发生信号碰撞,如何协调主机争用总线?总线型网络现在已经淘汰,现在常用的是使用以太网交换机,将多台主机互连,形成交换式以太网。通过交换机解决主机争用总线的问题。

我们将下面提到的 3 个问题:

  • 如何标识网络中的各主机?
  • 如何从信号所表示的一连串比特流中区分出数据和地址?
  • 如何协调各主机争用总线?

归类到第 2 层,数据链路层。 我们可以发现,只要解决了物理层和数据链路层的问题,我们就可以数据在一个网络上传输了,但是,我们每天使用的因特网,是由非常多的网络组成的,仅解决物理层和数据链路层的问题,还是不能正常工作。来看下面的例子,这是一个由 4 个网络组成的小型互联网,我们可以把它看做因特网中很小的一部分。

在之前的例子中,仅有一个网络,我们不需要对网络进行标识,在本例中,我们有着多个网络和多个主机,换句话说,我们面临了一个新的问题,网络和主机的编址问题,相信你一定听过 IP 地址,例如现在,192.168.1.1、192.168.1.2 和 192.168.1.254 是网络 N1 中各设备的 IP 地址。

该 IP 地址的前三个十进制数,用来标识网络,第四个十进制数,用来标识主机,在本例中,用 192.168.1 标识网络,该网络上的笔记本电脑、服务器和路由器接口的前三个十进制数,都应该是 192.168.1 ,因为它们都在网络 N1 上,而第四个十进制数分别为 1、2 和 254,各不相同,用来标识它们自己。网络 N2、N3 和 N4 同理。 我们再来看另一个问题,源主机与目的主机之间的传输路径往往不止一条,分组从源主机到目的主机可走不同路径,这样就引出了路由器如何转发分组,如何进行路由选择的问题。

我们将下面的问题:

  • 如何标识各网络以及网络中的各主机?
  • 路由器如何转发分组?
  • 路由器如何进行路由选择?

归类到第 3 层,网络层。 至此,我们解决了物理层、数据链路层和网络层各自的问题,不过,这对于计算机网络应用而言仍然不够,假如我们的笔记本中运行着两个与网络通信相关的应用进程,浏览器进程和 QQ 进程,某个时刻,笔记本收到了来自主机的分组,应该交给哪个进程处理呢?也就是如何解决进程之间基于网络的通信问题。

另外,出现传输错误时,如何处理?例如路由器繁忙,出现了丢包。 我们将如下问题:

  • 如何解决进程之间基于网络的通信问题?
  • 出现传输错误时,如何处理?

归类到第 4 层,传输层。

解决了物理层、数据链路层、网络层和传输层各自的问题的基础上,我们只需要按协议标准编写相应的应用程序,通过应用进程间的交互,来完成特定的网络应用即可,例如,支持万维网应用的 HTTP 协议、支持电子邮件的 SMTP 协议和支持文件传输的 FTP 协议。 我们将通过应用进程间交互完成特定的网络应用,归类到应用层。 至此,我们已经了解了计算机体系结构中各层要解决的问题,这些问题分别划归到了物理层、数据链路层、网络层、传输层和应用层。如下。

  • 物理层:解决使用何种信号来传输比特的问题
  • 数据链路层:解决分组在一个网络上传输的问题
  • 网络层:解决分组在多个网络上传输的问题
  • 运输层:解决进程之间基于网络通信的问题
  • 应用层:解决通过应用进程的交互来实现特定网络应用的问题
你以为你错过的是一个人,其实你错过的是整个人生
先完成,再完美