【Linux网络编程一】网络基础1(网络框架)
【Linux网络编程一】网络基础1(网络框架)
- 一.什么是协议
- 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】什么叫分用?
对端主机的协议层接收到报文后,需要解析报文(分离报头和有效载荷)将有效载荷往上层协议发送,而它怎么知道发送上层的哪一个协议呢?每一层协议栈都会有许多协议存在,那么应该发送给上一层的哪一个协议呢?
所以几乎所有的协议,都要在报头中提供,将自己的有效载荷交付给上层哪一个协议的能力!这个能力就叫分用。
【结论】:
数据包封装和分用
1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链
路层叫做帧(frame).
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation).
3.首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议
字段” 将数据交给对应的上层协议处理.
2.正确看待局域网
局域网就一个网络,而网络就是一个文件,主机之间通信就是进程之间通信,进程之间通过网络进行通信,所以网络就是一个共享资源,并且要求是互斥访问该资源。
五.以太网下是如何通信的
我们知道报文在传递到链路层时,是根据以太网协议与对端链路层进行通信的。那么具体在以太网下是如何通信的呢?
【前提知识】 在局域网中,每台主机都会有一个唯一标识自己的标志–>Mac地址/ip地址,所以每台主机都是可以识别对方是谁的。
在局域网当中,发送一条消息,会被局域网内的所有主机接收到,也就是消息首先会贯穿协议栈,经历封装添加报头,到达数据链路层,最后在网卡硬件层面接收到。而对端网卡接收到数据是通过以太网接收到的。
以太网下数据是如何传输的呢?是如何通信的呢?
1.每台主机都有唯一的标识,所以A主机要发送消息给B主机,A主机是需要知道B主机的Mac地址的(消息贯穿A主机的协议栈到达数据链路层,在报头中是存储着B主机的Mac地址的)
2.首先在局域网当中所有的主机都会接收到报文(在逻辑上,每一层协议直接通信,也就是在链路层收到消息。A主机数据链路层通过以太网将报文发送给各主机的的数据链路层)。
3.而其他主机的数据链路层一旦接收到报文,就会进程报头分离解析,根据标识每台主机的ip地址发现不是发送给自己的,就会将报文直接丢弃。
4.如果发现是发送给自己的,就会将有效载荷发送给上一层协议。
1.碰撞域
往局域网当中发送一条消息,该局域网下的所有主机都会收到,而多台主机同时往局域网中发送消息,那么这些消息就会发送碰撞,发生丢失,而发生碰撞的地方就称为碰撞域,所以以太网是基于碰撞域形成的。
所以以太网下通信是会存在数据碰撞问题的。
有问题就会有解决方法,如何解决该碰撞问题呢?
【碰撞机制】采用延迟发送
【网卡工作模式】正常模式与复杂模式
正常模式就是不是发送给自己的报文直接丢弃。
复杂模式就是不是发送给自己的报文不会直接丢弃。
【安全问题】
六.交换机
相关文章:

【Linux网络编程一】网络基础1(网络框架)
【Linux网络编程一】网络基础1(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…...

springboot156基于SpringBoot+Vue的常规应急物资管理系统
基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…...
学习MySQL的MyISAM存储引擎
学习MySQL的MyISAM存储引擎 MySQL的MyISAM存储引擎是MySQL早期版本中默认的存储引擎,后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性,如事务处理、行级锁定和外键支持,MyISAM仍然因其简单性、高性能以及对全文搜索的支持而被广…...
nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解
tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…...

前端vue/react项目压缩图片工具@yireen/squoosh-browser
想要在前端项目中压缩图片,然后再上传到后端保存,就需要一个压缩工具的帮助,暂时有两个依赖库可以选择:image-conversion和yireen/squoosh-browser,看了官方仓库地址和更新时间等详情,发现还是yireen/squoo…...
悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG
daterangepicker有两个BUG: 1、startDate和endDate对设置默认日期没有问题,但对设置默认时间的支持有BUG!比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点,则设置的时间8:20因为比…...

composer常用命令
查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g,即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后,会读取当…...

2024年1月27日~2月2日周报
一、前言 上周主要完成了SeisInvNet加强版论文的阅读,并尝试跑了一下代码。 本周阅读师兄的论文《DD-Net》,并尝试思考新的点子修改网络架构。 二、DD-Net阅读情况 标题:Dual decoder network with curriculumlearning for full waveform in…...
红黑树,以及其在C++的set、map等数据结构中应用
红黑树介绍: 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在插入和删除操作后通过一系列的旋转和着色操作来维持平衡。红黑树的命名来自于节点上的额外颜色属性,每个节点要么是红色,要么是黑色。 红…...

C++(11)——内存管理
C内存分布 我们先看一段代码以及相关问题。 这道题的答案是多少呢? 答案在这里哦,看一下有没有问题呀。如果这么简单的题做错了,怕不是要被电击一下。 C内存管理方式 我们知道C语言中动态内存管理的方式是 malloc realloc calloc free 这几…...

《C++ Primer Plus》《3、数据处理》
文章目录 0 前言1 简单变量1.1变量名1.2整型1.3整型short,int,long和long long1.4无符号类型1.5选择整型类型1.6整型字面值1.7C如何确定常量的类型1.8char类型:字符和小整数1.9bool类型 2 cost限定符3浮点数3.1书写浮点数3.2浮点类型3.3浮点常量3.4浮点数的优缺点 4…...

Java 正则匹配sql
文章目录 正则匹配sql表名称insert intoupdate 正则表达式什么时候要加^$ 在线正则校验 正则匹配sql表名称 insert into insert into PING_TABLE (CODE, NAME) VALUES(0, 待提交),(1, 审核中),(2, 审核通过),(3, 已驳回); regex -> insert\sinto\s(\w)\s*\(?update upda…...
服务器入门
入门服务器管理涉及到一系列基础概念和技能,这包括操作系统、网络配置、安全性、远程访问等。以下是一些建议,可以帮助你开始学习服务器管理: ### 1. **选择合适的操作系统:** - 大多数服务器使用 Linux 操作系统,…...

云端录制直播流视频,上传云盘
前言 哪一天我心血来潮,想把我儿子学校的摄像头视频流录制下来,并保存到云盘上,这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干,当时花了一些时间开发了一个后端服务,通过数据库配置录制参数,…...

【靶场实战】Pikachu靶场XSS跨站脚本关卡详解
Nx01 系统介绍 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 Nx02 XSS跨站脚本概述 Cross-Site Scripting 简称为“CSS”ÿ…...

蓝桥杯每日一题-----数位dp
前言 今天浅谈一下数位dp的板子,我最初接触到数位dp的时候,感觉数位dp老难了,一直不敢写,最近重新看了一些数位dp,发现没有想象中那么难,把板子搞会了,变通也会变的灵活的多! 引入…...

sklearn 计算 tfidf 得到每个词分数
from sklearn.feature_extraction.text import TfidfVectorizer# 语料库 可以换为其它同样形式的单词 corpus [list(range(-5, 5)),list(range(-6,4)),list(range(12)),list(range(13))]# corpus [ # [Two, wrongs, don\t, make, a, right, .], # [The, pen, is, might…...

Qt拖拽事件,实现控件内项的相互拖拽
文章目录 1拖拽演示2 步骤3 实现 这里主要以QTableview控件为例,实现表格内数据的相互拖拽。 1拖拽演示 2 步骤 自定以QTableView类,在自定义类中重写拖拽事件: void dropEvent(QDropEvent *event); void dragEnterEvent(QDragEnterEvent *…...

基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道 相关链接 OFDM中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频…...

Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁
概述 在《20.Redis原子操作》我们提到了应对并发问题时,除了原子操作,还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保证数据的正确性。 但是,Redis 属于分布式系统,当有多个客户端需要争…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...