OSI七层模式简单通俗理解
这个模型学了好屡次,老是记不住。今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记。本文不必定严谨,可能有错漏,主要是抛砖引玉,帮助记性很差的人。整体来讲,OSI模型是从底层往上层发展出来的。
这个模型推出的最开始,是是由于美国人有两台机器之间进行通讯的需求。
需求1:
科学家要解决的第一个问题是,两个硬件之间怎么通讯。具体就是一台发些比特流,而后另外一台能收到。
因而,科学家发明了
物理层:
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各类传输介质的传输速率等。它的主要做用是传输比特流(就是由一、0转化为电流强弱来进行传输,到达目的地后在转化为一、0,也就是咱们常说的数模转换与模数转换)。这一层的数据叫作比特。
需求2:
如今经过电线我能发数据流了,可是,我还但愿经过无线电波,经过其它介质来传输。而后我还要保证传输过去的比特流是正确的,要有纠错功能。
因而,发明了
数据链路层:
定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层一般还提供错误检测和纠正,以确保数据的可靠传输。
需求3:
如今我能发正确的发比特流数据到另外一台计算机了,可是当我发大量数据时候,可能须要好长时间,例如一个视频格式的,网络会中断好屡次(事实上,即便有了物理层和数据链路层,网络仍是常常中断,只是中断的时间是毫秒级别的)。
那么,我还需要保证传输大量文件时的准确性。因而,我要对发出去的数据进行封装。就像发快递同样,一个个地发。
因而,先发明了
传输层(传输层在OSI模型中,是在网络层上面)
例如TCP,是用于发大量数据的,我发了1万个包出去,另外一台电脑就要告诉我是否接受到了1万个包,若是缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。
例如UDP,是用于发送少许数据的。我发20个包出去,通常不会丢包,因此,我无论你收到多少个。在多人互动游戏,也常常用UDP协议,由于通常都是简单的信息,并且有广播的需求。若是用TCP,效率就很低,由于它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!若是同时有1万台计算机都这样作,那么用TCP反而会下降效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。
TCP协议是会绑定IP和端口的协议,下面会介绍IP协议。
需求4:
传输层只是解决了打包的问题。可是若是我有多台计算机,怎么找到我要发的那台?或者,A要给F发信息,中间要通过B,C,D,E,可是中间还有好多节点如K.J.Z.Y。我怎么选择最佳路径?这就是路由要作的事。
因而,发明了
网络层。即路由器,交换价那些具备寻址功能的设备所实现的功能。这一层定义的是IP地址,经过IP地址寻址。因此产生了IP协议。
需求5:
如今咱们已经保证给正确的计算机,发送正确的封装事后的信息了。可是用户级别的体验好很差?难道我每次都要调用TCP去打包,而后调用IP协议去找路由,本身去发?固然不行,因此咱们要创建一个自动收发包,自动寻址的功能。
因而,发明了
会话层。会话层的做用就是创建和管理应用程序之间的通讯。
需求6:
如今我能保证应用程序自动收发包和寻址了。可是我要用Linux给window发包,两个系统语法不一致,就像安装包同样,exe是不能在linux下用的,shell在window下也是不能直接运行的。因而须要
表示层(presentation),帮咱们解决不一样系统之间的通讯语法问题。
需求7:
OK,如今全部必要条件都准备好了,咱们能够写个android程序,web程序去实现需求把。
补充:
Socket:
这不是一个协议,而是一个通讯模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要用来一台电脑的两个进程间通讯,而后把它用到了两台电脑的进程间通讯。因此,能够把它简单理解为进程间通讯,不是什么高级的东西。主要作的事情不就是:
A发包:发请求包给某个已经绑定的端口(因此咱们常常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的容许;而后正式发送;发送完了,告诉B要断开连接;收到断开容许,立刻断开,而后发送已经断开信息给B。
B收包:绑定端口和IP;而后在这个端口监听;接收到A的请求,发容许给A,并作好接收准备,主要就是清理缓存等待接收新数据;而后正式接收;接受到断开请求,容许断开;确认断开后,继续监听其它请求。
可见,Socket其实就是I/O操做。Socket并不只限于网络通讯。在网络通讯中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不须要记,由于Socket通讯时候用到了IP和端口,仅这两个就代表了它用到了网络层和传输层;并且它无视多台电脑通讯的系统差异,因此它涉及了表示层;通常Socket都是基于一个应用程序的,因此会涉及到会话层和应用层。