当前位置: 首页 > 后端技术 > Java

OSI网络七层模型和TCP-IP模型

时间:2023-04-01 16:23:45 Java

如果你是计算机专业毕业或者学过网络通信,那你一定听说过OSI模型OSI是OpenSystemInterconnection的缩写,译为“开放系统互连”。OSI模型将网络通信的工作分为7层,从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。但它的缺点是层数过多,增加了网络工作的复杂性,因此没有大规模应用。后来人们对OSI进行了简化,合并了一些层。最后只保留了4层。从下到上分别是接口层、网络层、传输层和应用层。这就是熟悉的TCP/IP模型。OSI第7层TCP/IP第4层OSI第7层和TCP/IP第4层比较表这个网络模型到底做了什么?简而言之,就是数据封装。我们平时使用的程序(或软件)通常都是通过应用层访问网络,程序产生的数据会逐层向下传输,直到最后的网络接口层,再通过网线发送到互联网上。数据每下一层,都会被该层的协议包裹起来。当它被发送到互联网时,比原始数据多了四层包装。整个数据封装过程就像俄罗斯的套娃医院。当另一台计算机收到一个数据包时,它会从网络接口层传递到上层。每个传输层都将被解包。直到最后一个应用层,获得了最原始的数据,即程序将要使用的数据。打包数据的过程其实就是在数据的头部加上一个flag(blockofdata),表示数据已经通过了这一层,我已经处理过了。数据解包的过程正好相反,即去掉数据头的标记,让它逐渐显露出原来的形状。你可以看到在互联网上传输一个数据是多么的复杂,但是我们感觉不到。这就是网络模型的力量。我们只需要在我们的代码中调用一个函数,让所有的网络层为我们完成工作。大家熟悉的socket编程是基于传输层的,所以可以使用TCP/UDP协议,但是不能用来访问网页,因为访问网页需要的http协议位于应用层.两台计算机通信时,必须遵循的原则:必须在同一层进行通信,例如计算机A的应用层和计算机B的传输层不能通信,因为它们不在同一层,数据拆包会遇到问题。每一层的功能必须相同,即具有完全相同的网络模型。如果网络模型都不同,那就乱了,谁都不认识谁。数据只能逐层传输,不能跳层。每一层都可以使用下层提供的服务,并向上层提供服务。