没别的,就聊聊网络参考模型


零、前言

想想看生活中挺多事都习惯分个级别/层次啥的。打个游戏要分段位,买个手机要分价位,上个班还得分个部门单位。这网络它也得分个等级,不然这哪个设备有什么功能都不方便说明,学习的时候还不好理解,这不写个软件也得分个前后端嘛,只是这网络有两个模型,一个叫TCP/IP标准模型,一个叫OSI参考模型。(当然还有一种叫TCP/IP对等模型,只是在TCP/IP标准模型下细分了一点而已,但一般还是用TCP/IP标准模型或者OSI参考模型来描述网络层次)


一、OSI参考模型是什么?

OSI(Open System Interconnect,开放式系统互连),是ISO组织在1985年研究的网络互连模型

它将网络分为七层:

层次 (从高到低) 功能
应用层 对应用程序提供接口
表示层 进行数据格式转换
会话层 通信双方建立、管理和终止会话
传输层 建立、维护和取消一次端到端的数据传输过程
网络层 定义逻辑地址
数据链路层 将分组数据封装成帧
物理层 在媒介上传输比特流

OSI参考模型将网络细分为这么多层,一定程度上方面人们学习与了解网络的体系架构,同时也让设备厂商能更方便协同合作生产通信设备,毕竟在一个统一模型没落地之前,各个厂商只能自己埋头苦干,形成一种我生产的设备你兼容不了,你生产的设备他兼容不了的尴尬场景,最后导致每次公司/单位想要来一次整体网络升级就得把设备全部换新,换一家厂商甚至还得考虑其他终端设备的兼容问题。当然,OSI参考模型将网络分为这么多层次,对于硬件设备厂商而言,没太大必要,所以才诞生出TCP/IP标准模型。

二、TCP/IP标准模型又是什么?

之前提到的,OSI参考模型协议栈分类繁杂,但实际生产应用过程中,并不需要那么多分类,不如将模型简化,且TCP/IP两大协议在业界使用被广泛使用,所以自然而然成为互联网主流参考模型。

TCP/IP标准模型 OSI参考模型
应用层 会话层,表示层,应用层
传输层 传输层
网络层 网络层
数据接口层 物理层、数据链路层

这么看上去,TCP/IP模型更关注于原OSI参考模型的第三层和第四层,再看看OSI参考模型中提到的“逻辑地址”和“端到端的数据传输过程”实际上就是IP与TCP/UDP。

当然,我们之前还提到过一个模型叫“TCP/IP对等模型”,这里我把三个模型放下面比对吧,其实差异也不大,只是在学习过程中会需要了解不同的层次有不同的数据表示方式。

三种模型比对

三、每一层的数据都叫什么?

每层都有每层的数据,而我们将这种数据叫PDU(Protocol Data Unit,即协议数据单元),每层的PDU名称都不一样,(按照TCP/IP对等模型来说):

  • 应用层:Data,数据
  • 传输层:Segment,段
  • 网络层:Packet,包
  • 数据链路层:Frame,帧
  • 物理层:Bitstream,比特流

四、数据又是怎么封装的?

  1. 当我们将想要发送的信息点击发送时,我们的终端设备会将信息处理,加上必要的信息,比如端口号(也就是对应一个应用),再转换为编码加密后的数据(Data)。
  2. 然后在数据(Data)的前面加一些数据,这里加上去的数据来确定你希望被提供的端到端连接服务(TCP连接/UDP连接),这样就形成了我们传输层的段(Segment)。
  3. 确定了端口号,确定了需要建立的连接之后,再将IP相关的信息写在段的前面,从而有了网络层的包(Packet)。
  4. 之前所有信息全部确定之后,还得加一个唯一标识符,就如同我们身份证号码一样,这个唯一标识符就是我们的MAC,将MAC信息写到前面之后,在最末尾加上一个FCS(Frame Check Sequence,即帧校验序列),这就是数据链路层的帧(Frame)。
  5. 最后一步就是将上面所有的东西转换成二进制,用bit表示上述所有信息,汇聚起来就是物理层的比特流(Bitstream)。

之后数据接收端会反向一层一层拆上去,直到露出最后的数据(Data),再以各种形式呈现在我们的屏幕上。

五、数据传输过程是什么样的?

数据封装好之后怎么知道这数据应该怎么走呢?这个时候就需要有请我们二层设备(工作在数据链路层的设备)与三层设备(工作在网络层的设备)上场了,那就是我们交换机(二层设备)和路由器(三层设备)。(暂不考虑三层交换机,这里的三层指具有路由功能,即具有工作在第三层网络层的能力)

还记得上面说的数据转换成比特流的前一步吗?我们在Packet前面加上了MAC相关信息,然后加了个FCS。而为什么说交换机(Switch)是二层设备呢,因为交换机在收到这一连串的比特流之后,它会看看数据帧中的前面的字段都写了写啥东西,要是交换机的MAC地址表(就像是个人员名单,后面会讲到MAC地址)中有这个数据的MAC地址,说明这个数据想去的目的地就在我管理的另外一个端口下面。就像它的英文名一样,它就是个转换器,假如MAC表有,我就帮你转发过去,那问题来了,要是没有呢?那就再往外发,把这个锅甩给路由器(Router),让路由器想办法找去,反正交换机的作用就是帮你把数据扔出去,但它可不管你这数据怎么走。

再看看路由器(Router),Route就是找路的意思,所以路由器直译一下就是“找路的东西”呗。路由器要想找到去往目的地的路,就得一直拆比特流,一直拆到第三层(网络层),看到包(Packet)的头部(前面加上去的数据)里都写了哪些东西,然后它就会按照配置的路由协议(规则)找路发出去,至于之后的事情,它也就不管了,比如这条路拥堵不拥堵等等因素,就没办法判断了。

当我们聊到SDN的时候就能聊聊这种“无头苍蝇乱撞”的情况怎么解决了。


六、结尾

因为在聊协议之前,得让各位看官知道数据怎么封装以及传输过程中都经历了哪些事情,所以这里的内容还是很有需要的,许多人可能在大学的“计算机网络”中已经学过了。当然,我这多叨叨的东西还是给需要的朋友,毕竟没别的,就聊聊而已。

(完)