计算机⽹络实验之socket编程在哪⼀层?
OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。
OSI 模型把⽹络通信的⼯作分为 7 层,从下到上分别是物理层、数据链路层、⽹络层、传输层、会话层、表⽰层和应⽤层。
OSI 只是存在于概念和理论上的⼀种模型,它的缺点是分层太多,增加了⽹络⼯作的复杂性,所以没有⼤规模应⽤。后来⼈们对 OSI 进⾏了简化,合并了⼀些层,最终只保留了 4 层,从下到上分别是接⼝层、⽹络层、传输层和应⽤层,这就是⼤名⿍⿍的 TCP/IP 模型。
这个⽹络模型究竟是⼲什么呢?简⽽⾔之就是进⾏数据封装的。
我们平常使⽤的程序(或者说软件)⼀般都是通过应⽤层来访问⽹络的,程序产⽣的数据会⼀层⼀层地往下传输,直到最后的⽹络接⼝层,就通过⽹线发送到互联⽹上去了。数据每往下⾛⼀层,就会被这⼀层的协议增加⼀层包装,等到发送到互联⽹上时,已经⽐原始数据多了四层包装。整个数据封装的过程就像俄罗斯套娃。
当另⼀台计算机接收到数据包时,会从⽹络接⼝层再⼀层⼀层往上传输,每传输⼀层就拆开⼀层包装,直到最后的应⽤层,就得到了最原始的数据,这才是程序要使⽤的数据。
给数据加包装的过程,实际上就是在数据的头部增加⼀个标志(⼀个数据块),表⽰数据经过了这⼀层,我已经处理过了。给数据拆包装的过程正好相反,就是去掉数据头部的标志,让它逐渐现出原形。
你看,在互联⽹上传输⼀份数据是多么地复杂啊,⽽我们却感受不到,这就是⽹络模型的厉害之处。我们只需要在代码中调⽤⼀个函数,就能让下⾯的所有⽹络层为我们⼯作。
我们所说的 socket 编程,是站在传输层的基础上,所以可以使⽤ TCP/UDP 协议,但是不能⼲「访问⽹页」这样的事情,因为访问⽹页所需要的 http 协议位于应⽤层。
厉害的编程代码两台计算机进⾏通信时,必须遵守以下原则:
必须是同⼀层次进⾏通信,⽐如,A 计算机的应⽤层和 B 计算机的传输层就不能通信,因为它们不在⼀个层次,数据的拆包会遇到问题。
每⼀层的功能都必须相同,也就是拥有完全相同的⽹络模型。如果⽹络模型都不同,那不就乱套了,谁都不认识谁。
数据只能逐层传输,不能跃层。
每⼀层可以使⽤下层提供的服务,并向上层提供服务。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论