[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器
目录
一. IP协议头格式
学习任何协议前的两个关键问题
IP 报头与有效载荷分离
分离方法
为什么需要16位总长度
如何交付
二. 网络通信
1.IP地址的划分理念
2. 子网管理
3.网络划分
CIDR(无类别域间路由)
目的IP & 当前路由器的子网掩码 = 该报文要去的目的网络
特殊IP地址
4.IP 地址的数量限制
5.私有IP地址和公网IP地址
三.全球网络
运营商的角色
网络基础设施的来源
网络访问的控制
路由器的功能
⭕ 主要功能
组建局域网
运营商网络架构
数据包的转发流程
路由器的IP地址结构
全球网络
网络拓扑结构
一. IP协议头格式
学习任何协议前的两个关键问题
在学习任何网络协议之前,需要先理解以下两个基本问题:
- 如何将报头和有效载荷分离?
- 如何交付?
IP 报头与有效载荷分离
- IP报头选项:IP报头可以包含选项字段,但本文不讨论这些选项。
- 标准长度:IP报头的标准长度是20字节。
- 数据组成:数据部分(即有效载荷)由上层TCP提供,它包括TCP报头和来自应用层的有效载荷。
分离方法
(第一层:
- 4位版本号:对于IPv4来说总是4。IPv4和IPv6之间没有直接兼容性。
- 4位首部长度:表示IP报头总长度,单位为4字节。取值范围是【5, 15】(对应于20到60字节),其中5是最常见的值,代表20字节。
- 16位总长度:指整个IP报文的长度,包括报头和有效载荷。
- 8位服务类型:
-
- 包括已废弃的3位优先级字段、4位ToS字段以及1位保留位(必须设为0)。
- ToS字段定义了服务质量参数如最小延迟、最大吞吐量、最高可靠性和最低成本。
- 这些参数互斥,选择其中之一影响数据传输路径的选择标准。
- 计算公式:有效载荷长度 = 16位总长度 - (4位首部长度 * 4)
为什么需要16位总长度
- 确保接收方完整地接收到整个IP报文。
- 因为IP报文是以独立报文形式存在,并非像TCP那样的连续字节流,因此需要明确标示出报头和有效载荷的具体长度。
如何交付
(第三层:
- 8位生存时间(TTL):定义了数据报到达目的地前允许经过的最大跳数。通常初始化为64,每经过一个路由器TTL减1,直至归零仍未达目的地则被丢弃。此字段防止路由环路。
- 8位协议字段:标识了上层协议类型。当发送时,上层会告知IP所使用的协议,然后IP设置相应的编号。接收方根据这个字段将数据传递给正确的上层协议处理。
- 16位头部校验和:使用循环冗余校验(CRC)来检测头部错误。如果发现损坏,则丢弃该包,TCP随后会触发重传机制。
- 32位源/目的IP地址:指定数据报的起点和终点。特别是目的IP地址,用于路由器确定下一跳路径。
16位标识,3位标志,13位片偏移(第二层)我们暂且不谈,等到我们把IP协议整体知识框架搭建起来我们在谈~
总结:
二. 网络通信
引入:
- 路由器的工作只在网络层,没有 tcp 层。只有两台主机有 tcp 层
- src_ip:src_port(进程)->dst_ip: dst_port(进程)
1.IP地址的划分理念
背景说明:
- 互联网上的所有IP地址都是经过精心设计和规划的。
- 强调理解IP地址网段划分及子网划分的重要性,不应仅停留在对子网掩码等技术细节的理解上,而要从更宏观的角度去认识这一过程。
宏观理解:
- 从全球到国家、地区乃至具体机构或学校,IP地址的分配体现了这种层次化的结构。每个层级都可以看作是一个更大范围内的“子网”。
- 不同区域使用不同的比特位来表示,使得整个IP地址体系具有清晰的层次性和区域性。
- 类比学号系统,每个部分代表了不同级别的信息(如年级、班级、个人编号)。
复杂性与挑战:
- 实际的IP地址划分非常复杂,而且随着互联网的发展,IPv4地址资源已经变得紧张。
- 尽管面临资源限制,但基本的设计思想是一致的,即通过合理分配来最大化利用现有地址空间。
- 解决方案并非简单粗暴地进行划分,而是采用了更为精细的方法和技术。
具体网络划分:
- 网络一旦被划分为不同的网段,每台主机都将归属于特定的一个网段。
- 寻址时首先确定目标主机所在的网段,再在该网段内定位具体的主机。
- 因此,一个完整的IP地址由两部分组成:网络号+主机号
-
- 网络号:用于标识不同的网段,确保互连的不同网段之间具有唯一性。
- 主机号:在同一网段内,各主机共享相同的网络号,但各自拥有唯一的主机号以区分彼此。
路由器的作用:
- 路由器作为连接两个或多个子网的关键设备,在数据包转发过程中起到桥接作用。
- 它同时属于所连接的所有子网,并且在每个子网中都拥有自己的IP地址
- 通常是==该子网 网络号+.1的形式(例如,对于网络192.168.1.0/24,路由器可能配置为192.168.1.1)
子网的概念:
- 子网是由一组网络号相同的主机组成的集合。
- 新增主机到某一子网时,其网络号需与该子网一致,但主机号必须保证在整个子网范围内唯一。
- 通过这样的方式,可以确保即便是在相互连接的不同网络中,也能够保持每台主机IP地址的独特性,从而避免冲突。
2. 子网管理
问题背景:
手动管理子网内的IP是一个相当麻烦的事情。例如,当子网内有主机离开或新加入时,就需要对子网内的IP地址进行相应的增删改操作。这项管理工作通常由谁来完成呢?
- 管理设备:在一个子网中,负责管理子网内IP的通常是路由器。
自动管理解决方案:
- DHCP技术:为了解决手动管理IP带来的不便,有一种叫做DHCP(Dynamic Host Configuration Protocol)的技术被开发出来,它能够自动地给子网内的新增主机节点分配IP地址。
- 路由器与DHCP:大多数现代路由器都内置了DHCP功能,因此路由器也可以被视为一个DHCP服务器。
- DHCP服务描述:DHCP是一种自动化服务,负责网络中的IP地址申请、分配和回收等管理工作。
- 上网前获取IP:这也是为什么我们的电脑在上网之前需要先连接到路由器的原因之一——为了通过路由器获得一个可用的IP地址,从而接入互联网。
3.网络划分
(IP地址分类与CIDR
过去,所有IP地址被划分为五类:
- A类:0.0.0.0到127.255.255.255
- B类:128.0.0.0到191.255.255.255
- C类:192.0.0.0到223.255.255.255
- D类:224.0.0.0到239.255.255.255(多播地址)
- E类:240.0.0.0到247.255.255.255(保留作实验用途)
传统分类方案的问题
随着Internet的发展,这种固定划分暴露出不足之处:
- B类地址由于需求大而迅速耗尽。
- A类和B类地址造成大量IP资源浪费。
例如,一个B类地址理论上允许单个子网内存在超过65,000台主机;而A类则更多。但实际上很少有网络需要如此多的地址空间,导致许多分配出去的地址并未得到充分利用。
CIDR(无类别域间路由)
为解决上述问题,提出了CIDR机制,其特点如下:
- 引入“子网掩码”概念,以更灵活地定义网络边界。
- 子网掩码是一个32位数字,通常尾部由一系列 0 组成。
- 通过将IP地址与子网掩码执行 按位与& 操作来确定网络号。
- 网络号与主机号的界限不再依赖于IP地址类型(A/B/C)。
目的IP & 当前路由器的子网掩码 = 该报文要去的目的网络
- 每个路由器需为其连接的每个网络设定相应的子网掩码。
- 不同路由器至少要链接两个不同网络。
- 利用目标IP地址与当前路由器子网掩码做与运算可识别报文的目标网络。
下面看划分子网的例子
例如140.252.20.68/24
- 表示IP地址为140.252.20.68
- 子网掩码的高24位是1,也就是255.255.255.0
- 网络号占据24个比特位
可见,IP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围
除:子网中全0不被使用它代表网络号,全1也不被使用代表广播地址。
例子 2:
225.225.255.240 前面28位是网络号,后面4位是主机号~计算思路如下
- 子网掩码规定前面多少位是网络号 ,所以剩下我们能动得是主机号。
- 子网掩码,可以对 IP 32 位,进行任意划分
- 结合以前,先五种分类,再子网掩码
特殊IP地址
- 当IP地址中的主机部分全为0时,表示网络本身。
- 主机部分全设为1构成广播地址,用于向同一链路上的所有设备发送信息。
127.*
系列地址专用于本地回环测试,最常用的是127.0.0.1
。
4.IP 地址的数量限制
IPv4地址概述:
- iPv4地址是一个4字节(32位)的正整数。
- 总共有 (2^{32}) 个可能的IPv4地址,大约是43亿个。
主机与IP地址的关系:
- TCP/IP协议规定,每个网络上的主机都需要有一个IP地址。
- 理论上,这意味着最多只有43亿台主机能够接入互联网。
实际可用IP地址数量:
- 实际上,由于存在一些保留和特殊用途的IP地址,可分配给普通设备使用的IPv4地址数量远低于43亿。
- 此外,IP地址是基于网卡而非主机来配置的,意味着单个主机可能需要多个IP地址。
⭕ 缓解IP地址短缺的措施:
- CIDR(无类别域间路由) 提高了IP地址的利用率并减少了浪费,但并未增加IP地址总数。
- 动态分配IP地址:通过仅在设备连接到网络时为其分配IP地址,使得同一MAC地址的设备每次连接都可能获得不同的IP地址。(用的时候给你,不用的时候就回收
- NAT(网络地址转换) 技术允许内部网络中的多台计算机共享一个或几个公共IP地址访问外部网络。(后面会详细解释~
IPv6:
- IPv6使用16字节(128位)表示一个IP地址,极大地扩展了地址空间。
- IPv6与IPv4不兼容,属于完全不同的协议体系。
- 尽管IPv6提供了足够的地址空间解决IPv4地址耗尽的问题,但截至当前,IPv6尚未广泛普及。
未来:
- 08 奥运会用的内网就是 ipv6~
- 智能驾驶等技术成熟了,科学技术进步,生产力提高,中国网络的体量越来越大,未来有可能就会切为 ipv6
- 产业升级,智能制造升级,科技发展,前景广阔~
NAT是现在内网到公网上数据转发的主流技术。目前我们用IPv6也能访问公网也是用的类似技术。
现在我们知道IP地址可以被分成内网IP和公网IP,那些是内网IP?那些是公网IP?
那网络既有内网又有公网我们该如何理解呢?
5.私有IP地址和公网IP地址
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址
- 10.*,前8位是网络号,共16,777,216个地址
- 172.16.到172.31.,前12位是网络号,共1,048,576个地址
- 192.168.*,前16位是网络号,共65,536个地址
只能用这三类来组建局域网,包含在这个范围中的,都称为私有IP。 其余的则称为全局IP(或公网IP),
所以我们经常说IP地址具有唯一性,通常谈的是全局IP或公网IP。
- 在大家前 18 年的使用生涯中,都在直接使用的其实都是私有 IP
- 云服务器就接触到了--公网 IP
验证:
ipconfig 查看
ifconfig 查看
三.全球网络
运营商的角色
- 当我们想在家中上网时,如果我们已经使用了某个运营商的手机卡,只需要打电话给运营商,联系其安装网络的师傅来安装。
- 他们通常会带来一个调制解调器(俗称“猫”)和一个路由器,安装人员会将网络账号与密码设置好,接着配置无线网络名称和密码。
- 这样,家里的设备就可以通过WiFi上网了。
网络基础设施的来源
- 上网的网线是运营商提供的。这意味着运营商已经在你家附近建设了网络基础设施。
- 当你通过路由器发起网络请求时,信息会携带你的网络账号和密码,这个请求首先会到达运营商的服务器,由他们认证你是否欠费。
- 如果没有欠费,运营商就会将请求继续传递到你所请求的服务,比如腾讯、阿里、百度等。
- 因此,运营商实际上位于用户和互联网服务提供商之间,扮演着基础设施建设者的角色。
网络访问的控制
- 运营商有权限制你的网络访问,尤其是当你欠费时,他们可以阻止你的数据报文的转发。
- 除此之外,运营商也可以审核你的上网内容。例如,发现你尝试访问谷歌、推特等被限制的网站时,运营商可以选择不转发你的请求。
- 这种机制通常被称为“墙”,而“翻墙”实际上是绕过运营商的转发限制。
- 物理上,用户不可能绕过运营商直接访问互联网服务提供商(如字节跳动),因为没有直接连接的通路。
- 在网络架构上,用户必须经过运营商的网络才能访问外部互联网服务。
路由器的功能
⭕ 主要功能
- 转发数据:路由器的核心任务是转发网络数据包。
- DHCP:动态主机配置协议,自动为局域网中的设备分配IP地址。
- NAT:网络地址转换技术,用于将内部局域网IP转换为可在公网使用的IP地址。
组建局域网
- 路由器可以用来创建局域网,配置无线网络时,我们可以设置网络名称和密码。
- 在这种网络中,路由器使用内网IP,比如家用路由器通常使用
192.168.*
- 企业级路由器可能使用
10.*
或172.16-172.31
范围的内网IP。
- 上图可以发现拥有两套密码机制
在上网过程中,通常会遇到两种密码:一种是用于连接互联网服务提供商(ISP)的账号密码,另一种是用于访问无线路由器设置或连接到家庭Wi-Fi网络的密码。这两种密码的功能和用途不同。
- 上网账号密码:这是你向互联网服务提供商申请宽带服务时获得的一组账号信息。这组信息通常包括一个用户名(可能是你的手机号码或者ISP提供的特定账号名)和对应的密码。当你首次设置宽带连接或需要重新配置网络连接时,就需要使用这套账号密码来验证身份,并建立与ISP之间的连接。这个账号密码是用来认证你作为合法用户的凭证,确保只有付费用户能够接入互联网服务。
- 路由器账号密码:实际上这里可以分为两个部分:
-
- 路由器管理界面登录密码:允许你访问路由器的Web管理界面,在那里你可以更改各种设置,比如修改Wi-Fi名称、设定安全级别等。
- Wi-Fi密码:也称为“预共享密钥”(PSK),是指当设备尝试加入你的无线局域网时所需输入的密码。它保护了你的无线网络免受未经授权的访问者侵入。
如果邻居能够蹭网,则意味着他们知道了你的Wi-Fi密码。这是因为只要知道正确的Wi-Fi密码,任何人都可以连接到你的无线网络上。
- 流量费的问题,国家扶持使其费用下降了,大力发展互联网,孵化出了大量互联网公司,收获了发展的红利
- 结合国家对于滴滴和支付宝等私企的放权和支持,可以看出我们国家发展互联网的决心非常大!
运营商网络架构
每个家庭都有自己的路由器,负责创建家庭局域网,使用192.168.*
开头的内网IP。当家庭网络连接到互联网时,需要通过运营商的网络。所以家庭路由器实际上跨越了两个子网:
- 家庭局域网子网(
192.168.*
)。 - 运营商的子网。
这意味着当数据从家用路由器发出时,先到达运营商的子网,再经过多级路由器,最终转发到公网。
家庭路由器会配备两个IP地址:
- LAN口IP:用于家庭内部局域网,通常为
192.168.*
。 - WAN口IP:用于连接运营商的网络,是由运营商分配的IP地址。
同理,运营商的路由器也具有LAN口IP和WAN口IP:
- LAN口IP:用于运营商内部网络(可能是私有网络)。
- WAN口IP:这是一个公网IP,用于连接到互联网。
数据包的转发流程
- 在不同局域网中,私有IP是可以重复的,因为只需要在局部环境中保证唯一性。
- 然而,这带来了一个问题:当不同局域网中的设备使用相同的IP地址(例如,
192.168.1.201
)时,外部服务提供商(如抖音)如何知道数据包应该返回到哪个局域网? - 为了解决这个问题,NAT(网络地址转换)技术应运而生。当数据经过路由器时,路由器会将数据包的源IP地址替换为自己的WAN口IP。当请求返回时,路由器则会根据这个WAN口IP知道将数据包转发到哪个局域网的设备上。
路由器的IP地址结构
个人主机上的 IP 是私有 IP
每个路由器都有两个IP地址:
- LAN口(子网 IP:用于在局域网内部通信,通常为私有IP(如
192.168.1.1
)。来实现对上一个的连接 - WAN口IP:用于与外部网络(如运营商网络)通信。这个IP可能是一个公网IP。路由器自己的标识
- 路由器内的主机(如手机、电脑等)使用局域网的IP地址,而这些IP地址在不同的局域网中是可以重复的。
- 然而,当这些主机需要访问外网时,路由器会使用NAT技术将内部的私有IP地址替换为WAN口IP。这种逐级替换的过程使得最终的数据包在公网中能够使用一个唯一的IP地址进行通信。
- 如果想要让外界能够访问我们自建的服务器(如网页服务器),那么这台自建服务器必须部署在具有公网IP的设备上。例如,云服务提供商(如阿里云、腾讯云)可以提供这样的服务器。
全球网络
我们可以在 IPSHU 上查看全球 IP 的使用情况
由于IP地址的有限性(尤其是IPv4),全球范围内的IP地址已经不足。
网络拓扑结构
公网和子网的划分通常可以通过IP地址和子网行。
比如,如果从美国发出一个请求,目标IP地址是湖北武汉的服务器
- 路由器首先会判断这个IP不属于本地网络,于是将请求发送给国际路由器。
- 国际路由器再判断目标IP属于中国,就会将数据包转发到中国的路由器。
- 接下来,中国的路由器会继续判断目标IP,发现属于湖北,
- 再由湖北的路由器转发给武汉的服务器。
整个互联网的拓扑结构虽然复杂,但这种逐级转发的逻辑是其核心。运营商在地方上建立了本地网络,并将不同子网进行划分,然后通过公网入口路由器与全球互联网连接。
网络模式如下,可以看到,在接入武汉之后,由公网入私网
注意:
- 私有 ip 存在大量重复,不能进公网
- 路由器会进行报文的替换,WAN 口 IP 的替换
- 解决:将源 IP 替换成每一个路由器的WAN 口 IP
私有 IP 不断被替换的过程:NAT 技术
为了解决 IP 不足问题,采取了 互联网=公网+私网 的模式
下一篇文章将继续讲解 NAT 技术怎么回来,路由等知识~
🎢 补: CRUD是一个缩写,代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)这四种基本的数据库操作。
相关文章:

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器
目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR(无类别域间路由) 目的IP & 当前路由器的子网掩码 …...

路由器原理和静态路由配置
一、路由器的工作原理 根据路由表转发数据 接收数据包→查看目的地址→与路由表进行匹配找到转发端口→转发到该端口 二、路由表的形成 它是路由器中维护的路由条目的集合,路由器根据路由表做路径选择,里面记录了网段ip地址和对应下一跳接口的接口号。…...

UE5 使用Animation Budget Allocator优化角色动画性能
Animation Budget Allocator是UE内置插件,通过锁定动画系统所占CPU的预算,在到达预算计算量时对动画进行限制与优化。 开启Animation Budget Allocator需要让蒙皮Mesh使用特定的组件,并进行一些编辑器设置即可开启。 1.开启Animation Budget…...

Element UI 组件库详解:从入门到精通
在追求统一且流畅的用户体验时,开发者们常常选择使用 UI 组件库来加快开发速度。Element UI,这个基于 Vue.js 的组件库,提供了大量界面组件,极大地提升了前端开发的效率。本文将指导您如何开始使用 Element UI 组件库,…...

JavaScript 事件循环(EventLoop) —— 浏览器 Node
一、事件循环的本质 本质:运行时对 JS 脚本的调度方式就叫做事件循环. 对于 浏览器 而言,需要考虑用户交互、UI渲染、脚本运行、网络请求等操作,这些操作必然都依赖于事件去执行,因此,为了协调事件必须要使用事件循环…...
【ROS2】订阅手柄数据,发布运动命令
1、相关消息 sensor_msgs::msg::Joy:用来描述手柄控制器数据 geometry_msgs::msg::Twist :用来描述物体运动时的线速度和角速度 参见博客: 【ROS2】geometry_msgs::msg::Twist和sensor_msgs::msg::Joy 2、订阅和发布 2.1 定义、创建订阅者和发布者 订阅手柄的按键、摇杆…...

WinX86内核02-驱动程序
把昨天的程序改用 c++ 编译,改成 .cpp ,发现编译报错 原因是名称粉碎,因此可以直接 extern “C”声明一下这个函数 或者用 头文件(推荐) 因为 在头文件中 可以把 头文件一起包含进去 #pragma once extern "C" { #include <Ntddk.h> /*驱动入口函…...

基于SpringBoot+Vue的体育馆场地预约系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【WebGIS】Cesium:天地图加载
天地图是中国国家基础地理信息系统,由中国测绘地理信息局和国家地理信息公共服务平台共同开发和运营。它提供多项地理信息服务,包括地图数据、地理编码、路径规划以及地理搜索等。天地图的目标是为各行业提供高质量、全面的地理信息数据和解决方案。 天…...

[产品管理-46]:产品组合管理中的项目平衡与管道平衡的区别
目录 一、项目平衡 1.1 概述 1.2 项目的类型 1、根据创新程度和开发方式分类 2、根据产品开发和市场周期分类 3、根据风险程度分类 4、根据市场特征分类 5、根据产品生命周期分类 1.3 产品类型的其他分类 1、按物理形态分类 2、按功能或用途分类 3、按技术或创新程…...

【MySQL】MySQL的简单了解详解SQL分类数据库的操纵方法
一、mysql定义 mysql是数据库服务的客户端,mysqld是数据库服务的服务器端。mysql的本质就是基于CS模式下的一种网络服务。数据库一般指的是在磁盘中或内存中存储的特定结构组织的数据,将来就是在磁盘上存储的一套数据库方案。 创建数据库,本质…...

【Python爬虫实战】正则:从基础字符匹配到复杂文本处理的全面指南
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、正则表达式 (一)正则表达式的基本作用 …...
10.18Python基础迭代器生成器_函数式编程
Python迭代器与生成器 1. 迭代器 Iterator 什么是迭代器 迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器可以重复使用,而不会像列表那样在迭代时被修改。 迭代器函数iter和next 函数说明iter(iterable)从可迭代对象中返回一个迭…...
HttpPost 类(构建 HTTP POST 请求)
HttpPost 类是 Apache HttpClient 库中的一个类,用于构建 HTTP POST 请求。以下是 HttpPost 类的一些常用方法和代码案例: 常用方法 构造方法: HttpPost(String uri):创建一个 HttpPost 对象,并将请求的 URI 作为参数…...

xtu oj 原根
文章目录 回顾杂思路c 语言代码 回顾 AB III问题 H: 三角数问题 G: 3个数等式 数组下标查询,降低时间复杂度1405 问题 E: 世界杯xtu 数码串xtu oj 神经网络xtu oj 1167 逆序数(大数据) 杂 有一些题可能是往年的程设的题,现在搬到…...

Java Spring 中常用的 @PostConstruct 注解使用总结
引言 在最近的学习中,我发现了一个非常实用的注解 —— PostConstruct。通过深入学习,逐步发现这个注解在实际开发中可以帮助我们更轻松地解决不少原本复杂的问题,特别是在项目启动时自动执行一些必要的初始化操作。相比于手动调用ÿ…...

Visual Studio--VS安装配置使用教程
Visual Studio Visual Studio 是一款功能强大的开发人员工具,可用于在一个位置完成整个开发周期。 它是一种全面的集成开发环境 (IDE)。对新手特别友好,使用方便,不需要复杂的去配置环境。用它学习很方便。 Studio安装教程 Visual Studio官…...
什么叫CMS?如何使用CMS来制作网站?
CMS是什么? 内容管理系统(Content Management System,CMS),是一种位于WEB前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人…...
如何获取谷歌浏览器窗口句柄并将其设置为Qt的父窗口
1、首先,确保你在项目的 .pro 文件中加入对WinAPI的支持: win32: LIBS -luser322、步骤概述: 使用WinAPI获取谷歌浏览器窗口的句柄。获取Qt窗口的句柄。使用SetParent函数,将Qt窗口设置为谷歌浏览器窗口的子窗口。调整Qt窗口的…...
牛客小白月赛102:最短?路径(分层bfs)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个 nnn 个点 mmm 条边的无向图,LH 打算从点 111 出发去点 nnn。 假如 LH 到达了一个点 iii,那么他可以选择在这个点花费 aia_iai 的时间休息后继续赶…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...