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

TCP/IP五层模型

OSI七层模型

OSI(Open Systems Interconnection)七层模型是一种概念框架,用于标准化不同计算机系统之间的通信过程 它由国际标准化组织(ISO)在1984年提出,主要用于网络通信 这七层模型从上到下分别是:

  • 应用层(Application Layer):为应用软件提供网络服务,如HTTP、FTP、SMTP等协议-和具体应用程序直接相关,传输的数据是干啥用的,如何使用,有何意义
  • 表示层(Presentation Layer):确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取,负责数据格式转换、数据加密解密等 
  • 会话层(Session Layer):建立、管理和终止应用程序之间的会话,提供数据交换定界和同步功能 
  • 传输层(Transport Layer):负责在网络中两个节点之间提供可靠的数据传输服务,如TCP(传输控制协议)和UDP(用户数据报协议) -关注的是通信双方的起点和终点
  • 网络层(Network Layer):负责数据包从源到目的地的传输和路由选择,如IP(互联网协议) -关注的是,通信过程中,通信路径的规划,规划出的路径,就决定了,数据要经过哪些节点,“点到点的传输”
  • 数据链路层(Data Link Layer):在相邻的网络节点之间提供数据传输,处理MAC(媒体访问控制)地址和错误检测与修正-关注的是,通信过程中,两个相邻节点之间的通信
  • 物理层(PhysicalLayer):处理通过物理媒介传输数据的技术细节,如定义物理设备标准、电气特性等 -硬件层面上的相关约定

 

TCP/IP五层模型

还有的人把上述通信模型称作TCP/IP四层模型:主要是把物理层并入到其他层中了

  • 应用层(Application Layer):与OSI模型的应用层相同,为应用程序提供网络服务,如HTTP、FTP、SMTP等
  • 传输层(Transport Layer):与OSI模型的传输层相同,负责在网络中两个节点之间提供可靠的数据传输服务,主要协议有TCP(传输控制协议)和UDP(用户数据报协议)
  • 互联网层(Internet Layer):合并了OSI模型的网络层,负责数据包从源到目的地的传输和路由选择。主要协议是IP(互联网协议),它定义了数据包的地址和路由方式
  • 网络接口层(Network Interface Layer):合并了OSI模型的数据链路层和物理层,处理与网络硬件相关的细节,如以太网、Wi-Fi等
  • 链路层(Link Layer):有时也称为数据链路层,它负责在相邻的网络节点之间提供数据传输,处理MAC(媒体访问控制)地址和错误检测与修正

参考资料:TCP/IP四层模型和OSI七层模型的概念_网络7层模型之间的关系-CSDN博客

⽹络设备所在分层

  • 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层
  • 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层
  • 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
  • 对于集线器,它只实现了物理层

  • 此处谈到的路由器和交换机就是经典的路由器和交换机
  • 路由器就是工作在网络层(三层转发)
  • 交换机就是工作在数据链路层(二层转发)

  • 如果是真实的情况,实际上的路由器和交换机,可能有变数
  • 现在的路由器和交换机,功能都是越来越多,界限也越来越模糊了
  • 有些交换机的功能,路由器也有,路由器的功能,交换机也有
  • 还有一些经典路由器交换机没有的功能,现在他们都有
  • 有些路由器能工作在应用层:比如你通过wx发一个消息,路由器/交换机,就能感知到,你发的这个消息内容是啥(消息内容,属于应用层的范畴)

对于咱们来说,最重要的是应用层和传输层和日常开发,息息相关,网络层,数据链路层,物理层,有个简单的了解即可

协议的层和层之间,是如何配合工作的?

协议的层和层之间,上层协议调用下层协议,下层协议给上层提供服务,封装

举一个栗子:


A通过QQ给B发送HELLO

A通过QQ发送hello给B,A在聊天窗口里,输入hello,点击发送;QQ应用程序就要负责实现上述逻辑,很明显,上述信息都需要通过网络来传输,QQ应用程序,首先就会把上述要传输的内容,组织成“应用层数据包”


QQ里就会有一个应用层网络协议,协议就是约定数据,按照什么样的格式来组织(数据的格式),字符串,字符也是通过二进制0101构成的,网络传输的数据(本质上是二进制的)字符串(更准确的说是二进制的bit流),因此,要传输的,发送人,接收人,消息内容...就要组织到一个字符串中,组织的时候,就需要按照一定的格式来组织,不同的协议,数据组织的格式是不相同的


网络上是通过电信号,光信号,电磁波来传递信息,就可以把不同的信号进行编码,有的表示1有的表示0,比如约定低电平是1,高电平是0(电平==电压),就可以通过一系列的高低电平信号,传输一组0101这样的二进制数据,如果这些二进制数据,正好构成了某个字符的编码,就相当于在传输字符串


假设QQ的应用层协议是这样的,四个信息,为了组织成字符串,就通过,来分割各个部分,使用\n结束标志,发送人的qq号,接收人的qq号,发送信息,消息正文\n

具体的例子

即使QQ真实的协议,更复杂,本质也就是把各个属性信息组织成一个字符串,本身要发送的是一个结构化的数据(包含很多属性,很多字段),实际上要先转化成字符串

  • 把结构化的数据转化为字符串/二进制字符串称为序列化
  • 把字符串/二进制字符串转化为结构化数据称为反序列化

  • 应用层数据包

QQ程序,就要调用系统的api,来进行传输

应用层接下来要把数据交给传输层,那么如何交给传输层?传输层(操作系统内核)->称为socket api,提供了api,让应用程序去调用,调用这样的api,就会把刚才的应用层数据交给传输层(进入系统内核了)

传输层拿到应用层数据包之后,就会把这个数据包进行进一步的封装,构造成传输层数据包,在传输层,典型协议有两个(TCP,UDP),此处假设使用UDP来作为传输层协议

后半部分被称为UDP数据包的载荷(payload),整个包被称为UDP数据包,UDP报头中存放的是UDP相关的属性(比如收件人和发件人的端口号,就在UDP报头中)

传输层构造好数据包之后,就会继续把数据包交给网络层(传输层会调用网络层提供的api,这个调用的过程都是系统内核,自行负责了,咱们程序员感知不到)


  • 网络层:典型的协议:IP协议

IP报头中包含收件人的IP地址和发件人的IP地址,IP协议不关心后面再和里头是啥,只关心IP报头里的数据,同时网络层会进一步的调用数据链路层的api,把上述IP数据包,交给数据链路层的协议,同样也是数据内核负责完成的,程序员感知不到了,这里的api往往是网卡的驱动程序提供的,硬件厂商发布硬件的时候,提供配套的软件(驱动程序),通过驱动程序可以让操作系统实现对硬件的精细控制


  • 数据链路层:典型协议:以太网

此处传输网络数据也需要介质,就把以太这个词给拿过来,电脑通过有线网,传输数据,走的就是“以太网”协议,咱们电脑上插得网线,叫做“以太网线”(此处扩展下:wifi是另外一套协议802.11,也是TCP/IP体系内的),以太网也有自己的数据包格式,就会拿到上述IP数据包,进一步的封装

上述数据已经进入到网卡驱动中了,接下来就要真正发送出去了


  • 物理层,上述的以太网数据帧,本质上还是0101二进制数据

硬件设备,要把上述二进制数据,转化成光信号/电信号/电磁波,才会真正进行发射,上述层层包装数据,不停的加数据报头的过程称为“封装”


上述数据,并非是直接到达B,而是要先到和A连接的交换机/路由器,数据经过交换机/路由器一系列转发之后,最终会到达B,当数据到了B之后,又要做哪些事情呢?就是上述过程的逆过程


  • 物理层:收到一系列光电信号,把这些信号转化成0101二进制数据,交给数据链路层
  • 数据链路层:按照以太网协议,对数据进行解析(解析报头中的关键信息,为后续的传输/转发打下基础,还需要拿到载荷数据)

解析出来的载荷数据,是要交给上层(网络层)

  • 网络层:IP协议,IP协议拿到了IP数据包,按照协议格式进一步解析,解析报头中的关键信息,取出载荷

把载荷再进一步的交给上层(传输层)

  • 传输层:UDP,拿着UDP数据包,按照UDP格式进一步解析,解析出关键信息(要交给哪个端口号对应的进程),以及解析出载荷数据

再把载荷交给对应的应用程序

  • 应用层:QQ程序拿到了应用数据包

QQ按照自己的协议格式,进行解析,拿到这里的结构化数据,显示到界面上(反序列化)

中间的路由器,交换机也是进行封装分用(也是上述过程),只不过,交换机,封装到数据链路层,即可知道下一步如何转发(工作在数据链路层),路由器,封装分用到,网络层,即可知道下一步如何转发(工作在网络层)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HBase初探笔记
  • 【前端】main.js中app.vue中 render函数的作用及使用背景
  • 黑马头条day2-预览
  • MME-RealWorld:您的多模态大型语言模型能挑战高分辨率的真实世界场景吗?这些场景对人类来说都非常困难!
  • 自动化测试Mock神器:轻松模拟HTTP请求!
  • 【深度学习】(2)--PyTorch框架认识
  • 简单题66-加一(Python)20240918
  • GUI编程16:图片按钮、单选框、多选框
  • Ubuntu 22.04上安装Java JDK 8
  • 自定义Spring Security认证处理的完整解决方案
  • OpenCV 1
  • Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法
  • 术语“in law”(在分布上)
  • Gitee丝滑版本:成功在新电脑添加新文件
  • stm32 PWR电源控制(修改主频睡眠模式停机模式待机模式)
  • canvas绘制圆角头像
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • fetch 从初识到应用
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java-详解HashMap
  • linux安装openssl、swoole等扩展的具体步骤
  • spark本地环境的搭建到运行第一个spark程序
  • vagrant 添加本地 box 安装 laravel homestead
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 强力优化Rancher k8s中国区的使用体验
  • 如何进阶一名有竞争力的程序员?
  • 什么是Javascript函数节流?
  • 微信小程序开发问题汇总
  • 正则学习笔记
  • nb
  • 1.Ext JS 建立web开发工程
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • ${ }的特别功能
  • ${factoryList }后面有空格不影响
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $jQuery 重写Alert样式方法
  • (06)Hive——正则表达式
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (java)关于Thread的挂起和恢复
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (九)信息融合方式简介
  • (四)JPA - JQPL 实现增删改查
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)jdk与jre的区别
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *2 echo、printf、mkdir命令的应用
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET Core 版本不支持的问题
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Core与存储过程(一)
  • .NET 服务 ServiceController