Linux->初识计算机网络

news2024/11/25 7:12:12

目录

前言:

1 网络发展背景

2 协议

2.1 网络协议初识

2.2 协议分层

2.3 OSI、TCP/IP层状模型

2.4 协议和操作系统的关系

2.5 根据协议栈的通信

3 网络中的地址管理


前言:

        本篇当中没有任何关于网络编程的讲解,全部是对网络的宏观理解,毕竟只有理解了网络实际的走向,后续学习才会更加轻松。

1 网络发展背景

        首先,咱们还是简单的谈一下关于网络出现的原因。在以前,网络还没有被创造出来,但是计算机已经工作在了各个实验室里面了,也就表示了这些计算机都是独立于其它的计算机的,它们之间不能相互通信,也就是每一个计算机完成了工作之后,并不能将自己的信息直接传递给其它的计算机,所以在当时有一个叫做“软盘”的东西,用于读取数据,然后通过人为的方式,将软盘拆下来交给另外的一台计算机进行下一步的数据处理。

        通过上面的计算机数据交流方式,我们可以很清晰的感受到当时的计算机之间想要进行数据交互的速度是非常慢了,因为只要有了人的参与,整个工作就是会变得非常慢。所以基于这个原因,有的实验室就开始研究网络了,起初,它们只是将几台相近的计算机连接起来,也就是本地连接,举一个生动的例子那就是switch游戏机之间可以不联网,只要两台游戏机之间相隔不远那么它们就能够通信。就这样,这个实验室的工作效率变得非常快,其它实验室就不干了哇,它们有的我也得有,所以各个实验室的计算机在内部都被联系起来了。这个时候又有人认为实验室和实验室之间的通信好像也不方便,又开始研究,然后就出现了网络。之后随着网络的发展,网络的规模也逐渐的扩大,最后成为了现在这个覆盖全球的网络。

        相信大家也是听说过局域网还有广域网的,其实这两个并没有直接的划分界限,也就是说,广域网其实就是大一点的局域网,它们之间只不过是一个相对的概念罢了。

2 协议

2.1 网络协议初识

        看了上面的小故事,估计大家还是啥也不知道,正常,因为我啥也没讲,哈哈。言归正传,大家有没有觉得很奇怪呢?既然我们要进行计算机之间的交流与通信,那么它们又是怎么进行精确找到某一台计算机的呢?总不可能是把我的计算机的数据发送到网络当中,然后全球的计算机都进行读取,目标计算机读到了就成功,读不到就寄吧。我们平时用的网络除了没网的时候,基本上用起来数据都是能够成功发送和接收的欸?

        所以这个时候就有了协议的出现,这个协议是什么呢?博主之后讲解,但是我们可以理解协议其实就是一个约定。什么意思呢?两台计算机之间做好了约定,没有与其它的计算机约定,那么当我发送数据到网络当中,那么与我做好约定的计算机就会拿到这个数据,而其它的计算机就不会去拿我发送的数据,当然也不排除有人就是故意想要拿。

        但是呢,计算机作为一个机器设备,它的构造基本就是被制造出来就不会更改了,那么又有如此多的计算机厂商,如果它们各自发明一个计算机协议,那么势必就会导致一个问题,不是同样的协议的计算机就不能够通信,这很明显就不足以满足我们网络的通信需求,所以就有人创造出了OSI七层模型,或者修改结构出现了TCP/IP五层模型,但是这些博主都先不讲。因为这个协议模型的出现,并且他就是最好的,所以所有的计算机厂商都根据这个模型开始设计设计自己的计算机了。当然对应的操作系统,硬件驱动也是有相应的设计的。

2.2 协议分层

        基于上面的讲解,大家了解了,两台计算机之间要进行通信,那么必须要有协议,但是总感觉还是有一些问题,那就是非常长的距离的两台计算机之间通信不会导致数据丢失的问题吗?虽然我有了协议,但是又是如何做到精确定位一台主机的问题呢?我的数据在移动的时候又怎么选择路径呢?还有就是我的数据要怎么传输呢?

        其实上面的问题归根到底只有一个原因,那就是传输距离太远啦,但是单纯的理解为传输距离太远了又不方便我们解决问题,因为每一个小问题维护起来就已经是很头疼的一件事情了,所以最后的设计方案就决定将不同的问题通过不同的协议进行解决,也就出现了分层管理的模式,其中某一层出现了问题,我们也只需要修复那一层即可,实现了高内聚的需求。

        我们以打电话为例子:

        小明和小芳在打电话,他们说的都是中文,小明将话说给了他的电话,小芳将话说给了她的电话,然后这两个电话设备通过数据传输到对方的设备中,然后设备又将声音发出来,让他们听到对方说的什么,从而实现了通信。如图:

         通过上面的图片,不难发现,对于小明和小芳的电话交流,实际尚并不是小明和小芳在直接交流,但是由于小明和小芳处于同一层,所以说他们之间能够识别对方的信息,像是电话1就不能理解小芳的意思,但是虽然小明和小芳并不是直接通信,但是我们可以逻辑上认为他们两个就是在通信。

        并且这样做有一个好处,也就是我们分层的好处,是什么呢?小明和小芳不替换,但是电话被我们替换成为了手机、电脑等其他的通信设备,对于小明和小芳有什么影响吗?没有一点点,因为对于他们来说,他们并不关心通信设备的实现是什么,只要这个设备能够支持他们通信,那么一点问题没有。所以根据这个设计理念就出现了,我上面所谈论的OSI、和TCP/IP层状模型。

2.3 OSI、TCP/IP层状模型

         对于模型的每一层的实际作用博主现在也没有过于的了解,所以就为大家分享一篇别人关于这部分的文章。有兴趣的朋友可以去看一看。

TCP/IP四层模型和OSI七层模型的概念

        如果大家要是不看也没关系,对于刚接触网络的我们也没太大的作用,最多也就了解一下。

2.4 协议和操作系统的关系

        关于OSI来说,它本身设计的非常的完善,所以这个模型就作为了最先抢占市场的模型结构,不过在后期人们发现,应用层表示层会话层他们之间的界限比较模糊并且重叠,所以在之后就更改成为了TCP/IP模型,也就是现在我们使用的网络结构。之后的讲解我也是主要通过TCP/IP模型为大家讲解。

        既然大家已经看到了上面的TCP/IP模型,那么大家知道每一层在计算机体系结构当中分别对应了那几个位置吗?下图就为大家展示了:

        对于我们的Linux操作系统来说,他一共有4个管理功能,但是好像并没有看到我们的网络管理这一部分哇?为什么?其实如果有之前知识的小伙伴应该能猜出来,那就是在Linux下一切皆文件,我们的网络数据也被当成了文件管理,还记得我们的OS如何通过文件管理这些硬件设备的吗?我们在驱动中为硬件提供了两个通用的方法,分别是读和写,之后我们的OS只要看到这个文件的内容,就能根据这个内容做出下一步的判断,网络也是一样,所以在Linux当中,网络管理是文件管理的一个子集。并且可以看到上图,我在传输层和网络层旁加上了TCP和IP,这其实就是这两层的协议名称,因为这一部分非常的重要,所以我们的模型结构直接以这两层协议的名称作为名字。而且通过图示的方式,大伙也能看到,无论我们的数据链路层设计的驱动是怎么样的,还是物理层的网卡有何区别,对于我们上层的网络层、传输层、应用层,有什么区别吗?没有的。

2.5 根据协议栈的通信

        首先,处于同一个局域网里面的计算机是可以直接通信的,不需要通过路由器等,下图中,我模仿了QQ发送消息到接收消息的过程。

         从上图中我们可以看到,我们发送的消息是你好,在从上往下传输的过程当中,我们的消息不断地在添加前缀,每一层都添加了,然后到了接收消息的那一端,每一层都会拆解一部分的前缀,这个过程是在干嘛?

        其实这就是协议进行交流的过程,我们每一层添加/删除的前缀都是对应的协议,作用如下:

  1. 标识和识别:协议头部中包含了标识和识别信息,用于确定数据的发送方和接收方。例如,在IP协议头部中有源IP地址和目标IP地址,可以唯一地标识出数据的源和目的地。

  2. 控制和管理:协议头部中可能包含控制和管理信息,用于控制数据传输的方式和过程。例如,在TCP协议头部中有序列号和确认号等字段,用于实现可靠的数据传输和流量控制。

  3. 错误检测和纠正:协议头部中可能包含用于错误检测和纠正的校验码或冗余校验码。通过计算校验码,可以对接收到的数据进行验证,以确保传输过程中的数据完整性和准确性。

  4. 数据解析和处理:协议头部中的信息可以帮助接收方正确解析和处理数据。不同层级的协议头部提供了特定的解析规则和处理方式,以确保数据能够按照预期被接收方理解和处理。

        通过在每一层添加协议头部,网络通信中的数据可以按照一定的组织结构进行传输,并保证了不同层级之间的有效协作。接收方可以根据协议头部的信息,正确解析和处理数据,并将其传递给上一层或下一层进行进一步处理。这样整个协议栈中的各个层级就能够协同工作,实现网络通信的目标。

        对于每一层来说,他都把传给下层的数据分为两部分,分别是报头、以及有效载荷,当发送给下一层的时候,对于下一层的有效载荷就是上一层的所有数据。并且在不同层对于数据包的叫法也不相同,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)

         如下就是数据封装的过程:

         如果我们的数据需要通过路由器,也就是说当我们的两个计算机并没有在同一个局域网当中,那么如果直接发送数据,是找不到我们对应的目标计算机的,所以肯定是有特别的方式让它们两个联系起来的,这个博主之后再讲。我们可以看到,我们的数据已经到了驱动位置,但是由于没有找到目标计算机,所以就将数据丢给了路由器让他去找,巧的是,我们再路由器当中有对应目标计算机的位置,但是有一个问题,那就是我们的驱动并不是令牌环协议,而是以太网协议,所以,路由器会为我们重新添加报头。

        大伙可能有一些疑惑,那就是为什么路由器可以给我们添加报头呢?那我们之前的报头去哪里了?很简单,从驱动到路由器这一个过程当中就是一个解包的过程,他将链路层添加的报头拆了,然后添加上了一个新的报头用于另外的一个计算机。

3 网络中的地址管理

        IPv4(Internet Protocol version 4)是互联网上广泛使用的一种网络协议,用于在网络中唯一标识和定位设备。IPv4地址是一个32位的二进制数,通常以点分十进制表示,共有4个字节,每个字节的取值范围是0到255。

        IPv4地址用于标识网络中的主机或路由器,其中包含了两个重要的部分:网络地址和主机地址。网络地址指示了所属的网络,而主机地址则标识了该网络中的特定主机。

        举例来说,IPv4地址可以是如下形式:192.168.0.1。其中,192.168.0为网络地址,而1则是主机地址。

        另外,MAC地址(Media Access Control Address),也称为物理地址,是一个全球唯一的硬件地址,用于在局域网中唯一标识网络设备(如网卡)。MAC地址是由48个二进制位组成,通常表示成六组十六进制数,每组之间使用冒号或破折号进行分隔。

        MAC地址由厂商在生产设备时进行分配,它们存储在网络设备的网卡中,并且一般不会更改。MAC地址与IP地址不同,不涉及网络的划分和路由,只用于局域网内设备之间的通信。

        对于IP地址还有MAC地址其实我们可以简单的理解,每一个发送的数据当中都有IP地址,同时也有MAC地址,但是MAC地址有可能改变,什么意思呢?我举一个例子:

        假如我要从重庆到上海去,我要走的下一个站是湖北,到了湖北我就问,我到上海应该怎么走?别人也不知道怎么直接走,但是他知道江苏离上海更近,所以我的下一站就到了江苏,到了江苏我又问到上海怎么走?别人还是不知道,但是他知道走浙江更近,于是我又跑到了浙江,到了浙江之后,这里人告诉我,下一站就是上海了,最后我就找到了上海这个地方。

        这里面我从重庆到上海,上海就是IP地址,途径的重庆、湖北、江苏、浙江、上海这就是MAC地址,也就是可以理解这些省份就是路由器,不断地变化,最后就能找到目标位置。

        然后还有一点,那就是我们就算到了上海,也就是找到了目标计算机,但是这个数据又要发送到那个进程当中呢?这个时候就需要端口号了,它与我们的IP组合起来就形成了网络套接字,这部分内容博主下一篇文章在讲解。


        以上就是博主对于这部分内容的全部理解了,希望能够帮助到大家。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言github.com/gorilla/websocket框架websocket协议通信实战

websocket是实际开发中比较常用的应用层协议,本文利用github.com/gorilla/websocket框架进行websocket通信实战。 目录 1.下载github.com/gorilla/websocket 2.websocket服务端 3.websocket Go客户端 4.websocket 网页客户端 5.运行结果展示 1.下载github.com…

【UI自动化测试】appium+python+unittest+HTMLRunner

进阶Python接口自动化测试必备教程(2023全网最详细) 简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自…

深度学习(28)——YOLO系列(7)

深度学习(28)——YOLO系列(7) 咱就是说,需要源码请造访:Jane的GitHub:在这里 上午没写完的,下午继续,是一个小尾巴。其实上午把训练的关键部分和数据的关键部分都写完了…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址,确定你想要的版本 然后下载即可 (我选则的是6.2.6) 然后下载 下载后 把这个文件解压,放在自己想要放在的位置 2 打开终端 输入对应的…

Hadoop 单机部署和测试(一)

Hadoop单机部署和测试 一.单机部署1.安装 JDK(JDK11)2.安装 HADOOP3.测试 一.单机部署 系统版本:cat /etc/anolis-release1.安装 JDK(JDK11) #!/bin/bashTOP_PATH$(pwd) JAVA_PATH/usr/local/java FILEls $TOP_PATH/…

本地部署 Stable Diffusion XL Gradio Demo WebUI

StableDiffusion XL Gradio Demo WebUI 0. 先展示几张 StableDiffusion XL 生成的图片1. 什么是 Stable Diffusion XL Gradio Demo WebUI2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 Stable Diffusion XL Gradio Demo WebUI6. 启动 Stable Diffusion XL Gradio De…

【LeetCode周赛】2022上半年题目精选集——动态规划

文章目录 2140. 解决智力问题解法1——倒序DP(填表法)解法2——正序DP(刷表法)⭐⭐⭐ 2167. 移除所有载有违禁货物车厢所需的最少时间⭐⭐⭐解法1——前缀和⭐⭐⭐⭐⭐解法2——前后缀分解 动态规划代码1——看了思路之后自己写的…

java中json和对象之间相互转换的运用

1.目录结构 2.配置相关文件 2.1.引入相关的pom文件 pom.xml <dependencies><!-- JSON --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</vers…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…

浅谈OS命令注入漏洞(Shell注入漏洞)

一、什么是OS命令注入&#xff1f; 1. 基本概念 OS&#xff08;Operating system&#xff09;命令注入&#xff08;也称为 Shell 注入&#xff09;是一个 Web 安全漏洞&#xff0c;允许攻击者在运行应用程序的服务器上执行任意操作系统 &#xff08;OS&#xff09; 命令&#…

考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

DaVinci Resolve Studio 18对Mac和Windows系统的要求

DaVinci Resolve Studio 18 是一款功能强大的专业视频编辑和调色软件&#xff0c;它提供了全面的工具和功能&#xff0c;让用户能够完成从剪辑、调色到特效和音频处理等各个方面的任务。DaVinci Resolve Studio 18 在中文界面上进行了优化&#xff0c;使得中文用户能够更加方便…

【xxl-job】分布式任务调度系统xxl-job搭建

XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用。 更多介绍&#xff0c;请访问官网&#xff1a;分布式任务调度平台XXL-JOB 一、任务调度中心(基于docker)【Version 2.4.0】 前提条件&#xff1a;任务调度…

Vue3 Vite electron 开发桌面程序

Electron是一个跨平台的桌面应用程序开发框架&#xff0c;它允许开发人员使用Web技术&#xff08;如HTML、CSS和JavaScript&#xff09;构建桌面应用程序&#xff0c;这些应用程序可以在Windows、macOS和Linux等操作系统上运行。 Electron的核心是Chromium浏览器内核和Node.js…

个体化治疗策略:如何使用机器学习定制化药物?

一、引言 个体化治疗策略是一种基于患者个体特征和病情的定制化治疗方法&#xff0c;旨在提高治疗效果、减少药物副作用并优化患者的生命质量。传统的治疗方法往往采用标准化的治疗方案&#xff0c;忽视了个体差异和患者特定的需求。然而&#xff0c;每个患者的基因组、疾病特征…

JAVA——二维数组遍历二维数组的三种方法

目录 &#x1f352;java中二维数组的定义和赋值 &#x1f352;二维数组遍历的三种方法 &#x1f347;第一种&#xff1a;for循环遍历 &#x1f347;第二种方法&#xff1a;通过Arrays.deepToString()遍历 &#x1f347;第三种方法&#xff1a;通过for&#xff08; : &a…

七大排序算法——希尔排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、希尔排序核心思想代码实现 三、性能分析四、七大排序算法性能对比 一、排序的概念 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0…

自动化测试与持续集成方案

目录 前言&#xff1a; 传统接口测试 接口测试自动化 接口自动化的持续集成 前言&#xff1a; 自动化测试和持续集成是软件开发过程中非常重要的环节。自动化测试可以提高测试效率和准确性&#xff0c;而持续集成则可以确保代码的稳定性和可靠性。 传统接口测试 不知道别…

使用WiFi测量仪进行机器人定位的粒子过滤器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

50. Pow(x, n) 快速幂

题目链接&#xff1a;力扣 解题思路&#xff1a;直接使用for进行累乘会超时&#xff08;时间复杂度O(n)&#xff0c;n为指数n的大小&#xff09;&#xff0c;可以使用快速幂进行更快的幂运算(时间复杂度为O(logn)) 快速幂&#xff1a;核心思想就是每一次把指数缩小一半&#x…