当前位置: 首页 > news >正文

Linux网络启程

目录

1.网络编程

 2.计算机网络背景


1.网络编程

    在经历了操作系统的学习之后,我们紧接着来学习网络编程,双管齐下。有了系统的学习,我们学习网络编程会比较轻松。基本的框架已经搭建。

下面,我们先了解一下我们计算机发展的历史

 2.计算机网络背景

        现实世界中,我们人类工作是需要协作的,那么我们计算机发明出来,它需要协作吗?当然需要,我们现在各种计算机互相发送信息,不就是一种协作吗?亦或者是下载一个游戏,看一部电视,本质都是通过网络来进行资源传送的。所以人类产生计算机网络是必然的!因为你发明出计算机为了工作就必然要协作。

        开始的时候,我们是在一个局域网内进行传输的,这个时候我们没有很多问题,我们进行数据传输都是连接线路的,主机间实现通信就是局部的。随着计算机的告诉发展,洛杉矶有了局域网,东京也有了局域网,巴黎也有了局域网,那么我们就会有产生远距离通信的需求,有需求就有提供需求的人,我们的广域网随之诞生,让不同的局域网通过我们的交换机连接到路由器,我们把数据进行路由,就实现了远距离网络通信。

        当我们的计算机通过网络传输数据的时候,我们不可避免的就要出现问题,我的主机要发送的目标主机距离太远了,所以我们需要先把我们的数据交给我们的路由器,由路由器通过多次转发,发送到我们的目标主机,还有一个问题是,网络上那么多台主机,你怎么知道你要发送的目标主机是哪一台,难道把你的数据发给每一台主机吗?这不能这么干呀!还有就是如果我的数据发出去了,如果发送失败了怎么办?就好比你打游戏的时候网络也会卡,这不就是数据传输不稳定,发生了数据发生失败吗?最重要的是,我们发数据只是我们的手段,我们最终的目的是用我们的数据,目标主机得到数据后它怎么知道要如何使用呢?难道你亲自告诉目标主机吗?

        我们发现上面的问题都是逐个产生的,有逻辑的,分层次的,所以我们要一一解决这些问题自然也要分层次,我们学习网络就是为了解决我们不同主机传输数据的问题的。

        所以为了解决我们的上述问题,我们制定出了很多协议,所谓的协议其实就是一种约定,它就是为了解决我们长距离传输中出现的问题定制的一种解决方案!

        所以协议的本质就是一种约定,不知道我们高中学习过负电荷移动的反方向是电流的方向,这个东西当时不理解,但是这本质就是一种我们为了方便,我们规定出来的,我们就这么规定,大家都要这么遵守。但是这个规定如果是一个普通的中学生定制出来,肯定没人听啊,肯定是这个领域的大牛这么说,说我们规定这个负电荷移动的反方向是电流的方向,才有用啊!这就是标准!

普通人是没有制定标准的权利的,得让业内的领头羊来制定一个标准才能有人听,我们的操作系统厂商有很多mac,windows,linux不同的系统之间它们的网络通信各搞各的就不方便,我们就必须让所有的操作系统厂商都遵守一套标准,我们才能进行网络通信。所以我们的许多公司和组织就为此制定了标准出来,解决我们的网络传输的问题!

        上面我们说过我们的问题是分层的,所以我们给出的解决方案也是分层的。这样也降低我们之间的耦合性,打个比方,比如我们说中文,我们有个通讯工具叫电话,你通过电话进行沟通,我们说的都是中文,我们可以进行交流,但是如果哪一天我不说中文了,我们直接换成英语,我们的工具还是那个工具,我们对我们的通讯工具是不必进行更换的!这是我们语言层面和通讯工具的解耦合,再比如,哪一天我们的设备更新,我们依旧说的是那一门语言,但是我们的通讯设备进行了更换,那么我们也可以进行沟通啊,只是设备换了,不影响我语言层面啊!如果我们把它们绑定,那么我换一个层面其他所有的层面都要受影响。所以我们的协议是分层的。

        那么我们计算机的协议是什么?

        答案是我们大名鼎鼎的OSI七层协议,它为我们的网络通讯制定了标准。

     那么 它制定了这么多的协议,我们为了了解网络通信我们需要怎么办,我们就要对这些协议进行学习。

       假设我们在我们的任意一层定义一个结构体,我们就约定我们int a,int b ,int c的含义分别是加减乘,我们传到过去,对面的那一层也是这么理解的,因为它们都遵守我们制定的协议。这样即使是不同的操作系统,我们也可以实现我们的网络间通信。我们只需要把结构体发送给对方,对方也会知道是什么意思,所以我们的协议的意义就是这些。

下面来看,我们的应用层,网络层,数据链路层它们都有对应的要解决的问题。

数据链路层解决的问题是,我不是首先要把我的数据从我们的局域网发送到我们的路由器吗?

问题是局域网我们进行信息发送,它会把我们的信息给我们局域网的每个主机发送一份,每个主机通过IP判断这个数据是不是发送给它的,如果是就接受,不是就抛弃,当我们大量的信息在我们的局域网内进行传输时,我们的信息就会发生碰撞,就是我们所谓的网卡,所以日常生活中,我们的一个网连的人太多,发送的数据过多,就会不可避免的进行卡顿,为了解决这些问题,我们的数据链路层带着解决这个问题的使命就出现了。

     然后是我们的网络层,我们的网络层是为了解决我们把我们的数据发送给我们指定的主机,网络那么多台主机,我怎么知道你要发送给哪台主机,所以为了解决这个问题,我们的网络层就出来了。

传输层呢?它是为了解决如果我们的数据发送出去丢了怎么办?我们的传输层就是保证我们的数据发送不丢失。

应用层就是解决那个我们发数据不是目的,是一种手段,我们的根本目的是用数据,就好比我们做饭不是目的,吃饭才是目的,只做不吃耍流氓!所以应用层是解决了我们的数据应用的问题。

我们的协议进行分层依次解决了我们长距离传输的问题,下面进行具体讲解:

我们进行数据传输的过程中,所有数据是怎么知道数据到底是不是发给自己的?所以我们每个主机都要有名字,这个名字就是我们的MAC地址,当我们把我们的数据发送到局域网时,我们局域网所有的主机都能收到这个数据,不同的主机进行判断,判断这个数据目的地是不是自己,不是自己就会丢掉,是自己的就接受,但是当我们的局域网同时有很多数据的时候,就会发生数据碰撞,会导致我们的数据发送失败,所以为了解决这个问题,我们要进行碰撞检测和碰撞避免,任何时刻,只允许一台主机,向另一台主机发送信息,这和我们的锁就很相似,我们的锁是让我们的共享资源只允许一个线程来访问,这就保证了我们数据的安全,碰撞检测是为了避免我们的数据不一致问题,那么我们思考一下,如果我往一个局域网不断发送大量的垃圾数据,我不就可以把这个网络黑掉了吗?

我们把我们一个局域网内的区域叫做碰撞域。也就是我们所谓的以太网,那么我的问题是为什么叫以太网,本质是一种跨领域的嘲讽,当时天文领域说,我们声音的传播需要介质,那么我们的光的传播需不需要介质呢?当时人就提出假设,说光的传播需要介质,但是这个物质我们看不到,他们给这种看不见的物质取名以太,但是后来通过证明,我们证明了这种物质并不存在,与此同时,我们的计算机科学家为了嘲讽,说你们没有的东西,我们计算机有,于是就一拍脑门,给我们的这种碰撞域取名为以太网!

需要知道的是,我们的计算机是先发展出局域网的,我们局域网有很多技术,随着时代的发展,才出现的我们的广域网,但是局域网领域有很多技术的,我们大浪淘沙,我们就搬用了很多局域网的技术。留下的都是精华!

我们数据发送的过程是自顶上下,然后到了对端主机又是自下向上的,发数据是我们用户进行发送的。我们每一层都有协议,我们自顶向下进行发送的时候,需要对我们的数据进行封包,然后到了对端,对端需要对我们的数据进行解包。同层之间的协议是相同的,我们每一层都是认为对方在和同一层进行通讯,但是逻辑上我们是进行这样的传送的。

大致的示意图就和下面类似,我们的数据每经过一层都会进行打包,然后到了对端再一层一层进行解包,因为它们遵循的协议是一样的,所以我们不同主机都可以知道它们的意思。

我们的有效载荷就是我们的这一层除了我们的该层报头以外的内容,都是我们的有效载荷。

有一个细节是我们为什么把我们的协议叫做TCP/IP协议栈,TCP/IP是因为我们这两层协议是最为重要的,叫栈的原因是因为我们的这个封包解包的过程和栈类似。

还有就是我们任何协议都要解决2个问题,一是将我们的报头和有效载荷进行分离,把数据交给上层哪一种协议的问题,一叫解包,二叫分用。

我们不同的主机间进行发送消息本质是进行进程间通信!本质就是我们的协议栈在进行我们进程间的通讯!

在我们的跨网络传输过程中,我们的IP层协议有一个标识我们不同主机之间地址的数字,我们发送数据的时候,我们的会有2个地址,一个是我们的IP地址,一个是我们的MAC地址,我们的IP地址在数据发送的过程中是不会变的,我们的MAC地址是会变的,这是因为我们的IP地址就好比我们的终极目的地,我们的MAC地址只是我们到达终极目的地的一个过程,就好比,我要从东北去南方,我要途径很多地方,但是我的终极目标没有变,所以我们的终极目的地决定我们的路径。

我们把我们的报文发送到路由器,我们的路由器解析我们的数据链路层,知道它的MAC地址,然后根据它的目的IP再给它一个新的MAC地址,让它知道它下一站要去哪里,这就好比我们到达一个地方,我们的目的地和出发地就会发生变化,我们原来的目的地变成我们的出发地,而我们出发地也会变。所以当我们的报文进行路由的时候,不会把我们的报文全部解析,而是只解析到网络层,然后进行发送,等它到了目的IP主机我们再对它的数据进行解析。

我们的数据路由就是一个解包封包的过程!我们根据我们发送数据过程我们可以知道,我们的网络层以及以上的数据都是一样的,我们IP协议虚拟化了底层局域网的差异,我们的互联网,就是建立在IP网络上的!

事实上,我们的数据发送过程本质是这样的,不断进行解包封包,直到我们到了目的地,然后我们就会继续向上解包!

http://www.xdnf.cn/news/1359991.html

相关文章:

  • 毛选一卷解析
  • 时间复杂度
  • C++STL底层原理:探秘标准模板库的内部机制
  • 大数据毕业设计选题推荐:基于Spark+Django的学生创业数据分析可视化系统详解 毕业设计/选题推荐/深度学习/数据分析/数据挖掘/机器学习/随机森林
  • Go语言IDE安装与配置(VSCode)
  • wpf之DockPanel
  • Python 闭包详解
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十三)菜单、右键菜单
  • JDK版本报错
  • Function + 枚举 + Map:轻量路由器的最佳实践
  • [GeographicLib] LocalCartesian用法
  • 时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
  • Palantir Foundry 领先其他数据平台5到10年:一位使用者的深入观察
  • 门面设计模式
  • 第4章 SPSS简介与数据库构建
  • 网络协议---TCP
  • 最大连续1的个数Ⅲ-滑动窗口
  • 2025/8/24 DockerDesktop安装使用
  • 【网络运维】Shell 脚本编程:while 循环与 until 循环
  • 审核问题——应用未配置图标的前景图和后景图
  • JUC——AQS
  • 客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
  • 蓝凌EKP产品:从 XML 到 JSON ——表单存储的性能优化实践
  • [自用笔记]上传本地项目至github
  • 【嵌入式开发 Linux 常用命令系列 8 -- git checkout 解冲突详细介绍】
  • Qt工具栏中图标槽函数没有响应的问题分析
  • 十一、redis 入门 之 数据持久化
  • 基于FPGA的情绪感知系统设计方案:心理健康监测应用(一)
  • yggjs_rlayout框架v0.1.2使用教程 01快速开始
  • 基于RBF-GA的铝/镁异材FSLW工艺参数优化研究