OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

2024-08-21 01:28

本文主要是介绍OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 协议分层的好处
    • OSI七层网络模型
    • TCP/IP五层网络模型
    • 网络设备所在的分层(重点)
    • 封装和分用

协议分层的好处

第一点:

在网络通信中,如果使用一个协议来解决所有的问题,那么这个协议就会非常的庞大,非常不利于去学习和理解,相比之下,就可以把大的协议拆分成多个小的协议,让每一个小的协议只关注某一个部分的工作,使每一个小的协议都不会太麻烦,这样也就达到了化繁为简。而在网络通信中,有太多太多的协议,为了方便管理,就对协议进行了分层,按照协议的作用分类,并且约定了不同层次的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持,这样就不容易混乱;

举个例子,比如说,在创业时,这时候就只需要老板一个人对所有员工进行管理即可,就不需要中层领导,随着公司的规模越来越大,老板管不过来了,这时候就需要有中层领导,当老板想要发布某个任务是,就不需要向底层的员工直接发布,只需要向中层领导发布,然后呢,中层领导就会向下再发布,最后到员工手里,这也就是刚才所说的,上层协议调用下层协议,下层协议给上层协议提供支持,这样在通信过程中,就会很容易的方便管理

第二点:

协议分层了之后,上层和下层彼此之间就进行了封装,使用上层协议,不必关注下层协议,使用下层协议,不必关注上层一些,每个协议就只关注自己本身的就可以了

在这里插入图片描述

类似于上图,在语言层,根本不需要理解通信设备是什么样的,我们只需要说话就行了,而在通信设备层,制造通信设备时,并不需要关心你使用什么语言说话,我只要把说的话给传达过去就行,只要会说话,就能打电话,大大降低了使用者的成本

第三点:

每一层协议都可以根据需要灵活的转换

在这里插入图片描述

例如上图,在通信设备层,我可以把电话替换成手机,该怎么打电话怎么说话都是一样的,并不会影响到语言层,在语言层这里,不管是使用英语、汉语、日语,也都不会影响到通信设备层;

这里面提到的数据报严格来讲是有区分的,因为,不同的协议层对数据包都有不同的称谓,在传输层叫做数据段(segment),在网络层叫做数据报(datagram),在链路层叫做数据帧(fram)

计算机中的分层就有两种分层模型👇

OSI七层网络模型

在这里插入图片描述

OSI 七层模型很复杂也不实用,所以只是存在教科书中,而在现实中使用的使 IOS 七层模型的的简化版本 -> TCP/IP五层网络模型

TCP/IP五层网络模型

TCP/IP 是一组协议的名字,在五层网络模型中还包括了其他许多协议,组成了TCP/IP协议簇,TCP/ IP是网络通信过程中最重要的两个协议。

  1. 应用层:描述了应用程序如何发送数据,如何获取数据以及获取数据以后如何使用,应用层是由应用程序实现的,也就是需要通过我们写代码实现的。

  2. 传输层:关注起点和终点

    比如,我在京东上买了一件衣服,提供了收件人地址和收件人电关心中间是怎么运输的,这就是传输层的工作

  3. 网络层:进行路径规划

    商家发货,就需要将衣服交给快递公司,快递公司就会根据起点和终点来进行路径上的规划,筛选出一个合适的路径,这也就是网络层的工作

    传输层和网络层是由操作系统的内核实现的,都是现成的,不需要我们手动去实现。

  4. 数据链路层:两个相邻节点之间的数据传输情况

    当快递公司确定好了路径以后,假如是从上海 -> 南京 -> 郑州,这样的一条路径,接下来需要考虑每一步该怎么走,例如,从上海到南京使用火车,从南京到郑州使用飞机,这也就是 相邻节点之间如何传输,也就是数据链路层的工作

    数据链路层是由驱动程序+硬件实现的,比如硬件厂商搞了个硬件,都会提供对应的驱动程序,由了驱动,才能让操作系统很好的来操作这个硬件。

  5. 物理层:描述的是网络通信的硬件设备,比如使用的网线、光纤应该是啥规格的。

    其实也就是,越往上,关注的话题就越宏观,越往下,关注的细节就更多。

    在这里插入图片描述

网络设备所在的分层(重点)

  • 对于一台主机,它的操作系统内核实现了从应用层到物理层的内容,五层都会涉及到
  • 对于一台路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层
  • 对于一台交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层网络模型的下两层
  • 对于集线器,它是实现了物理层

封装和分用

描述了网络通信过程中,数据传输的基本流程

举个例子:

考虑有这样一个场景,张三通过QQ把一个hello发个给了李四,通信过程如下:

发送方:

1.应用层:

QQ就会对用户输入的“hello”按照QQ的应用层协议进行封装,打包成一个应用层数据报,这里的打包过程也就是字符串拼接,而应用层协议往往是由程序员自己决定的,在应用层打包好数据报后,就会调用操作系统API将数据报交给传输层

2.传输层:

在传输层这里,就会对应用层数据按照传输层的协议,再进行打包(传输层最常用的协议就是TCP/UDP),以UDP为例,这里的打包过程也是字符串拼接,也就是在应用层数据的基础上,拼接上一个UDP报头报头,这个报头也是一个二进制数据,报头里面最主要的信息就是源端口和目的端口

3.网络层:

传输层数据打包好之后,就会交给网络层,网络层就会根据网络层的协议针对传输层的数据报再进行打包(最常用的协议就是IP协议),也就是在传输层数据报基础上再添加一个报头,也是字符串拼接,在IP报头中也包含了很多的属性,最重要的属性就是 源IP和目的IP

4.数据链路层:

网络层数据打包好之后,就会交给数据链路层。数据链路层比较典型的协议就是以太网协议,所以,在网络层数据报的基础上就会拼接上一个以太网报头和以太网尾,就会构成一个以太网数据帧,在以太网报头中,包含最重要的信息就是 源mac地址,目的mac地址,mac地址也是用来描述一个设备在网络上的地址。

  1. 物理层

    将上述经过打包的数据转换成二进制的0 或 1序列,通过光信号/电信号传输,以上这些打包的过程就是封装,如下图

在这里插入图片描述

数据发出去之后,就会进行一系列的交换机和路由器进行转发,等到目标主机接收到了这些数据后,就会对收到的数据进行分用

接收方:

1.物理层

拿到光/电信号,转换成二进制数据,得到以太网数据报,就会交给数据链路层,按照数据链路层协议处理

2.数据链路层

通过以太网协议,针对以太网数据报进行解析,这个解析过程就会解析出报头和报尾,拿到中间的载荷,把载荷部分交给网络层,按照网络层协议进行处理

3.通过IP协议针对网络层数据报进行解析,去掉报头,拿到载荷,再进一步把载荷交给传输层

4.传输层

此处使用UDP协议针对这个数据报进行解析,去掉报头,把载荷交给应用层,通过报头中的端口号,就可以知道应该把数据交给那个应用程序

5.应用层

QQ 这个应用程序就会按照程序员自定义的应用层协议 进行解析,最后拿到 hello 这个数据

上述只是在讨论发送方和接受方之间的分装和分用的实现,而数据报在网络传输的过程中,如果经过路由器,路由器也会进行一个封装和分用,而这里的封装和分用只是达到网络层,需要拿到网络层的IP地址,根据地址决定下一步怎么传输;

这篇关于OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091726

相关文章

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求: