当前位置: 首页 > news >正文

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地址,根据地址决定下一步怎么传输;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 最近网友问晚上失眠的问题
  • 【vue3|第22期】Vite + Vue3:vite配置文件
  • 重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉
  • 声明式事务及编程式事务
  • 数据在内存中的存储(了解大小端字节序浮点数在内存中存储)详细~
  • zabbix实战-磁盘空间告警
  • 华为鸿蒙Core Vision Kit 骨骼检测技术
  • 构建第一个Spring项目
  • 黑神话悟空什么配置可以玩?什么样的游戏本配置可以畅玩《黑神话:悟空》?黑神话悟空电脑配置推荐
  • WEB之文件上传
  • 华为M60首次降价,消费回暖能延续?
  • 【FreeRTOS】队列实验-多设备玩游戏(旋转编码器)
  • SQL 时间盲注 (injection 第十五关)
  • java.sql.SQLException: txn too large, size: 104857606.
  • SQLALchemy 分组过滤、子查询
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Angular 4.x 动态创建组件
  • create-react-app项目添加less配置
  • Docker入门(二) - Dockerfile
  • Linux快速复制或删除大量小文件
  • Redis 中的布隆过滤器
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue脚手架vue-cli
  • 闭包--闭包作用之保存(一)
  • 翻译--Thinking in React
  • 前端攻城师
  • 如何学习JavaEE,项目又该如何做?
  • 算法---两个栈实现一个队列
  • 提醒我喝水chrome插件开发指南
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 学习笔记:对象,原型和继承(1)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • (2)(2.10) LTM telemetry
  • (C语言)fgets与fputs函数详解
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (超详细)语音信号处理之特征提取
  • (初研) Sentence-embedding fine-tune notebook
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (论文阅读11/100)Fast R-CNN
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (转)setTimeout 和 setInterval 的区别
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Micro Framework初体验
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 直连SAP HANA数据库
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired多个相同类型bean装配问题
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限