【探索Linux】—— 强大的命令行工具 P.24(网络基础)

在这里插入图片描述

阅读导航

  • 引言
  • 一、计算机网络背景
    • 1. 网络发展历史
  • 二、认识 "协议"
    • 1. 网络协议概念
    • 2. 网络协议初识
      • (1)协议分层
      • (2)OSI参考模型(Open Systems Interconnection Reference Model)
      • (3) TCP/IP协议族模型
  • 三、网络传输基本流程
    • 1. 同一个网段内的两台主机进行文件传输
    • 2. 跨网段的主机的文件传输
  • 四、数据包封装和分用
    • 1. 数据包封装(Packet Encapsulation)
    • 2. 数据包分用(Packet Demultiplexing)
  • 五、网络中的地址管理
    • 1. IP地址
    • 2. MAC地址
  • 温馨提示

引言

在当今互联网时代,Linux操作系统在服务器领域占据着举足轻重的地位。作为开源软件的杰出代表,Linux以其稳定性、灵活性和高度可定制性而闻名。在Linux系统中,网络编程一直是一个重要的领域,无论是开发服务器应用程序还是网络服务,对于网络基础的理解都是至关重要的。本文旨在探讨Linux网络基础知识,包括网络的简单发展历史、网络传输的基本逻辑以及网络传输基本流程,帮助读者深入了解Linux下的网络编程原理和实践应用。通过本文的学习,读者将能够更好地掌握Linux系统下网络编程的核心概念,为后续深入学习和实际应用打下坚实的基础。

一、计算机网络背景

1. 网络发展历史

🍪网络发展历史可以从以下几个关键时期展开介绍:

  1. 60年代到70年代初:ARPANET时期

ARPANET是美国国防部高级研究计划局(ARPA)于20世纪60年代初开展的一个计划,旨在建立一种新型的通讯方法,以便对分布在美国各地的研究机构进行互联。ARPANET采用了分组交换的方式,通过将数据分成若干个小的数据包进行传输,从而避免了传统电路交换的局限性。

  1. 70年代中期到80年代末:TCP/IP时期

1974年,美国国防部下属的高级研究计划局(ARPA)开始了一个新的项目,旨在开发一种新的协议套件,即TCP/IP协议套件。TCP/IP协议套件是目前互联网所采用的基本协议,它由两个协议组成:传输控制协议(TCP)和互联网协议(IP)。这两个协议的出现,使得互联网实现了规模化的发展。

  1. 90年代到2000年代初:万维网时期

1991年,蒂姆·伯纳斯-李(Tim Berners-Lee)在CERN(欧洲核子研究组织)创建了第一个Web服务器,开发了第一个Web浏览器,从而使得万维网(World Wide Web)开始应运而生。万维网的出现,极大地促进了互联网信息的传播和共享,成为了互联网发展的一个重要时期。

  1. 2000年代中期至今:移动互联网时期

随着智能手机、平板电脑等移动设备的普及,移动互联网开始成为互联网新的增长点。移动互联网技术的快速发展,使得人们可以随时随地进行信息的交流和共享,网络应用也逐渐从PC端转向移动端,其范围和应用场景不断拓展。

在这里插入图片描述
网络发展历程是不断演化和壮大的过程,它推动了人类社会的信息化进程,也催生了一系列新兴技术和应用。未来,随着物联网、5G等技术的不断发展,网络将进一步融入我们的生活和工作中,为我们带来更多便利。

二、认识 “协议”

1. 网络协议概念

协议是指在计算机网络中,为了实现数据通信和信息交换而制定的一系列规则和约定。这些规则和约定规定了数据传输的格式、顺序、错误检测与纠正、数据的确认方式等,确保不同设备之间能够有效地通信和协作。

计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 01 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式
在这里插入图片描述

2. 网络协议初识

(1)协议分层

计算机网络中的协议通常按照功能和目的分为不同的层次,这种组织结构被称为协议分层。常见的协议分层模型是OSI参考模型和TCP/IP协议族模型。

(2)OSI参考模型(Open Systems Interconnection Reference Model)

OSI(Open Systems Interconnection)参考模型是一个由国际标准化组织(ISO)制定的用于网络通信协议设计的参考框架,将计算机网络通信划分为七个层次,每个层次负责不同的功能。

  1. 应用层(Application Layer):应用层是最靠近用户的一层,提供用户应用程序与网络的接口。它定义了用户与网络服务之间的通信规则,包括数据格式、加密和身份验证等。

  2. 表示层(Presentation Layer):表示层负责处理数据的格式化、编码和加密,确保不同系统之间能够正确解释、显示和交换数据。

  3. 会话层(Session Layer):会话层管理不同设备之间的会话(session),包括建立、维护和终止会话连接,以及处理数据传输中出现的错误和恢复机制。

  4. 传输层(Transport Layer):传输层负责可靠地传输数据,提供端到端的数据传输服务,包括流量控制、错误检测和纠正,以及数据重传。

  5. 网络层(Network Layer):网络层处理数据在网络中的路由和转发,负责确定数据的最佳路径,并实现不同网络之间的互联互通。

  6. 数据链路层(Data Link Layer):数据链路层负责在相邻节点之间传输数据,通过物理地址(MAC地址)进行数据帧的传输和接收。

  7. 物理层(Physical Layer):物理层负责在物理媒介上传输比特流,包括电气信号、光信号等,以及定义传输媒介的接口标准和传输速率。

在这里插入图片描述
这种七层模型的分层设计使得不同层次的协议可以独立开发和实现,同时也提供了灵活性和可扩展性,促进了网络通信协议的发展和应用。

(3) TCP/IP协议族模型

在这里插入图片描述

这些分层模型将网络通信划分为多个层次,每个层次负责特定的功能,且各层之间通过定义好的接口进行交互。通过分层设计,不同层次的协议可以独立地进行开发、实现和维护,提高了系统的可扩展性和灵活性,同时也方便了协议的替换和更新
在这里插入图片描述

在实际的网络通信中,每个层次的协议都有其特定的作用和职责,通过协同工作,实现了复杂的网络通信需求。例如,应用层协议负责定义应用程序间的通信规则,传输层协议负责提供端到端的数据传输服务,网络层协议负责进行数据包的路由和转发,数据链路层协议负责实现数据在物理介质上的传输等。

三、网络传输基本流程

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

在这里插入图片描述

2. 跨网段的主机的文件传输

🍔数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
在这里插入图片描述

  1. ARP(地址解析协议)请求:当源主机要发送数据到目标主机时,首先需要确定目标主机的物理地址(MAC地址)。如果目标主机的IP地址不在同一子网内,源主机会向本地路由器发送ARP请求,以获取目标主机所在网段的网关路由器的MAC地址。

  2. 路由器转发:本地路由器接收到数据包后,根据目标主机的IP地址和路由表信息,确定下一跳路由器的IP地址,并将数据包转发给下一跳路由器。

  3. 跨网段传输:数据包经过本地路由器后,进入到连接不同网络的路由器,这些路由器负责在不同网络之间传输数据。每个路由器根据目标主机的IP地址和路由表信息,决定数据包的下一跳路由器或目标主机。

  4. 目标主机接收:最终数据包到达目标主机所在网络的路由器,路由器将数据包转发给目标主机。目标主机接收数据包,并进行相应的处理,将数据包重新组装为文件。

🚩总而言之,在跨网段的主机文件传输过程中,涉及到源主机和目标主机之间的IP地址解析、跨网段传输、路由器的转发等步骤,网络中的路由器起着至关重要的作用,负责在不同网络之间进行数据包的转发和路由选择,确保数据能够准确、高效地传输到目标主机。这些网络变化和数据传输过程都是在网络层(第三层)和数据链路层(第二层)上进行的

四、数据包封装和分用

1. 数据包封装(Packet Encapsulation)

数据包封装是将要传输的数据划分为小块,并在每个数据块(称为分组或数据包)中添加必要的标识和控制信息的过程。封装发生在发送方主机上,主要涉及到从应用层到物理层的不同网络协议层。

  1. 应用层封装:应用层负责将要传输的数据划分为较小的数据块,通常称为消息或报文。每个消息或报文都会被添加一个应用层头部,其中包含了源和目标应用程序的端口号等信息。

  2. 传输层封装:传输层接收应用层的数据块,并在每个数据块的前面增加传输层头部。传输层头部包含了源和目标主机的端口号、传输协议(如TCP或UDP)以及用于错误检测的校验和等信息。

  3. 网络层封装:网络层接收传输层的数据块,为每个数据块添加网络层头部。网络层头部包含了源和目标主机的IP地址,以及用于路由选择和数据分片的其他信息。

  4. 数据链路层封装:数据链路层接收网络层的数据块,并在每个数据块的前面增加数据链路层头部。数据链路层头部包含了源和目标主机的MAC地址,以及用于错误检测和流量控制的其他信息。

最终,数据包被封装为一个完整的数据帧,该帧包含了从应用层到物理层的所有头部和数据内容。
在这里插入图片描述

2. 数据包分用(Packet Demultiplexing)

数据包分用是在接收方主机上将接收到的数据包按照协议层次进行解析和处理的过程。数据包分用发生在接收方主机的物理层到应用层之间。

  1. 物理层分用:物理层接收到数据包后,根据物理媒介(如电缆或无线信号)的特性将数据传递给数据链路层。

  2. 数据链路层分用:数据链路层首先解析数据链路层头部,获取目标主机的MAC地址等信息,然后将数据包传递给网络层。

  3. 网络层分用:网络层解析网络层头部,根据目标IP地址确定数据包的下一步处理方式,将数据包传递给传输层。

  4. 传输层分用:传输层解析传输层头部,根据端口号等信息将数据包传递给相应的应用程序。

  5. 应用层分用:最后,应用层解析应用层头部和数据内容,将数据交给目标应用程序进行处理。

通过数据包分用,接收方主机能够正确地将接收到的数据包传递给相应的应用程序进行进一步处理和响应。
在这里插入图片描述

五、网络中的地址管理

1. IP地址

IP地址(Internet Protocol Address)是在互联网上用于识别和定位计算机或网络设备的唯一地址。它是在TCP/IP协议中定义的一种地址,用于在网络中准确定位主机或路由器,并实现数据包的传输和路由。

IP地址通常分为IPv4地址和IPv6地址两种类型:

  1. IPv4地址:IPv4地址是目前广泛采用的IP地址格式,由32位二进制数表示,通常以4组十进制数(0-255)表示,每组之间用点号分隔。例如,192.168.1.1是一个常见的IPv4地址。

  2. IPv6地址:IPv6地址是为了解决IPv4地址空间不足的问题而推出的新一代IP地址格式,采用128位二进制数表示,通常以8组16进制数表示,每组之间用冒号分隔。例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334是一个IPv6地址。

IP地址被分为两部分:网络部分和主机部分。网络部分用来标识网络,主机部分用来标识该网络中的主机或设备。根据不同的IP地址类别,网络部分和主机部分的划分方式不同。

IP地址的作用包括但不限于以下几点:

  • 确定主机或设备在网络中的位置和身份。
  • 实现数据包的路由和转发。
  • 提供网络通信中的端到端连接。
  • 支持互联网上各种应用和服务的正常运作。

在网络通信中,IP地址是一个非常重要的概念,它是整个互联网中数据传输和通信的基础。不同的主机通过其唯一的IP地址可以相互识别和进行通信,从而实现信息的交换和资源共享

2. MAC地址

MAC地址(Media Access Control Address)是网络设备(如计算机、路由器、网络打印机等)网卡上的硬件地址,用于在局域网中唯一标识网络设备。每个网络设备的网卡都有一个唯一的MAC地址,由厂商在生产过程中分配,并以十六进制数表示。

MAC地址通常由6组16进制数表示,用冒号或连字符分隔,例如:00:1A:2B:3C:4D:5E。其中,前3组数字代表了厂商识别码(Organizationally Unique Identifier,OUI),由IEEE注册管理,用来识别设备的厂商,后面3组数字是由厂商分配给设备的唯一标识。

MAC地址的作用包括但不限于以下几点:

  • 在局域网中唯一标识网络设备,用于进行数据帧的寻址和传输。
  • 作为数据链路层的一个重要参数,用于实现局域网中设备之间的数据通信。

在局域网中,当一个设备需要向另一个设备发送数据时,它会将数据帧封装,并在数据帧中附加目标设备的MAC地址。网络设备会根据目标MAC地址来判断是否接收该数据帧。因此,MAC地址在局域网中扮演着非常重要的角色,它是实现局域网内设备通信的关键。

🚨🚨注意:MAC地址是数据链路层的概念,它只在局域网范围内具有唯一性,而不同的局域网中可能存在相同的MAC地址。在跨网段通信时,会使用IP地址来确定目标设备的位置和身份,而不直接使用MAC地址。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!
在这里插入图片描述

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

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

相关文章

k8s-kubeapps图形化管理 21

结合harbor仓库 由于kubeapps不读取hosts解析,因此需要添加本地仓库域名解析(dns解析) 更改context为全局模式 添加repo仓库 复制ca证书 添加成功 图形化部署 更新部署应用版本 再次进行部署 上传nginx 每隔十分钟会自动进行刷新 在本地仓库…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的教室人员检测与计数(Python+PySide6界面+训练代码)

摘要:开发教室人员检测与计数系统对于优化教学资源和提升教学效率具有重要意义。本篇博客详细介绍了如何利用深度学习构建此系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5的性能,展示…

vue2本地开发环境正常,生产环境下this.$router.push({ name: ‘login‘ })不跳转

如果在Vue.js 2中在本地开发环境下正常运行,但在生产环境下使用​​this.$router.push({ name: login })​​不起作用,可能有几个原因需要检查和解决: 路由配置问题: 确保你的路由配置正确,特别是确保在生产环境中,路由的配置和本地开发环境一致。检查是否正确设置了name…

以目标检测和分类任务为例理解One-Hot Code

在目标检测和分类任务中,每一个类别都需要一个编码来表示,同时,这个编码会用来计算网络的loss。比如有猫,狗,猪三种动物,这三种动物相互独立,在分类中,将其中任意一种分类为其他都同…

【大数据Hive】hive 多字段分隔符使用详解

目录 一、前言 二、hive默认分隔符规则以及限制 2.1 正常示例:单字节分隔符数据加载示例 2.2 特殊格式的文本数据,分隔符为特殊字符 2.2.1 文本数据的字段中包含了分隔符 三、突破默认限制规则约束 3.1 数据加载不匹配情况 1 3.2 数据加载不匹配…

力扣 第 125 场双周赛 解题报告 | 珂学家 | 树形DP + 组合数学

前言 整体评价 T4感觉有简单的方法&#xff0c;无奈树形DP一条路上走到黑了&#xff0c;这场还是有难度的。 T1. 超过阈值的最少操作数 I 思路: 模拟 class Solution {public int minOperations(int[] nums, int k) {return (int)Arrays.stream(nums).filter(x -> x <…

Premiere Pro:视频制作的瑞士军刀,让创意飞翔!

Premiere Pro&#xff0c;由Adobe公司推出的专业非线性视频编辑软件&#xff0c;已成为众多视频制作人员的首选工具。其功能之强大、操作之便捷&#xff0c;为视频制作带来了革命性的改变。 首先&#xff0c;Premiere Pro支持多种视频格式的导入和编辑&#xff0c;从剪辑、修剪…

【微服务】在Java体系中SpringCloud和SpringCloud Alibaba各通过哪些具体组件来实现微服务架构呢?

前面我们介绍了微服务架构的各个组件以及各组件的职责&#xff0c;在Java领域中&#xff0c;Spring可以说是无人不知无人不晓的&#xff0c;我们现代的企业级应用和互联网应用&#xff0c;很大一部分都是构建在Spring生态体系上的&#xff0c;同样&#xff0c;实现微服务架构的…

Redis常用指令,jedis与持久化

1.redis常用指令 第一个是key的常用指令&#xff0c;第二个是数据库的常用指令 前面的那些指令都是针对某一个数据类型操作的&#xff0c;现在的都是对所有的操作的 1.key常用指令 key应该设计哪些操作 key是一个字符串&#xff0c;通过key获取redis中保存的数据 对于key…

GCN原理回顾论文导读

Cora_dataset description Cora数据集是一个常用的学术文献用网络数据集&#xff0c;用于研究学术文献分类和图网络分析等任务。 该数据集由机器学习领域的博士论文摘要组成&#xff0c;共计2708篇论文&#xff0c;涵盖了7个不同的学科领域。每篇论文都有一个唯一的ID&#xf…

c++之旅——第四弹

大家好啊&#xff0c;这里是c之旅第三弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 本篇文章的主…

【css面试题】BFC

参考文章1 参考文章2 什么是BFC BFC全称是Block Formatting Context&#xff0c;意思就是块级格式化上下文。你可以把BFC看做一个容器&#xff0c;容器里边的元素不会影响到容器外部的元素。 BFC的特性 BFC是一个块级元素&#xff0c;块级元素在垂直方向上依次排列。 BFC是…

QT 网络编程 8

1 基础知识 udp tcp 2 UDP 框架 客户端: QUdpSocket x; qint64 writeDatagram( const char *data, qint64 size, const QHostAddress &address, quint16 port );服务器: void Server::initSocket(){udpSocket new QUdpSocket(this);udpSocket->bind(QHostAddress…

【Redis | 第七篇】Redis过期策略、内存淘汰策略

文章目录 7.Redis过期策略、内存淘汰策略7.1过期策略7.2内存淘汰策略 7.Redis过期策略、内存淘汰策略 7.1过期策略 我们在set key的时候&#xff0c;可以给它设置一个过期时间&#xff0c;比如expire key 60。指定这key60s后过期。 60s后&#xff0c;redis是如何处理的嘛&am…

性别和年龄的视频实时监测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 性别和年龄检测 Python 项目 首先介绍性别和年龄检测的高级Python项目中使用的专业术语 什么是计算机视觉&#xff1f; 计算机视觉是使计算机能…

ER-NeRF实时对话数字人模型训练与部署

ER-NeRF是基于NeRF用于生成数字人的方法&#xff0c;可以达到实时生成的效果。 下载源码 cd D:\Projects\ git clone https://github.com/Fictionarry/ER-NeRF cd D:\Projects\ER-NeRF 下载模型 准备面部解析模型 wget https://github.com/YudongGuo/AD-NeRF/blob/master/…

如何预估系统的瓶颈

如何预估系统的瓶颈 1 CPU1.1 CPU和同吞吐量 2 内存3 磁盘IO4 网络宽带5 数据库服务器6 APP服务端 CPU 使用率、内存占用、网络流量、磁盘 IO等指标&#xff0c;异常或者持续高位的情况下&#xff0c;都可能是系统瓶颈的表现。 1 CPU CPU使用率正常在70%左右&#xff0c;如果…

力扣hot100:42.接雨水

一、从单个水柱本身考虑 下标为i的水柱能接的雨水&#xff0c;取决于它左边最高的水柱 和 右边最高的水柱的最小值&#xff08;包括它本身&#xff09;。 为了理解这一性质&#xff0c;我们可以这样想象&#xff1a;取出左边最高和最边最高的水柱&#xff0c;将其比作一个碗的边…

绘制一下包络线

clear clc close all % 生成衰减信号 % 生成衰减曲线带有随机信号 fs 50; % 采样率 t 0:1/fs:100; % 时间向量&#xff0c;总时长为5秒 frequency0.5; signal exp(-0.05* t).*sin(2*pi*frequency*t); % 衰减曲线带有随机信号 % 计算包络线 [upper_envelope, lower_…

基于springboot+vue的教师工作量管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…