【Linux网络编程】Socket编程:协议理论入门
前言
首先,在学习Socket编程之前,我们应该了解关于网络的一些基本概念,虽然说没有这些理论概念并不影响编程,但是以后工作时扯扯皮还是有用的。而且,一个开发网络程序的人不知道网络领域的一些基本概念,这说不过去。
然后,介绍一下什么是Socket编程,显然,在Linux文件分类时,socket是文件类型的一种,叫做套接字文件,套接字文件主要是用于网络通信使用的。
如果是在本机,也就是同一台电脑上,我们可以使用进程间通信,如:文件、管道、消息队列等,让两个程序进行数据的交换。但是如果是两台电脑,我们就没法使用这些途径进行数据的交互了。此时网络通信就应运而生,而且,现在除了一些譬如单机游戏下载到本地直接使用的软件,其它很多app全部都需要使用网络通信。
但是,为了通信,双方得互相理解。比如:A的认知里红色就是红色,但是在红绿色盲B的认知里就不是的。AB理解不了对方,那么就没法进行正常的沟通,此时就需要制作一定的规则,让它们两个能正常交流。
所以,网络第一篇:协议!
协议的基本概念
协议:本质就是一组规则,用来规定传输方和接收方,对数据格式以及传输格式的约束。
例如,现在有一个协议:
传过来的数据中,传输方必须先传输一个“消息长度”信息给对方;而接收方,此时也必须将这次的数据解析为“消息长度”,并且准备好接收这么长的数据。
接下来,传输方必须传输一个“消息类型”信息给对方;而接收方,此时也必须将这次的数据解析为“消息类型”,并且判断这个消息类型是什么,并作出相应的处理。
最后,传输方必须传输一个“消息内容”信息给对方;而接收方,此时就必须将这次的数据解析为“消息内容”,并且根据决定好的处理,来处理这段数据内容。
除了对这个传输过程的规定,传输的数据、内容的格式也要遵循一定的协议,例如:Json格式消息内容、XML格式的消息内容等等
仅仅用于两者之间通信的协议被称为原始协议,当这个协议被更多的人知道、使用、不断增加改进维护完善,那么最终会形成一个稳定的,完整的协议,被广泛的应用于各通信过程中。这个协议就称为一个标准协议。
我们常见的TCP协议、UDP协议、HTTP协议就是标准协议。
思考:
a)如果A端采用TCP协议,而B端采用UDP协议,那么AB能通信吗?【不能】
b)为什么不能?它们不都遵循协议规则了嘛?【因为只有遵循同种规则的双方才能通信】
eg. 举个栗子:A是火星人,火星文;B是地球人,说本土语言。A、B能交流吗?显然不行,要么专门为两者指定各自配备翻译器,要么让其中一方换成对方的语言进行交流。
典型协议介绍
网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制。但网络协议不是一套单独的软件,它融合于其它所有软件系统中,因此,协议在网络中随处可见。从顶层软件,到底层硬件,每一层都遵循一定的协议规则。
TCP:Transmission Control Protocol,传输控制协议。是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP:User Datagram Protocol,用户数据报协议。是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
HTTP:Hyper Text Transfer Protocol,超文本传输协议。是互联网上应用最为广泛的网络协议。
FTP:File Transfer Protocol,文件传输协议。早期的邮件传输就是采用该协议。
IP:Internet Protocol,因特网互联协议。
ICMP:Internet Control Message Protocol,因特网控制报文协议。是TCP/IP协议族的一个子协议,用于IP主机、路由器之间传递控制消息。
IGMP:Internet Group Management Protocol,因特网组管理协议。因特网协议家族中的一个组播协议,该协议运行在主机和组播路由器之间。
ARP:Address Resolution Protocol,正向地址解释协议。通过已知的IP,寻找对应主机的MAC地址【媒体访问控制地址,也称为LAN局域网地址】
RARP:反向地址转换协议。通过MAC地址确定IP地址。
对于普通用户而言,不需要关心太多的底层通信协议,只需要了解其通信原理即可。在实际管理中,底层通信协议一般会自动工作,不要人工干预。但对于第三层以上的协议就经常需要人工 干预了,比如:TCP/IP协议等。
提到这里,那就免不了要将网络通信划分为几个层次:
分层模型
最标准的莫过于OSI(Open System Interconnection)七层模型了。
首先将七层模型给出来:【物数网传会表应】
分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
附图:
《了解内容》
⚪物理层:负责处理物理介质上的信号传输。该层协议定义了物理设备的电气、机械、功能、规程特性,确保数据能够在物理介质上进行传输。
⚪数据链路层:负责将物理层的信号转化为数据帧,并进行错误检测与纠正。该层还负责在相邻节点之间进行数据帧的传输和流量控制,确保数据的可靠传输。
⚪网络层:负责将数据从源节点传输到目标节点,通过路由选择算法确定数据传输的路径。他还处理网络地址、子网划分等问题。实现不同网络之间的互联。
⚪传输层:为应用程序提供端到端的通信服务,确保数据的可靠传输和顺序交付。它通过端口号来区分不同的应用程序,并提供流量控制,差错控制等功能。
⚪会话层:负责建立、维护和管理会话,在不同主机上的应用程序之间进行会话同步和协调。它还提供了会话恢复、会话终止等功能。
⚪表示层:对数据进行转换、加密和解密、压缩与解压等处理,确保不同系统之间能够正确地理解和处理数据。
⚪应用层:直接为用户提供服务,包括各种网络应用程序,如HTTP协议、SMTP协议、DNS域名系统等。
但是这么分实在是太细了,很多协议模型在实现时,都不会一一遵循这个参考模型。我们常用的是TCP/IP的四层模型。
一样的,先给出四层模型:【链网传应】
分别是:链路层、网络层、传输层、应用层。
(链路层也成为网络接口层,是底层为网络层提供接口的层)
下面给出TCP/IP模型以及对照的OSI参考模型:

我们可以看到,TCP/IP四层模型是将OSI七层模型的:
应用层、表示层、会话层归为了应用层;传输层对应传输层;网络层对应网络层;链路层对应了数据链路层与物理层。
《下面给出各层需要了解的一些协议》
应用层:HTTP协议;ftp、nfs、ssh、telent......
传输层:TCP协议、UDP协议;......
网络层:IP协议;ICMP协议、IGMP协议......
链路层:以太网帧协议、ARP协议、RARP协议......
【终点掌握红色部分的协议、其次了解橙色部分的协议、最后拓展其它协议】
分层的意义:解耦
通信过程解析【简易】
我们实际开发中常用的就是TCP/IP协议,那么我们就以四层模型来进行通信过程的解析。
以两台主机为例:
左侧为HostA,右侧为HostB。现在假设主机A要发送一封邮箱到主机B。
那么在主机A的应用层,将数据写到邮件里了。这个邮件会把要传输的数据Data封装为Data_v1。到传输层时,传输层的协议就会把这个数据进行封装,得到数据Data_v2,到了网络层,网络层的协议会把Data_v2封装成Data_v3,然后来到链路层,数据又封装一层Data_v4。最后将Data_v4这个数据转化为电气特性(例如:0-1串 转化为 强弱电信号,这个过程也称为数模转换)经过光纤等介质传输到网络环境中,经过路由算法,找到目标机器的地址,然后将数据传过去。
当数据传输到主机B上时,在主机B遵循与A同一套协议的情况下, 就可以将电气特性转化为数据Data_v4(如将 强弱电信号转换为01串,这个过程也成为模数转换),这些数据来到了主机B的链路层,根据协议,将对方的数据解析出来得到Data_v3,经过网络层、传输层,依次解析出Data_v2,和Data_v1,来到应用层解析Data_v1得到了Data,这个Data就是主机B收到的最终数据,此时,邮件就发送到主机B了。
过程如图所示:
这个过程中的数据变化简单来讲就像图中所示,每次封装都会增加一次报头head。具体来讲,就跟每个协议的格式有关了,后文会有提及。
首先,我们将上述的过程中的数据变化过程中的数据变化列出来:
如图所示:
其中Appl首部可以是遵循一定的格式,也可以是自定义数据格式。
以太网帧协议格式
对于上述的这段内容,我们可能想知道,为什么就这么确定每段的长度就那么多?下面就解惑了:
1. 以太网尾部由一个循环冗余校验码CRC构成,一个int整型大小,4字节。
2. 以太网首部由目的地址、源地址、类型三部分构成:目的地址和源地址各占6字节,类型占2字节。
《为什么是 6 ?》
因为这个地址是MAC地址,下面是百度百科给的MAC地址定义:
MAC地址由48位二进制数(6个字节)组成,通常表示为12位十六进制数 [9],格式为XX-XX-XX-XX-XX-XX [8]。 如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由 IEEE (电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品 (如网卡)的系列号。
3. 为什么数据格式至少要有46字节?其中28字节代表ARP请求/应答,或者RARP请求/应答;18字节代表PAD。
以太网帧数据格式:示意图↘
这块大家可以自己了解一下,涉及到接近硬件的知识(ARP、RARP协议)等内容。对于我而言,只了解到大概的有这么个格式。
感谢大家!!
相关文章:
【Linux网络编程】Socket编程:协议理论入门
前言 首先,在学习Socket编程之前,我们应该了解关于网络的一些基本概念,虽然说没有这些理论概念并不影响编程,但是以后工作时扯扯皮还是有用的。而且,一个开发网络程序的人不知道网络领域的一些基本概念,这说…...
Redis——缓存雪崩、击穿、穿透
缓存雪崩 大量缓存数据在同一时间过期或者Redis故障宕机时,若此时有大量请求,都会直接访问到数据库,导致数据库压力倍增甚至宕机。 大量数据同时过期解决方案: 1、均匀设置过期时间: 设置过期时间的时候可以追加一…...
基于QT和FFmpeg实现自己的视频播放器FFMediaPlayer(一)——项目总览
在音视频开发的学习过程中,开发一款视频播放器是FFmpeg进阶的最好实战方法。本文将基于 QT 和 FFmpeg 着手实现自定义视频播放器 FFMediaPlayer,作为系列文章的开篇,我们先来整体了解项目的设计思路、架构与配置。 一、软件设计五大原则 …...
panda机械臂的正逆运动学分析与仿真
文章目录 前言Panda机械臂的DH参数法建模正运动学逆运动学误差函数雅可比矩阵高斯-牛顿法(Gauss-Newton) 参考代码获取 前言 机械臂的位置运动学分析是机器人控制与轨迹规划的核心基础,其研究内容主要分为正运动学(Forward Kinem…...
网络切片:给用户体验做“私人定制”的秘密武器
网络切片:给用户体验做“私人定制”的秘密武器 咱们平时用手机上网、看视频、玩游戏,网络体验好不好,一半都靠运营商给的网络质量。可你有没有想过,为什么同一张网络,有的人能流畅刷视频,有的人却卡得要命?这其实就是网络资源分配的问题——不同应用、不同用户的需求差异…...
HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析
HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析 引言 随着华为鸿蒙操作系统(HarmonyOS)生态的快速发展,越来越多的开发者希望将自己的应用上架到鸿蒙应用市场。本文将详细介绍鸿蒙应用上架的全流程,帮助开发者顺…...
大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景 1.2 研究目的与意义 二、腰椎间盘突出症概述 2.1 定义与病因 2.2 症状与诊断方法 2.3 治疗方法概述 三、大模型技术原理与应用基础 3.1 大模型的基本原理 3.2 大模型在医疗领域的应用现状 3.3 用于腰椎间盘突出症预测的可行性分析 四、…...
【漫话机器学习系列】264.内距(又称四分位差)Interquartile Range
深入理解内距(Interquartile Range,IQR)——数据分析中的异常值利器 在日常的数据分析中,我们经常需要识别和处理异常值(Outliers),而内距(Interquartile Range,简称 IQR…...
高并发内存池|定长内存池的设计
二、定长内存池的设计 设计一个定长的内存池,这个内存池的定长在于,当剩余空间使用完毕后,总是开辟相同长度的新空间来使用。我们会使用到一个指针来切割划分大空间为小空间。大空间是内存池向系统申请的内存大小,而小空间是程序…...
STM32外设DA实战-DAC + DMA 输出正弦波
STM32外设DA实战-DAC DMA 输出正弦波模板 一,方法思路二,CubeMX配置三,代码实现1,生成正弦波查找表2,代码实现 一,方法思路 DAC 的一个常见应用是产生任意波形,比如平滑的正弦波。如果让 CPU …...
【React Fiber 架构详解】
React Fiber 架构详解 React Fiber 是 React 16 引入的核心协调算法重构,旨在解决传统同步渲染的性能瓶颈,提升用户体验。其核心在于将渲染任务拆解为可中断、优先级可控的增量单元,并通过链表数据结构优化调度流程。以下是其核心原理与工作机制的详细解析: 一、Fiber 的起…...
UDP的单播组播与广播
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、基于IP的传输层协议,它提供了简单的、不可靠的数据报服务。UDP支持三种主要的通信方式:单播、组播和广播。 1. UDP 单播(Unicast)…...
上集:一个前端的血泪复仇记 —— 静态部署的胜利
“我只是想部署一个小项目,结果干翻了Spring Security、Next.js 和 AI —— 三个加起来至少值我两天命。” 话说有一天,我朋友搭了一个小系统,前后端分离,说大不大,说小不小。后端Spring Boot 3.4.5,前端Ne…...
网络流量分析 | Zeek(上)
介绍 Zeek 是一个开源且商用的网络监控和流量分析工具,许多的运维人员将 Zeek 作为网络安全监控器(Network Security Monitor,NSM),以支持可疑或恶意活动的调查。在安全领域之外,Zeek 还可被用于各种流量分…...
Unity3D仿星露谷物语开发44之收集农作物
1、目标 在土地中挖掘后,洒下种子后逐渐成长,然后使用篮子收集成熟后的农作物,工具栏中也会相应地增加该农作物。 2、修改CropStandard的参数 Assets -> Prefabs -> Crop下的CropStandard,修改其Box Collider 2D的Size(Y…...
AUTOSAR图解==>AUTOSAR_SRS_WatchdogDriver
AUTOSAR 看门狗驱动 (Watchdog Driver) 详解 AUTOSAR基础软件模块之看门狗驱动技术分析 目录 概述 1.1 看门狗驱动的作用 1.2 适用范围架构设计 2.1 总体架构 2.2 内部结构 2.3 接口设计功能实现 3.1 初始化和模式切换 3.2 状态管理 3.3 外部看门狗支持配置参数 4.1 核心配置项…...
Fidder基本操作
1.抓取https请求 Fidder默认不能抓取https请求,我们必须通过相应的设置才能抓取https请求 1.选择tools下的option 2.选择https选项,并且勾选下面的选项 3.点击Actions导出信任证书到桌面(expert root certificate to desktop) 4.在浏览器中添加对应的证…...
在线教育本地化分发:代理IP实现区域访问控制与内容适配
在在线教育本地化分发场景中,代理IP通过地理精准识别、动态内容适配与合规访问控制,成为突破区域限制、提升用户体验的核心技术工具。以下是基于2025年技术实践的解决方案: 一、区域访问控制的核心机制 地理IP库匹配与白名单策略 通过代理IP的…...
JAVA的常见API文档(上)
游戏打包 注意API文档中的方法不需要记忆!! 了解之后如果需要可以查询API文档 对Math的方法总结: 运用刚学的Math方法加快代码的运行效率 可以减少循环次数 找规律: 发现因子有规律: 必定一个大于平方根,…...
【数据结构】_二叉树
1.二叉树链式结构的实现 1.1 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树&#x…...
ALIENTEK精英STM32F103开发板 实验0测试程序详解
#include "sys.h" #include "usart.h" #include "delay.h" //ALIENTEK精英STM32F103开发板 实验0 //新建工程 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 int main(void) { u8 t0; //见注释1 St…...
LeetCode 33. 搜索旋转排序数组:二分查找的边界艺术
文章目录 问题描述解决思路代码实现关键点解析1. 为什么用 nums[left] < nums[mid]?2. 示例分析案例 1:数组 [3, 1],目标值 1案例 2:数组 [5],目标值 5 边界条件处理1. 单元素数组2. 完全有序数组3. 严格递增与重复…...
Rust 学习笔记:关于 HashMap 的练习题
Rust 学习笔记:关于 HashMap 的练习题 Rust 学习笔记:关于 HashMap 的练习题以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是? Rust 学习笔记:关于 …...
(头歌作业)—6.1 葡萄酒评论分析报告(project)
第1关:葡萄酒评论分析报告——国家列表和平均分 任务描述 本关任务:编写程序,多维度分析葡萄酒数据。 相关知识 葡萄酒评论分析报告描述 winemag-data.csv 文件 winemag-data.csv 包含 编号、国家、描述、评分、价格、省份 等 6列 和12974…...
下集:一条打包到底的静态部署之路
说完坑,再来讲正经操作。 这次我决定写得明明白白,清清楚楚,把那条“Spring Boot 扛着 Next.js 上线”的路子掰碎了揉细了告诉你。 无废话、无迷信、无AI幻觉。 第一步:Next.js 静态导出 项目根目录下的 next.config.js 要写得…...
多商户商城系统源码解析:开发直播电商APP的技术底层实战详解
随着直播电商的火爆,越来越多的创业者和企业都在寻求打造自己的多商户商城系统,以实现“人、货、场”三者的深度融合。然而,从一个简单的电商平台到一个功能完善的直播电商APP,其技术底层架构和实现过程并非一蹴而就。本文将从架构…...
每日Prompt:生成自拍照
提示词 帮我生成一张图片:图片风格为「人像摄影」,请你画一张及其平凡无奇的iPhone对镜自拍照,主角是穿着JK风格cos服的可爱女孩,在自己精心布置的可按风格的房间内的落地镜前用后置摄像头随手一拍的快照。照片开启了闪光灯&…...
LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
LeetCode 热题 100_寻找重复数(100_287_中等_C) 题目描述:输入输出样例:题解:解题思路:思路一(暴力解法):思路二(哈希集合):思路三&am…...
多模态学习(三)—— ROPE位置编码:从理论到实践
ROPE位置编码:从理论到LLaMA的实践 一、前言 ROPE(Rotary Positional Embedding,旋转位置编码)是一种通过旋转矩阵将位置信息融入Token Embedding的编码方法。相比传统Transformer的绝对位置编码,ROPE能更灵活地建模…...
Redis——过期删除策略和内存
过期删除策略 Redis可以对key设置过期时间,因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中,可以用presist命令取消key过期时间 过期字典存储在redisDb结构中: typedef struct redisDb {dict *dict; …...
Selenium无法定位元素的几种解决方案详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法: …...
开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析
👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-encoders.pyblocks.py: 定义模型中的各…...
Bitmap原理及Hive去重方式对比
1. 什么是 Bitmap? Bitmap(位图)是一种用位(bit)来表示数据集合的数据结构。每个位代表一个元素是否存在,比如: 一个长度为N的bitmap,每一位对应一个元素的状态(0或1&a…...
力扣-比特位计数(统计一个数二进制下1的个数)
下面是题面 1.用c的内置函数__builtin_popcount() 语法:__builtin_popcount(int x),函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法,写法也很简单 用一个while循环…...
开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析
👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-decoders.pyblocks.py: 定义模型中的各…...
Python训练营打卡Day28
浙大疏锦行 DAY 28 类的定义和方法 知识点回顾: 1.类的定义 2.pass占位语句 3.类的初始化方法 4.类的普通方法 5.类的继承:属性的继承、方法的继承 作业 题目1:定义圆(Circle)类 要求: 1.包含属性&#x…...
【前端基础】HTML元素隐藏的四个方法(display设置为none、visibikity设置为hidden、rgba设置颜色、opacity设置透明度)
HTML元素隐藏的四个方法 1、display设置为none 元素不显示出来。不占位置,也没有任何空间。就不存在一样。 2、visibility设置为hidden 默认:visible。元素可见设置为hidden:元素不可见,但是会占据这个元素应该占用的空间。 3、…...
STM32中的DMA
DMA介绍 什么是DMA? DMA(Direct Memory Access,直接存储器访问)提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存…...
小型气象站应用之鱼塘养殖方案
概述 "看天吃饭",在农村经常听到这句话,鱼塘也不例外。天气的急剧变化,或连续的不利天气都有可能造成鱼类"浮头",甚至"翻肚子",更甚至"翻塘",一年白忙活了。 鱼塘…...
Makefile变量冲突与包含关系解析
Nuttx makefile每层独立,除非显示的通过include的方式包含。 Makefile调试技巧 打印变量 $(info CSRCS$(CSRCS))查看变量赋值过程 make --debugv在 Makefile 中,变量的作用域和可见性取决于 包含关系(include) 和 递归调用&…...
2025/517学习
对离群值怎么操作。这个就是拟合操作的。用更弯曲的曲线去拟合,如常见函数log 多元回归和单元回归 如题,如果我有多个自变量,来对一个因变量进行OLS回归,有没有operator可以做到?(ts_regression似乎只支持一个…...
浅谈前端架构设计与工程化
引言 在当今快速发展的Web开发领域,前端已经从简单的页面展示演变为复杂的应用程序开发。随着项目规模的扩大和团队协作的需求增加,良好的前端架构设计和工程化实践变得至关重要。本文将探讨如何构建可维护、可扩展的前端架构,并介绍现代前端…...
JMeter 教程:编写 POST 请求脚本访问百度
目录 ✅ 教程目的 🛠️ 环境要求 📄 实操步骤 第一步:启动 JMeter 第二步:添加测试计划和线程组 1.右键左侧 Test Plan(测试计划) 2.选择 Add → Threads (Users) → Thread Group(线程组…...
Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)
TypeScript 函数语法知识点及案例代码 TypeScript 提供了丰富的函数语法特性,使得函数定义更加灵活和强大。以下将详细介绍 TypeScript 中函数的相关语法,包括函数定义、可选参数、默认参数、剩余参数、重载函数、递归函数、匿名函数、箭头函数以及回调…...
【51单片机定时器/计数器】
目录 简介 定时器配置流程 1.配置定时器工作方式寄存器TMOD 2.配置中断寄存器TCON 3.定时时间计算公式 4.配置中断允许寄存器IE 5.使用中断函数完成中断 简介 定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频&…...
Oracle 的 ASSM 表空间
Oracle 的 ASSM(Automatic Segment Space Management)表空间 是一种自动管理段空间的技术,通过位图(Bitmap)机制跟踪数据块的使用情况,替代传统的手动管理(MSSM,即 Freelist 管理&am…...
C++学习:六个月从基础到就业——C++11/14:auto类型推导
C学习:六个月从基础到就业——C11/14:auto类型推导 本文是我C学习之旅系列的第四十一篇技术文章,也是第三阶段"现代C特性"的第三篇,主要介绍C11/14中的auto类型推导机制。查看完整系列目录了解更多内容。 引言 在现代C…...
select语句的书写顺序
一.MySQL SELECT语句的执行顺序 MySQL中SELECT语句的执行顺序与SQL语句的书写顺序不同,理解这个执行顺序对于编写高效查询非常重要。 1.标准SELECT语句的执行顺序 FROM子句(包括JOIN操作) 首先确定数据来源表执行表连接操作 WHERE子句 对F…...
OpenWebUI新突破,MCPO框架解锁MCP工具新玩法
大家好,Open WebUI 迎来重要更新,现已正式支持 MCP 工具服务器,但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理,经测试,它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具ÿ…...
【Day28】
总结: Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句,并且后面跟着冒号 : 时,它就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果它没有找到任何缩进的语句(即代码块是空的&am…...