Linux网络编程 -- 网络基础

news2024/10/10 5:43:37

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

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.coloradmin.cn/o/2195315.html

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

相关文章

[运维]6.github 本地powershell登录及设置ssh连接

当我在本地的git hub 进行修改后&#xff0c;需要推送到远程github仓库。 当我运行了git add . git commit -m "ingress-controller image" 以后&#xff0c;运行git push origin main&#xff0c;发现由于网络原因无法连接到远程github仓库。 此时开始设置ssh连…

【IC验证】基于systemverilog(UVM)断言

断言 0.注意1.作用2.分类3.断言的语法4.基本组成5.实现断言6.常见断言方法7.APB的断言7.1APB的时序7.2 断言的检查7.4 断言覆盖率的统计...未完待续 0.注意 在sequence序列、property属性和断言语句中都可以触发事件&#xff0c;但是建议在property中定义&#xff1b; 1.作用…

机器学习西瓜书笔记(十四) 第十四章概率图模型

第十四章 概率图模型14.1 隐马尔可夫模型14.1.1 小结 14.2 马尔可夫随机场小结 14.3 条件随机场14.3.1 小结 14.4 学习与推断14.4.1 变量消去14.4.2 信念传播小结 14.5 近似推断14.5.1 MCMC采样14.5.2 变分推断小结 14.6 话题模型14.6.1 小结 总结 概率图模型 14.1 隐马尔可夫…

模型漫谈:图神经网络(GNN)是什么样的存在

文章大纲&#xff1a; 从生活中的例子谈图与图神经网络 什么是图神经网络&#xff1f;它如何起源&#xff1f; 图神经网络的基本原理和原则 图神经网络的应用方向&#xff1a;以环境科学为例 公众号推荐 在现代科技迅速发展的今天&#xff0c;许多看似复杂的概念其实都有…

安全运营中心 (SOC) 团队对其安全工具感到失望

Vectra AI 表示&#xff0c;安全运营中心 (SOC) 从业人员认为&#xff0c;由于太多孤立的工具和缺乏准确的攻击信号&#xff0c;他们在检测和确定真实威胁的优先级方面正在失败。 人们对供应商的不信任感日益加深&#xff0c;认为供应商的工具在发现真正的攻击方面起的阻碍作用…

基于Rational Rose 做的UML图

因为要写软件工程的实验报告&#xff0c;但是老师讲的完全听不懂。so 看的b站上面的 UML视频(古董)&#xff0c;记个笔记&#xff0c;完全图一乐。 目录 用例图&#xff1a; 类图 类和类之间的关系&#xff1a; 继承(泛化 Generalization) 实现&#xff08;Interface&…

随机链表的复制OJ

目录 前言1.随机链表的复制1.1 思路1.2 代码 总结 前言 这道题可谓是链表的试金石&#xff0c;涉及到链表的插入、删除&#xff0c;对代码能力是很大的考验。而且思路也很巧妙&#xff0c;很有价值的一道题。 1.随机链表的复制 138.随机链表的复制 1.1 思路 这个题目很难整…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则&#xff1a; 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…

头歌 | 获取最多金币

题目描述 有一个 N x N 的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。 输入输出格式 输入格式 第一行有一个整数 N。 之后 N 行有 N 个整数&…

msvcp100.dll丢失怎样修复,6招轻松解决msvcp100.dll丢失问题

在众多电脑故障中&#xff0c;msvcp100.dll丢失问题尤为常见。本文将详细探讨msvcp100.dll丢失的原因、影响、解决方法以及预防措施&#xff0c;帮助用户更好地应对这一难题。 一、什么是msvcp100.dll&#xff1f; msvcp100.dll是微软Visual C 2010 redistributable package的…

【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

基站设备检测系统源码分享

基站设备检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解&#xff08;UDP&#xff09; 3. 面向连接的多路复用与多路分解&#xff08;TCP&#xff09; 4. Web 服务器与TCP 三、UDP&#x…

CMake 教程跟做与翻译

目录 STEP 1: 入门与理解 cmake_minimum_required设置CMake版本的最小值 project声明工程属性 add_executable添加可执行文件 使用CMake构建工程 根据自己的构建工具自行构建 Reference STEP 1: 入门与理解 我们起手的&#xff0c;最基本的 CMake 项目是从单个源代码文件…

一篇教你玩转腾讯混元大模型!

0 前言 腾讯混元大模型&#xff08;Tencent Hunyuan&#xff09;具备&#xff1a; 强大的中文创作能力复杂语境下的逻辑推理能力可靠的任务执行能力 基于混元大模型&#xff0c;腾讯云推出文本生成、图像创作、视频创作产品方案&#xff0c;覆盖全场景AIGC应用&#xff1a; …

如何在 Kubernetes 上部署 Spark

在 Kubernetes 集群中部署 Apache Spark&#xff0c;需要你具备对 Kubernetes 的工作原理、Spark 的架构以及云原生应用的理解。 前期准备工作 在进行 Spark 的部署之前&#xff0c;需要对你的 Kubernetes 环境做好充分的准备。这包括 Kubernetes 集群的搭建以及基础工具的安…

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…

华为OD机试 - 日志限流 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

毕业设计——springboot + VUE实现后台管理系统(集成JWT接口权限验证)

作品详情 - 高质量的代码、代码结构、和代码注释 - 漂亮的UI&#xff0c;菜单栏、标签页&#xff0c;体验、交互更好用的员工、部门、角色、菜单管理等等 - 优化基于Keepalive的标签页&#xff0c;做到标签页该缓存的时候缓存&#xff0c;比如左右切换等&#xff0c;不该缓存的…

二、图解C#教程

一、方法 {}块&#xff0c;里面的是方法体 二、Var关键字 推断出等号右边的实际类型 三、局部常量 1、声明时必须初始化 2、声明后不能改变