【网络原理】IP协议
目录
编辑
一. IP协议的作用
二. IP协议报头
三. 拆包和组包
四. 地址管理
1)动态分配IP地址
2)NAT机制(网络地址映射)
3) IPV6
五. IP转换
1)客户端到服务器
2)服务器到客户端
六. 网段划分
七. 路由选择
一. IP协议的作用
1)地址标识和寻址
使用一套地址体系,为每一个网络设备分配唯一的IP地址,这里的网络设备不仅是路由器,服务器,交换机,电脑,手机都会有独一无二的IP地址
2)路由选择
IP协议应用于网络层,关注具体的传播路径 ,路由器会根据IP地址和路由表,动态规划出数据包的最佳路径
二. IP协议报头
这里介绍的IP协议报头是IPv4报头
(1)4位版本号
标识IP协议版本,IPv4为4
,IPv6为6
。
(2)4位首部长度
这里的单位是4字节,不包含选项是20字节,最大为60字节
(3)8位服务类型TOS(type of service)
这里只有4位有效,这4位彼此之间相互冲突,只能有1位为1,其余3位只能为0
这四位分别是:最小延时,最大吞吐量,最高可靠性,最小成本(硬件设备开销)
(4)16位总长度
描述一个IP数据包的总长度(报头+载荷)最大为65535字节。
(5)16位标识
唯一标识一个数据包。若数据包被分片,所有分片共享同一标识,用于重组。
(6)3位标志
控制分片行为
- Bit 0:保留位(必须为0)。
- Bit 1(DF, Don't Fragment):若为
1
,禁止路由器分片(若数据包超过MTU则丢弃)。 - Bit 2(MF, More Fragments):若为
1
,表示后续还有分片;若为0
,表示这是最后一个分片。
(7)13位片偏移
描述包的先后顺序,当前分片在原数据包中的位置
(8)8位生存时间(TTL)
这里的生存时间不是s和ms,而是次数,一个IP数据包,每经过一个路由器转发,TTL就会-1
如果这个数值变成了0,则会直接丢弃,这样的目的是防止一个数据包无限转发下去
(9)8位协议
这个表示在传输层使用了那种协议
(10)16位首部校验和
这里的校验只是针对IP首部,对于载荷部分,在传输层会校验
(11)32位源IP地址和32位目的IP地址
表示了发件人和收件人的地址
三. 拆包和组包
1. 拆包
为什么要拆包?
- 根据IP协议的报头,IP数据包最大的长度为65535字节,传输层如果传输的数据很有可能超过这个大小,那么IP协议这一层就会将这个很大的数据拆分为多个IP数据包,每个IP数据包会携带载荷的一部分
- 数据链路层每次最大传输数据量也存在限制
像这样的拆包行为,由IP自动完成,在操作系统内核会自己实现 这里的拆包主要是因为数据链路层限制
2. 组包
如何组包?
这里主要依靠标志,标志和片偏移
- 16位标志用于表示那些IP数据包应该放在一起
- 3位标志只有两位有效位,分别表示这个数据包是不是拆包得到的,这个数据包是不是最后一个数据包
- 13位片偏移描述这些包之间的先后顺序
这三个少一个都不行,缺少一个都不能实现组包功能
四. 地址管理
IP协议本质上就是一个32位整数,可以表示的数据范围是0~42亿9千万
IP地址存在的意义就是为了能够区分网络上的不同设备,希望每一个网络设备都有唯一的IP地址
- 42亿9千万的IP地址,看上去很多,其实不够用,全世界有80亿人,每个手机都分配一个IP地址,更何况一个人可能有多个手机,更何况很多个路由器也需要分配地址
如何解决IP地址不够用的问题?
1)动态分配IP地址
全世界的网络设备,并不是同一时刻都在上网,给正在上网的网络设备分配IP地址
2)NAT机制(网络地址映射)
将IP地址分为了两类:私网IP/公网IP
- 私网IP:IP地址10.*, 172.16-172.31, 192.168.*
- 公网IP:除了私网剩下的都是公网
公网的设备和IP地址都是唯一的,不可以重复
私网的设备和IP地址,只需要保证同一个局域网内的IP地址不重复即可,不同局域网之间IP地址可以重复
基于这样的安排,规定了一个限制
- 公网设备访问公网设备,没有问题,直接访问即可
- 局域网设备访问局域网设备(同一个局域网),没有问题
- 局域网设备访问局域网设备(不同局域网),不允许访问
- 局域网访问公网设备,需要对局域网设备进行IP转换
- 公网设备不允许主动访问局域网设备
3) IPV6
IPV4可以表示2^32个地址,大约是43亿
IPv6可以表示2^128个地址,大约是43亿*43亿*43亿*43亿(天文数字)
但是IPv6和IPv4由于报头格式不同,所以不兼容,意味着想要使用IPv4,必须更换支持IPv4的设备
五. IP转换
1)客户端到服务器
路由器一般含有一个WAN口,多个LAN口,路由器至少包含2个IP地址(其中一个为WAN口)
- WAN口:可能是局域网IP地址,也可能是公网IP地址
- LAN口:一个局域网IP地址
数据包经过路由器会进行IP转换,将源IP地址转换为公网IP地址,如果转换为公网IP,那么后续就不需要转换了,服务器收到这个数据包,只会看到这个源IP地址是5.6.7.8,而不是192.168.1.2
这样转换的目的,让一个公网IP地址对应多个设备,从而节省IP地址的数量
2)服务器到客户端
私网访问公网需要进行IP转换,公网将数据如何返回给私网?私网地址怎么获取?
服务器只知道源IP地址为转换的路由器地址,不知道客户端的地址
NAT表:就是一个表格,路由器会记录IP地址转换的过程在NAT表中,记录替换前的IP地址,替换后的IP地址和目的地址等信息
1)一个局域网内,多个设备访问同一个服务器
- 当服务器返回数据包的时候,路由器会根据目的IP和替换后的IP地址,得到替换前的IP地址
- 如果是访问不同服务器,同样也可以根据 目的IP和替换后的IP地址,得到替换前的IP地址
2)一个局域网内,一个设备的多个进程访问同一个服务器
那么NAT表中会包含端口号这个信息,用于区分同一个设备中的进程
3)一个局域网内,多个设备(但是端口号相同)访问同一个服务器
两个主机上面的端口号,重合的概率不是很大,但是也有可能,这时候就可以使用端口号进行区分,路由器会对端口号进行映射
路由器不是工作在网络层吗?为什么可以改变端口号?
路由器并不是一个单纯的网络层设备,也具有传输层功能,所有可以修改端口号
- 局域网内的不同设备, 访问的是不同网站,这个时候直接通过服务器 IP 就能区分.
- 局域网内的同一设备不同进程,如果访问的是同一个服务器, 就可以按照端口号来区分.
- 局域网内的不同设备相同端口号,访问的是同一个服务器, 就可以在路由器这边自动映射成不同的端口进行区分
使用这样的技术,本质上也是提高IP地址的利用率,没有增加IP地址的个数,只是进行了复用,没有从根本上解决问题,现在的互联网就是通过动态规划和NAT结合的方式增加IP地址的使用
六. 网段划分
将一个IP地址进行了划分,划分为两部分:网络号和主机号
- 网络号:标识设备所属的网络,一般通过子网掩码确定
- 主机号:标识网络中的具体设备(同一网络内,主机号必须唯一)
图中,内包含四个局域网,四个不同网络号
- 在同一个局域网中,所有主机的网络号都是相同的,主机号是不同的
- 在同一个局域网内,网络号和主机号相同,无法上网
- 网络号和路由器的网络号不同,无法上网(设备不能通过路由器访问外网,当然也不能访问设备)
- 两个相邻的局域网,网络号不能相同(路由器的两段)
之前的网段划分
这样的划分其实并不好,比如说A类,可以表示的主机数是2^24个设备,但是现实中不存在一个局域网可以包含这么多的设备,浪费了非常多的IP地址
现在的网段划分
现在的网络划分,都是通过子网掩码的方式进行划分,比较节省IP地址
特殊的IP地址
类型 | IPv4/IPv6 | 地址范围/示例 | 用途 |
---|---|---|---|
私有地址 | IPv4 | 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 | 局域网内部使用,不可在公网路由(需NAT转换)。 |
自动私有IP(APIPA) | IPv4 | 169.254.0.0/16 | DHCP失效时自动分配,用于本地临时通信。 |
环回地址 | IPv4 | 127.0.0.0/8 (如127.0.0.1 ) | 测试本机网络服务,数据不离开设备。 |
广播地址 | IPv4 | 255.255.255.255 (受限广播)子网地址.255 (定向广播) | 向本地或特定子网所有设备发送数据。 |
全零地址 | IPv4 | 0.0.0.0 | 表示“任意地址”或默认路由(如服务器监听所有接口)。 |
多播地址 | IPv4 | 224.0.0.0/4 (如224.0.0.5 ) | 一对多通信(视频会议、路由协议)。 |
单播:1对1 组播:1对多(多是整体一部分) 广播:1对多(全部)
七. 路由选择
路由选择是规划一条路线,但是这里的路线具有局限性,一个路由器的路由表是有限的,不可能装进去所有的路由器地址信息,这是掌握一部分局部信息,所有得出来的路线只是一个较优解
探索式路线规划
路由器这种规划路线的方式,可以类比寻路,数据报中的目的IP地址,就类似于问路的目标,由于每个路由器都了解自己相邻的网络设备情况,这时候就可以根据路由器了解的信息,来规划下一步走哪里
路由表
当设备收到一个数据包时,根据目标IP地址查找路由表,决定数据包的转发路径。可以认为路由表是网络通信的“导航地图”
相关文章:
【网络原理】IP协议
目录 编辑 一. IP协议的作用 二. IP协议报头 三. 拆包和组包 四. 地址管理 1)动态分配IP地址 2)NAT机制(网络地址映射) 3) IPV6 五. IP转换 1)客户端到服务器 2)服务器到客户端 六…...
【Python 文件I/O】
Python 的文件 I/O 操作是数据处理的基础技能,涉及文件的读写、路径管理、异常处理等核心功能。以下是文件 I/O 的核心知识点: 一、基础文件操作 1. 打开文件 # 通用模式:r(读)/w(写)/a(追加) b(二进制)/t(文本,默认) f open(…...
torchrun单机多卡运行
torchrun命令使用 torchrun示例 export CUDA_VISIBLE_DEVICES0,1,2 nohup torchrun \--nproc_per_node3 \--nnodes1 \--node_rank0 \--master_addr"127.0.0.1" \--master_port1225 \/data/train.py \--batch_size 32 \--size 320运行如上sh命令发现,即 …...
数据管理平台是什么?企业应如何做好数据化管理?
目录 一、数据管理是什么? 二、数据管理平台有哪些作用? 1. 数据采集与整合 2. 数据清洗与预处理 3. 数据分析与挖掘 4. 数据共享与协作 三、企业应如何做好数据化管理? 1. 建立数据管理战略 2. 完善数据管理制度 3. 培养数据管理人…...
GuassDB如何创建兼容MySQL语法的数据库
GaussDB简介 GaussDB是由华为推出的一款全面支持OLTP和OLAP的分布式关系型数据库管理系统。它采用了分布式架构和高可靠性设计,可以满足大规模数据存储和处理的需求。GaussDB具有高性能、高可靠性和可扩展性等特点,适用于各种复杂的业务场景,…...
Qt国际化实战--精通Qt Linguist工具链
概述 在全球化的今天,软件产品需要支持多种语言和地区,以满足来自世界各地用户的需求。Qt框架提供了一套完整的工具集来帮助开发者实现应用程序的国际化(i18n)和本地化(l10n),其中最核心的就是Qt Linguist工具链 关于国际化与本地化 国际化(i18n): 指的是设计和开发…...
C++内联函数
总结:内联函数是把函数变成一个代码块直接塞入源程序中,省去了一些参数传递和栈操作(省时间),但是同时又增加了代码的大小(因为原本的函数只有会使用指针指向该函数,但是内联函数是直接塞入&…...
26届秋招收割offer指南
26届暑期实习已经陆续启动,这也意味着对于26届的同学们来说,“找工作”已经提上了日程。为了帮助大家更好地准备暑期实习和秋招,本期主要从时间线、学习路线、核心知识点及投递几方面给大家介绍,希望能为大家提供一些实用的建议和…...
Python之内省与反射应用
Python之内省与反射应用 Python作为一门动态语言,具备了强大的内省(Introspection)与反射(Reflection)机制。这两个概念在运行时查看对象的属性、类型、方法等信息,甚至可以动态调用方法或修改对象的属性。…...
第三章:langchain加载word文档构建RAG检索教程(基于FAISS库为例)
文章目录 前言一、载入文档(word)1、文档载入代码2、文档载入数据解读(Docx2txtLoader方法)输入数据输出文本内容 3、Docx2txtLoader底层代码文档读取解读Docx2txtLoader底层源码示例文档读取输出结果 二、文本分割1、文本分割代码…...
球速最快的是哪种球类运动·棒球1号位
在体育运动中,球速最快的项目与棒球结合来看,可以分两个角度解读: 一、球速最快的运动项目 羽毛球以426公里/小时(吉尼斯纪录)的杀球速度位列榜首,远超棒球投球速度。其极速源于: 羽毛球拍甜区…...
TVM中Python如何和C++联调?
1. 编译 Debug 版本 # 在项目根目录下创建构建目录(若尚未创建) mkdir -p build && cd build# 配置 Debug 构建 cmake -DCMAKE_BUILD_TYPEDebug ..# 编译(根据 CPU 核心数调整 -j 参数) make -j$(nproc)2. 获取 Python 进…...
从零实现基于Transformer的英译汉任务
1. model.py(用的是上一篇文章的代码:从0搭建Transformer-CSDN博客) import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len5000):super(PositionalEncoding,…...
在 PyTorch 中借助 GloVe 词嵌入完成情感分析
一. Glove 词嵌入原理 GloVe是一种学习词嵌入的方法,它希望拟合给定上下文单词i时单词j出现的次数。使用的误差函数为: 其中N是词汇表大小,是线性层参数, 是词嵌入。f(x)是权重项,用于平衡不同频率的单词对误差的影响…...
大数据应用开发和项目实战-电商双11美妆数据分析
数据初步了解 (head出现,意味着只出现前5行,如果只出现后面几行就是tail) info shape describe 数据清洗 重复值处理 这个重复值是否去掉要看实际情况,比如说:昨天卖了5瓶七喜,今天卖了5瓶七…...
web服务
一、nginx的安装与启用 nginx的安装 开源版本的Nginx官网:http://nginx.org Nginx在安装的过程中可以选择源码安装也可以选择使用软件包安装 源码安装下载相应的源码压缩包解压后编译完成安装 软件安装包可以使用rpm或者apt命令进行安装,也可以使用dnf…...
在Spring Boot 中如何配置MongoDB的副本集 (Replica Set) 或分片集群 (Sharded Cluster)?
在 Spring Boot 中配置 MongoDB 副本集 (Replica Set) 或分片集群 (Sharded Cluster) 非常相似,主要区别在于连接字符串 (URI) 中提供的主机列表和一些特定选项。 最常的方式是使用 spring.data.mongodb.uri 属性配置连接字符串。 1. 连接到 MongoDB 副本集 (Repl…...
Oracle中游标和集合的定义查询及取值
在 Oracle 存储过程中,使用游标处理自定义数据行类型时,可以通过 定义记录类型(RECORD) 和 游标(CURSOR) 结合实现。 1. 定义自定义记录类型 使用 TYPE … IS RECORD 定义自定义行数据类型: DE…...
Python企业级MySQL数据库开发实战指南
简介 Python与MySQL的完美结合是现代Web应用和数据分析系统的基石,能够创建高效稳定的企业级数据库解决方案。本文将从零开始,全面介绍如何使用Python连接MySQL数据库,设计健壮的表结构,实现CRUD操作,并掌握连接池管理、事务处理、批量操作和防止SQL注入等企业级开发核心…...
【LLM】Open WebUI 使用指南:详细图文教程
Open WebUI 是一个开源的、可扩展且用户友好的自托管 AI 平台,专为生成式人工智能模型交互而设计。 Open WebUI 旨在为用户提供一个简单易用、功能强大且高度定制化的界面,使其能够轻松与各种 AI 模型(如文本生成、图像生成、语音识别等)进行交互。 一、安装与初始化配置 扩…...
前端封装框架依赖管理全攻略:构建轻量可维护的私有框架
前端封装框架依赖管理全攻略:构建轻量可维护的私有框架 前言 在自研前端框架的开发中,依赖管理是决定框架可用性的关键因素。不合理的依赖设计会导致: 项目体积膨胀:重复依赖使最终打包体积增加30%版本地狱:不同项目…...
Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException
看了二哥的foreach陷阱后,自己也遇见了需要循环删除元素的情况,立马想到了当时自己阴差阳错的避开所有坑的解决方式:先倒序遍历,再删除。之前好使,但是这次不好使了,报错Caused by: java.lang.UnsupportedO…...
互联网大厂Java求职面试:云原生与AI融合下的系统设计挑战-1
互联网大厂Java求职面试:云原生与AI融合下的系统设计挑战-1 在当今云计算和人工智能迅猛发展的背景下,互联网大厂对Java工程师的要求已从传统的单体架构和业务逻辑处理,转向了更复杂的云原生架构设计、AI模型集成以及高并发系统的性能优化能…...
并发设计模式实战系列(16):屏障(Barrier)
🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第十六章屏障(Barrier),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 屏障的同步机制 2. 关键参数 二…...
pywinauto通过图片定位怎么更加精准的识别图片?
pywinauto通过图片定位怎么更加精准的识别图片? 可以使用置信度的配置,添加了对比图片相似程度达到多少就可以认为是合适的定位图片 import time from time import sleep from pywinauto.application import Application from pywinauto.keyboard impo…...
Spring Cloud Stream集成RocketMQ(kafka/rabbitMQ通用)
什么是Spring Cloud Stream Spring Cloud Stream 是 Spring 生态系统中的一个框架,用于简化构建消息驱动微服务的开发和集成。它通过抽象化的方式将消息中间件(如 RabbitMQ、Kafka、RocketMQ 等)的复杂通信逻辑封装成简单的编程模型…...
基于docker使用showdoc搭建API开发文档服务器
以下是基于 Docker 快速搭建 ShowDoc API 文档服务器的完整指南,包含优化配置和常见问题解决方案: 1. 快速部署方案 # 创建数据目录(确保权限) mkdir -p /showdoc_data/html && chmod 777 -R /showdoc_data# 一键启动容器…...
Vision-Language Models (VLMs) 视觉语言模型的技术背景、应用场景和商业前景(Grok3 DeepSearch模式回答)
prompt: 你是一位文笔精湛、十分专业的技术博客作者,你将从技术背景、应用场景和商业前景等多个维度去向读者介绍Vision-Language Models 关键要点 研究表明,视觉语言模型(VLMs)是多模态AI系统,能同时处理视觉和文本数…...
OpenAI大变革!继续与微软等,以非营利模式冲击AGI
今天凌晨2点,OpenAI宣布,将继续由非营利组织控制;现有的营利性实体将转变为一家公共利益公司;非营利组织将控制该公共利益公司,并成为其重要的持股方。 这也就是说OpenAI曾在去年提到的由非营利性转变成营利性公司&am…...
Ubuntu打开中文文本乱码
文章目录 中文乱码问题修复乱码系统字符编码修改文本编码修改vim乱码 utf-8编码原理特点应用场景与其他编码的转换 iso-8859-1基本信息字符涵盖应用场景与其他编码的关系 ubuntu打开文本出现乱码,可能是编码没设置对。 中文乱码问题 使用vim打开文本,或…...
车载通信网络安全:挑战与解决方案
1. 简介 当今时代见证了车载汽车技术的巨大发展,因为现代智能汽车可以被视为具有出色外部基础设施连接能力的信息物理系统 [ 1 ]。车载技术支持的现代智能汽车不应被视为类似于机械系统,而是由数百万行复杂代码组成的集成架构,可为车内乘客提…...
【Linux系统】读写锁
读者写者问题 重点 读者写者问题是并发编程中的经典问题,主要研究多个进程或线程对共享数据进行读和写操作时如何实现同步和互斥,以保证数据的一致性和操作的正确性 。 问题核心要点 同步与互斥:需要确保多个读者可以同时读共享数据&#…...
springBoot中自定义一个validation注解,实现指定枚举值校验
缘由 在后台写接口的时候,经常会出现dto某个属性是映射到一个枚举的情况。有时候还会出现只能映射到枚举类中部分枚举值的情况。以前都是在service里面自行判断,很多地方代码冗余,所以就想着弄一个自定义的validation注解来实现。 例如下面某…...
【Python】--装饰器
装饰器(Decorator)本质上是一个返回函数的函数 主要作用是:在不修改原函数代码的前提下,给函数增加额外的功能 比如:增加业务,日志记录、权限验证、执行时间统计、缓存等场景 my_decorator def func():pas…...
排序算法——堆排序
一、介绍 「堆排序heapsort」是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序。 1. 输入数组并建立小顶堆,此时最小元素位于堆顶。 2. 不断执行出堆操作,依次记录出堆元素,即可得…...
Day111 | 灵神 | 二叉树 | 验证二叉搜索树
Day111 | 灵神 | 二叉树 | 验证二叉搜索树 98.验证二叉搜索树 98. 验证二叉搜索树 - 力扣(LeetCode) 方法一:前序遍历 递归函数传入合法的左右边界,只有当前结点是合法的边界,才是二叉搜索树,否则就返回…...
软考-软件设计师中级备考 13、刷题 数据结构
倒计时17天时间不多了,数据库、UML、等知识点有基础直接略过,法律全靠考前的一两天刷题,英语直接放弃。 一、数据结构:链表、栈、队列、数组、哈希表、树、图 1、关于链表操作,说法正确的是: A)新增一个头…...
【5G通信】天线调整
在天线工程中,机械下倾角、电子下倾角和数字下倾角是调整天线波束指向的不同技术手段,其核心区别在于实现方式和灵活性: 1. 机械下倾角(Mechanical Downtilt) 定义:通过物理调整天线的安装角度,…...
Kafka的Log Compaction原理是什么?
Kafka的Log Compaction(日志压缩)是一种独特的数据保留策略,其核心原理是保留每个key的最新有效记录。以下是关键原理分点说明: 1. 键值保留机制 通过扫描所有消息的key,仅保留每个key对应的最新value值。例如&#…...
嵌入式面试八股文(十四)·内存管理机制、优先级继承机制以及优先级翻转
目录 1. 内存管理算法(五种内存管理机制) 1.1 heap_1.c 1.2 heap_2.c 1.3 heap_3.c 1.4 heap_4.c 1.5 heap_5.c 1.6 总结 2. STM32通知寄存器有哪些? 2.1 核心寄存器组(Cortex-M) 2.2 特殊功能寄存…...
深度剖析:可视化如何重塑驾驶舱信息交互模式
为什么你开车时总觉得“信息太多却抓不住重点”? 今天的汽车早已不是单纯的交通工具,而是一个高度集成的信息终端。从导航、油耗、胎压到自动驾驶提示,各种数据不断涌进驾驶舱。 但问题也随之而来: 关键信息被淹没在一堆图标里…...
app根据蓝牙名字不同,匹配不同的产品型号,显示对应的UI界面
在开发一个 App 时,如果希望根据蓝牙设备名称(Bluetooth Name)的不同,自动匹配不同的产品型号,并显示对应的 UI 界面,可以按照以下思路来实现: ✅ 功能目标 扫描并连接蓝牙设备;获取…...
数据结构 --- 栈
1.栈的初始化 2.入栈 3.出栈 4.取出栈顶元素 5.获取栈中有效元素个数 6.栈的销毁 栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作 的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先…...
37-算法打卡-栈与队列-滑动窗口最大值-leetcode(239)-第三十七天
1 题目地址 239. 滑动窗口最大值 - 力扣(LeetCode)239. 滑动窗口最大值 - 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑…...
【原创分享】魔音变声器内含超多语音包实时变声
魔音变声器,一款专业的调音变声器软件 亲测可使用所有功能[真棒] 去除所有广告 ————————————【下 载 地 址】———————————— 【获取方法1】:https://pan.xunlei.com/s/VOP_TXtKNlevTgYvIlxmmJquA1?pwd8vpi# ————————————【下 …...
数据结构(一)——线性表的顺序表示和实现
一、线性表的定义 由n(n>0)个数据特性相同的元素构成的有限序列称为线性表,(n0)的时候被称为空表。 一个数据元素可以是简单的一个数据,一个符号,也可以是复杂的若干个数据项的组合。 二、线性表的类型定义 s线性表是由n(n≥0)个相同类…...
Winform(12.控件讲解)
ChildForm窗口: ChildForm代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespac…...
Python 10天冲刺 《元编程(Meta-programming)》
Python 的元编程(Meta-programming)是指在程序运行期间动态生成、修改或操作代码的技术。它允许开发者通过代码控制代码的行为,从而实现灵活、可扩展和抽象化的编程模式。Python 提供了多种元编程工具,包括装饰器、元类、动态导入…...
Android开发-创建、运行、调试App工程
在移动应用开发的世界里,Android平台凭借其开放性和广泛的设备支持,成为了许多开发者的选择。而要成为一名合格的Android开发者,掌握如何创建、运行以及调试应用程序是必不可少的基础技能。本文将详细介绍如何使用Android Studio完成这些任务…...
系统级编程(二):通过读取PE文件获取EXE或者DLL的依赖
PE文件 Windows的PE文件(Portable Executable)是一种专为Windows操作系统设计的标准可执行文件格式,用于存储和管理可执行程序、动态链接库(DLL)、驱动程序等二进制文件。PE文件格式自Windows NT 3.1引入以来,已成为Windows平台上所有可执行文件的标准格式,并广泛应用于…...