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按照自己的协议格式,进行解析,拿到这里的结构化数据,显示到界面上(反序列化)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/879782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tomcat服务器

tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx&#x…

Leetcode 93-复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.…

计算机毕业设计 服装生产管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

MySQL之表内容的增删改查(含oracel 9i经典测试雇佣表下载)

目录 一:Create 二:Retrieve 1.select列 2.where条件 3.结果排序 4. 筛选分页结果 三:Update 四:Delete 1.删除数据 2. 截断表 五:插入查询结果 六:聚合函数 七:group by子句的使用 表内容的CRUD操作 : Create(创建), Retrieve(读取)…

Win10 录屏秘籍大公开:从新手到高手的进阶之路

之前因为某些原因不方便到客户那里进行软件培训,我们就发现录屏讲解供客户随时查看的方式好像更有效果。这次我就介绍一些能够实现win10怎么录屏操作的工具讲解。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这个工具是一款专业的电脑录屏软件&a…

【三大运营商】大数据平台体系架构【顶层规划设计】

在国内运营商(如中国移动、中国联通、中国电信)的大数据平台建设中,顶层规划设计至关重要。以下是针对三大运营商为例【如电信】的大数据平台体系架构的顶层规划设计方案,涵盖整体架构、关键组件、数据管理、应用场景等方面。 1. …

2023年全国研究生数学建模竞赛华为杯B题DFT类矩阵的整数分解逼近求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯 B题 DFT类矩阵的整数分解逼近 原题再现: 一、问题背景   离散傅里叶变换(Discrete Fourier Transform,DFT)作为一种基本工具广泛应用于工程、科学以及数学领域。例如,通信信号…

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法,该方法也会在其原型上 static静态数据,访问静态属性通过 类名.id getter和setter getter:定义一个属性&…

kubernetes存储之GlusterFS(GlusterFS for Kubernetes Storage)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Agent Zero

文章目录 一、关于 Agent Zero现在有了UI:关键概念1、General-purpose 助理2、计算机作为工具3、多智能体合作4、完全可定制和可扩展5、沟通是关键 不错的功能记住已知问题理想的环境 二、Setup - 如何在Windows和MacOS上安装Agent Zero提醒:1、安装Cond…

Tiny-universe学习笔记1:Qwen-blog

本文是参与Datawhale Tiny-universe组队学习的第一篇学习笔记,参考链接:https://github.com/datawhalechina/tiny-universe Tiny-universe学习笔记1:Qwen-blog Qwen整体架构与Llama2类似,具体如下图所示: 其中&#…

深度学习笔记(8)预训练模型

深度学习笔记(8)预训练模型 文章目录 深度学习笔记(8)预训练模型一、预训练模型构建一、微调模型,训练自己的数据1.导入数据集2.数据集处理方法3.完形填空训练 使用分词器将文本转换为模型的输入格式参数 return_tenso…

Java | Leetcode Java题解之第417题太平洋大西洋水流问题

题目&#xff1a; 题解&#xff1a; class Solution {static int[][] dirs {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int[][] heights;int m, n;public List<List<Integer>> pacificAtlantic(int[][] heights) {this.heights heights;this.m heights.length;this.n…

【JSrpc破解前端加密问题】

目录 一、背景 二、项目介绍 三、JSrpc 处理前端加密步骤 一、背景 解决日常渗透测试、红蓝对抗中的前端密码加密问题&#xff0c;让你的爆破更加丝滑&#xff1b;降低js逆向加密的难度&#xff0c;降低前端加密逻辑分析工作量和难度。 二、项目介绍 运行服务器程序和js脚本…

springCloud(一)注册中心

1.Eureka 要是user-service服务有多个&#xff0c;order-service该怎么调用&#xff1f; 这就需要用到 注册中心 了 。 1.1 搭建Eureka服务 1. pom引入依赖 <dependencies><!--eureka服务端--><dependency><groupId>org.springframework.cloud</gr…

线程局部变量

开发线程的步骤 为什么要学 ThreadLocal 就是为了防止开发随意选库&#xff0c;设置线程局部变量 因为初始化随着项目启动-创建了连接池&#xff0c;但目前getinfo和login都是走从库&#xff0c;没有分开 所以在service层方法运行时&#xff0c;用ReqAop代码提前算出此方法走…

将有序数组——>二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵平衡二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确答案…

Modbus_RTU和Modbus库

目录 一.Modbus_RTU 1. 与Modbus TCP的区别 2. Modbus RTU特点 3. Modbus RTU协议格式 4. 报文详解 5. 代码实现RTU通信 1. 打开模拟的RTU从机 2. linux端使用代码实现和串口连接 2.1. 框架搭建 2.2 代码 二.Modbus库 1.库函数 一.Modbus_RTU 1. 与Modbus T…

C++初阶学习第六弹------标准库中的string类

目录 一.标准库中的string类 二.string的常用接口函数 2.1string类对象的构造 2.2 string的容量操作 2.3 string类的访问与遍历 2.4 string类对象的修改 2.5 string类常用的非成员函数 三、总结 一.标准库中的string类 可以简单理解成把string类理解为变长的字符数组&#x…

c++234继承

#include<iostream> using namespace std;//public 修饰的成员便俩个和方法都能使用 //protected&#xff1a;类的内部 在继承的子类中可使用 class Parents { public:int a;//名字 protected:int b;//密码 private:int c;//情人public:void printT(){cout << &quo…