前面我们已经和大家讲完了计算机网络里面的一些常见设备,大家有没有想过,这些设备之间是如何互相沟通的呢?它们又是怎样能够理解彼此的呢?别急,我慢慢和大家说。

网络互连模型

网络诞生之初,通常只有同一家厂商生产的计算机才能互相通信,此时只能采用 DECnet 方案或者是 IBM 的方案,但是这两个方案之间并不互通,也就是说,在那个年代,如果我们的网络已经用了 DECnet 的方案,那么整个网络就只能用 DECnet 的方案,新增设备也只能用这个方案。直到上个世纪七十年代末,国际标准化组织(ISO)开发了开放式系统互联模型,也就是 OSI 参考模型,才让不同厂商之间的设备能够通信。OSI 参考模型是理想的模型,不过现实中中还是 TCP/IP 模型使用更多。但这篇文章依旧会以 OSI 参考模型的讲述为主,大家理解其中一个模型,就能理解其他的模型了。

参考模型的优点

OSI 模型旨在以协议的形式帮助厂商生产可互相操作的网络设备和软件,让不同厂商的网络能够协同工作,也让运行不同操作系统的主机之间可以互相通信。比如说咱们办公室,有的同事电脑是 MacOS 系统,有的是 Windows 系统,还有各种手机,运行 Linux 系统的服务器,只要是网络可达,完全可以正常通信。

比如我们公司会有很多部门,并有一套执行标准,规定了每个部门的任务,比如说谁去面对客户,谁来实现客户需求,谁负责员工保障等。每个部门就相当于 OSI 参考模型中的层,每层的工作虽然不一样,但是都是为了同样的战略目标——通信。而且每个部门无法独立存在,必须和其他部门协同工作才可以完成任务。这套执行标准就是我们的 OSI 参考模型。这个模型并不是一个物理模型,而是一个逻辑模型,并不是说我们从物理上给分了七层,而是和我们公司的执行标准一样,是一组指导原则,帮助我们完成工作。

使用这样的分层模型有很多优点:每一层可以各司其职,这样有助于组件开发;并且标准化网络组件,就不会出现我们前面所说的各个厂商之间完全无法通信的情况;而且可以避免修改其中一层而影响其他层的状况。

OSI 七层模型

OSI 模型是主要的网络架构模型,分为七层:

OSI 参考模型

从上到下依次为,应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。

  1. 应用层就是用户和计算机交流的场所,比如说文件传输和电子邮件等应用,都是应用层的工作。仅当马上需要访问网络时,这一层才会发挥作用,如果是访问本机上已保存的文件,是不需要用到应用层的。
  2. 表示层承担着翻译工作,它会将来自应用层的数据转换成所有计算机都通用的标准格式,并对数据进行加密。
  3. 会话层负责建立、管理和终止会话的工作,还能将用户数据分开。
  4. 传输层提供端到端的数据传输服务,在互联网中的发送主机和接收主机之间建立逻辑连接,同时也会控制流量,防止流量太大而导致数据丢失的情况出现,在这一层还会区分不同的应用程序,通过端口号进行标记。
  5. 网络层就是逻辑寻址,确定最佳的数据传输路径。
  6. 数据链路层提供数据的物理传输,进行局域网内部的物理寻址,并处理错误通知。
  7. 物理层的作用就是发送和接受原始比特流,比如说咱们第一篇文章说到的传输介质,就是工作在物理层。

这么说大家会不会觉得不太好理解呢?简单来说,越是上层就越靠近用户,越是底层就越接近硬件。比如说应用层就是直接和用户接触的,物理层的比特流就可以直接通过硬件传输了。OSI 参考模型是在协议前设计的,具有通用性,且概念清晰,但是过于复杂了,在 TCP/IP 网络中有更加简洁的模型。

TCP/IP 参考模型

TCP/IP 模型和 OSI 参考模型一样,都采用的是层次结构的方式,对应关系如下图,

TCP/IP 模型与 OSI 参考模型对应关系

相对于 OSI 来说是不是更简单一点呢?但是 TCP/IP 模型是有了协议再定义的模型,并不适用于非 TCP/IP 网络。

消息要经历什么才能送到你面前呢

以手机发消息为例,

  1. 首先要打开一个沟通软件,当我们执行打开软件这个操作的时候,就是由应用层来完成和我们的交互
  2. 然后输入信息,输入的信息叫做用户数据,然后这个数据会在表示层被“翻译”成计算机可识别的 ASCII 码
  3. 当我们按完了发送按钮,剩下来就是机器的事情了,在传输之前,需要先建立会话连接才能传输数据,这就是会话层的工作了。会话层建立会话,产生相应的主机进程传给传输层
  4. 传输层将以上信息加上端口号以便目的主机辨别,得知具体应由本机的哪个任务来处理。这时候信息还没有发出去,被交给了网络层。
  5. 在网络层加上 IP 地址使数据能确认应到达具体某个主机,选路也发生在这一层,确认应发给谁之后我们还要知道该怎么去,也就是会查地图,选一条最优的路。
  6. 到了数据链路层后,数据前面会再被加上 MAC 地址,用于在局域网内部寻找具体主机,最后数据被转成比特流信息,从而在网络上传输。比特流长什么样呢?其实就是 010101010…… 这种,因为我们手机、电脑还有上文提到的网络设备,里面都是电路板,而电路板只有开合两个状态,对应着 0 和 1,所以只有这样的比特流才可以通过硬件传播。
  7. 数据被网络上的各个主机接收之后,主机会看一眼是不是找自己的,如果不是就丢掉,如果是找自己的就会查看端口号,判断由哪个进程来处理该信息。比如说微信发的消息就会去找微信,不会说 QQ 收到了微信的消息。

消息的发送和接受只是一瞬间,可是在这个瞬间里面它们经历过揉碎重组,还被加上了各种各样的“帽子”,不能被正确接收的消息还会被丢掉,所以说再收到消息的时候,多少看一眼吧,毕竟它历经千辛万苦才被送到你面前。


我们的数据传输原理基础部分已经结束了,大家是不是又产生了很多新的疑问呢?比如说为什么有 MAC 地址又有 IP 地址,到底以哪个为准呢?有地址是不是也要有地图才会找到目的地呢?下一篇文章会为大家讲述在 OSI 参考模型的第二层,数据是怎么找到路的。

扩展阅读

入网指南 01 | 一文读懂你身边的「网络」