【Linux】网络基础(一)

文章目录

  • 一、计算机网络背景
    • 1. 网络发展
    • 2. 认识“协议”
  • 二、网络协议初识
    • 1. 协议分层
    • 2. OSI七层模型
    • 3. TCP/IP五层(或四层)模型
  • 三、网络传输基本流程
    • 1. 同局域网的两台主机通信
      • 数据包封装和分用
        • 封装
        • 分用
    • 2. 跨网络的两台主机通信
  • 四、网络中的地址管理
    • 1. 认识IP地址
    • 2. 认识MAC地址

网络基础:

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

一、计算机网络背景

1. 网络发展

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

请添加图片描述

在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再进行相应的业务处理,效率非常低下。


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

请添加图片描述

这时就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了。


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

后来这样的网络雏形逐渐发展,连入这个网络中的机器变得越来越多,于是就出现了局域网的概念。

在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作。

请添加图片描述


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

各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,我们将其称之为广域网。实际局域网和广域网是一种相对的概念,我们也可以将广域网看作一个比较大的局域网。

请添加图片描述


2. 认识“协议”

因为通信距离边长了,所以存在以下问题需要解决:

  1. 丢包了怎么办
  2. 目标机器的定位问题
  3. 如何把我们的报文,在经历了无数个设备之后,还能把数据推送给远端机器
    所以需要协议

二、网络协议初识

1. 协议分层

网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性。

比如在打电话的时候,站在工程师的角度实际这两个人并不是直接进行沟通的,而是甲的电话将甲说的话记录下来,经过一系列编码转码后,通过通信网络将信息从甲的电话传递到了乙的电话,然后信息在乙的电话中再经过对应的编码转码,最后乙才通过话筒听到了甲所说的话。

其中,人与人之间通信使用的是汉语,我们可以将其称为语言层;而电话和电话之间通信使用的是电话系统相关的一些接口,我们可以将其称之为通信设备层。

  • 在这个例子中, 我们的协议只有两层
  • 但是实际的网络通信会更加复杂, 需要分更多的层次.
  • 分层最大的好处在于 “封装” ,在分层情况下,将某层的协议进行替换后,通信双方之间是不会受到影响的请添加图片描述

从上述例子我们还可以看出,虽然在打电话时我们并不是直接进行沟通的,但是我们可以认为我们是在直接进行沟通,并且这两台电话也不是直接在进行沟通的,数据经过电话后,还需要各种基站,各种电信网络来进行数据转发,但是这两台电话依旧可以认为是直接在和对方电话进行通信的。

因此对于网络协议我们需要有一个基本的认识:关于通信,同层协议可以认为自己在和对方层直接进行通信,从而达到简化对于网络协议栈的理解。
请添加图片描述

也就是说,在网络协议栈中我们可以认为通信双方的应用层之间直接在进行通信,也可以认为通信双方的传输层之间直接在进行通信,对于网络层和数据链路层也同样如此。

2. OSI七层模型

上面我们说的是TCP/IP四层协议,而实际当初那个站出来的人定的协议叫做OSI七层协议:

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。“开放”是指非独家垄断的,“系统”是指
  • OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,比如路由器,交换机。
  • OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,比如手机和电视之间数据的传输。
  • OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
  • 但是,OSI七层模型既复杂又不实用,所以后来在具体实现的时候就对其进行了调整,于是就有了我们现在看到的TCP/IP四层协议。

请添加图片描述

OSI七层模型如下:

分层名称功能每层功能概览
7应用层针对特定应用之间的协议请添加图片描述
6表示层设备固有数据格式和网络标准数据格式的转换请添加图片描述
5会话层通信管理、负责建立和断开通信连接(数据流动的逻辑通路)、管理传输层以下的分层请添加图片描述
4传输层管理两个节点之间的数据传输、负责可靠性传输(确保数据被可靠地传送到目标地址)请添加图片描述
3网络层地址管理与路由选择请添加图片描述
2数据链路层互联设备之间传送和识别数据帧请添加图片描述
1物理层以0/1代表电压的高低以及灯光的闪灭、界定连接器和网线的规格请添加图片描述

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

TCP/IP是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇。
TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求:

  • 物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)就是工作在物理层的。
  • 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。数据链路层底层的网络通信标准有很多,如以太网、令牌环网、无线LAN等。交换机(Switch)就是工作在数据链路层的。
  • 网络层: 负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(路由)。路由器(Router)就是工作在网络层的。
  • 传输层: 负责两台主机之间的数据传输。例如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 应用层: 负责应用程序间沟通。比如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层的。

请添加图片描述

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

一般而言:

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
  • 对于一台路由器,它实现了从网络层到物理层的内容。
  • 对于一台交换机,它实现了从数据链路层到物理层的内容。
  • 对于集线器,它只实现了物理层的内容。

但这并不是绝对的,比如很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。

三、网络传输基本流程

1. 同局域网的两台主机通信

同局域网下的两台计算机通过TCP/IP协议通讯的过程如下:

  1. 应用层:通信的起点通常是在应用层。在这一层,用户程序(如浏览器、电子邮件客户端等)会生成需要传输的数据,并将其传递给下一层。

  2. 传输层:在传输层,数据被封装成传输层协议的数据包,例如TCP或UDP数据包。TCP提供可靠的、面向连接的通信服务,而UDP则提供不可靠的、无连接的通信服务。封装完成后,数据包被传递给网络层。

  3. 网络层:在网络层,数据包被封装成IP数据包。IP数据包包含了源主机和目标主机的IP地址,以及用于路由选择的其他信息。网络层还负责处理路由选择和分组转发。

  4. 数据链路层:数据链路层将IP数据包封装成数据帧,并添加物理地址(如MAC地址)和其他控制信息。然后,数据帧被传递给物理层。

  5. 物理层:物理层负责将数据帧转换为电信号或光信号,以便在物理介质(如网线或光纤)上传输。

当信号到达目标主机时,整个过程会在目标主机上以相反的顺序进行,从物理层开始,逐层向上,直到应用层。每一层都负责去除其添加的头部信息,并将数据传递给上一层,最终将数据交付给目标应用程序。

请添加图片描述

数据包封装和分用

封装

关于封装:

  • 不同协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。

下图为数据封装的过程:请添加图片描述

封装的本质是数据从应用层到物理层逐层添加头部和尾部信息的过程:

  • 应用层:数据从应用层生成,可能是文本、图片、视频等。
  • 传输层:在传输层,数据被封装成TCP或UDP数据包,并添加源端口和目标端口信息。
  • 网络层:在网络层,数据被封装成IP数据包,并添加源IP地址和目标IP地址。
  • 数据链路层:在数据链路层,数据被封装成数据帧,并添加源MAC地址和目标MAC地址。
  • 物理层:物理层将数据帧转换为适合在物理介质上传输的信号。
分用

下图为数据分用的过程:
请添加图片描述

分用的本质是数据从物理层到应用层逐层去除头部和尾部信息,并将数据传递给上一层的过程:

  • 物理层:物理层接收到信号后,将其转换为数据帧。
  • 数据链路层:数据链路层去除数据帧的头部和尾部,将数据传递给网络层。
  • 网络层:网络层去除IP数据包的头部,将数据传递给传输层。
  • 传输层:传输层去除TCP或UDP数据包的头部,将数据传递给应用层。
  • 应用层:应用层最终接收到数据,并进行相应的处理。

通过封装和分用过程,两台主机能够确保数据在复杂的网络环境中准确、可靠地传输。每一层都负责处理其特定的任务,从而实现了网络通信的层次化和模块化。

[!Important] 封装的时候,一定要考虑后面解包的过程:

  1. 如何将报文中,报头和有效载荷进行分离 - 约定
  2. 任何协议,都要解决如何将自己的有效载荷交付给上层的那个协议

以上两个问题是每层网络协议的共性,每层协议都要解决这两个问题!

2. 跨网络的两台主机通信

跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
请添加图片描述

四、网络中的地址管理

1. 认识IP地址

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

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

2. 认识MAC地址

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

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

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

相关文章

Rockchip Android13 Vold(一):Native层

一:概述 Vold全称Volume Daemon是用于管理存储类设备的守护进程,负责接收驱动层设备挂载和卸载消息以及与Framework层之间的通信。Vold作为一个守护进程位于Android的Native Daemons层。 二:Vold框架图 三:Vold Sevice Android13的init.rc位于/system/etc/init/hw/其中使…

C语言 | Leetcode C语言题解之第24题两两交换链表中的节点

题目: 题解: struct ListNode* swapPairs(struct ListNode* head) {struct ListNode dummyHead;dummyHead.next head;struct ListNode* temp &dummyHead;while (temp->next ! NULL && temp->next->next ! NULL) {struct ListNod…

【Linux】编写并运行Shell脚本程序操作实例

关于Shell脚本的介绍: Shell脚本是一种用于自动化任务和简化常见操作的脚本语言,通常用于Linux和Unix环境中。Shell脚本允许用户通过编写一系列命令和逻辑语句来执行一系列任务,从而提高了工作效率和自动化水平。 以下是关于Shell脚本的详细…

PlanUML和Mermaid哪个好?

引言 在当今信息化快速发展的时代,数据可视化和图表工具不仅对于程序员,也对于非技术背景的人士至关重要。绘图工具可以帮助我们更好地理解和表达复杂的概念或数据流。PlantUML和Mermaid是两款被广泛使用的绘图语言,它们都能够通过简洁的文本…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果,以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

航芯通用MCU技术常见问题 | F4专题

日常工作中,我们的销售或技术工程师经常会收到来自用户的问题,其中一些问题是比较常见的,所以为满足日常用户对航芯产品使用及服务的了解,航芯特此推出“通用MCU技术常见问题”专题,分为F0专题及F4专题,欢迎…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

什么是态势感知?

什么是态势感知? 同学,听说过态势感知吗?啥?不知道?不知道很正常,因为态势感知是一个比较小众、比较神秘的概念。为什么态势感知很神秘,首先是因为这是来自军事情报领域的概念,然后…

python--递归算法篇

1、给定一个包含n1个整数的数组nums,其数字在1到n之间(包含1和n), 可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数 def repeat(ls:list) -> list:#把个数超过1的数&#xff0c…

使用clickhouse-backup备份和恢复数据

作者:俊达 介绍 clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具,开源项目地址:https://github.com/Altinity/clickhouse-backup 功能上能满足日常数据库备份恢复的需求: 支持单表/全库备份支持备份上…

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域,并利用GrabCut算法尝试…

Tomcat无法成功启动——双击startup.bat闪退的解决办法

一、首先查看端口是否被占用了,一般Tomcat的默认端口是8080,可以在管理员命令行通过“netstat -ano|findstr "8080”"的命令查看当前是否有进程占用了端口。 1.如果端口占用了: 则根据PID(进程id号)来查这个…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 (一)ZooKeeper简介 (二)ZooKeeper数据结构 (三)ZooKeeper特点 (四)应用场景 二、ZooKeeper工作模式 (一)工作机制 …

jeecg-boot安装

我看大家都挺关注,所以集中上传了下代码和相关工具,方便大家快速完成 链接:https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码:op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新,如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…

SpringBoot + Dobbo + nacos

SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下,创建一个logs的文件夹:用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…

当你的项目体积比较大?你如何做性能优化

在前端开发中,项目体积优化是一个重要的环节,它直接影响到网页的加载速度和用户体验。随着前端项目越来越复杂,引入的依赖也越来越多,如何有效地减少最终打包文件的大小,成为了前端工程师需要面对的挑战。以下是一些常…

3D应用模型信创系统实时渲染有什么要求?

实时云渲染技术是数字孪生领域,比较常用的轻量化软件交付方式,该技术是将3D应用等大模型的算力执行放在了服务器端,而服务器目前比较常用的还是Windows系统。但随着国产信创在数字孪生领域应用越来越多,实时云渲染平台的国产信创化…

【vue】购物车案例优化

对 购物车案例 进行优化 用watch实现全选/取消全选用watch实现全选状态的检查用computed计算总价格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…