网络基础,协议,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"

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

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

相关文章

【SQL Server】清除日志文件ERRORLOG、tempdb.mdf

数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法: 如果可以停止 SQL Server 服务,那么可以采取更直接的方式来缩减 ERRORLOG 和 tempdb.mdf 文件的大小…

【IoTDB 线上小课 07】多类写入接口,快速易懂的“说明书”!

【IoTDB 视频小课】稳定更新中!第七期来啦~ 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟,我们讲给你听: 一条视频了解写入接口 了解我们的友友们,应该…

centos 安装VNC,实现远程连接

centos 安装VNC,实现远程连接 VNC(Virtual Network Computing)是一种远程控制软件,可以实现通过网络远程连接计算机的图形界面。 服务器安装VNC服务 yum install -y tigervnc-server*启动VNC服务,过程中需要输入连接密码 vncserver :1查看…

【chromedriver编译-绕过selenium机器人检测】

有小伙伴说使用selenium没能绕过机器人检测,盘他。 selenium机器人检测有2种,一是cdp检测,二是webdriver特征检测。cdp检测前面的博客已写过,这里就提下webdriver特征检测。一、selenium简介 Selenium 是一个强大的工具&#xff…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

css设置overflow:hiden行内元素会发生偏移的现象

父级元素包含几个行内元素 <div id"box"><p><span>按钮</span><span>测试文字文字文字测试文字文字文字</span><span>看这里</span></p></div>#box p{width: 800px;font-size: 30px;}#box p span{disp…

Android 如何使用jdk命令给应用/APK重新签名。

写在前面&#xff1a;本篇文章介绍Windows命令行中&#xff0c;如何使用jdk命令给已经签过名的apk重新签名。 使用工具&#xff1a;jarsigner。jarsigner是jdk自带的工具&#xff0c;签名之前确保Windows电脑中已安装jdk。我的环境如下&#xff1a;   后续操作步骤如下&…

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息&#xff0c;一般我们用两个命令&#xff1a; show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量&#xff0c;返回给我们服务器缓存的配置…

Vue(13)——router-link

router-link vue-router提供了一个全局组件router-link(取代a标签) 能跳转&#xff0c;配置to属性指定路径&#xff08;必须&#xff09;。本质还是a标签。默认会提供高亮类名&#xff0c;可以直接设置高亮样式 右键检查&#xff0c;发现多了两个类&#xff1a; 可以直接写样式…

【React】React18.2.0核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

IPD流程体系:IPD在硬件产品开发中的应用

目录 1、内容简介 2、开发各阶段介绍 3、PVT阶段 4、资源群更新 作者简介 1、内容简介 在硬件类相关产品的开发过程中&#xff0c; 每个阶段的工作都是需要按照一定的流程、规范和标准去进行的。 整体还是相对瀑布化的流程&#xff0c; 每个阶段的输入、输出、准入、准…

第四天旅游线路预览——从贾登峪到喀纳斯景区入口(贾登峪游客服务中心)

第四天&#xff1a;从贾登峪到喀纳斯风景区入口&#xff0c;晚上住宿贾登峪&#xff1b; 从贾登峪到喀纳斯景区入口&#xff08;贾登峪游客服务中心&#xff09;&#xff1a; 搭乘贾登峪①路车&#xff0c;路过三湾到达景区换乘中心&#xff0c;路程时长约40分钟&#xff1b; …

autodl连接xftp

&#xff08;1&#xff09;首先打开xftp&#xff0c;新建会话 &#xff08;2&#xff09;给会话取个名字&#xff0c;然后填写主机和端口号 &#xff08;3&#xff09; 主机和端口号从autodl实例中找&#xff0c;登入指令那里 &#xff08;4&#xff09;点击复制&#xff0c;然…

展锐平台的手机camera 系统开发过程

展锐公司有自己的isp 图像处理引擎&#xff0c;从2012 年底就开始在智能手机上部署应用。最初的时候就几个人做一款isp的从hal 到kernel 驱动的完整软件系统&#xff0c;分工不是很明确&#xff0c;基本是谁擅长哪些就搞哪些&#xff0c;除了架构和编码实现之外&#xff0c;另外…

Kafka 基于SASL/SCRAM动态认证部署,kafka加账号密码登录部署

文章目录 前言下载 kafka安装启动zookeeper添加账号密码 启动kafka修改kafka配置文件增加jaas授权文件修改启动文件&#xff0c;启动kafka检查是否部署成功 offset explore 连接 前言 其实挺简单的几个配置文件&#xff0c;问大模型一直没说到点上&#xff0c;绕晕了。SASL/SC…

【linux】4张卡,坏了1张,怎么办?

先禁用这张卡 grub 禁用&#xff0c;防止加载驱动 禁用这张卡的 PCI # 禁用 PCI 设备 0000:b1:00.0 (NVIDIA GPU) ACTION"add", SUBSYSTEM"pci", ATTR{vendor}"0x10de", KERNELS"0000:b1:00.0", RUN"/bin/sh -c echo 0000:b1:00…

数据技术进化史:从数据仓库到数据中台再到数据飞轮的旅程

随着大数据时代的到来&#xff0c;数据已经成为企业的核心资产之一。在过去几十年间&#xff0c;数据技术也随之不断演进&#xff0c;从早期的数据仓库到近年来热门的数据中台&#xff0c;再到正在快速发展的数据飞轮概念&#xff0c;每一步都是技术革新的体现。 一、数据仓库&…

股价预测,非线性注意力更佳?

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文探讨了在 transformer 模型中使用非线性注意力来预测股票价格的概念。我们讨论了黎曼空间和希尔伯特空间等非线性空间的数学基础,解释了为什么非线性建模可能是有利的,并提供了在代码中实现这种…

【二十】【QT开发应用】listwidget右键菜单和删除item

创建项目&#xff0c;添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件&#xff0c;选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…

java项目之编程训练系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 编程训练系统的主要使用者管…