hello~亲爱的观众老爷们你们好!惯例先说说为什么写这个主题,缘起于其次后端同事的一次抓包分享。固然咯,当时对于网络编程的术语各类不明觉厉,只能尴尬地笑着。对于最基础的 OSI模型
,只知道由七层组成,但每一层是什么,有什么用途,有什么协议彻底是不清楚的。于是知耻然后,经过看书与查资料补充了相关的知识,也就有了这篇文章。html
可能有观众老爷会问,前端知道这个有什么用,平时基本用不上不是么?这个却是事实,咱们平时通常只接触应用层的HTTP
协议, 底层的协议咱们能够绝不关心。但有些场景仍是须要一些底层知识的。好比前端通常优化有一条原则是,尽可能少发请求,那么为什么少发请求就能优化加载,它的开销究竟是什么?又好比最近产品但愿uv打点同一计算机惟一,但极可能用户会采用不一样客户端使用该产品,研发该如何啪啪啪打产品脸。仔细思考一下,其实很多情景也须要一点底层知识,于是不要书到用时方恨少啊~前端
本文会介绍七层模型中每层相关的协议,也会经过快递公司的比喻形容每层的做用。但愿你们有所收获。编程
OSI(Open System Interconnect),即开放式系统互联。 通常都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即ISO开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操做性和应用的可移植性。后端
以上是百度 OSI 模型
的归纳,此处暂时只须要记住模型有7层,首层是物理层,最后是应用层便可。那么,不一样层之间是如何组织和通讯的呢?且看下图:浏览器
发送方从最高层开始,从上到下按顺序传输数据,每一层接收到由上层处理的数据时,添加该层的首部并可能会对数据进行处理(如表示层)。而接收端则将顺序反过来,从首层开始,将数据的内容与该层对应的首部拆开,传给上一层。看起来很绕对吧?简单理解能够这样,想象A将要寄一个易碎品寄给B,A所在的快递站寄件时有由七我的组成的打包流程,每一个人只管接收上一我的的打包好的物件,并在外面套一个大一点盒子,传给下一我的。当物件寄到B所在的快递站时,一样也有七我的负责拆盒子,每一个人只拆一个,最后将物件给到B手上。这样是否是简单易懂了?安全
当时我看到这里时,不知道看官大人是否与我有同样的疑问:其实这么分层,不一样层之间确定有差很少的处理逻辑,处理也麻烦,有必要分层吗?然而这个问题也很好理解,分层后,如若某层产生变化,也不会波及整个系统。咱们也知道,每一层其实都有不一样的协议,若是各层混合在一块儿,切换协议就无从谈起,每次更换某一层,都须要改造整个系统。这和前端为什么要使用框架,让咱们按 MVC
或 MVVM
分层组织代码是一个道理的。明确界定各层的做用,有助于系统的健壮性。服务器
那么每一层到底有什么协议,又有什么做用呢?先从最高层往下看。网络
做为前端,应用层确定是最熟悉的。它的做用是为应用程序提供服务并规定应用程序中通信相关的细节,也就是为应用提供服务。常见的协议有
HTTP
,FTP
,TELNET
、SMTP
等。框架
咱们平常开发中,接触的协议主要以 HTTP
为主,那么把浏览器看做一个应用,当用户发起请求时,经过 HTTP协议
得到数据以供浏览器使用,这就是应用层的用途。而请求时发生错误,对错误进行处理,也是应用层须要负责的。工具
这一层能够想象成快递公司的收件员,当客户(应用)打电话(发起请求)给收件员(应用层)时,收件员能够根据用户的不一样需求提供不一样的服务(不一样协议),好比隔天送达、指定时间送达等等。
表示层的做用是将应用处理的信息转换为适合网络传输的格式,或者未来自下一层的数据转换为上层能处理的格式。它主要负责数据格式的转换。具体来讲,就是讲设备固有的数据格式转换为网络标准格式。常见的协议有
ASCII
、SSL/TLS
等。
做用看起来可能比较绕,但实际上是挺好理解的。我只会说中文,而日本友人只会说日文,那么咱们两个是没法交流的。但若是咱们都会说英文,交流时我先在内心想好要说的话是什么,再用英语说出来,日本友人听到英文,在内心转换为日语,他就能弄懂个人意思,此时表示层就是各自在内心转化语言。而浏览器请求回一堆数据,是解析成文本仍是图片,就由表示层决定。数据的压缩、加密、打包等功能也都在这层完成。
这一层至关于快递公司的打包员。若是快递(数据)太臃肿,他会在不破坏快递的状况下压扁(压缩)它。若是客户注重安全线,全能的快递公司还能用密码箱( SSL/TLS
)打包快递再快送。固然,打包员会肯定,目的地快递站的拆包员,能无损地拆开包裹,将快递交给用户。
会话层做用是负责创建和断开通讯链接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。常见的协议有
ADSP
、RPC
等。
会话层可看做是快递公司的调度员。他管理着此次快递的相关的信息。例如此次客户要发100吨沙土(数据),发到哪,究竟是一车一车发、仍是用轮船一次运过去。这些都是他的职责。而运完以后,相关信息(链接)也能够被销毁了,这也是调度员的职责。
传输层起着可靠传输的做用。只在通讯双方节点进行处理,而不需在路由器上处理。此层有两个具备表明性的协议:
TCP
与UDP
。
TCP
协议提供可靠的通讯传输,简单说就是确认目标能通讯的状况下才会传输数据(所以须要三次握手),传输过程若是丢了数据,也会重发。而 UDP
协议则否则,不会确认目标可否通讯,只会根据协议发到对方地址的端口。至于对方收不收到,丢不丢包,一律无论。
传输层有一个重要做用,就是指定通讯端口。以请求服务器数据为例,服务器有处理多种协议的能力,如以前应用层所说的HTTP
,FTP
,TELNET
等,但到底你是用什么协议呢?服务器并不知道。但若是你指定了端口,如 80
,服务器就会知道你是想用 HTTP
协议的,天然会转给对应协议的处理程序进行处理。
做比喻的话,能够将传输层看做是快递公司的跟单员。负责任的跟单员(使用 TCP
协议)会保证快递送到客户手上,若是送不到就让公司再发一次。不负责任的跟单员(使用 UDP
协议)层只管将快递送到客户指定的地方,无论快递是否送到客户手上。
网络层负责将数据传输到目标地址。目标地址可使多个网络经过路由器链接而成的某一个地址。所以这一层主要负责寻址和路由选择。主要由
IP
、ICMP
两个协议组成。
网络层将数据从发送端的主机发送到接收端的主机,两台主机间可能会存在不少数据链路,但网络层就是负责找出一条相对顺畅的通路将数据传递过去。传输的地址使用的是IP地址。IP地址和咱们的住址有点类似,咱们的住址能够从省到市再到街逐步缩小范围,直至咱们住址。IP地址也有这样的能力,经过不断转发到更近的IP地址,最终能够到达目标地址。如何选择这条路,就看网络层了。
这比如是快递公司的路线规划者。快递公司有不少集散中心,根据集散中心的状况(是否拥堵),找出一条通过n个集散中心的路径将货物(数据)沿路运过去。
该层负责物理层面上互连的节点之间的通讯传输。例如与1个以太网相连的两个节点间的通信。常见的协议有
HDLC
、PPP
、SLIP
等。
数据链路层会将0、1序列划分为具备意义的数据帧传送给对端(数据帧的生成与接收)。举个例子可能会更好理解,暂且把须要传输的数据看做为不一样来源的水,若是直接倒入池子中时,是没法从新分辨出不一样来源的水的。但若是将不一样来源的灌入瓶子中并打上记号,那就能区分出不一样来源的水。这也就是为何要划分为具备意义的数据帧传送给对端。同时要注意的是,数据链路层只负责将数据运送给物理相连的两端,并不负责直接发送到最终地址。
数据链路层能够看做是快递公司的司机,他们驾驶着汽车,将打包好的货物(数据帧)从一个城市(物理节点)运输到另外一个城市。
物理层负责0、1比特流(0、1序列)与电压高低、光的闪灭之间的互换。典型的协议有
RS 232C
、RS 449/422/423
、V.24
和X.21
、X.21bis
等。
看着高大上,实际上是将数据的0、1转换成电信号或者光信号。经过光纤、双绞线甚至是无限电波等介质传输到指定的地址。而传输过程当中的集线器、中继器、调制解调器等,也属于物理层的传输介质。物理层是 OSI
七层模型的物理基础,没有它就谈不上数据传输了。
物理层就是由实物所承载的,因此做比喻的话,公路、汽车和飞机等承载货物(数据)的交通工具,就是物理层的象征。
至此,OSI
七层模型的功能与协议就简单地介绍完了~
上文只是 OSI
七层模型一些粗浅的介绍,但愿能帮到你更好地理解它。然而因为篇幅所限与本人能力不足,七层模型中有不少细节仍未涉及,如需深刻了解,还应该仔细阅读相关资料,加深对各层模型的认识。
感谢各位看官大人看到这里~但愿本文对你有所帮助。因为我对这方面的知识接触不深,于是不免有错漏,但愿各位dalao打我脸,让我知道哪里的理解有误,保证很快更正哦~谢谢!