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检测到这个包,说这个包是传递给我这个当前网卡的,那么就对这个包进行使用

数据碰撞

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

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

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

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

相关文章

【Linux】进程控制 -- 详解

一、进程创建 目前学习到的进程创建的两种方式: 命令行启动命令(程序、指令等) 。通过程序自身,调用 fork 函数创建出子进程。 1、fork 函数初识 在 Linux 中的系统接口 fork 函数是非常重要的函数,它从已存在进程中…

【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 前言 在多用户环境下管理磁盘空间是服务器管理中的一项重要任务。Linux提供了强大的磁盘配额功能,可以帮助管理员限制用户或组对文件系统…

一分钟了解自动化测试【建议收藏】

引子 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够明白自动化测试并很好落地实施的团队还不是非常多,我们接来下用通俗的方式来介绍自动化测试…… 本文共有2410…

Zookeeper的ZAB协议原理详解

Zookeeper的ZAB协议原理详解 如何保证数据一致性。 Paxos, 吸收了主从。 zk 数据模型Watch机制 zab zookeeper原子广播协议。 ZAB概念 ZooKeeper是通过Zab协议来保证分布式事务的最终一致性。 Zab(ZooKeeper Atomic Broadcast,.ZooKeeper原子广播协议)支持…

企业员工上班摸鱼行为老板怎么管?

在数字化时代,员工摸鱼现象成为企业普遍面临的挑战。摸鱼不仅会降低工作效率,影响企业的正常运营,还可能引发数据泄露等安全问题。因此,企业需要采取有效的措施来防止员工上班摸鱼。 来百度APP畅享高清图片 一、制定明确的规章制…

NBlog Java定时任务-备份MySQL数据

NBlog部署维护流程记录(持续更新):https://blog.csdn.net/qq_43349112/article/details/136129806 为了避免服务器被攻击,给博客添加了一个MySQL数据备份功能。 此功能是配合博客写的,有些方法直接用的已有的&#xf…

【LAMMPS学习】三、构建LAMMPS(7)具有额外构建选项的软件包

3. 构建 LAMMPS 3.7.具有额外构建选项的软件包 当使用某些包进行构建时,除了Build_package页面上描述的步骤之外,可能还需要额外的步骤。 ​ 对于CMake构建,可能有额外的可选或必需的变量要设置。对于使用make进行构建,可能需…

Linux课程____进程管理

记录工作日志 script 240319.log CTRLd 退出 cat 240319.log //查看 一、查看进程 1.静态 ps -aux 显示所有包含其他使用者的行程 ps -elf 2.动态 top 3.pgrep 查看特定条件的进程 pgrep -l “log” 搜索特定的程序 pgrep -l "ssh" pgrep -l -U…

docker的常用命令

文章目录 Docker安装镜像管理列出镜像命令解析功能输出信息示例用途 拉取镜像构建镜像查找镜像删除镜像清理无用镜像 容器管理运行容器命令解析运行容器可选参数示例 列出容器列出所有容器(包括停止的)停止容器启动容器进入容器删除容器清理无用容器 容器…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤: 材料准备:选择合适的铸铁材料,并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造:根据平台的设计要求,制造适用的模具。模具一般由砂型、金属模具…

递归算法总结

递归算法总结 1、粗解递归算法2、递归算法例题(不包含其他算法,纯递归)eg1:LC509 fibonacci数列(简单)(0)题目描述(1)思路分析(2)pyth…

图论中的最小生成树:Kruskal与Prim算法深入解析

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

Prometheus+Grafana 监控Tongweb7(by lqw)

文章目录 1.准备工作2.Tongweb7部署3.Prometheus部署4.上传jar包并配置Tongweb75.Prometheus配置6.安装和配置Grafana 1.准备工作 本次参考:Prometheus监控Tongweb容器 1.使用虚拟机ip:192.168.10.51(tongweb),192.1…

vue iframe实现父页面实时调用子页面方法和内容

父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只…

[C语言]——操作符详解

目录 一.操作符的分类 二.二进制和进制转换 1.二进制转十进制 2.二进制转八进制和十六进制 2.1二进制转八进制 2.2二进制转十六进制 三.原码、反码、补码 四.移位操作符 1.左移操作符 2.右移操作符 五.位操作符:&、|、^、~ 练习1:编写代码实…

腾讯云GPU云服务器简介_GPU服务器购买指南_GPU云服务器操作

腾讯云GPU服务器是提供GPU算力的弹性计算服务,腾讯云GPU服务器具有超强的并行计算能力,可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景,腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉,会有未授权访问漏洞 include: "*" 他就是Actuator! 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…

漏洞挖掘技术综述与人工智能应用探索:从静态分析到深度学习,跨项目挑战与未来机遇

在网络安全和软件工程领域中,将机器学习应用于源代码漏洞挖掘是一种先进的自动化方法。该过程遵循典型的监督学习框架,并可细化为以下几个关键步骤: 数据预处理: 源代码解析与清理:首先对源代码进行文本解析&#xff…

zookeeper底层细节

zk 临时节点和watch机制实现注册中心自动注册和发现,数据都在内存,nio 多线程模型; cp注重一致性,数据不一致时集群不可用 事务请求处理方式 1.all事务由唯一服务器处理 2.将客户端事务请求转成proposal分发follower 3.等待半…