⽹络七层协议的通俗理解
OSI七层模式简单通俗理解
这个模型学了好多次,总是记不住。今天⼜看了⼀遍,发现⽤历史推演的⾓度去看问题会更有逻辑,更好记。本⽂不⼀定严谨,可能有错漏,主要是抛砖引⽟,帮助记性不好的⼈。总体来说,OSI模型是从底层往上层发展出来的。
这个模型推出的最开始,是是因为美国⼈有两台机器之间进⾏通信的需求。
socket通信在哪一层需求1:
科学家要解决的第⼀个问题是,两个硬件之间怎么通信。具体就是⼀台发些⽐特流,然后另⼀台能收到。
于是,科学家发明了物理层:
主要定义物理设备标准,如⽹线的接⼝类型、光纤的接⼝类型、各种传输介质的传输速率等。它的主要作⽤是传输⽐特流(就是由1、0转化为电流强弱来进⾏传输,到达⽬的地后在转化为1、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都是基于⼀个应⽤程序的,所以会涉及到会话层和应⽤层。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。