Linux:网络的初步认知

文章目录

  • 网络的认知
  • 如何理解协议
  • 网络分层
  • OSI模型
  • TCP/IP五层(或四层)模型
  • 网络传输的基本流程
    • 协议的参与
    • 局域网通信原理

本篇将会引入到网络的话题

网络的认知

第一个问题是,网卡是文件吗?答案是显然的,在Linux下一切皆文件,基于这个原理对于网卡依然是文件,所以第一个建立起的初步认识是,不管是在网络中有各种各样的协议,其实都是向文件当中去写,这其实可以理解很多内容

下图展示了早年的时候数据的基本原理,在最初想要进行协作的过程中,一定是要进行对于数据的拷贝的,那因此就诞生了对于光驱软盘的概念,把数据写到软盘上,再换一台电脑继续进行读取操作,但这样的方法还是太慢了
在这里插入图片描述
为了解决这样的问题,于是有了一个新的思路,能不能把这些计算机连接在一起进行相互协作,这样就可以提高一些效率,实现了数据的共享和交互呢?答案是肯定的,于是有了下面的另外一种基本的结构:

在这里插入图片描述
上图的结构是一个基本的逻辑结构,所有的电脑就被用线连接在了一起,此时这就已经有了一个计算机的基本雏形,那随着互联网那个的发展,可能会出现有两个很远距离的实验室想要进行数据的通信,能不能产生一种方式,使得一个区域的子网和另外一个区域的子网也能相互连接在一起呢?于是就推动了这样子网之间进行联系的效果:

在这里插入图片描述
在这里插入图片描述
上图所示的两种结构就是局域网和广域网的概念,当然这两种方式是一种抽象出来的表达方式,但不管怎么说,这两种都可以体现网络的概念,以实现了数据的交互功能

如何理解协议

这里只使用最朴素的方式,协议就是双方约定好的一种通信方式,比如约定两短一长表示某种信息,两长一短表示另外一种信息,这都是协议的体现,而如果想要理解计算机协议,就必须要先理解计算机通信当中会产生什么问题,进而去引到协议的概念中去

下面展示几个基本的问题:

  1. 如何处理发送来的数据
  2. 长距离传输的数据丢失问题
  3. 如何定位主机的问题
  4. 如何保证数据可以准确到达另外一个设备

上图所示的是四种基本的网络问题,那为了解决这样的问题,就需要在每一层都设置一些相应的协议来通过数据交互解决对应的问题,比如在协议中有各种各样的字段,表示这个数据就是发送给某人的,比如说把主机的ip地址写进去,表示就是给某个特定的ip地址写的,所以每台机器都有对应的ip地址,可以对应到远端主机上,那其他的问题也有对应的协议方法,例如有https,http,ftp等等协议,这些协议都可以来解决对应产生的问题和方法

所以在日常的网络通信当中,单纯传递一个字符串是不可以的,它通常需要伴随一些包裹的信息,比如这是谁发的,这是谁写的,什么时候发的,这些管理数据是一定要有的,而这些多出来的部分就叫做协议,依据这些协议可以更好地进行通信,每次发送信息多出来的那一部分就是协议的内容

那在内核的实现是如何实现的呢?其实很简单,把对应的内容放到一个结构体当中,再把结构体传递出去就可以

网络分层

下面的话题是关于网络分层的话题,对于这个话题来说比较陌生,因此我们引入分层的概念,首先由之前的内容可以知道,在操作系统中是存在分层的概念的,比如说从硬件到驱动,再到操作系统,再到系统调用,这些都是分层的概念,因此才有了下面的这张图的概念

在这里插入图片描述
那在网络的知识体系中,分层的概念也是必然存在的,这也是发展的必然结果:

  1. 网络规模大

在网络进行通信的时候,整个模块的规模是一个非常庞大的规模,那为了解决这样的问题,于是提出了网络分层的概念,想办法把一个一个的模块之间进行解耦,这样就必须要首先进行分层

  1. 协议问题

协议本身是要用来解决问题的,那如果要是设计为分层的结构,协议进行不断的向下或向上传递,这样就可以更好的解决问题,这也是解决问题的一种方式,那这样的方式用来解决问题是比较优秀的,这样就可以解决很多问题,比如说两台设备之间想要实现通信,那么就必然意味着这两个设备的底层内部会有一系列的转换,最终实现了设备数据的交互,那如果借助了分层的结构,那么解决这样的问题就会方便很多

我们引出下面的这个使用场景:

在这里插入图片描述
这个场景主要是说,两个人正在进行通信,那从表面上来看,很明显代表着这两个人是用电话进行沟通的,A和C进行电话进行通信,从逻辑的角度来讲是认为,人和人正在进行沟通,但是从底层来看,其实在这两个人进行沟通的过程中会涉及到很深的内容,而这层很深的内容就是有分层的概念,他们之间进行一层一层的交互

层状结构的好处

谈及到层状结构的好处,就必须要谈及到解耦的好处了,解耦带来的最大的好处就是互不影响,那分层的一个比较大的特点就是非常方便的进行维护,一层出现问题只会影响一层,而不会影响其他层,如果A和C的电话出现了问题,那么就只需要更换电话即可,而电话底层的内部信息没有出现问题,同理,如果把每一层的协议都看成一层,那么总共就拥有着上层中层下层这样的层次结构,因此可以很好的降低维护的成本

那说了这么多,下一个问题是,网络是如何进行分层的?

OSI模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;

把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;

OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;

它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;

但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解

TCP/IP五层(或四层)模型

在谈TCP模型之前,我们先思考一个问题,网络协议栈和操作系统有关系吗?前面的分层中,举例举的都是操作系统的分层的概念,那么落实到TCP中,该如何理解这个过程呢?

那下面给出的图,就展示了网络协议栈和操作系统之间的关系

在这里插入图片描述
上图所示的就是网络协议栈的基本图示,那下面要补充的一个小结论是,所有的操作系统内部实现都是一样的

该如何理解这句话?再操作系统的内部,不同的操作系统可能会有不同的实现方式,例如有内存管理,进程管理,文件管理,驱动管理,这些管理的方式是五花八门的,不同的操作系统有不同的管理方式,但是不管怎么说,只要符合操作系统的理论就可以,但是到了网络这一块却并不是这样,从网络的角度来看,网络协议栈必须是一样的,每一个操作系统只要想要进行数据通信,那么它内部所搭载的网络协议栈结构必须要是一样的,否则就无法进行入网的操作,具体的原因后续会继续进行补充,这里只需要知道,不管是安卓还是Windows还是其他的操作系统,它们的网络协议栈必须是一样的

有了上图的结论,我们输出的下一条结论是,网络通信的本质,就是贯穿协议栈的过程

该如何理解贯穿协议栈这件事呢?再看下面的图

在这里插入图片描述
现在有两台设备,一台手机一台电脑,依据上面的原理,网络协议栈拥有相同的结构,那么这也就意味着每一层的结构体对应的协议等信息都是要认识的,定义的字段等,不管哪一个操作系统都是要认识这些字段的,这是提前规定好的,那在实际的网络通信的原理中,也确实如此,从用户层想要发送给另外一个设备的用户层,必须要全部把网络协议栈都穿透一次,贯穿硬件,必须从硬件上才能发送过去,所以说有这样的结论:网络通信的本质就是贯穿协议

网络传输的基本流程

那下面对于网络传输,建立一个基本的思路流程:

在这里插入图片描述
首先,当看到上图的各种应用层,传输层,网络层,链路层等等,首先应该考虑到的是,在这些层的背后其实就代表的是两台机器,那把两台机器的骨架全部摘除,其内部的原理就是这样,而在最后一层,实际上两台设备的通信是借助了以太网的方式来进行的通信

当网络通信进行长距离传输的时候,首先要解决的问题是保证自己的主机和直接连接的主机之间可以通信,凡事和直接连接的这样的网络,就叫做局域网,这个局域网也是比较好理解的一种局域网,比如在家的无线路由器,这个无线路由器的网络就是一个最经典的局域网,而局域网之间的设备都是可以进行通信的,这也就解释了为什么在进行设备投屏这样的场景前,一个必要的条件就是必须要连接在同一个局域网中

局域网的数据是可以进行直接通信的,而这种直接通信必然是有对应的技术保证,那这种技术保证就叫做局域网协议,最典型的例子有以太网,令牌环网,也有无限缆,再比如有无限WiFi,这些设备都是相互联通的,因此是可以直接进行数据交互的

在实现了每一个区域之间都能进行信息交互之后,那接下来的问题就是两个不相关的区域之间该如何进行信息的交互呢?随着历史的发展,时代最终选择了一个最重要的局域网协议,这个名字就叫做是以太网

协议的参与

在本文之前的内容中讲到,对于协议的理解可以简单理解为多余的部分,那在此重新对于协议有一个理解

报文 = 报头 + 有效载荷,那如何理解报头,说到底,报头就是双方都约定好的一个结构体对象,那在应用层当中把用户真正的内容再带上报头组合起来,就组成了报文,之后这个报文就能继续传递,然后再继续带上报文,再继续传递…

当传递到另外一个端口进行解析的时候,就对于这个报文进行解析,找到其中有效的有效载荷,就能对于内容进行解析,进而取出真正需要的内容,我们用下图来表示这么一系列的过程:

在这里插入图片描述
那么至此,左侧的过程就叫做是一个自顶向下交付的一个过程,也叫做是一个封装的过程,每一层的报头都会加到最前面,而对于另外一个设备来说,首先抓取到信息的是对应的网卡设备,网卡设备拿到信息之后,就要把数据交给操作系统,而操作系统就会加载到内存中进行对应的数据处理,再根据网络的分层结构,进行一层一层的解包,把包的内容进行解析,最终回到用户层就能拿到包的原始数据了

从这个逻辑过程中不难发现,每一层协议似乎都拥有添加和解除的功能,也能看出对于同层协议来说,怎么发出去的就怎么接受回来,所以说以ip地址为例,左边代码的ip协议结构体的内容右边协议一定是要认识的,不然就不能实现解包的原理了,因此换句话说,通信的过程本质可以看成是不断的进行封装和解包的过程

局域网通信原理

在这里插入图片描述
上图展示的是一个最为基本的通信原理,有一个包中包含的内容是,M1到M10,数据信息紧随其后,那么只要是在同一个局域网内的网卡设备都有接受信息的能力,但是不同的是,当非M10的网卡接受到信息之后,会鉴别到这个信息不是给我的,那么就会把这个包进行丢弃,直到当M10检测到这个包,说这个包是传递给我这个当前网卡的,那么就对这个包进行使用

数据碰撞

那加入此时有好多设备同时进行数据传输,那么在进行传输的过程中就会造成数据碰撞的问题,光电信号会进行互相干扰最终导致波形图混乱等问题,所以依据这个原理,如果想要对于一个局域网进行毁坏,其中一个方法就是可以向局域网中发送大量的垃圾信息,这样就可以使得和正常信息进行碰撞,使得这个局域网出现破坏

那这样岂不是乱套了,对此,以太网自然会有自己的解决措施,因此以太网就有一个对应的承受范围,在这个范围内可以避免这样碰撞的产生,可以进行延迟发送等操作

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

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

相关文章

大模型日报 3月14日

资讯 研究 智能体的ChatGPT时刻!DeepMind通用AI向人类玩家进化,开始理解游戏 https://mp.weixin.qq.com/s/-GNZaY9vPQJCJUD7WGTjGA 视频游戏是 AI 系统的重要试验场。与现实世界一样,游戏也是丰富的学习环境,具有反应灵敏的实…

Hive SQL必刷练习题:向用户推荐朋友收藏的商品(两种思路)

问题需求: 需要请向所有用户推荐其朋友收藏但是用户自己未收藏的商品,请从好友关系表(friendship_info)和收藏表(favor_info)中查询出应向哪位用户推荐哪些商品。期望结果如下: 1)…

【算法专题突破】--- 动态规划 --- 第 N 个泰波那契数 三步问题(1)

1.第 N 个泰波那契数 1.题目解析 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 1. 定义状态表 首先,我们要明白这道题的核心是找出一个序列中的数,这个序列遵循特定的规律:每个数…

简析|创业老隋分享的人力RPO项目如何?

在当今社会,创业热潮席卷而来,各类项目层出不穷。近日,创业老隋分享的人力RPO项目引起了广泛关注。那么,这个项目究竟如何呢?是否靠谱?经过深入了解和分析,我认为这个项目是靠谱的。 首先,从项目的背景和…

idea远程试调jar、远程试调war

idea远程试调jar、远程试调war 目的&#xff1a;测试运行时与ide开发时是否一致。 配置jar Maven中添加 <packaging>jar</packaging>将其打包为jar。 设置运行入口main 编译jar 看到jar输出 配置试调 添加jar运行 远程试调 先在源码中打好断点试调 debug运行…

angularjs 指令实现自定义滚动条

场景&#xff1a;横向商品栏&#xff0c;把原有的滚动条改成自定义的样式&#xff0c;并且给两边加上箭头可以调整&#xff0c;可以拖动商品和滚轮实现滚动条效果。 js appService.directive(customScrollbar, function() {return {restrict: A,transclude: true,scope: {ena…

Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别?

Docker简介 前言 前端有必要学习Docker吗&#xff1f;有&#xff01;&#xff01;不仅要学Docker&#xff0c;还要学习Kubernetes (K8s)&#xff0c;Jenkins 那问题来了&#xff0c;Docker,k8s,jenkins到底要先学习那个呢&#xff1f;当然是Docker 总结来说&#xff0c;先学习…

Cookie 信息泄露 Cookie未设置http only属性 原理以及修复方法

漏洞名称&#xff1a;Cookie信息泄露、Cookie安全性漏洞、Cookie未设置httponly属性 漏洞描述&#xff1a; cookie的属性设置不当可能会造成系统用户安全隐患&#xff0c;Cookie信息泄露是Cookiehttp only配置缺陷引起的&#xff0c;在设置Cookie时&#xff0c;可以设置的一个…

大厂设计师视角下的产品设计完整流程解析!

我相信在激烈的市场竞争中&#xff0c;我们看到了很多半途而废的竞争产品&#xff0c;产品设计过程可以为产品提供很好的解决方案。什么是产品设计过程&#xff1f;产品设计过程由以用户为中心的数字产品设计过程组成&#xff0c;遵循多学科方法。其主要目标是创造优秀的产品&a…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 整体介绍(一)

专栏目录 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 整体介绍&#xff08;一&#xff09; 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 边缘设备图像识别及部署&#xff08;二&#xff09; 边缘计算WEB端应用融合&#xf…

语言、支付、社交:独立站本地化攻略全揭秘,助您征服海外市场

随着全球化的推进和互联网技术的飞速发展&#xff0c;独立站营销已成为许多企业开拓国际市场、提升品牌影响力的重要手段。然而&#xff0c;要在不同国家和地区取得成功&#xff0c;必须制定精准的本地化营销策略&#xff0c;以迎合目标市场的文化和习惯。本文Nox聚星将和大家探…

MB10F-ASEMI适配器专用整流桥MB10F

编辑&#xff1a;ll MB10F-ASEMI适配器专用整流桥MB10F 型号&#xff1a;MB10F 品牌&#xff1a;ASEMI 封装&#xff1a;MBF-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;1A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a;4 …

[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录 前言准备C编译器xmake编译包 工程准备修改版本号第一遍编译第二遍编译效果 前言 quickjs是个很厉害的东西啊&#xff0c;我一直想编译一下的&#xff0c;奈何一直没成功。现在找了点时间成功编译了&#xff0c;写篇文章记录一下。当前版本&#xff1a;2024-1-13 应该…

python自定义日历库,与对应calendar库函数功能基本一致

目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数&#xff0c;并使得其与python calend…

idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 班…

KKVIEW远程: TODESK退出了还能远程吗

Todesk退出了还能远程吗 当我们谈论Todesk或其他远程桌面软件时&#xff0c;一个经常被提及的问题是&#xff1a;当我退出Todesk后&#xff0c;是否仍然可以远程访问我的计算机&#xff1f;为了回答这个问题&#xff0c;我们首先需要了解Todesk的工作原理和远程访问的基本条件…

Android和IOS Flutter应用开发使用 Provider.of 时,可以使用 listen: false 来避免不必要的重建

文章目录 listen: false解释示例 listen: false 使用 Provider.of 时&#xff0c;可以使用 listen: false 来避免不必要的重建 解释 当您使用 Provider.of 获取状态对象时&#xff0c;默认情况下&#xff0c;该对象每次发生变化时都会触发重建该对象所在的组件。这在大多数情…

Machine Learning ---- Gradient Descent

目录 一、The concept of gradient&#xff1a; ① In a univariate function&#xff1a; ②In multivariate functions&#xff1a; 二、Introduction of gradient descent cases&#xff1a; 三、Gradient descent formula and its simple understanding: 四、Formula o…

RocketMQ源码分析

文章目录 一、简介二、NameServer的启动过程三、Broker的启动过程四、Netty服务注册框架&#xff08;Netty框架使用的一个很好的案例&#xff09;五、Broker心跳注册过程六、Producer发送消息流程七、Consumer拉取消息的流程八、文件存储九、长轮询消息 RocketMQ源码分析基于版…

苍穹外卖-day15:套餐管理

套餐管理 课程内容 套餐分页查询启售停售套餐删除套餐新增套餐 1. 套餐分页查询 1.1 需求分析和接口设计 根据产品原型来了解需求&#xff0c;套餐分页查询的产品原型如下&#xff1a; 业务规则&#xff1a; 根据页码展示套餐信息(套餐名称、套餐图片、套餐分类、价格、售…