OSI模式概述
一台电脑由哪几部分组成?
一般电脑是由CPU、主板、硬盘、显卡、显示器、外设这几个部分组成的。如下图所示:
问题:我们知道,组成这几个部分的零件都是由不同品牌的厂商生产的。那么不同厂商的配件为什么能够相互搭配呢?为什么不是一间厂商完整生产一台电脑呢?
- 兼容性\标准性
不同厂商的配件之所以能够相互搭配,就是因为各个厂商约定的一个协议,使得生产出来的模块提供了一个统一的接口,使其能兼容其他厂商的配件。
- 分工合作
即便一个生产电脑的厂商也不会是完全使用自己的配件的。而是混搭其他厂商的配件。之所以这么做,是因为各个厂商都有自己的技术优势,而我们集大成者反而比自己闭门造车要强。
类似于电脑组装:网络通信也需要这种分工合作、以及标准。不然不同厂商生产的电脑之间怎么进行通信呢?手机和电脑间又如何通信呢?
OSI七层模型
OSI(Open System Interconnect)开放系统互联。是国际标准化组织ISO提出的一个定义链接异种计算机的标准主体结构。OSI采用了分层的机构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、应用层。
网络之所以要分层,也是跟组装电脑一个道理的。
- 分层分工
- 标准化\兼容性
- 便于问题分析
例如我们可以在命令行中ping某一个ip。如果ping通了这说明网络是通的,可以快速定位问题所在位置。
-
物理层
功能:提供物理规范,如线缆标准,接口标准
-
数据链路层
功能:提供了二层寻址、二层数据转发功能。
设备:网桥、交换机
协议:PPP、Ethernet、ARP、RARP..
数据链路层在不同的厂商有不同的实现,主要应用于没有路由器的情况下。多台电脑相互通信的情况,这种网络称为局域网。同一局域网中,MAC地址不能相同。
问题:不同协议间肯定是不能进行通信的。那么我们该如何使两个局域网之间进行通信呢?
解决方案:增加一层"网络层"。
-
网络层
功能:提供了三层寻址,三层数据转发功能
设备:路由器
协议:IP协议
路由器主要是根据IP地址来进行不同PC间的通信的。虽然路由器工作再网络层,但它实际上是兼有数据链路层、物理层的。所以在同一路由器下,IP地址、MAC地址不能相同,否则会发生冲突。当然路由器也存在一个IP地址,用于跟别的路由器进行通信,这样就可以屏蔽不同局域网协议间不能通信的问题了。
问题:仅仅通过路由器简单的发送数据可不行,如果因为网络的问题,导致数据丢失,数据传输不可控。这样就使得网络通信不可靠。
解决方案:在网络层基础上,增加"传输层"
-
传输层
功能:担当了可靠的端对端链接。
协议:TCP、UDP
提供了可靠或不可靠传输,能够纠正或失败重传,传输层通过端口号区分上层服务,并通过滑动窗口技术实现可靠传输、流量控制、拥塞控制等。传输层负责的是计算机之间的链接。
问题:尽管传输层提供了可靠的链接,那么当有一个发送方对多个接收方时,我们如何确定数据传输给哪一个接收方呢?又如何与其建立链接、保持链接、删除链接呢?
解决方案:增加一层"会话层"
-
会话层
功能:担当会话管理。
在两台电脑间,两个不同的应用程序间的:建立会话,区别于其他应用程序间的会话(如QQ的信息不会发送到浏览器中,使用端口号进行区分),保持会话,删除会话的过程。
问题:我们两台电脑间的通信,不仅仅是文字的交互。而是有多种数据格式的。那么会话层提供不了这个功能。
解决方案:增加一层"表示层"
-
表示层
功能:担当数据的显示
使用何种编码方式。比如要传输的数据使用ASCII编码,视频还是二进制文件,是否要加密和压缩。发送端和接收端程序必须使用相同的编码方式,才能正确显示,否则就产生乱码。
问题:在现代软件开发中,如果我们编码还要根据不同编码方式进行代码实现,那么就不断进行重复劳动了。我们可以将表示层再进行包装吗?
解决方案:增加一层"应用层"。
-
应用层
功能:提供用户接口
软件:QQ/微信、浏览器等各种能上网的应用程序
协议:HTTP、HTTPS、OICQ、Telnet、SSH等
提供用户接口,特指能够发起网络通信的应用程序。实际上,会话层,表示层、应用层也可以统称为应用层。这些都是软件工程师需要关系的细节。
OSI的工作过程
- 数据封装:本质上是将用户数据加入寻址信息的过程
- 数据解封装:本质上是封装数据包去掉寻址信息的过程。
例如:我们在使用QQ和朋友进行聊天时,我们只需要发送我们想要发送的文本信息即可(如:Hello)。那么电脑怎么就知道将Hello发送到对方的设备上呢?
就是通过OSI七层模型一层一层的将数据传输下去,在每一层中加上必要的信息,最终通过物理层发送到对方的物理层中,再一层一层将数据上传上去,去掉不必要的信息。最终将文本信息显示到对方的QQ上去。
下图来自:维基百科