网络基础_1

目录

网络基础

协议

协议分层

OSI七层模型

网络传输的基本流程

数据包的封装和分用

IP地址和MAC地址


网络基础

网络就是不同的计算机之间可以进行通信,前面我们学了同一台计算机之间通信,其中有进程间通信,前面学过的有管道(匿名管道和命名管道)、共享内存,但是进程间通信还有消息队列以及信号量,这些都是 systemV 标准的进程间通信,但是 systemV 标准的进程间通信并不能进行不同的主机间进行通信。

但是我们有时候是需要不同的主机间进行通信的,所以我们需要不同主机间通信的功能。

例如:现在有三个人分别需要处理一些数据,而这些数据需要再三台主机上进行处理,而这样的话那么如果不同主机间不能进行进程间通信的话,那么就只能当第一台计算机将数据处理结束后然后将数据拷贝到第二个计算机上,其中这里面是由人参与再里面的,只要有人参与的话,那么效率无疑是很慢的,所以我们是需要不停的主机间进行通信的。

而主机间通信就是数据的传输,那么如果一个主机给另一个主机一堆数据,那么另一个主机能知道发送数据的主机想要干什么吗?所以再计算机中发送数据时需要由协议的!

协议

那么我们现在理解一下协议。

由于计算机之间传输数据是通过光电信号,由信号的强弱来表示二进制的0,1,要是想传输数据,就需要约定好传输数据的格式。

那么意思是只要计算机的通信协议弄好就可以了吗?

由于计算机的操作系统又很多,生产硬件的厂商也很多,所以不同的计算机之间如果仅仅是约定好协议就可以了,所以还需要有一个通信的标准,只要所有的计算机的生产厂商都遵守这个标准,那么就可以达到让所有的计算机之间都可以约定好协议就可以通信!

协议分层

我们知道,如果是定义好协议的话,那么是需要使用语言定义的,同时像 linux 操作系统是使用C语言写的,而既然是使用C语言写的,那么就可以理解为软件,我们由知道软件是可以分层的,所以实际上协议也是可以分层的,那么协议怎么分层?

下面我们举一个例子:

现在有两个人再打电话,其中这两个人使用的是中文再交流,其中如果两个人距离千里之外使用中文那么两个人能听到对方说话吗?显然不可以的,而两个人听到对方说话完全是通过电话来实现的,而其中我们可以理解为两个人使用的中文就是其中的一层协议,而使用电话来通信,电话也是一层协议。

而既然协议分层了,那么也就是说这些协议是可以分开的,每一层之间互不影响,例如:两个人交流不光可以使用中文来交流,其中也可以使用英文来交流,而两个人也不仅可以使用电话来进行交流,也可以使用微信等其他的工具来进行交流,所以说分层是互不影响的。

OSI七层模型

而上面是我们平时交流的一个例子,那么计算机中使用的是什么协议呢?同时这些协议是如何分层的呢?

其中计算机中之前设计的时候定义的是OSI的七层模型,但是实际上并没有七层模型,而是有五层,但是如果将五财务模型细分一下,也可以分为七层模型。

还是先说一下传统中说的五层模型有哪些!

再回答上面的问题的时候,我们先说一个问题:如果两个人再交流的时候距离很近还好,那么还是可以通道对方再说什么的,但是i如果了两个人距离很远呢?可能就会存在一个人说话,然后另一个人没有听到的场景,还有就是如果距离特别远,那么还需要中间有人或者有其他的来帮忙传话等,同样计算机也是如此,通信的难易程和距离是成正比的,所以说越远通信的复杂程度就越高!

那么为什么说越远通信的复杂程度越高呢?

  1. 当两台主机激励很远的时候,由于数据传输是使用光电信号,所以如果距离特别远的话吗,可能出现数据丢失的问题,也就是所谓的丢包!

  2. 还有就是如果两台主机要进行通信,那么仅仅说想通信就好了吗?显然不是,如果要将数据从一台主机发送到另一台主机那么难道不需要找到对方主机然后发送数据吗?当然需要,所以还需要解决定位问题。

  3. 如果两台主机现在距离千里之外,那么仅仅是靠一根网线就好了吗?不是因为全世界计算机记忆入网设备这么多,不可能是两台主机通信,如果每两台主机通信就需要一根网线,那么显然是不可能的,所以实际上数据的发送是通过路由器,将所有的局域网连在一起,而局域网的连接时通过路由器,所以距离很远的两台主机时通信很多路由器来数据传输的,所以如果两台主机距离很远的话,还需要通过友一个路由器到下一个路由器,所以还需要解决如何让从这个路由器到下一个正确的路由器。

而上面说的协议的分成就是为了每一层之间解决不同的问题。

我们现在先不谈七层模型,我们先说一下 TCP/IP 的五层模型!

什么是TCP/IP的五层模型呢?

其实这里的TCP/IP是协议的一组代名词,而里面不仅包含TCP/IP协议,还包含了很多的其他协议。

其中下面四层是和七层模型是相同的,但是TCP/IP五成模型,将七层模型的上三成压缩为一层了。

而且我们也说了,每一层都是为了解决不同的问题,下面看一下每一层都解决的问题。

首先就是最下面的物理层:物理层主要是为了解决光电信号的传输,比如以太网,和现在常见的wife,等都是物理层的概念,也就是物理信号的传输。

再往上就是数据链路层:其实也可以说是驱动,这一层就是将数据帧的发送,他解决的问题就是数据再局域网内碰撞的检测,以及就是数据差错校验等工作

上面还有网络层:之前我们说过,两台主机太远的话,那么主机是如何找到对面主机在哪的呢?而网络层就是解决主机定位,以及下一跳去哪的。

网络层上面就是传输层了:传输层主要的工作就是数据的传输,例如TCP协议就可以保证数据的有效传输,如果失败了,那么就需要重新发送。

最后就是引用层:应用层就是我们现在所使用的软件,由于每一种的应用都不一样,所以实现起来也是不一样的。

那么七层模型出来:物理层、数据链路层、网络层、传输层,那么还有哪些呢?

其中还有就是会话层、表示层、应用层。

会话层就是为例管理链接的建立以及保持多久。

表示层就是数据的格式,以及格式的转换等。

但是TCP/IP将最后这三层给压缩了,实际上并不是没有会话和表示层,而是全都放到了应用层里面。

实际上,我们其实不关心物理层,我们只关系上面的几层,其中我们学习系统而TCP/IP就是再系统种实现的,所以我们更关心TCP/IP协议。

网络传输的基本流程

那么网络既然是分层的,也就是每一层也都有自己的协议,那么当前层的协议其他层能看懂吗?显然是看不懂的,那么也就是当前层的协议只能由对方的当前层来解析。

那么既然是这样那么每一层再发送的时候是不是就应该将自己的协议加上去呢?

而这个加协议的时候,每一层加的协议就叫做报头,而报头之外的数据,就叫做有效载荷。

现在假设有两台主机,其中左边想要给右边的主机通过网络发送数据,那么应该怎么发呢?

现在假设用户产生了一个数据 “你好“,那么这个数据如何通过网络发送的?

首先,我们说了每一层都有不同的协议,而其中再数据发送的时候,每一层都是要加上自己这一层的协议的,否则即使发送到对端主机,那么对端主机也看不懂。

当数据通过应用层的时候,应用层会第一次将数据封装,也就是加上自己的协议报头,接着会交给下一层。

到了传输层,传输层也会将自己的报头加到应用层给的数据。此时对于传输层来说,应用层给的数据就是有效载荷,而自己加的报头就是报头。

到了网络层之后,网络层也会加上自己的报头,同时交给下一层,然后数据链路层也是加上报头交给下一层,直到数据现在再网络中跑...

此时数据就已经发送到网络里面了,但是当对方接受到该怎么办呢?

其实即使是对方接受到了,那么发送的时候是封装,那么接收到当然需要里面的数据了,那么就是每一层将对应层的报头给解包,然后交付给上层,让上层处理掉剩下的数据。

对应的对方就是和封装相反的动作,直到解包到用户手里。

但是这里仅仅演示的是局域网种的通信,如果是跨网段的话,那么中间还是需要经过路由器,其中路由器会帮我们做很多工作,其中就是找到下一跳,还有就是如果网络使用的技术不同的话,那么路由器还回帮我们进行网络的转换。

数据包的封装和分用

其实我们上面已经简单的模拟了如何封装和分用,但是上面就是一个简单的理解,其实数据包的封装和分用时很复杂的,而且因为同一层的协议时很多的,所以还需要判断再交付的时候,需要交给哪一个协议去进行处理。

再说封装分用之前,我们先说一些背景知识:

  • 其实数据再不同层的协议有不同的叫法:再传输层叫做”数据段“、再网络层叫”数据报“、再数据链路层叫”数据帧“/

  • 应用层数据通过协议栈将数据发送到网络上时,每一层都需要加上首部,这歌就叫做封装。

  • 首部种包含了一些信息类似于:首部的长度、有效载荷的长度、需要交付给上层的哪一个协议。

  • 当数据被封装成数据帧后,发送到物理介质上后,被对方主机接收到后,将每一层的首部去掉,然后通过首部种的上层协议,然后将数据交给上层处理。

背景知识说完了,其实封装就是再首部中加一些字段,并不是我们刚才加的哪些什么,但是主要还都是一样的,而且有一些的首部时定长的,所以就直接解包就可以了,我们下面还是再说一下解包,也就是分用:

这就是解包,我们前面说了,每一层有不同的协议,所以还是需要根据报头中的上层协议来交付给不同的上层。

IP地址和MAC地址

IP地址现在有两个版本:IPv4、IPv6版本,但是现在基本还是IPv4。

IP协议时用来标注不同网段中的主机地址的。

IPv4时四字节的一个整数,其中我们就使用点分十进制来分割,其中每一个点分割一个字节的整数,所以就是0~255.

MAC地址就是用来表示数据链路层中相连的节点。

长度一般时6字节,也就是48位,其中一般使用16进制表示,而每个字节使用冒号隔开。

而mac地址一般是网卡自带的,所以mac地址一般时不能被修改的,同时也是唯一的。

而虚拟机中的mac地址不是真实的mac地址,时虚拟出来的,所以也可能会有冲突。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Linux上安装KVM虚拟机

一、搭建KVM环境 KVM(Kernel-based Virtual Machine)是一个基于内核的系统虚拟化模块,从Linux内核版本2.6.20开始,各大Linux发行版就已经将其集成于发行版中。KVM与Xen等虚拟化相比,需要硬件支持的完全虚拟化。KVM由内…

百度人工智能培训第二天笔记

参加了百度人工智能初步培训,主要是了解一下现在人工智能的基本情况,以便后续看可以参与一些啥? 下面就继续前一天的内容记录。 一、先做电动自行车的电梯里检测 先进行图片资料的上传与标注,这个昨天的最好也说了一下。 训练完后…

手摸手Element-ui组件化开发

前端环境准备 编码工具: VSCode 依赖管理:NPM 项目构建: Vuecli NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。2020年3月17日,Github宣布收购npm&am…

WebGL/threeJS面试题扫描与总结

什么是 WebGL?什么是 Three.js?请解释three.js中的WebGL和Canvas的区别? WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个…

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

【教程】 一文部署配置并入门 Redis

综述 什么是Redis Redis官网——Redis.io Redis, 作为一个高性能的键值对数据库,主要应用于以下场景: 缓存系统:由于其高速读写能力,Redis 非常适合用作缓存系统,减少数据库负载。 会话存储(Session St…

构建未来:云计算 生成式 AI 诞生科技新局面

目录 引言生成式 AI:开发者新伙伴云计算与生成式 AI 的无缝融合亚马逊云与生成式 AI 结合的展望/总结我用亚马逊云科技生成式 AI 产品打造了什么,解决了什么问题未来科技发展趋势:开发者的机遇与挑战结合实践看未来结语开源项目 引言 2023年…

基于SpringBoot母婴商城

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

04.里氏替换原则(Liskov Substitution Principle)

暴论:一般的,如果一个富二代不想着证明自己,那么他一辈子都会衣食无忧。 一言 里氏替换原则想告诉我们在继承过程中会遇到什么问题,以及继承有哪些注意事项。 概述 这是流传较广的一个段子: “一个坐拥万贯家财的富二…

DBS note6:Hashing(哈希存储)

目录 一、一般策略 二、算法简述 三、哈希缺点(Drawbacks of Hashing) 四、举例 五、外部哈希的分析 一、一般策略 由于我们无法一次性将所有数据放入内存中,我们需要构建多个不同的哈希表并将它们连接在一起。然而,这个想法…

第20 章 多线程

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Threa…

如何提高3D建模技能?

无论是制作影视动画还是视频游戏,提高3D建模技能对于你的工作都至关重要的。那么如何能创建出精美的3D模型呢?本文给大家一些3D建模技能方面的建议。 3D建模通过专门的软件完成,涉及制作三维对象。这项技能在视频游戏开发、建筑、动画和产品…

18、串口通信

串口介绍 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机,单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围&…

大模型能否生成搜索引擎的未来?

文|郝 鑫 编|刘雨琦 ChatGPT火爆之前,水面下,也有中国公司也在朝着智能助手的方向努力。夸克便是其中之一。在GPT风靡科技圈后,国内就开始陆续冒出一些大模型厂商。对当时夸克而言,做大模型毋庸置疑&am…

Python list列表添加元素的3种方法及删除元素的3种方法

Python list列表添加元素的3种方法 Python list 列表增加元素可调用列表的 append() 方法,该方法会把传入的参数追加到列表的最后面。 append() 方法既可接收单个值,也可接收元组、列表等,但该方法只是把元组、列表当成单个元素,这…

“逆风飞翔·事实孤儿同行计划”成长陪伴主题区域陪伴培训会

为推进各机构更好地开展事实孤儿成长陪伴工作,促进事实孤儿成长陪伴实施成效,搭建各机构间事实孤儿成长陪伴方式方法交流平台。11月26日,在中国乡村发展基金会、中国民生银行的支持下,由湖南省大爱无疆青少年公益发展中心主办&…

ZZULIOJ 2466: 楼上瞎说,楼下才是,Java

2466: 楼上瞎说,楼下才是 题目描述 《九章算术》的内容十分丰富,全书采用问题集的形式,收有246个与生产、生活实践有联系的应用问题,其中每道题有问(题目)、答(答案)、术&#xff…

MySQL事务详解

MySQL事务详解 数据库事务概述事务是如何实现的事务的ACID特性事务的状态 事务的使用显式事务隐式事务示例自动提交回滚回滚到保存点 事务的隔离级别数据并发问题MySQL 支持的四种隔离级别注意示例 设置隔离级别 事务的常见分类 数据库事务概述 数据库事务是数据库管理系统&am…

【Linux】:信号(一)产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.core文件 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 像这种程序在…

华为云之云桌面Workspace的使用体验

华为云之云桌面Workspace的使用体验 一、云桌面Workspace介绍1.云桌面简介2.云桌面特点3. 云桌面应用场景①远程移动办公②协同办公③安全办公④公用终端⑤图形制作渲染 二、本次实践介绍1. 本次实践目的2. 本次实践环境 三、购买云桌面1. 进入华为云的云桌面购买界面2. 选择购…