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

网络基础,协议,OSI分层,TCP/IP模型

网络的产生是数据交流的必然趋势,计算机之间的独立的个体,想要进行数据交互,一开始是使用磁盘进行数据拷贝,可是这样的数据拷贝效率很低,于是网络交互便出现了;

1.网络是什么

网络,顾名思义是一张网,这张网中包含了许多的计算机,每一张网都叫做局域网。而世界上所有的网络集合在一起就是世界上最大的广域网;这个大的网络就将世界各地的计算机连接在一起;

上面只是我对网络的大致理解;我们有网络,那我们是如何通网络进行交流的呢?我们知道人与人之间可以交流是人们有一套完整的语言体系,而网络虽然将不同的设备连接在一起了,可是不同设备的硬件还有操作系统等都是不同的;那如何可以让这些设备可以正常的交流呢?这就需要如人与人交流一般约定好某种交流方式,不同的设备之间也要约定好某种特定的交流方式,从而实现网络中不同设备的交流;这种约定好的交流方式就是协议

2.协议

2.1 协议是什么?

协议是一种约定;

以寄快递举例:我们发快递的时候,发的不仅仅是我们想要寄的东西,还要用包装盒把我们的物品包装起来,包装盒上还会有快递单号,快递的起始和送达地址等信息;我们和快递公司约定好了你们把我的物品包装成什么样送到某个位置,接收者在收快递的时候就可以通过包装还有包装上的信息确认这个快递是发给他的,从而拆掉包装获取到里面的物品;

所以这里协议的表现形式就是这个快递的包装!

而在计算机网络中,一个设备想要向想要向另一个设备发送信息,一样需要和对方机器约定好,我们将会把数据包装成什么样,使得接收方能够识别这个被包装的数据;从而解开包装,获得里面的信息;而在计算机中往往是使用结构体来作为包装的;

所以这里协议的表现方式是结构体!

约定好的行为是协议,而网络是一个非常庞大的体系,其中所涉及的问题一定非常广泛,并且世界上的设备很多,生产设备的厂家也有许多,想要让一个庞大的体系被全世界所广泛接收,从而全世界都使用这个协议进行交互,这个协议一定要非常优秀,这样的协议就叫做标准;

当一个协议被一部分人所接受,并且为这一部分人创建出红利时,就会有更多的人想加入这个协议,加入协议的人越来越多,这个协议足够优秀时,这个协议也就成为了大多数人所遵守的标准;同样的你想要享受这个协议带来的优惠,你就得遵守这套协议,大多数人遵守这套协议时,这套协议也就真正成为了标准;

在时代的发展下协议也是衍生出来了标准的,这套标准一定是非常优秀的,先辈们耗费无数心血所研发的:

2.2 协议如何定制?

2.2.1 分层的思想

先辈们在处理这个庞大的体系时,花费了很多精力将这个大的网络体系划分出了层次,通过解决一层层的小问题,从而完善整个网络协议;那在网络中的数据传递会有哪些问题呢:

1.在获得转递过来的被包装好的数据时,如何将数据转换为可使用数据?(应用层)

2.传递过程中如果出现数据丢失等意外情况,如何确保数据的安全传递?(传输层)

3.如何确认数据传递到哪一台机器上?(网络层)

4.如何包装好数据让数据可以成功传递呢?(数据链路层)

就如上面划分出的问题一般可以将数据的传递划分为一层层的问题,那么协议也会被划分成层次;

既然说这样划分出层次是有好处的,那究竟有什么好处呢?请看下面的讲解:

如果,我们将上面交流的过程划分为两个层次,我们就可以体会到,分层的好处:

所以将交流的体系划分层次,用高内聚低耦合的思想解决问题,让体系更好维护;使得层与层之间不会互相影响;

让人通过一个设备发送信息到另一个设备上从而让另一个人收到信息的过程,抽象为人与人交流,手机与手机交流;

在我们的C++中也有这样的分层:继承,继承时类中的数据虽然会越来越多,但每个类维护自己的数据,不会收到其他层次类的影响;

那么有了这样分层的思想,网络协议究竟是如何分层的呢?

网络协议的标准——OSI模型

2.3 OSI七层模型

网络这个庞大的体系需要一套好的标准来规范,让大多数人都遵守这样一套好的协议,从而形成标准,而OSI就是这样的标准;

上面的OSI七层模型就是整个网络模型的设计图,这个设计图非常全面,将层次划分的非常完整,所以这个模型就如知道思想一般,可以为网络的实际设计者们提供思路,从而设计出可靠的网络协议;也是如此实际使用的tcp\ip标准模型根据这个OSI参考设计了出来;

2.4 TCP/IP模型 

TCP/IP模型将参考模型OSI简化为了4层模型(一般PIC/IP模型只考虑上面四层,不考虑物理层),将会话层与表示层融合进入了应用层;

通过上面的图片,我们可以知道,通过每层都有自己的协议,通过相同的协议层与层之间可以进行,交流,从而形成数据传输的形式; 

我们看到了一个设备如果想要进行网络交互,就要形成上面的模型,而拥有这样的网络模型的设备是什么样的呢?接下来我们将实际的设备与上面的模型进行相对应的讲解:

1.硬件层(物理层)(PIC/IP模型一般不包括这层)

想要让数据进行传递,那么就得通过某种物品进行传递,我们生活中常见的物品有光纤,无线网络,这样的载体,光纤传输光信号,而无线网络传输无线电波;那么这些信号进行传输也是需要约定好什么样的光和电磁波是什么样的信号(这也是硬件层的协议),这样数据才能正常安全的传递,硬件层也不仅仅只有如传输载体这样的硬件,还会存在很多不一样形式的硬件,他们负责将我们的数据进行传递;

所以物理层负责实际的数据传输;

2.数据链路层

这层是负责将数据处理为帧的形式,负责校验数据的正确性,处理底层硬件层不会处理的错误检测和纠正,让数据正常的传递;我们的硬件网卡,无线网卡,就是起到这样的作用将数据处理好后再将数据转化为底层硬件层所需要的信号类型,从而保证数据传递;

数据链路层负责将数据进行检查与纠错提供给物理层;

3.网络层

每个机器都会有自己的ip地址,通过ip地址可以找到接收者的机器从而成功让信息到达目的地,也是通过ip地址才可以划分出这样一条路由的路线;当数据传输跨局域网时,就得通过路由器来定位路线;

网络层是对数据传输路线的确定;

4.传输层 

对传输来的数据进行检查和对发送的数据进行验证是否发送成功;

确保数据成功的进行了传递

5.应用层 

对成功传输的数据进行某种处理,解析出数据真正的含义,这样的解析是需要通过相同的协议进行处理的;

通过相同协议解析出真正的数据;

那么我们知道了网络模型是这么设计的之后,我们来看看这样设计的模型到底是如何进行数据传输的; 

3.数据的流动过程

TCP/IP是我们网络协议的一个标准模型,所以想要使用网络的设备都需要遵守这个标准都应该具有这个模型的特征,下面我们讲讲设备进行数据传递的过程:

我们可以看到,数据从我们用户从向底层不断加载的过程就是不断封装的过程,通过协议不断封装,数据到达目标设备后会通过协议不断的解包;通过这样就可以实现逻辑上层与层之间的直接通信,但实际上还是数据贯穿网络栈的过程;

所以我们可以总结出这些结论:

1.任何层的协议都具有将报头与有效载荷分离的能力

2.任何层的协议都包含了上一层使用的协议标识字段,帮助上一层解包

我们现在知道了数据是如何流动的,那下面继续抛出问题,数据是如何在网络中进行传递的呢?

4.数据如何在网络中传递

刚刚我们只是考虑到了数据的流动,而设备是分离的,网络究竟是如何做到让数据成功跨设备进行交互的呢?

4.1 局域网数据传递

我们首先举这样一个例子:

在一个班级中老师叫某个同学回答问题,所有人都会听到老师提出的问题,但是其他人都不会回答,只有哪个被老师喊到名字的人会和老师进行交流,因为这只是老师和被喊道名字的人的通讯;

其实局域网也是这样的:

在一个局域网中,当一台设备发送信息时,整个局域网中的设备都会收到这条信息,但是这条信息中包装了许多层协议,局域网中的设备会对这条信息解包,如果发现这条信息不是发送给自己的,则会直接丢弃,如果某个设备发现这条信息正好是发送给直接的,那么就会继续向上解包;

 那么局域网中的设备是如何识别这条信息确实是发送给它的呢?

通过上面的过程,我们也不难会产生一些疑惑,这些疑惑也确实是存在的问题:

1.碰撞问题 

在一个局域网中,如果每个设备都同时发送信息到局域网中,这个那么如此多的消息进行碰撞,会不会导致发生消息丢失或者错误的问题呢?这个问题确实是存在的,因为网络的承载能力是有限的,但是设计者们早就知道了这个问题,为此设计了碰撞避免算法,让局域网中一次只能发送一条信息,避免了信息的碰撞;

这个避免碰撞算法也说明了网络是临界资源,使用网络的设备具有互斥性;

其次如果一个局域网中设备过多的话,会使用交换机来引导数据的流向,进行局域网的划分,减少数据冲突的可能;

 2.安全问题

在一个局域网中,一条信息发送,所有设备都会收到,那么所有设备都会收到的话,如果有设备对这条信息进行抓取,那么会不会存在安全问题呢?这个问题其实也是存在;设备的网卡有普通模式与混杂模式,当网卡的混杂模式开启时,获得的所有数据即使解包后发现mac目的地址不是自己也会先将数据保留,如果此时有人想读取这条数据,那么就可以对这条数据向上继续进行解包从而获得最后的数据;但是这个问题随着时代的发展,人们可以在应用层就对数据进行加密处理,这样即使有是被对数据进行了抓取,他们也无法解析出这个加密的数据;

现在我们知道了数据究竟是如何流通与数据如何在网络中进行传递的;接下来我们得引入更大的网络广域网,当数据想要跳出局域网传递到更远的网络中,应该如何传递呢?

4.2 跨局域网数据传递

 在最前面的1.网络是什么中,我们就说了不同局域网之间需要通过路由器进行连接,那么究竟是如何通过路由器进行连接的呢?

还是一样举一个小例子:

我们的网络也是可以这么理解的:

当设备1想要跨局域网传递给设备2的时候,设备1肯定无法之间将数据传递给设备2,因为他们无法直接建立联系,但是发送信息的设备可以通过路由器作为中转站来传递信息,每个路由器就像上面例子中的小目标,小目标不断发生改变传递到永远不变的大目标设备2上;那么这个过程究竟是怎么进行的呢?

传递过程: 

 首先,每个设备在网络层都会有自己的唯一标识IP地址,每个设备的网卡数据链路层也有自己的唯一标识mac地址;那么设备传输数据需要把数据封装为最后的数据帧,这其中IP地址的起始地址与目的地IP地址也会封装在数据报中(包含在数据帧中),那么设备如果需要跨局域网进行数据传递,封装的数据帧中的mac地址目的地就得是路由器(得通过路由器作为中转站),这个路由器的mac地址目的地就是不断改变的小目标;在一个局域网中的路由器接收到了这个数据帧后,通过网络号找到目标设备的局域网再将mac地址修改为目标局域网中的目标设备的mac地址;目标局域网中的设备都接收到了这条数据帧,但是只有目标设备会对这条数据帧进行解包,获取数据;这个过程中IP地址就是永远不变的大目标,而mac地址就是不断发生改变的小目标

ipv4:32位4个字节,每个字节以.分开,每个点分开的数都是10进制数

例如:193.123.11.12 

mac地址:48位6个字节, 每个自己以:分开,每个:分开的数是16进制数

例如:12:13:14:15:0f

ipv6:128位16个字节; 

IP地址实现了全球主机的虚拟层,实现了一切皆IP报文;

总结:

数据的传输一定是基于硬件层面的,无论数据如何跳转,如何传递,都必须贯穿网络栈传递;

最后再说两个命令:

linux中查ip地址:        "ifconfig"

windows中查ip地址: "ipconfig"

相关文章:

网络基础,协议,OSI分层,TCP/IP模型

网络的产生是数据交流的必然趋势,计算机之间的独立的个体,想要进行数据交互,一开始是使用磁盘进行数据拷贝,可是这样的数据拷贝效率很低,于是网络交互便出现了; 1.网络是什么 网络,顾名思义是…...

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(...

【OSS安全最佳实践】降低因账号密码泄露带来的未授权访问风险

如果因个人或者企业账号密码泄露引发了未经授权的访问,可能会出现非法用户对OSS资源进行违法操作,或者合法用户以未授权的方式对OSS资源进行各类操作,这将给数据安全带来极大的威胁。为此,OSS提供了在实施数据安全保护时需要考虑的…...

视频存储EasyCVR视频监控汇聚管理平台设备录像下载报错404是什么原因?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能,还支持多种主流标准协议,如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…...

在Spring项目中,两个实用的工具(生成类与映射文件、API自动生成)

尊贵的Spring玩家,是不允许动脑思考的,所以我们要学会复制粘贴 1.生成类与映射文件 背景:在项目编写初期,我们已经设计好了表,后面就需要根据表来撰写实体类(model)和对应的sql语句(dao和mapper)。如果一个项目中&…...

C#基础(16)实践:学生成绩管理系统

简介 通过基础部分的学习,我们已经能进行一些实际应用的开发,学生成绩系统我相信是大家基本在大学期间上程序课必定会经历的一个小项目。 这个小项目看上去简单,但是思考量却不少。 这里就不带着大家一步一步讲解了,因为里面涉…...

git常用命令(patch补丁和解决冲突)

diff/apply方案 使用diff命令生成patch文件,后使用apply命令应用patch到分支,从而实现修改复刻。 生成补丁 git diff > commit.patch 检查补丁 git apply --check commit.patch 应用补丁 git apply commit.patchgit diff --cached > commit.pa…...

数模方法论-整数规划

一、基本概念 非线性规划的应用包括工程设计、资源分配、经济模型等。在求解过程中,由于非线性特性,常用的方法有梯度法、牛顿法、启发式算法等。求解非线性规划问题时,解的存在性和唯一性通常较难保证,且可能存在多个局部最优解…...

【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`

问题随记 在使用 AuthenticationManager 的时候,出现循环依赖问题 —— java.lang.StackOverflowError,查资料查了两天半,终于找到原因。 2024-06-16T17:54:19.48708:00 ERROR 20672 --- [nio-8789-exec-1] o.a.c.c.C.[.[.[/].[dispatcherS…...

2024年华为杯-研赛F题论文问题一二讲解+代码分享

X射线脉冲星光子到达时间建模 摘要 脉冲星是一类高速自转的中子星,其自转形成规律性脉冲信号,类似于“宇宙中的灯塔”,因此被认为是极为精确的时钟。X射线脉冲星导航利用脉冲星信号为航天器提供时间和空间参考。通过比较脉冲信号到达航天器…...

代码随想录训练营第34天|dp前置转移

62. 不同路径 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m,vector<int>(n,1));for(int i1; i<m;i){for(int j1; j<n; j){dp[i][j]dp[i-1][j]dp[i][j-1];}}return dp[m-1][n-1];} }; dp[i][j]:运动至(i,j)的方…...

乐观锁、悲观锁

一、悲观锁 悲观锁 (Pessimistic Locking)&#xff0c;具有强烈的独占和排他特性。它指的是对数据被外界修改持保守态度。因此&#xff0c;在整个执行过程中&#xff0c;将处于锁定状态。所以&#xff0c;悲观锁是一种悲观思想&#xff0c;它总认为最坏的情况可能会出现&#x…...

Java客户端SpringDataRedis(RedisTemplate使用)

文章目录 ⛄概述⛄快速入门❄️❄️导入依赖❄️❄️配置文件❄️❄️测试代码 ⛄数据化序列器⛄StringRedisTemplate⛄RedisTemplate的两种序列化实践方案总结 ⛄概述 SpringData是Spring中数据操作的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中对Redis的集成模…...

wsl2桥接网络 ubuntu到弃坑到又跳坑

搜索Hyper-V image.png 如下图进入虚拟交换机管理器 image.png image.png C:\Users\Administrator下存放 ; 这是 WSL 2 的配置文件 [wsl2] processors4 ; 设置 WSL 2 可以使用的最大 CPU 核心数为 4&#xff0c;自行修改 memory4GB …...

WIFI路由器的套杆天线简谈

❝本次推文简单介绍下WIFI路由器的套杆天线。 路由器天线 路由器在这个万物互联的时代&#xff0c;想必大家对其都不陌生。随着科技的发展&#xff0c;常用的路由器上的天线也越来越多&#xff0c;那么问题来了&#xff1a;天线越多&#xff0c;信号越好吗&#xff1f;路由器…...

希尔排序(C语言实现)

目录 1.希尔排序( 缩小增量排序 ) 2.动图 ​编辑 3.代码实现 预排序实现 子序列排列实现 单趟排序实现 对整组数进行子排序 希尔排序代码 代码测试 时间复杂度分析 希尔排序的特性总结&#xff1a; 1.希尔排序( 缩小增量排序 ) 基本思想&#xff1a; 1.先选定一个…...

LLVM 中的Value、User、Use设计

概述 LLVM是一个强大的编译器基础设施&#xff0c;提供了一套丰富的库&#xff0c;用于构建编译器的前端和后端。在LLVM中&#xff0c;Value、User和Use是几个核心的概念&#xff0c;它们之间有着紧密的关系 Value Value是LLVM中表示所有可计算的值的基类&#xff0c;例如常…...

C++智能指针入门教程(C++11)

智能指针 1.定义 ​ C中的智能指针是一种用于自动管理动态分配的内存的模板类&#xff0c;它们通过封装原始指针来提供自动的内存管理功能&#xff0c;从而避免了内存泄漏和悬挂指针等问题。C标准库中提供了几种智能指针类型&#xff0c;其中最常用的是std::unique_ptr、std:…...

常用工具推荐!分享7款AI论文修改软件工具网站

在当今学术研究和写作领域&#xff0c;AI论文修改软件工具已经成为了不可或缺的助手。这些工具不仅能够帮助研究人员提高写作效率&#xff0c;还能确保论文的质量和原创性。以下是七款值得推荐的AI论文修改软件工具网站&#xff0c;其中特别推荐千笔-AIPassPaper。 1. 千笔-AI…...

怎么解除BitLocker对磁盘的加密?

BitLocker是一种Windows操作系统内置的加密功能&#xff0c;用于保护用户的数据安全。它通过对整个磁盘进行加密&#xff0c;防止数据被未经授权的用户访问。BitLocker主要用于保护笔记本电脑和台式机中的重要数据&#xff0c;尤其是在设备丢失或被盗的情况下。怎么解除BitLock…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...