Linux网络基础(一)网络基础探索之旅

小白苦学IT的博客主页

初学者必看:Linux操作系统入门

代码仓库:Linux代码仓库

❤关注我一起讨论和学习Linux系统

本节重点

  • 了解网络发展背景, 对局域网/广域网的概念有基本认识;
  • 了解网络协议的意义, 重点理解TCP/IP五层结构模型;
  • 学习网络传输的基本流程, 理解封装和分用;

1.前言

在这个数字化、信息化的时代,网络已经成为了我们生活、工作中不可或缺的一部分。无论是浏览网页、在线购物,还是远程办公、视频会议,网络都在其中扮演着至关重要的角色。然而,对于很多人来说,网络仍然是一个充满神秘和复杂性的领域。因此,本文将带大家走进网络的世界,从初识网络开始,逐步探索其背后的原理和结构。

2.初识网络

网络发展

独立模式: 计算机之间相互独立;

网络互联: 多台计算机连接在一起, 完成数据共享;

局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;

广域网WAN: 将远隔千里的计算机都连在一起;

那么我们从这里看到网络的发展之后,明显的看到网络使用的范围越来越大了,由于距离变长了,那么通信所需要的要求也就变高了,通信的复杂度是与距离成正比的,所以这样是会遇到一些问题的:

  1. 如何处理发来的数据?
  2. 长距离传输数据丢包的问题如何解决?
  3. 如何定位主机的问题?
  4. 如何保证你的数据能准确到达下一个设备?

认识"协议"

协议是一种约定和规则,它规定了通信双方进行信息交互时必须遵守的规范。

计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

  • 计算机生产厂商有很多;
  • 计算机操作系统, 也有很多;
  • 计算机网络硬件设备, 还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议;

初识网络协议

网络协议,就像是网络世界中的一套交通规则,它确保了网络中的各个成员能够按照统一的规则进行通信和数据交换。就像我们日常生活中的交通规则一样,网络协议也让网络中的数据流动变得有序而高效。

用故事理解网络协议

网络协议可以类比为发送快递时的一系列规则和流程。在这个故事中,我们将以一个快递包裹的发送过程来比喻网络协议的工作机制。

想象一下,你有一个重要的包裹需要寄送给远方的朋友。为了确保包裹能够安全、准确地送达,你需要遵循一系列的规则和流程,这些规则和流程就如同网络协议一样。

首先,你需要选择一个可靠的快递公司,这就像是选择一个网络协议。不同的快递公司有不同的服务质量和规定,你需要根据自己的需求选择最适合的协议。

接下来,你需要填写寄件信息,包括收件人的地址、联系方式等。这些信息必须准确无误,否则包裹可能会无法送达或者送错地方。在网络通信中,发送方也需要按照协议规定的格式和要求,将数据打包成数据包,并附上目标地址等必要信息。

然后,快递员会接收你的包裹,并按照公司的规定进行处理。他们会检查包裹是否符合寄送要求,比如是否超重、是否包含违禁品等。同样地,在网络通信中,发送方的数据包也需要经过协议栈的处理,确保符合网络传输的要求。

接下来,包裹会被运送到分拣中心,按照目的地进行分类和打包。这个过程类似于网络中的路由选择和数据包转发。路由器会根据网络协议中的规则,将数据包从一个节点传输到另一个节点,直到到达目标地址。

在运输过程中,快递员会遵循交通规则,确保包裹能够安全地送达。同样地,在网络通信中,数据包也需要遵循协议规定的传输规则,比如TCP协议中的流量控制、拥塞控制等机制,以确保数据的可靠传输。

最后,当包裹到达目的地时,收件人需要签收并确认收到包裹。在网络通信中,接收方也会发送确认信息给发送方,表示数据已经成功接收。

通过这个快递发送的故事,我们可以理解网络协议的作用和重要性。网络协议就像快递公司的规则和流程一样,确保了数据在网络中的准确、高效和安全传输。无论是发送快递还是进行网络通信,都需要遵循一定的规则和流程,以确保信息的顺利传递。

3.网络为什么要分层?

分层原因总结下来主要有两点:

1.网络通信的时候软件项目规模太大了,所以要把项目的模块跟模块给解构出来

2.协议是用来解决问题的,而问题刚好是层状的

协议分层(电话例子)

在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次.
分层最大的好处在于 "封装" . 面向对象例子。

4.理解网络协议设计模型

OSI七层模型

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

层数名称功能功能概括
1物理层传输比特流为数据链路层提供物理连接,处理物理介质相关的特性。
2数据链路层帧传输与差错控制在相邻节点间无差错地传输以帧为单位的数据,建立和管理链路。
3网络层路由选择与分组转发选择最佳通信路径,处理数据包的分段、路由和转发。
4传输层端到端可靠传输建立、维护和取消传输连接,提供可靠的数据传输服务。
5会话层会话管理与同步建立和管理会话,组织和协调会话进程间的通信。
6表示层数据格式转换与加密对数据进行解释、加密、压缩等处理,确保数据在不同系统间正确理解和处理。
7应用层网络服务与应用程序接口

为用户应用程序提供网络服务接口,处理各种网络应用模型。

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

以下是TCP/IP五层(或四层)模型除物理层外的设备、实现的功能以及运用的协议的表格形式:

分层名称设备实现的功能运用的协议
数据链路层网桥、交换机将物理信号转换为二进制数据,实现网络节点间的数据帧传输PPP、HDLC等
网络层路由器数据包的选路和转发,实现不同网络间的通信IP、ICMP、IGMP等
传输层防火墙、负载均衡器提供端到端的可靠数据传输服务,处理数据包的分割、重组、排序和流量控制TCP、UDP等
应用层各种服务器和客户端软件为用户提供各种网络服务,如文件传输、电子邮件、Web访问等HTTP、FTP、SMTP、DNS等

这四层模型通过对应的协议和设备刚好对应我们上面谈到要解决的4个问题:

  1. 如何处理发来的数据? (应用层解决)
  2. 长距离传输数据丢包的问题如何解决?(传输层解决)
  3. 如何定位主机的问题?(网络层解决)
  4. 如何保证你的数据能准确到达下一个设备?(数据链路层解决)

物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.

 

我们通过前面系统的学习知道我们用户要想写一些代码在我们的显示器上进行打印,我们用户是直接访问硬件吗?答案并不是,计算机硬件真正的管理者是操作系统,我们要访问硬件资源是需要经过操作系统的允许的,而我们想要访问硬件资源也只能通过系统调用借用操作系统的权限来访问,因为操作系统不相信任何用户,但是对于一些开发人员来说要实现一些功能是可以通过系统调用的,所以访问硬件资源我们通过上图是可以看出来其实是贯穿了整个系统到硬件达成通信的。同样的我们的网络通信也可以通过贯穿整个协议栈来实现网络通信的过程。

所以我们说网络通信的本质就是:贯穿协议栈的过程。

5.网络传输的基本流程

我们首先要清楚以下内容:

网络协议栈的层状结构中,每一层都有协议。

每层都要添加报头

同一个网段内的两台主机进行文件传输.

上面这张图看的比较抽象,所以我们选择以一个实例来谈,比如说我给你在微信上发了个你好

扩展:

1.几乎任何层的协议都要提供一种能力,将报头和有效载荷分离的能力。(解包)

2.几乎任何层的协议都要在报头中提供,决定将自己的有效载荷交付给上一层哪一个协议的能力(也就是叫分用)

6.初识IP地址和MAC地址

下面我们用一个故事+一个原理来认识以太网的通信原理:

一个故事:

比如说我们大学生活中许多同学跟老师在一个教师上课,假设叫王老师,还有一个学生叫张三,一个学生叫李四。由于张三经常喜欢坐最后一排,然后作业完成的不怎么好,所以王老师上课直接在教室说:“张三,你作业怎么还没交给我啊?”,此时教室里的人都听到了王老师的这句话,但是都没有作声(这就相当于接受的报文不是给自己的,所以直接把报文丢弃了),而张三就站起来说:"我昨天不是交给你了吗?王老师,会不会是你忘了?"所以此时同理张三在教室说的话也是让教室里的所有人都听到了,但是其他学生都不会作声。那么在这个过程中为什么李四不站起来呢?为什么是张三站起来呢?因为叫的就是指定的张三啊,因为这个教室里只有一个张三,教室里面的同学老师就是通过自己的可以唯一标识自己的名字。这就是以太网通信的原理。

以太网通信:每台主机在局域网上,都有自己的唯一的一个标识。

一个原理:

而我们对应的主机的唯一标识称之为:Mac地址

以太网会发生数据碰撞问题

发送主机都要执行碰撞避免的算法

IP地址

什么是IP地址?

IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
  • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
  • 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

为什么要有IP地址?

在一个繁华的城市中,每个人都有自己的住址,这样其他人就能根据这个地址找到他们。同样,在互联网这个庞大的“城市”中,每一台设备也都需要一个独特的地址,以便其他设备能够找到它并与它进行通信。这个地址就是IP地址。

想象一下,如果没有IP地址,当你想访问一个网站或者发送一封电子邮件时,你的设备将不知道如何找到目标设备。这就像是在现实世界中,如果你没有对方的住址,你将无法找到他们并送达信件或包裹。因此,IP地址的存在使得设备之间的通信变得可能,它是互联网运行的基础。

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

IP地址 vs Mac地址

  • 使用与分配:IP地址是Internet协议使用的地址,用于表示网络中某设备或节点的身份(网络号、主机号),它是可以自动分配的,并且可以更改以区别不同网段。而MAC地址是Ethernet协议使用的地址,用于表示某设备或节点在本以太网链路中的物理地址(全局唯一),它在每个网卡出场时就有一个全球唯一的MAC地址,通常不会更改。
  • 地址长度:IP地址是由32位二进制数组成,而MAC地址则是由48位二进制数组成。
  • 寻址协议层:IP地址应用于OSI第三层网络层逻辑地址,而MAC地址则应用在OSI第二层数据链路层物理地址。

7.总结

以上就是我们本篇博客的大致内容了,通过这篇博文希望我们要对局域网/广域网的概念有基本认识,重点理解TCP/IP五层结构模型,学习网络传输的基本流程, 理解封装和分用;

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

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

相关文章

docker安装elasticsearch

安装之前需要创建网络 为啥需要创建网络? 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联 创建网络: docker network create es-kibana es-kibana:网络名称,自定义即可 拉取elasticsearch镜像使用7.12.1版本: docker pull elasticsearch7.12.1 …

修改element-ui table组件展开/收起图标、支持点击行展开/收起、隐藏不可展开行得图标

Element中table默认支持的,展开和收起功能,如下: 针对表格的展开收起,本文改造的主要有3点: 1、修改展开/收起的图标; 2、对于不支持展开/收起的行,隐藏图标; 3、点击行&#xff0…

leetcode代码记录(打家劫舍 II

目录 1. 题目:2. 我的代码:小结: 1. 题目: 一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是…

Linux驱动学习:从Linux主机nfs共享文件到uboot

第一步:在Linux主机上开启NFS服务,使用如下命令安装NFS服务: sudo apt-get install nfs-kernel-server rpcbind 第二步:创建一个文件夹用于共享,直接以nfs命名就行: 第三步:打开nfs服务配置文…

ES6展开运算符

1.展开可迭代对象(简单理解为数组和伪数组),如数组、 NodeList 、arguments。 可以通过展开运算符把一个伪数组转换为数组 const a [...document.body.children]; console.log(a); console.log(Array.isArray(a));2.实现数组的浅拷贝 cons…

分享three.js实现粒子背景

three.js中粒子效果的实现方式大概分为三种: 1、Javascript直接计算粒子的状态变化,即基于CPU实现; 2、Javascript通知顶点着色器粒子的生命周期,由顶点着色器运行,即基于GPU实现; 3、粒子生成与状态维护全…

C++基础13:C++输入输出

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏,参考书籍:《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 12.C输入/输出 12.1 C流类 计算机的输入和输出是数据传送的过…

大数据学习第十一天(复习linux指令3)

1、su和exit su命令就是用于账户切换的系统命令 基本语法:su[-] [用户名] 1)-表示是否在切换用户后加载变量,建议带上 2)参数:用户名,表示切换用户 3)切换用户后,可以通过exit命令退…

Delphi 是一种内存安全的语言吗?

上个月,美国政府发布了 "回到基石 "报告: 通往安全和可衡量软件之路 "的报告。该报告是美国网络安全战略的一部分,重点关注多个领域,包括内存安全漏洞和质量指标。 许多在线杂志都对这份报告进行了评论&#xff0…

信息传播的AI时代:机器学习赋能新闻出版业的数字化之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

中间件复习之-RPC框架

什么是RPC框架? RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时,由于他们不在一个内存空间上,因此需要网络来进行通信,而RPC允许它像调用本地方法一样调用远程服务。 RPC原理 服务消费方通过RPC客户…

数据结构—堆

什么是堆 堆是一种特殊的树形结构,其中每个节点都有一个值。堆可以分为两种类型:最大堆和最小堆。在最大堆中,每个节点的值都大于等于其子节点的值;而在最小堆中,每个节点的值都小于等于其子节点的值。这种特性使得堆…

leetcode题库练习9\268\771

Leetcode: 9 回文数 简单的想法就是将数字转化为字符进行比较&#xff0c;但是这样占空间 class Solution { public:bool isPalindrome(int x) {if(x < 0) return false;if(x < 10 && x > 0) return true;vector<int> num;while(x > 9){num.push_b…

Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Vue tree自定义滚动条位置

贴一张效果图&#xff0c;我的效果不方便贴出来 实现支持&#xff1a; 1、懒加载 2、普通加载 下面贴关键思想&#xff1a; document有一个获取element元素的方法。 let element document.getElementById(tree); let arr document.querySelectorAll(".nodelModel&quo…

用JSch实现远程传输文件并打包成jar

本文将简单介绍一下 JSch 这个Java的第三方库的一个简单用法&#xff0c;并以此为实例&#xff0c;讲解 IntelliJ 中打包成 jar 包的2种方式。 实现目标 我们的目标是&#xff0c;做出一个jar包&#xff0c;它能够实现类似于 scp 命令的远程传输文件的功能。用法如下&#xf…

arm的状态寄存器

目录 一、arm 的 PSRs二、CPSR2.1 CPSR_cxsf 三、SPSR四、APSR 一、arm 的 PSRs arm 中有很多程序状态寄存器&#xff08;Program Status Registers&#xff0c;PSRs&#xff09;用于存储处理器的状态信息&#xff0c;包括 CPSR\SPSR\FPSR\APSR 等&#xff1a; CPSR&#xff…

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

计算机网络-从输入网址到访问网站的全过程

当我们在浏览器中输入一个网址并按下回车键时&#xff0c;会发生一系列复杂的过程&#xff0c;最终使我们能够看到网页的内容。以下是这个过程的详细步骤&#xff1a; 客户端&#xff1a;首先&#xff0c;用户在浏览器中键入网址&#xff0c;然后浏览器会根据这个网址生成一个H…

MySQL count函数的使用

count&#xff08;&#xff09;函数在使用时参数好像不能设置为表达式&#xff0c;只能设置成指定字段或* 比如在查询性别为男的成员数目时不能写&#xff1a; select count(gendermale) from user_profile ; 否则直接得到6&#xff0c;也就是等价于select count(gender) fro…