Linux网络编程 -- 网络基础

本文主要介绍网络的一些基础概念,不涉及具体的操作原理,旨在构建对网络的基础认识。

1、网络的早期发展历程

20世纪50年代

在这一时期,计算机主机非常昂贵,而通信线路和设备相对便宜。为了共享计算机主机资源和进行信息的综合处理,形成了第一代的以单主机为中心的联机终端系统。这种系统的特点是所有终端共享主机资源,但线路利用率低,主机效率也较低。

20世纪60年代

1960年代,网络技术开始快速发展。1969年,美国国防部高级研究计划署(ARPA)的前身ARPAnet投入使用,标志着现代计算机网络的诞生。ARPAnet最初主要用于军事研究目的,其技术上的重大贡献包括TCP/IP协议簇的开发和利用。ARPAnet的试验奠定了Internet存在和发展的基础12。

20世纪70年代至80年代

1983年,ARPAnet分裂为两部分,ARPAnet和纯军事用的MILNET。同时,局域网和广域网的产生和发展对Internet的进一步发展起了重要作用。其中,美国国家科学基金会(NSF)建立的NSFnet在全美国建立了按地区划分的计算机广域网,并将这些地区网络和超级计算机中心互联起来。

20世纪90年代至21世纪初

进入90年代,随着浏览器和万维网的出现,互联网开始真正普及。人们可以通过浏览器浏览网页、获取信息、购物等。此后,互联网的发展经历了商业化阶段和普及化阶段,越来越多的商业公司开始利用互联网提供服务和产品。随着智能手机和平板电脑的普及,互联网进一步向移动化发展。

2、认识一下协议

<1>基本概念

在网络诞生前,计算机主要用于计算数据,科学家使用计算机进行数据传输时,都采用类似软盘的方式进行传输。随着时代的发展,这种低效的传输方式被淘汰,出现了网络。但是早期的网络都是被各大高校和实验室开发出来,这种网络在传输数据的方式都有所不同,为了节约通信成本,各大高校和知名企业联合在一起决定一些协议,也就约定网络传输的一些规则与标准。所以,其实协议就是一种约定。

<2>网络分层结构 -- 网络 和 OS之间的关系

1、软件分层

在我们日常编写软件的过程中,分层其实是非常常见的一种做法,就比我们的操作系统,在操作系统的上层还有系统调用,在系统调用的上层就是应用层。这种分层的方式能够解决许多的问题,这种分层的方式是松耦合的,可以随时替换代码或维护。

 2、网络分层

<1>为什么存在网络以及带来的问题

网络的存在本质上就是为了解决远距离的通信问题,降低通信的成本。现在的计算机可能不同的部件分布在全国各地,这就会带来新的一些问题。比如:1、如何使用数据的问题 2、可靠性的问题3、主机的定位问题4、数据报的局域网转发问题等。

<2>解决方案

为了解决上面的问题,就有人提出了网络协议的方案,比较著名的就是tcp/ip协议。我们该怎么评判这种解决方案的好坏呢?这就要看这些协议是否是可拓展、是否方便维护。而其中分层设计就能很好地满足这种要求,所以这也是网络协议分层的原因。

<3>OSI七模型层

1. 物理层(Physical Layer)

  • 具体作用
    • 在物理媒体上发送和接收比特流(0和1)。
    • 定义电压、接口的物理形状、引脚分配等。
  • 具体功能
    • 信号编码(如曼彻斯特编码、差分曼彻斯特编码)。
    • 信号传输媒介(双绞线、同轴电缆、光纤)。
    • 物理拓扑结构(星型、总线型、环形)。

2. 数据链路层(Data Link Layer)

  • 具体作用
    • 在相邻节点之间提供可靠的数据传输。
    • 处理由物理层提供的原始比特流。
  • 具体功能
    • 帧的封装(添加首部和尾部)。
    • 差错检测(如循环冗余检测CRC)和纠正。
    • 流量控制(如滑动窗口协议)。
    • 访问控制(如CSMA/CD、令牌传递)。

3. 网络层(Network Layer)

  • 具体作用
    • 负责数据包从源主机到目的主机的传输。
    • 路由选择,确定最佳路径。
  • 具体功能
    • 路由算法(如距离向量算法、链路状态算法)。
    • 数据包转发。
    • IP地址分配和寻址。
    • 拥塞控制。

4. 传输层(Transport Layer)

  • 具体作用
    • 确保数据的端到端可靠传输。
    • 为应用层提供端口号服务。
  • 具体功能
    • 端到端连接的建立与终止(如TCP的三次握手)。
    • 数据分段与重组。
    • 流量控制(如TCP的滑动窗口)。
    • 错误恢复(如TCP的超时重传)。

5. 会话层(Session Layer)

  • 具体作用
    • 管理会话的建立、维护和终止。
    • 同步不同应用程序之间的对话。
  • 具体功能
    • 会话管理(如会话检查点、恢复)。
    • 同步(如数据同步、会话同步)。

6. 表示层(Presentation Layer)

  • 具体作用
    • 确保数据在网络中传输前后的表示格式是一致的。
    • 处理数据的加密和解密。
  • 具体功能
    • 数据加密和解密。
    • 数据压缩和解压缩。
    • 数据格式转换(如不同字符集之间的转换)。

7. 应用层(Application Layer)

  • 具体作用
    • 为用户提供网络服务。
    • 实现网络应用程序。
  • 具体功能
    • 文件传输(如FTP)。
    • 电子邮件(如SMTP)。
    • 网页浏览(如HTTP)。
    • 域名解析(如DNS)。

为了解决上述的一些问题,就有人提出OSI七层模型。虽然这里网络协议被分成了7层,但实际上我们在实际应用时,上三层被合成了一层应用层。(如下图)

与操作系统的关系

在物理层,与网络相关的硬件结构就是网卡,网卡的驱动程序就是数据链路层。需要特别注意的是,传输层和网络层是操作系统内部源代码的一部分,说明操作系统自己也会实现网络的相关功能。同时在应用层系统也会提供相关的网络接口,供上层开发网络程序。为了方便网络接口的使用,有人对系统提供的网络方面的系统调用进行封装,形成网络库。

无论是window,linux还是其他的操作系统,只要想要入网,就必须遵守这些网络协议。这也就是各个操作系统之间能够通信的原因。

<4>语言层面,理解协议

上文对协议进行了简单描述,为了更直接对这些协议进行理解,下面用张图来对协议进行简单理解。

在实际的传输过程中,我们是以报文的方式来对数据进行传输,其中这些数据肯定是要以结构化数据进行传输(操作系统基本就是使用C语言进行编写的,这里结构化数据一般就是结构体),如何让两边都认识对方发送的结构化数据呢?那就是协议的功劳了,协议会规定相同的结构体格式,这时通信双方就都能够认识对方数据了。

3、网络传输

<1>局域网传输过程

假设在一个局域网下,有多台主机,其中主机A和主机D之间需要通信。那么这两个主机之间能否之间通信吗?能。主机A会在局域网中发送数据,其中所有的主机都会接受到该信息,但是由于该信息是发送给主机D的,所以其他主机都不会处理这消息。而Mac地址就是在同一局域网下每台主机的唯一标识,就和我们的名字一样,主机A发送的消息中就包含了目标主机的Mac地址,这也是以太网通信的原理。

在局域网中主机A发送消息时,如果有其他主机一起发消息,主机A就会对消息进行检测碰撞与避免碰撞,其他主机同理。如果同时发送消息的主机多了,局域网中的消息就会发生碰撞。所以当我们想要干扰局域网通信时,只要向局域网中不断发送垃圾数据。为了避免这种数据碰撞的局面,当需要发送数据的主机检测到碰撞时,一般会先等待碰撞域(局域网)中的数据减少以后再发。所以在一个局域网中,主机当然是越少越好(这就和我们上课时,一个班的人越少越好,每个人说的话也更能听清)

同时我们也可以在任一时刻只让一台主机发送消息,此时我们也可以将局域网看成一种临界资源。这也是令牌环网的大致工作原理,而令牌环网中有一张令牌,这相当于我们保护临界资源的锁。

<2>协议层面的传输

当我们在协议层面传输报头,是自顶向下传输的,其中在应用层输入消息,想要发送给另一台主机,我们就必须让消息从应用层开始,向下传输到链路层,再经过底层的网卡发送消息。其中需要发送消息的主机在每经过一层协议时,都会在发送的消息前加上一个对应的协议报头。其中,需要发送的消息中除了协议报头,其余部分,我们就称为有效载荷。从应用层不断向下加报头的过程,我们就称为封装。而在接受方,主机收到消息后,依次向上去掉协议的报头,这个我们称为解包。

这里消息就是报文,报文 = 协议报头 + 有效载荷。 应用层的报文一般叫请求或应答,传输层的包头一般叫数据段,网络层的报文一般叫数据报,链路层的报文我们一般称为数据帧。

怎么理解协议报头呢?举个生活中的例子,现在我买了一双鞋,但是我收到快递时,收到的却是一个鞋盒,鞋盒上记录了卖家和买家的基本信息。这个信息并不是给买家和卖家看的,而是给快递公司看的,所以这里鞋盒就相当于报头。在计算机中,这些报头其实就是标明消息要传输给哪一个主机,以及特定协议层中的哪一个协议(其实每一层协议栈都包含了很多的协议)。当接收方接受到报文时,会将链路层的报头与报文进行分离,链路层会解析报头的数据,决定传给网络层的哪个协议,不断重复,直至应用层取到需要的数据(这个过程我们称为分用)。

小结:任何的协议,都要有让报头与有效载荷的分离的能力,并且要有分用的能力。

 <3>跨局域网数据传输

当我们需要跨局域网进行传送数据时,此时我们就需要使用到路由器这个设备了。路由器一般是要横跨两个网络的。用户A将数据自顶向下传递到数据链路层后,数据链路层会将报文发送路由器,路由器会对报文解包后,再分用封装发送给目标主机所在的局域网当中。

具体过程:

 在介绍具体发送过程前,我们首先需要了解一些前置知识。当我们的IP报文被传递到链路层时,链路层会在报文前加上链路层报头。其中报文中就包含了两套地址,一套是最终的目的地和源头,也就是目的IP地址和源IP地址,另一套地址是当前所处机器的Mac地址和需要经过的下一台主机的Mac地址。需要注意的目的IP和源IP是一定不会变的,这就和我们平常定的目标一样,而Mac地址就像我们为了完成目标,途中指定的阶段性计划。一旦目标变了,日常的计划也就变了。

IP地址一般标识形式是点分十进制, 具体格式就是 XXX.XXX.XXX.XXX 。大小为32字节,公网使用的IPv4,国内大部分使用的也是IPv4,IPv6是另外一种IP协议报文。

当用户A的底层数据将链路层报文发送以后,路由器会收到用户A发来的报文,然后会对报文进行解包,解包后重新对其进行封装,不过需要注意的是,此次封装是在另一种局域网当中。封装以后经由网卡发送以后,用户B接受到报文后对报文进行层层解包后就可以拿到数据。在我们日常生活中,一条数据从用户A发送用户B可能会经过很多的路由器,期间会经历很多的局域网,其中各种局域网的传输方式可能不同,但是IP地址却一直没有变化,这种采用IP地址标明用户的方式屏蔽了底层局域网的差异,是一种很好的网络虚拟化技术。IP层协议往上的协议都一样,IP层协议往下的局域网差异被路由器解决,所以我们在网络上只讨论IP协议。

以上就是所有内容,本文不具体介绍计算机网络的相关知识,只是帮助大家构建相关的概念,方便后续理解,以上就是所有的内容,文中如有不对之处,还望各位大佬指正,谢谢!!!

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

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

相关文章

基于图像的3D动物重建与生成

一、背景与目标 3D-Fauna 是一款用于基于图像和视频进行四足动物3D重建与生成的开源方案。自然界展示了复杂的相似性与多样性,该方法通过学习来自网上图片的四足动物的3D形态,能够从单张图片生成可动画化的带有纹理的3D网格模型。其最终目标是通过大量扩展现有的解决方案,实…

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES&#xff1b;展示所有的数据库CREATE DATABASE 数据库名称; 创…

基于STM32的数字温度传感器设计与实现

引言 STM32 是由意法半导体&#xff08;STMicroelectronics&#xff09;开发的基于 ARM Cortex-M 内核的微控制器系列&#xff0c;以其强大的处理能力、丰富的外设接口和低功耗著称&#xff0c;广泛应用于嵌入式系统设计中。在这篇文章中&#xff0c;我们将介绍如何基于 STM32…

深度学习:基于MindSpore实现ResNet50中药分拣

ResNet基本介绍 ResNet&#xff08;Residual Network&#xff09;是一种深度神经网络架构&#xff0c;由微软研究院的Kaiming He等人在2015年提出&#xff0c;并且在ILSVRC 2015竞赛中取得了很好的成绩。ResNet主要解决了随着网络深度增加而出现的退化问题&#xff0c;即当网络…

数据结构与算法——动态规划算法简析

1.初步了解动态规划 由于本篇博客属于动态规划的初阶学习&#xff0c;所以大多都是简单的表示&#xff0c;更深层次的学术用语会在之后深度学习动态规划之后出现&#xff0c;本文主要是带各位了解一下动态规划的大致框架 1.1状态表示 通常的我们会开辟一个dp数组来存储需要表示…

015 品牌关联分类

文章目录 后端CategoryBrandEntity.javaCategoryBrandController.javaCategoryBrandServiceImpl.javaCategoryServiceImpl.javaBrandServiceImpl.java删除 npm install pubsub-jsnpm install --save pubsub-js这个错误是由于在尝试安装 pubsub-js 时&#xff0c;npm 发现了项目…

数据结构(栈和队列的实现)

1. 栈&#xff08;Stack&#xff09; 1.1 栈的概念与结构 栈是一种特殊的线性表&#xff0c;其只允许固定的一段插入和删除操作&#xff1b;进行数据插入和删除的一段叫做栈顶&#xff0c;另一端叫栈底&#xff1b;栈中的元素符合后进先出LIFO&#xff08;Last In First Out&…

C++——模拟实现vector

1.查看vector的源代码 2.模拟实现迭代器 #pragma oncenamespace jxy {//模板尽量不要分离编译template <class T>class vector{public:typedef T* iterator;//typedef会受到访问限定符的限制typedef const T* const_iterator;//const迭代器是指向的对象不能修改&#xf…

透明物体的投射和接收阴影

1、让透明度测试Shader投射阴影 &#xff08;1&#xff09;同样我们使用FallBack的形式投射阴影&#xff0c;但是需要注意的是&#xff0c;FallBack的内容为&#xff1a;Transparent / Cutout / VertexLit&#xff0c;该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…

毕业设计_基于springboot+ssm+bootstrap的旅游管理系统【源码+SQL+教程+可运行】【41001】.zip

毕业设计_基于springbootssmbootstrap的旅游管理系统【源码SQL教程可运行】【41001】.zip 下载地址&#xff1a; https://download.csdn.net/download/qq_24428851/89828190 管理系统 url: http://localhost:8080/managerLoginPageuser: admin password: 123 用户门户网站…

【设计模式-解释模式】

定义 解释器模式是一种行为设计模式&#xff0c;用于定义一种语言的文法&#xff0c;并提供一个解释器来处理该语言的句子。它通过为每个语法规则定义一个类&#xff0c;使得可以将复杂的表达式逐步解析和求值。这种模式适用于需要解析和执行语法规则的场景。 UML图 组成角色…

SPDK从安装到运行hello_world示例程序

SPDK从安装到运行示例程序 #mermaid-svg-dwdwvhrJiTcgTkVf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dwdwvhrJiTcgTkVf .error-icon{fill:#552222;}#mermaid-svg-dwdwvhrJiTcgTkVf .error-text{fill:#552222;s…

android compose ScrollableTabRow indicator 指示器设置宽度

.requiredWidth(30.dp) Box(modifier Modifier.background(Color.LightGray).fillMaxWidth()) {ScrollableTabRow(selectedTabIndex selectedTabIndex, // 默认选中第一个标签containerColor ColorPageBg,edgePadding 1.dp, // 内容与边缘的距离indicator { tabPositions…

【本地缓存】Java 中的 4 种本地缓存

目录 1、手写一个简单的本地缓存1.1、封装缓存实体类1.2、创建缓存工具类1.3、测试 2、Guava Cache2.1、Guava Cache 简介2.2、入门案例2.2.1、引入 POM 依赖2.2.2、创建 LoadingCache 缓存 2.3、Guava Cache 的优劣势和适用场景 3、Caffeine3.1、Caffeine 简介3.2、对比 Guava…

图的基本概念 - 离散数学系列(五)

目录 1. 图的定义 节点与边 2. 度与路径 节点的度 路径与圈 3. 图的连通性 连通图与非连通图 强连通与弱连通 连通分量 4. 实际应用场景 1. 社交网络 2. 城市交通系统 3. 网络结构 5. 例题与练习 例题1&#xff1a;节点的度 例题2&#xff1a;判断连通性 练习题…

linux基础 超级笔记

1.Linux系统的组成 Linux系统内核&#xff1a;提供系统最核心的功能&#xff0c;如软硬件和资源调度。 系统及应用程序&#xff1a;文件、任务管理器。 2.Linux发行版 通过修改内核代码自行集成系统程序&#xff0c;即封装。比如Ubuntu和centos这种。不过基础命令是完全相…

【瑞昱RTL8763E】刷屏

1 显示界面填充 用户创建的各个界面在 rtk_gui group 中。各界面中 icon[]表对界面进行描述&#xff0c;表中的每个元素代表一 个显示元素&#xff0c;可以是背景、小图标、字符等&#xff0c;UI_WidgetTypeDef 结构体含义如下&#xff1a; typedef struct _UI_WidgetTypeDef …

vite学习教程03、vite+vue2打包配置

文章目录 前言一、修改vite.config.js二、配置文件资源/路径提示三、测试打包参考文章资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&…

【深度强化学习基础】(一)基本概念

【深度强化学习基础】&#xff08;一&#xff09;基本概念 一、概率论基础知识二、强化学习领域术语三、强化学习中两个随机性的来源&#xff1a;四、rewards以及returns五、Value Functions1.Action-Value Function Q π ( s , a ) Q_\pi(s,a) Qπ​(s,a)2.State-Value Funct…

【高等数学学习记录】函数的极限

一、知识点 &#xff08;一&#xff09;知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…