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协议。

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

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

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

相关文章

模拟器GSN3之DHCP动态分配IP地址配置案例

前文《详解DHCP服务工作原理及配置案例》介绍了DHCP服务工作原理&#xff0c;要想彻底理解、应用DHCP服务&#xff0c;须通过实证案例学习&#xff0c;该文在GSN3虚拟环境下&#xff0c;构建DHCP服务的环境。 一、配置环境&#xff1a; 1、GSN3 2、路由器&#xff1a;R1、R2…

冥想第一千三百零一天(1301)

1.今天上午溪溪和小侄子写作业&#xff0c;我带着桐桐去了惠济区的裕华广场永辉&#xff0c;给家人买了好吃的&#xff0c;下午4点半左右去了妈妈朋友家里摘石榴。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 【算法介绍】 YOLOv11是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv11的一项重要特性&#xff0c;它可以有效地检…

利用 Python 爬虫采集 1688商品详情

1688是中国的一个大型B2B电子商务平台&#xff0c;主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说&#xff0c;可以采用以下几种常见的方法&#xff1a; 官方API接口&#xff1a;如果1688提供了官方的API接口&#xff0c;那么可…

FinOps现状分析:行业趋势与未来展望

一、FinOps 的国内现状 《FinOps 现状》是 FinOps 基金会自 2020 年以来开展的一项年度调查&#xff0c;旨在收集对关键优先、行业趋势和 FinOps 实践方向 的见解。该调查有助于为 FinOps 基金会的活动提供信息&#xff0c;并为更广泛的市场提供有关 FinOps 在各种组织中如何实…

redhat7.7 linux 网络配置文件

一、为什么虚拟网卡配置文件是ens33 变更目录至网络脚本&#xff08;network-scripts&#xff09;文件夹&#xff0c;发现网络配置文件名称为“ifcfg-ens33” cd /etc/sysconfig/network-scripts ls扩展&#xff1a;“ifcfg-ens33”文件下面还有一个“ifcfg”前缀的文件&…

线程互斥函数的例子

代码 #include<stdio.h> #include<pthread.h> #include<sched.h> void *producter_f(void *arg); void *consumer_f(void *arg); int buffer_has_item0; pthread_mutex_t mutex; int running1; int main(void) {pthread_t consumer_t;pthread_t producter_t…

【ubuntu】APT、apt、apt-get介绍

目录 1.apt简介 2.常用apt指令 2.1安装 2.2更新列表 2.3更新已经安装的软件包 2.4搜索软件包 2.5显示软件包信息 2.6移除软件包 2.7清理无用的安装包 2.8清理无用的依赖项 3.apt和apt-get 3.1区别 3.2 总结 1.apt简介 apt的全称是advanced package …

大学生就业桥梁:基于Spring Boot的招聘系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

No.1 | 从小白到入门:我的渗透测试笔记

嘿&#xff0c;小伙伴们&#xff01;好久不见啊&#xff0c;是不是都以为我失踪了&#xff1f;&#x1f602; 其实呢&#xff0c;最近一直在埋头苦学&#xff0c;感觉自己就像是在技术的海洋里游泳&#xff0c;每天都在吸收新知识。现在终于有时间冒个泡&#xff0c;跟大家分享…

脱口秀演员调侃王楚钦引争议

听说脱口秀演员调侃王楚钦输球&#xff0c;野生喜剧回应暂停演出合作&#xff0c;这不仅引发了关于脱口秀表演冒犯边界的讨论&#xff0c;也让我们反思言论自由与尊重他人之间的界限。 脱口秀作为一种艺术形式&#xff0c;其核心在于通过幽默、讽刺的方式&#xff0c;对社会现象…

Meta MovieGen AI:颠覆性的文本生成视频技术详解

近年来&#xff0c;生成式AI技术的发展迅猛&#xff0c;尤其是在文本生成图像、文本生成视频等领域。Meta公司近期推出的MovieGen AI&#xff0c;以其强大的文本生成视频能力震撼了整个AI行业。本文将详细解读Meta MovieGen AI的核心技术、功能特性及其在实际应用中的潜力。 一…

Mac 安装OpenAI的开源语音神器Whisper

一.Whisper 项目地址 1.GitHub项目地址 https://github.com/openai/whisper二.Whisper项目简介 Whisper 是 OpenAI 开源的语音神器&#xff0c;可以实现识别音频、视频中的人声&#xff0c;并将人声转换为字幕内容&#xff0c;保存到文件&#xff1b; 三.Whisper 安装教程 …

一“填”到底:深入理解Flood Fill算法

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 floodfill算法是什么&#xff1f; 二 相关OJ题练习 2.1 图像渲染 2.2 岛屿数量 2.3 岛屿的最大面积 2.4 被围绕的区域 2.5 太平洋大西洋水流问题 2.6 扫雷游戏 2.7 衣橱整…

Fastjson反序列化

Fastjson反序列化一共有三条利用链 TempLatesImpl&#xff1a;实战中不适用JdbcRowSetImpl&#xff1a;实际运用中较为广泛BasicDataSource&#xff08;BCEL&#xff09; 反序列化核心 反序列化是通过字符串或字节流&#xff0c;利用Java的反射机制重构一个对象。主要有两种…

C语言复习概要(二)

本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

vite学习教程04、vue集成axios封装request工具类及应用

文章目录 前言1、安装axios2、封装request工具类3、封装api请求工具4、实战&#xff1a;vue中使用api请求工具类资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技…

YOLO--前置基础词-学习总结

RFBNet是什么意思 RFBNet 是一种用于目标检测的深度学习网络&#xff0c;它的名字来源于 "Receptive Field Block Network"&#xff08;感受野块网络&#xff09;。简单来说&#xff0c;RFBNet 是一种可以让计算机更好地“看”图像中不同大小的物体的方法。 在图像处…

51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器CO传感器蓝牙LED、蜂鸣器等模块构成。适用于家用天然气泄露报警器、煤气泄露报警器、无线报警等相似项目。 可实现功能: 1、LCD1602实时显示温度和煤气浓度 2、温度传感器DS18B20采集环境温度 3、CO传…