【Linux网络编程一】网络基础(网络框架)

news2024/11/16 7:41:20

【Linux网络编程一】网络基础(网络框架)

  • 一.什么是协议
    • 1.通信问题
    • 2.协议本质
    • 3.网络协议标准
  • 二.协议分层
    • 1.为什么协议要分层
    • 2.如何具体的分层
  • 三.操作系统OS与网络协议栈的关系
    • 1.核心点:网络通信贯穿协议栈
  • 四.局域网中通信的基本原理
    • 1.封装,解包分用
    • 2.正确看待局域网
  • 五.以太网下是如何通信的
    • 1.碰撞域
  • 六.交换机

本篇开始总结网络知识,系统部分到此结束。
网络的本质就是在获取和生产数据,而系统的本质就是在处理数据。从网络中获取到数据利用系统调用来处理数据。而网络的本质也就是文件,我往文件里写,就是往网卡里写,往网卡里写,就是往网络里写。

一.什么是协议

我们在生活中都是基于数据来进行协助的,而一般我们可以根据协议约定,来减少沟通成本。
协议就是一种约定,它的出现是为了解决通信过程中出现的问题,所以我们只要理解了通信过程会出现什么样的问题,就能清楚要制作什么样的协议,那么通信过程中存在哪些问题呢?

1.通信问题

在这里插入图片描述
在两台主机网络通信过程中,面临着以下四种问题:

【问题1】.你怎么保证你的数据能准确的到达下一个设备?
【问题2】.你如何定位的到要发送的主机位置呢?
【问题3】.长距离传输过程中数据会不会丢失呢?
【问题4】对方接收到数据,就算完了吗?如何处理发来的数据呢?

通信的两台主机都会面临着相同的问题,为了解决这些通信问题,所以就需要制定对应的协议来解决。
问题1由以太网协议解决
问题2由ip协议来解决
问题3由tcp协议来解决
问题4由应用层协议来解决。

2.协议本质

在我们日常生活中,类似于协议的东西有很多,就比如我们接收快递时,我们想要的是买的物品本身,但商家默认会将一个快递盒子发给我们,并且外面还贴有标签(收件人,手机)等信息。这个快递盒子和标签就是协议!

1.所以我们在接收快递时,我们会收到除了快递本身之外的更多信息字段,比如快递盒子外面贴的标签,这个多出来的信息字段,就是协议,严格上说是协议的报头!
2.事实上,在我们日常发送数据时,也不是单单就把数据发送过去,我们一定还会在我们要发送的数据之外多发送一些东西,这个多出来的,就是协议!
在这里插入图片描述

这个多出来的东西,就是一些信息字段,描述某些特征,而在计算机当中,结构体恰好就是用来描述对象的一些基本信息和属性,所以在计算机中,协议的表现形式就是结构体对象!

所以一台主机发送一个结构体对象,另一台主机是可以立马认识到这个结构体表示什么意思,因为该主机也有该类的源代码,结构体对象类型是一样的,所以我们就可以跨逐渐上让它们基于结构体快速形成约定,这就是协议!
在这里插入图片描述

3.网络协议标准

【问题】那么两台主机如果要网络通信,只要约定好协议就可以了吗?

协议是定制设置出来的一种形式,但协议代表的含义也是定制者赋予的,所以除了协议形式要统一,还有很多东西需要统一起来,比如代表的含义,形式大小等待细节。
在这里插入图片描述

统一的标准,从软件到硬件各方面都需要一支,这就形成了网络协议。

二.协议分层

在这里插入图片描述

1.为什么协议要分层

1.本质是因为问题是层状的,所以协议定制出来肯定也是层状的。并且设置成层后,就可以降低耦合度,减少维护成本好维护。
2.因为协议分层后,我们可以认为是每层协议在和每层协议在直接通信,跟下层没有关系,下层出现问题,不会影响到上层。

在这里插入图片描述

3.协议分层后,在逻辑上就可以看成各层之间在匹配通信

2.如何具体的分层

在网络中,协议具体被分成5层,但最重要的是网络层ip和传输层tcp,所以被称为TCP/IP五层模型。
在这里插入图片描述

这五层从下往上分别是,物理层,数据链路层,网络层,传输层,应用层。各自都有对应的协议。
每层具有不同的功能:
在这里插入图片描述

三.操作系统OS与网络协议栈的关系

1.物理层对应着系统中的硬件部分,比如网卡。
2.数据链路层对应着驱动程序,驱动软件。
3.而网络层和传输层是内嵌在内核里的,属于操作系统的部分。
4.应用层就相当于在操作系统之上的用户层,更准确的来说是用户层的各自软件应用。
在这里插入图片描述

在这里插入图片描述

操作系统和网络栈是一一对应起来的,网络通信的本质也就是在访问硬件网卡,而用户想要访问硬件,必须要经过操作系统,而操作系统又不相信用户,所以回给上层提供系统调用来访问内部。所以对应的网络通信,用户想要访问网卡,就必须调用系统调用,所以上层开发者为了更好的通信,所以会根据系统调用来开发一些协议来让我们使用。
5.操作系统虽然有多种,比如Linux和windows,但是网络栈却只有一种,所有的操作系统必须遵守,不然系统设备无法入网通信。
在这里插入图片描述

1.核心点:网络通信贯穿协议栈

所以网络通信的本质:就是贯穿协议栈的过程!这个过程先自顶向下,贯穿协议栈,然后通过网卡传输到另一台主机,再自底向上贯穿协议栈。
在这里插入图片描述

四.局域网中通信的基本原理

知识点1:在局域网(网络)当中,任意两台(直接相连的)主机是可以通信的,比如说手机可以投屏到电视上,但必须使用同一个网络才可以。
知识点2:在局域网(网络)当中通信协议有很多种,而以太网是属于局域网通信标准的其中一种

那么在局域网(就是在网络中)当中的两个主机是如何进行通信的呢?

两台主机在局域网中直接通信的过程,本质就是在不断的封装和解包的过程!
在这里插入图片描述

1.封装,解包分用

【问题1】什么叫封装呢?

网络通信时,需要贯穿协议栈,比如A主机要将消息通过网络发送给B主机,那么消息需要由A主机的网络协议栈由顶自下贯穿到B主机,再由底向上贯穿B主机的网络协议栈。
因为协议是附加字段,是一个结构体对象,所以每层协议都有对应的结构体对象。
消息就放在协议的后面,我们称这个部分为报文,而协议结构体部分称为报头。
每贯穿一层协议,报文都会多出一个协议报头,该协议报头就是该层协议的结构体对象。

1.报文是由报头和有效载荷构成,每一层协议栈都会往报文上添加新的报头,而报头后面的就变成新的有效载荷了。
在这里插入图片描述

贯穿协议栈,每层都需要添加报头,这个过程就是不断的封装报文。
【问题2】如何将数据发送给对端的呢?

网络协议栈的层状结构中,每一层都有协议,而通过协议就可以将数据发送给对端,比如数据链路层,通过以太网协议将数据发送给对端主机的数据链路层。
在这里插入图片描述

【问题3】什么叫解包?
由A主机发送给B主机,先自顶向下贯穿A主机网络协议栈,经过添加封装报头,最终到达数据链路层,数据和链路层通过协议,将报文发送给对端链路层。对端链路层再自底向上贯穿协议栈。
并且每层协议栈是可以区别哪些是报头哪里是报文的,然后对端主机的链路层就会将该报文的报头和有效载荷分离,将有效载荷交给上一层协议!
而由协议层分离报头和有效载荷的过程就是不断的在解包报文,会将属于该层的协议报头分离出去,再将剩下的有效载荷交给上一层(贯穿协议栈)
【问题4】什么叫分用?
对端主机的协议层接收到报文后,需要解析报文(分离报头和有效载荷)将有效载荷往上层协议发送,而它怎么知道发送上层的哪一个协议呢?每一层协议栈都会有许多协议存在,那么应该发送给上一层的哪一个协议呢?
所以几乎所有的协议,都要在报头中提供,将自己的有效载荷交付给上层哪一个协议的能力!这个能力就叫分用。

在这里插入图片描述

【结论】:
在这里插入图片描述

2.正确看待局域网

在这里插入图片描述

局域网就一个网络,而网络就是一个文件,主机之间通信就是进程之间通信,进程之间通过网络进行通信,所以网络就是一个共享资源,并且要求是互斥访问该资源。

五.以太网下是如何通信的

我们知道报文在传递到链路层时,是根据以太网协议与对端链路层进行通信的。那么具体在以太网下是如何通信的呢?
在这里插入图片描述

【前提知识】 在局域网中,每台主机都会有一个唯一标识自己的标志–>Mac地址/ip地址,所以每台主机都是可以识别对方是谁的。在这里插入图片描述

在局域网当中,发送一条消息,会被局域网内的所有主机接收到,也就是消息首先会贯穿协议栈,经历封装添加报头,到达数据链路层,最后在网卡硬件层面接收到。而对端网卡接收到数据是通过以太网接收到的。

以太网下数据是如何传输的呢?是如何通信的呢?

1.每台主机都有唯一的标识,所以A主机要发送消息给B主机,A主机是需要知道B主机的Mac地址的(消息贯穿A主机的协议栈到达数据链路层,在报头中是存储着B主机的Mac地址的)
2.首先在局域网当中所有的主机都会接收到报文(在逻辑上,每一层协议直接通信,也就是在链路层收到消息。A主机数据链路层通过以太网将报文发送给各主机的的数据链路层)。
3.而其他主机的数据链路层一旦接收到报文,就会进程报头分离解析,根据标识每台主机的ip地址发现不是发送给自己的,就会将报文直接丢弃。
4.如果发现是发送给自己的,就会将有效载荷发送给上一层协议。

在这里插入图片描述

1.碰撞域

往局域网当中发送一条消息,该局域网下的所有主机都会收到,而多台主机同时往局域网中发送消息,那么这些消息就会发送碰撞,发生丢失,而发生碰撞的地方就称为碰撞域,所以以太网是基于碰撞域形成的。

所以以太网下通信是会存在数据碰撞问题的。
在这里插入图片描述

有问题就会有解决方法,如何解决该碰撞问题呢?
【碰撞机制】采用延迟发送
在这里插入图片描述
【网卡工作模式】正常模式与复杂模式
正常模式就是不是发送给自己的报文直接丢弃。
复杂模式就是不是发送给自己的报文不会直接丢弃。
【安全问题】

在这里插入图片描述

六.交换机

在这里插入图片描述

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

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

相关文章

【教学类-34-01】20240130纸尺1.0 (A4横版5条,刻度25*5=125CM)

作品展示: 背景需求: 大3班一位孩子用“骰子统计纸”制作了一个身高刻度表 【教学类-40-01】A4骰子纸模制作1.0(飞机形 5.5CM纸盒骰子1个记录纸1条)(点数是不同的符号图案)-CSDN博客文章浏览阅读160次。【…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下: Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Qt】—— Qt Creator界⾯认识

目录 (一)左边栏 (二)代码编辑区 (三)UI设计界⾯ (四)构建区 (一)左边栏 在编辑模式下,左边竖排的两个窗⼝叫做"边栏"。 ①是项⽬…

指针的深入理解(三)

这一节主要使用复习回调函数, 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序,主要难点在于运用元素个数和字节数以及基地址控制元素的比较: if里面使用了一个判断函数,qsort可以排序任意的数据,原因就是因为可…

立体边界,让arcgis出图更酷炫一些

就是这样子的那个图—— 本期我们还是用长沙市为例, 来手把手的演示制作立体边界, 就是这个样子的边界—— 第一步—准备底图 其实你准备什么底图都可以哈,例如调用天地图、下载个影像图,或者用其他什么的底图,都是…

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

【数据结构】(分治策略)中位数的查询和最接近点对问题

中位数查询: 寻找一组字符串中第k小的数,返回其值和下标。 不可以有重复值(在缩小规模的时候,会导致程序死循环) 相对位置的转换体现了分治策略的思想。> 划分函数 int partition(int *nums,int left, int rig…

Unity点乘和叉乘

前言 Unity中经常会用到向量的运算来计算目标的方位&#xff0c;朝向&#xff0c;角度等相关数据&#xff0c;而这些计算中最常用的就是点乘和叉乘 点乘 一、点乘是什么&#xff1f; 定义&#xff1a;ab|a||b|cos<a,b> 【注&#xff1a;小写字母表示向量&#xff0c;&…

精选70套前端数据可视化大屏

分享70款还不错的前端数据可视化大屏源码 其中包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 你可以点击在线预览查看该源码资源的最终展示效果…

第九节HarmonyOS 常用基础组件22-Marquee

1、描述 跑马灯组件&#xff0c;用于滚动展示一段单行文本&#xff0c;仅当文本内容宽度超过跑马灯组件宽度时滚动。 2、接口 Marquee(value:{start:boolean, step?:number, loop?:number, fromStart?: boolean ,src:string}) 3、参数 参数名 参数类型 必填 描述 st…

vue+element 换肤功能

1.首先建深色和浅色两个主题样式变量样式表&#xff0c;样式表名和按钮中传入的值一样&#xff0c;本例中起名为default.scss和dark.scss 2.在data中定义主题变量名 zTheme:‘defalut’&#xff0c;默认引用defalut.scss, 在点击按钮时切换引用的样式表&#xff0c;达到换肤效果…

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置

上一篇&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 目录 1. &#x1f959;Idea中配置Live Templates来快速生成代码片段 2. &#x1f959;Idea中配置文件模板自定义初始代码 3.&#x1f959;设置spark-submit提交程…

微软技术专家带你学 AI|Azure 机器学习:创建自己的模型

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软技术专家带你学 AI 新的一年&#xff0c;为帮助开发者们在 Azure 上掌握人工智能&#xff0c;我们特别带来「微软技术专家带你学 AI」系列&#xff0c;通过4期的课程&#xff0c;带大家从机器学习的…

Kotlin:用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系‘

Kotlin&#xff1a;用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系’ 在这篇文章中&#xff0c;我们将深入研究Kotlin中的StateFlow和SharedFlow&#xff0c;以及它们的相似之处和不同之处。我们将通过查看它们的源代码来理解它们的工作原理&#xff0c;这将帮助我们更…

力扣经典题:用队列表示栈

1. 基本思路&#xff1a;栈具有先入后出的性质&#xff0c;队列具有先入先出的性质&#xff0c;所以栈的栈顶元素就是队的队尾元素&#xff0c;第二个函数要求移除并返回栈顶元素&#xff0c;要满足两个要求&#xff1a;其一是要保证除栈顶外的其它元素可查&#xff0c;二是要…

nodejs+vue+ElementUi高校创业项目申报系统w6f1g

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

泰迪智能科技大模型微调项目训练营已开营

泰迪智能科技大模型微调项目训练营开营 跟张良均老师学大数据人工智能 项目一&#xff1a;医疗诊疗对话意图识别 项目二&#xff1a;中医问答系统 项目三&#xff1a;某平台股票评论情感识别 学习流程&#xff1a; 项目一&#xff1a;医疗诊疗对话…

github单文件下载——DownGit

记录一下一个好用的网站&#xff0c;支持github中某一特定文件夹下文件的下载 选择一个合适的梯子&#xff0c;访问Downgit网址 https://minhaskamal.github.io/DownGit/#/home 将所需网站连接粘贴到这里&#xff0c;点击download即可

【软考设计师笔记】计算机系统基础知识

&#x1f413; 计算机系统组成 计算机系统是由硬件和软件组成的&#xff0c;它们协同工作来运行程序。计算机的基本硬件系统由 运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成 在一起统称为中央处理单元&#xff08;Central Processing …

第8章 python深度学习——波斯美女

第8章 生成式深度学习 本章包括以下内容&#xff1a; 使用 LSTM 生成文本 实现 DeepDream 实现神经风格迁移 变分自编码器 了解生成式对抗网络 人工智能模拟人类思维过程的可能性&#xff0c;并不局限于被动性任务&#xff08;比如目标识别&#xff09;和大多数反应性任…