当前位置: 首页 > news >正文

【Linux】网络层协议 IP

网络层协议 IP

  • 一. 基本概念
  • 二. IP 协议格式
  • 三. 网段划分 (重点)
    • 1. 传统方法
    • 2. 子网掩码
  • 四. 特殊 IP 地址
  • 五. IP 地址的数量限制
  • 六. 私有 IP 地址和公网 IP 地址
  • 七. 运营商
    • 1. 基本网络情况
    • 2. 全球网络情况
  • 八. 路由
  • 九. IP 报文的分片和组装

网络层:在复杂的网络环境中确定一个合适的路径。

IP 协议:负责在互联网上进行数据包的传输。它提供了无连接的数据报传输服务,但不保证数据包的可靠传输。

  • 无连接:每个数据报独立传输,不维护连接状态。
  • 不可靠:数据报可能会丢失、重复或乱序到达,这些情况需要由上层协议(如TCP)来处理。

一. 基本概念

在这里插入图片描述

以通信主机B和C为例,两个主机并不是直接连接的,通信需要解决两个问题:

  1. 为什么要交给先一个路由器 F (路径选择的问题):由网络层 (IP) 解决。
  2. 怎么把数据交给路由器 F (局域网通信问题):同一个局域网可以直接通信,由数据链路层 (MAC地址) 解决。

结论:网络通信的本质:无数个局域网通信,最终实现广域网通信。

IP 地址:全球具有唯一性的 IP (公网 IP),主要范围两类 IPV4 和 IPV6,用于表示主机的唯一性。

  • IP 地址= 目标网络 + 目标主机,通过网络号找到对应的子网,通过主机号找到对应的主机。
  • 路由器:配有 IP 地址,能进行路由控制。
  • 主机:配有 IP 地址,也能进行路由控制的设备。
  • 节点:主机和路由器的统称。

在这里插入图片描述

数据贯穿整个 TCP/IP 协议栈时,需要添加各自的报头,每一层都需要解决不同的问题:

  • 应用层报头:自身报文完整性,序列化和反序列化的问题。
  • 传输层报头:流量控制、拥塞控制、确认应答、超时重传… 可靠性问题。
  • 网络层报头:路径选择,数据报的转发问题。

重谈 TCP/IP 协议:

  • IP 的核心作用:将数据包跨网络转发到目标主机,但是可能存在丢包问题 (IP 不关心丢包问题,由 TCP 关心丢包问题)
  • TCP 的核心作用:进行各种策略,例如:超时重传、流量控制、拥塞控制、确认应答… 保证可靠性!

结论:TCP/IP 协议,提供一种可靠的能力,将数据从 A 主机跨网络,转发给 B 主机!解决的就是主机距离变远进行通信的问题!

二. IP 协议格式

在这里插入图片描述

  • 4 位版本号:指定 IP 协议的版本,存在 IPV4 和 IPV6,但是二者不兼容。
  • 4 位首部长度:最大值为 15 bit,单位是 4 字节,IP 头部的最大总长度为 60 字节,由标准报头长度 20 字节,计算得出最大选项长度就是 40 字节。
  • 8 位服务类型:3 位优先权字段(已经弃用),4 位服务类型字段(TOS),和 1 位保留字段(必须置为 0)。4 位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。 对于 ssh/telnet 这样的应用程序,最小延时比较重要。对于 ftp 这样的程序,最大吞吐量比较重要。
  • 16 位总长度:IP 数据报字节数,保证数据的完整性。
  • 8 位生存时间:数据报到达目的地的最大报文跳数。一般是 64,每次经过一个路由,TTL -= 1,一直减到 0 还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环。
  • 8 位协议:表示上层协议的类型 (例如:TCP/UDP)
  • 16 位首部校验和:使用 CRC 进行校验,来鉴别报头是否损坏。
  • 32 位源地址和 32 位目标地址:表示发送端和接收端 IP 地址。
  • 选项:最大 40 字节。
  • 16位标识、3 位标志字段、13 位分片偏移:在 IP 报文的分片和组装详细讲解!

IP 的解包和分用:

  1. IP 是如何做到解包的?通过读取 IP 协议的基本长度 -> 前 20 字节 -> 获取首部长度 -> 选项长度 = 首部长度 - 20 字节 -> 如果存在接着读取,最终完成解包。
  2. IP 是如何做到分用的(交给应用层的哪一个协议)?IP 协议格式存在 8 位协议 (TCP/UDP),交给上层协议,类似 TCP 协议的端口号。

三. 网段划分 (重点)

网段划分:将一个大的网络划分为多个较小的子网段 (网络),以便更有效地管理和利用网络资源。这种划分通常基于子网掩码来实现,通过子网掩码可以确定一个 IP 地址属于哪个子网络。

IP 地址 = 网络地址 + 主机地址

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

在这里插入图片描述

子网内的 IP 地址,都是从哪里来的?谁给它的?路由器是家中第一个入网设备,路由器具有构建子网的能力,为连接路由器的主机分配 IP 地址。子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。

发送数据时:先将目的 IP 地址的网络号与源 IP 地址的网络号进行对比,如果相同则在子网内部进行转发,如果不同则将数据报交给路由器进行转发。一个 IP 地址被转发:根据目标网络,先转发报文到目标网络,再将报文在内网中转发。

为什么要进行网段划分?网络通信最终是在公网上进行通信的,进行网段划分,可以淘汰与目的 IP 地址的网络号不同的公网,提高查找效率。报文在进行转发的过程中,在到达目标网络之前,路由只看 IP 地址中的目标网络号,

那么如何进行网段划分?

1. 传统方法

有一种技术叫做 DHCP,能够自动的给子网内新增主机节点分配 IP 地址,避免了手动管理 IP 的不便。一般的路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器。过去曾经提出一种划分网络号和主机号的方案,把所有 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 类网络地址, 导致 B 类地址很快就分配完了,而 A 类却浪费了大量地址。

  • 例如:申请了一个 B 类地址,理论上一个子网内能允许 6 万 5 千多个主机。A 类地址的子网内的主机数更多。
  • 然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的 IP 地址都被浪费掉了。

2. 子网掩码

针对上述情况提出了 “CIDR” 划分方案:引入一个额外的子网掩码 (subnet mask) 来区分网络号和主机号。子网掩码也是一个 32 位的正整数,通常用一串 “0” 来结尾。将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关。

在这里插入图片描述

IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/28

  1. IP 地址:140.252.20.68
  2. 子网掩码:255.255.255.240(高28位是1,其余是0)
  3. 网络号:IP & 子网掩码 = 140.252.20.64(140.252.20.01000000)
  4. 子网地址范围:140.252.20.64 ~ 140.252.20.79(140.252.20.01000000 ~ 140.252.20.01111111)

可见 IP 地址与子网掩码做按位与运算可以得到网络号,主机号从全 0 到全 1 就是子网的地址范围。

四. 特殊 IP 地址

  • 将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表这个局域网。
  • 将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的 IP 地址用于本机环回 (loop back) 测试,通常是 127.0.0.1

在这里插入图片描述

五. IP 地址的数量限制

我们知道,IP 地址 (IPv4) 是一个 4 字节 32 位的正整数,那么一共只有 2 的 32 次方个 IP 地址,大概是 43 亿左右,而 TCP/IP 协议规定,每个主机都需要有一个 IP 地址,这意味着,一共只有 43 亿台主机能接入网络么?

实际上,由于一些特殊的 IP 地址的存在,数量远不足 43 亿,另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个 IP 地址,CIDR 在一定程度上缓解了 IP 地址不够用的问题 (提高了利用率,减少了浪费,但是 IP 地址的绝对上限并没有增加),仍然不是很够用,这时候有三种方式来解决:

  • NAT 技术:切分部分公网 IP 地址,用于搭建内网 IP 地址 (地址可以重复)
  • 动态分配 IP 地址:只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不一定是相同的。
  • IPv6:IPv6 并不是 IPv4 的简单升级版,这是互不相干的两个协议,彼此并不兼容,IPv6 用 16 字节 128 位来表示一个 IP 地址,但是目前 IPv6 还没有普及。

六. 私有 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 进行搭建的。

Linux: ifconfig
Windows: ipconfig

在这里插入图片描述

  1. 私有 IP,只能用来组建局域网,不能出现在公网中。
  2. 私有 IP,只能在内网中使用,所以不同的子网,IP 地址可以重复。
  3. 公网 IP,不能出现重复。
  4. 内网、公网,统一采用子网掩码的方式,进行网络建设。

七. 运营商

三大运营商:移动、电信、联通。

路由器:拥有构建子网的能力。

申请 IP,无论是公网 IP,内网 IP,网络建设的工作,都是由运营商做的!

网线 -> 调制解调器 -> 路由器 -> 本地设备 -> 通信

1. 基本网络情况

在这里插入图片描述

家用路由器与主机构成一个子网,运营商路由器与家用路由器构成另一个子网。家用路由器的 IP 地址是由更大的路由器分配 (例如:运营商路由器) 的。我们的报文必须经过家用路由器,再经过运营商路由器的转发,才能到达公网中。运营商可以根据你欠费/访问非法的目标地址而拦截你,想要科学上网可以使用代理服务器。

一个路由器可以配置两个 IP 地址,一个是 WAN 口 IP (连接子网/公网),一个是 LAN 口 IP (连接子网)
路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中。不同的路由器,子网 IP 其实都是一样的 (通常都是 192.168.1.1),子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址就可以重复了。每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN 口 IP 就是一个公网 IP 了。

子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换 (替换成 WAN 口 IP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP,防止子网 IP 地址出现在公网上。这种技术称为 NAT (Network Address Translation,网络地址转换)。如何缓解 IP 地址不足的问题?单独切分了部分公网 IP,只用它来搭建内网,这样 IP 地址可以被重复利用了!

如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网 IP 的服务器上,这样的服务器可以在阿里云/腾讯云上进行购买。

2. 全球网络情况

公网 IP 地址,是以国家、组织、公司为单位,进行申请的。其中将部分公网 IP 地址用于搭建私有 IP 地址。

假设都以国家为单位进行申请,已知全球195个国家,需要为每一个国家分配网络,可以将 IP 地址通过子网掩码:255.0.0.0 将大的网络分配给不同的国家,接着又将大的网络进一步通过子网掩码:255.255.0.0 分配给不同地区,依次进行网段划分!

在这里插入图片描述

  • 内网发送报文到公网:如果目标 IP 地址 & 子网掩码 = 目标网络,将报文发送给下一跳路由器的 IP 地址,若遍历所有的路由表条目都不符合时,将报文发送交给默认路由器 (上一层路由器),直到运营商路由器 (公网),还存在 NAT 技术。
  • 公网发送报文到内网:数据链路层再讲解。

IP 报文转发过程的本质:就是在进行各个子网间进行转发。
IP 主要解决的核心问题:路径选择 -> 淘汰其它的子网。

两个局域网当中的主机必须通过公网进行通信,先将数据经过公网发送到了服务器,然后再由服务器将数据经过公网转发到了另一个局域网。存在一些技术能够使数据包在发送过程中不进行公网 IP 的替换,而将数据正确送到目标主机,这种技术叫做内网穿透,也叫做NAT穿透。

八. 路由

路由:在复杂的网络结构中,找出一条通往终点的路线。路由的过程,就是这样一跳一跳(Hop by Hop) “问路” 的过程,所谓 “一跳” 就是数据链路层中的一个区间,具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。

在这里插入图片描述

IP 数据包的传输过程也和问路一样:

  • 当 IP 数据包到达路由器时,路由器会先查看目的 IP 地址。
  • 路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器。
  • 依次反复,一直到达目标 IP 地址。

那么如何判定当前这个数据包该发送到哪里呢?这个就依靠每个节点内部维护一个路由表!

在这里插入图片描述

  • 路由表可以使用 route 命令查看。
  • 如果目的 IP 命中了路由表,就直接转发即可。
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

假设某主机上的网络接口配置和路由表如下:

在这里插入图片描述

  • 这台主机有两个网络接口,一个网络接口连到 192.168.10.0/24 网络,另一个网络接口连到 192.168.56.0/24 网络。
  • 路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效 (可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。

转发过程例 1:如果要发送的数据包的目的地址是 192.168.56.3

  • 跟第一行的子网掩码做 “按位与” 运算得到 192.168.56.0,与第一行的目的网络地址不符。
  • 再跟第二行的子网掩码做 “按位与” 运算得到 192.168.56.0,正是第二行的目的网络地址,因此从 eth1 接口发送出去。
  • 由于 192.168.56.0/24 正是与 eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。

转发过程例 2:如果要发送的数据包的目的地址是 202.10.1.2

  • 依次和路由表前几项进行对比,发现都不匹配。
  • 按缺省路由条目,也就是默认网关,从 eth0 接口发出去,发往 192.168.10.1 路由器。
  • 由 192.168.10.1 路由器根据它的路由表决定下一跳地址。

路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由),路由相关的生成算法:距离向量算法,LS 算法,Dijkstra 算法等。

九. IP 报文的分片和组装

这里的传输层以 TCP 为例,UDP 同理

在这里插入图片描述

  • 问题:为什么不把滑动窗口里的数据,大成一个报文,而是分成一个个数据段?这不是增加了发送的次数?
  • 答案:如果传输层报文太长,导致 IP 报文太长,网络层需要将 IP 报文进行分片,因为在数据链路层,单次发送的数据帧的有效载荷长度不能超过 MTU 最大传输单元 (一般是1500),对方的网络层需要将分片的 IP 报文进行组装,这就导致任意一个分片的 IP 报文丢包,组装的 IP 报文是不完整的,不会将 IP 报文交给传输层,导致增加传输层丢包概率。

IP 分片对传输层是透明的,这意味着传输层无需关心数据是否被分片以及如何重新组装。分片不能作为网络发送的主流,如何进行不分片?传输层不要发送太大的报文。

在这里插入图片描述

问题:如果要进行分片和组装,网络层具体该如何做?

  • 16 位标识:唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。
  • 3 位标志字段:第一位保留字段 (现在不用),第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为 0,其他是 1,类似于一个结束标记。
  • 13 位分片偏移:相对于原始 IP 报文的有效载荷起始处的偏移量,实际写入的片偏移:偏移量 除8 得到的。因为总长度是 16 位的,但是片偏移只有 13 位。

在这里插入图片描述

注意:

问题:接收方如何得知自己收到的报文分片了?
答案:3 位标志字段等于000 || 13 位分片偏移等于0

问题:接收方如何得知自己收到的分片收全了?
答案:通过 16 位标识将所有的分片升序排序,起始分片:片偏移必须等于0、中间分片:片偏移等于上一个分片的片偏移+上一个分片报文的长度、结尾分片:3 位标志字必须等于000

问题:接收方如何组合形成完整的报文?
答案:解决了上面两个问题,将分片报文进行升序排序就行了。

下面具体看看 IP 报文大小为 3020 字节的分片过程:

在这里插入图片描述

分片和组装的过程不一定在发送方 (MTU = 1500),也可能存在于路由器 (例如:MTU = 1000),但是概率比较低,基本不考虑。

在同一个局域网中通信,不需要经过路由器,依赖数据链路层的 MAC 地址进行通信!为什么 MTU = 1500?也是数据链路层决定的!

相关文章:

【Linux】网络层协议 IP

网络层协议 IP 一. 基本概念二. IP 协议格式三. 网段划分 (重点)1. 传统方法2. 子网掩码 四. 特殊 IP 地址五. IP 地址的数量限制六. 私有 IP 地址和公网 IP 地址七. 运营商1. 基本网络情况2. 全球网络情况 八. 路由九. IP 报文的分片和组装 网络层:在复杂的网络环境…...

嵌入式系统中如何构建事件响应架构

在复杂的嵌入式系统中,串口、BLE、定时器、中断等多种事件源并存,如何高效地统一调度这些异步事件,是系统稳定性和可维护性的关键。本文将结合 BLE 系统架构的经验,讲解如何构建一个通用的事件响应架构。 🧩 一、什么是事件响应架构? 事件响应架构(Event-Driven Archi…...

Flutter报错:Warning: CocoaPods is installed but broken

最近在做Flutter开发,在跑iOS的时候报错: 结论:CocoaPods安装有问题 解决办法: 先卸载本地CocoaPods,然后重新安装 查看当前版本 gem list | grep cocoapods执行卸载 sudo gem uninstall cocoapods直到 which -a…...

JdbcTemplate基本使用

JdbcTemplate概述 它是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和MbernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的…...

地图服务热点追踪:创新赋能,领航出行与生活

在数字化时代,地图服务早已超越了传统的导航范畴,成为智能出行、生活服务乃至应急救援等多领域的关键支撑。近期,地图服务领域热点不断,从技术创新到应用拓展,每一次突破都在重塑我们与世界交互的方式。本文将深入剖析…...

Flutter Invalid constant value.

0x00 问题 参数传入变量,报错! 代码 const Padding(padding: EdgeInsets.all(20),child: GradientProgressIndicator(value: _progress), ),_progress 参数报错:Invalid constant value. 0x01 原因 这种情况,多发生于&#xff…...

网络基础-路由技术和交换技术以及其各个协议

四、路由技术和交换技术 4.1路由技术 静态与动态协议的关系: 1,静态路由:由网络管理员手工填写的路由信息。 2,动态路由:所有路由器运行相同路由协议,之后,通过路由器之间的沟通,协…...

替换jeecg图标

替换jeecg图标 ant-design-vue-jeecg/src/components/tools/Logo.vue <!-- <img v-else src"~/assets/logo.svg" alt"logo">-->...

C#里使用WPF的MaterialDesignThemes

先要下载下面的包: <?xml version="1.0" encoding="utf-8"?> <packages><package id="MaterialDesignColors" version="5.2.1" targetFramework="net48" /><package id="MaterialDesignTheme…...

四六级听力考试播音系统:构建播放控制智能化、发射系统双备份、发射功率有冗余、安全稳定可靠的英语四六级听力播音系统使用环境

四六级听力考试播音系统:构建播放控制智能化、发射系统双备份、发射功率有冗余、安全稳定可靠的英语四六级听力播音系统使用环境 北京海特伟业科技有限公司任洪卓于2025年4月9日发布 传统的四六级听力考试播音系统往往存在信号不稳定、容易受干扰、无发射备份、无功率冗余、更…...

JavaScript性能优化(下)

1. 使用适当的算法和逻辑 JavaScript性能优化是一个复杂而重要的话题&#xff0c;尤其是在构建大型应用时。通过使用适当的算法和逻辑&#xff0c;可以显著提高代码的效率和响应速度。以下是一些关键策略和实践&#xff0c;用于优化JavaScript性能&#xff1a; 1.1. 采用适当…...

优先级队列的应用

第一题&#xff1a; 题解思路&#xff1a; 1、建立降序的优先级队列&#xff08;底层是通过大堆来实现&#xff09;&#xff1b; 2、取最大的两个数来相减得到的结果再加入到优先级队列中(优先级队列会自动的排序)&#xff1b; 3、返回队列的头部或者0即可&#xff1b; 题解代…...

从 macos 切换到 windows 上安装的工具类软件

起因 用了很多年的macos, 已经习惯了macos上的操作, 期望能在windows上获得类似的体验, 于是花了一些时间来找windows上相对应的软件. 截图软件 snipaste​​​​​​ windows和macos都有的软件, 截图非常好用 文件同步软件 oneDrive: 尝试了不同的同步软件, 还是微软在各…...

探索原生JS的力量:自定义实现类似于React的useState功能

1.写在前面 本方案特别适合希望在历史遗留的原生JavaScript项目中实现简单轻量级数据驱动机制的开发者。无需引入任何框架或第三方库&#xff0c;即可按照此方法封装出类似于React中useState的功能&#xff0c;轻松为项目添加状态管理能力&#xff0c;既保持了项目的轻量性&am…...

Android系统深度定制:源码级拦截adb install的完整解决方案

一、需求背景与技术挑战 在Android 12.0系统定制开发中&#xff0c;我们面临一个关键需求&#xff1a;需要实现设备级应用安装管控&#xff0c;要求彻底禁用adb install安装方式。这种管控需要满足以下技术指标&#xff1a; 系统级全局拦截&#xff0c;覆盖所有adb install安装…...

基于大模型的非阵发性室性心动过速风险预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、非阵发性室性心动过速概述 2.1 定义与分类 2.2 发病机制 2.3 临床症状与诊断方法 三、大模型在预测中的应用原理 3.1 大模型简介 3.2 数据收集与预处理 3.3 模型训练与优化 3.4 预测原理与…...

HttpServletRequest是什么

HttpServletRequest 是 Java Servlet API 中的一个接口&#xff0c;表示 HTTP 请求对象。它封装了客户端&#xff08;如浏览器&#xff09;发送到服务器的请求信息&#xff0c;并提供了访问这些信息的方法。 1. 基本概念 作用&#xff1a; HttpServletRequest 提供了一种机制&…...

【现代深度学习技术】循环神经网络02:文本预处理

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

【微服务】SpringBoot 整合 Lock4j 分布式锁使用详解

目录 一、前言 二、Lock4j 概述 2.1 Lock4j 介绍 2.1.1 Lock4j 是什么 2.1.2 Lock4j 主要特征 2.1.3 Lock4j 技术特点 2.2 Lock4j 支持的锁类型 2.3 Lock4j 工作原理 2.4 Lock4j 应用场景 三、springboot 整合 lock4j 3.1 前置准备 3.1. 1 导入依赖 3.2 基于Redis…...

如何将前端组件封装并发布到npm的步骤详解

以下是封装前端组件并发布至npm仓库的完整步骤指南,结合多个最佳实践和常见问题解决方案: 一、环境准备与项目初始化 创建项目结构 • 使用Vue CLI或Create React App初始化项目: vue create my-component-lib # Vue npx create-react-app my-component-lib --template ty…...

【QT】QWidget 概述与核心属性(API)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 控件概述 &#x1f98b; 控件体系的发展阶段 二&#xff1a;&#x1f525; QWidget 核心属性 &#x1f98b; 核心属性概览&#x1f98b; 用件可用&#xff08…...

vue + uniapp 实现仿百度地图/高德地图/美团/支付宝 滑动面板 纯css 实现

概要 使用百度地图、各种单车APP时&#xff0c;对地图上的滑动面板很感兴趣&#xff0c;于是根据自己的理解实现了一下 之前用的js实现&#xff0c;滑动的时候没有原生好 这一次用的css实现 代码 <template><view class"container"><mapstyle"…...

124. 二叉树中的最大路径和

https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/?envTypestudy-plan-v2&envIdtop-interview-150对于这题我开始的思路是路径我们可以看作是一条线&#xff0c;我们确定一个点后可以往两侧延伸&#xff08;就是左右子树的方向&#xff09;&#x…...

spark运行架构

运行架构&#xff1a;Spark采用master - slave结构&#xff0c;Driver作为master负责作业任务调度&#xff0c;Executor作为slave负责实际执行任务。 核心组件&#xff1a; Driver&#xff1a;执行Spark任务的main方法&#xff0c;负责将用户程序转化为作业、调度任务、跟踪E…...

开源的7B参数OCR视觉大模型:RolmOCR

1. 背景介绍 早些时候&#xff0c;Allen Institute for AI 发布了 olmOCR&#xff0c;这是一个基于 Qwen2-VL-7B 视觉语言模型&#xff08;VLM&#xff09;的开源工具&#xff0c;用于处理 PDF 和其他复杂文档的 OCR&#xff08;光学字符识别&#xff09;。开发团队对该工具的…...

Http代理服务器选型与搭建

代理服务器选型-Squid 缓存加速 缓存频繁访问的网页、图片等静态资源&#xff0c;减少对原始服务器的重复请求&#xff0c;提升响应速度支持HTTP、HTTPS、FTP等协议&#xff0c;通过本地缓存直接响应客户端请求 访问控制 基于ACL&#xff08;访问控制列表&#xff09;实现精细…...

如何实现Microsoft Word (.docx) 格式到 FastReport .NET (.frx) 文件的转换

现代数据处理技术和文档工作流自动化需要集成各种文件格式&#xff0c;以确保软件产品之间的无缝交互。Microsoft Word 凭借其丰富的功能&#xff0c;已成为最受欢迎的文本编辑器之一&#xff0c;适用于各种任务。 有时&#xff0c;您可能需要将这些文档转换为其他应用程序特定…...

雷电多开器自动化运行、自动登录APP刷新日用户活跃量

文章目录 简介接单价格代码对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698 简介 客户有一个APP,需要在雷电模拟器每天自动运行APP,每台模拟器设置不同的I…...

Dify教程01-Dify是什么、应用场景、如何安装

Dify教程01-Dify是什么、应用场景、如何安装 大家好&#xff0c;我是星哥&#xff0c;上篇文章讲了Coze、Dify、FastGPT、MaxKB 对比&#xff0c;今天就来学习如何搭建Dify。 Dify是什么 **Dify 是一款开源的大语言模型(LLM) 应用开发平台。**它融合了后端即服务&#xff08…...

《深入探秘:分布式软总线自发现、自组网技术原理》

在当今数字化浪潮中&#xff0c;分布式系统的发展日新月异&#xff0c;而分布式软总线作为实现设备高效互联的关键技术&#xff0c;其自发现与自组网功能宛如打开智能世界大门的钥匙&#xff0c;为多设备协同工作奠定了坚实基础。 分布式软总线的重要地位 分布式软总线是构建…...

spring扫描自定义注解注册bean

前言 我们知道&#xff0c;在spring中&#xff0c;我们只需要加上注解Component&#xff0c;就可以自动注入到spring容器中&#xff0c;如果我们自定义注解&#xff0c;怎么让spring识别到&#xff0c;注入到容器中呢&#xff0c;下面我们来看看。 基础使用 自定义注解 Tar…...

【RL系列】StepFun之Open-Reasoner-Zero

1. 简介 开源了一个大规模RL训练框架之Open-Reasoner-Zero&#xff0c;仅使用vanilla PPO&#xff0c;GAE中参数 λ 1 , γ 1 \lambda 1, \gamma 1 λ1,γ1&#xff0c;rule-based reward&#xff0c;不需要KL regularization就可以增加response length和benchmark上的指标。…...

括号匹配问题--栈

括号匹配问题 栈的应用代码概览栈操作函数详解1.初始化栈&#xff08;stackInit&#xff09;2.向栈中压入元素&#xff08;stackpush&#xff09;3.获取栈顶元素&#xff08;stacktop&#xff09;4.弹出栈顶元素&#xff08;stackpop&#xff09;5.销毁栈&#xff08;stackdest…...

LangChain4j(7):Springboot集成LangChain4j实现知识库RAG

我们之前的直接整合进SpringBoot进行实战&#xff0c;最终其实还会将查询到的内容&#xff0c;和对话上下文组合起来&#xff0c;发给LLM为我们组织语言进行回答: 配置一个Content Retriever 内容检索器&#xff0c;提供向量数据库和向量模型及其他参数将内容检索器绑定到AiSe…...

企业使用Excel开展数据分析限制和建议完整版

Excel作为企业数据分析的常用工具&#xff0c;虽然功能强大&#xff0c;但也存在一些限制和使用时的注意事项。以下是综合整理的关键点&#xff1a; 一、Excel在企业数据分析中的限制 数据处理规模有限 Excel的行列限制&#xff08;如Excel 2019及之前版本最多支持1,048,576行…...

41、web前端开发之Vue3保姆教程(五 实战案例)

一、项目简介和需求概述 1、项目目标 1.能够基于Vue3创建项目 2.能够基本Vue3相关的技术栈进行项目开发 3.能够使用Vue的第三方组件进行项目开发 4.能够理解前后端分离的开发模式 2、项目概述 使用Vue3结合ElementPlus,ECharts工具实现后台管理系统页面,包含登录功能,…...

Quill富文本编辑器支持自定义字体(包括新旧两个版本,支持Windings 2字体)

文章目录 1 新版&#xff08;Quill2 以上版本&#xff09;2 旧版&#xff08;Quill1版本&#xff09; 1 新版&#xff08;Quill2 以上版本&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta n…...

Flutter命令行打包打不出ipa报错

Flutter打包ipa报错解决方案 在Flutter开发中&#xff0c;打包iOS应用时可能会遇到以下错误&#xff1a; error: exportArchive: The data couldn’t be read because it isn’ in the correct format. 或者 Encountered error while creating the IPA: error: exportArchive…...

UV安装与使用

1. 概述 GitHub&#xff1a;astral-sh/uv: An extremely fast Python package and project manager, written in Rust. 官网&#xff1a;uv An extremely fast Python package and project manager, written in Rust. 效率神器&#xff0c;基于Rust实现&#xff0c;比传统工具快…...

SQL练习题

数据表介绍 –1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别–2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号–3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名–4.成绩表…...

Rust Command无法执行*拓展解决办法

async fn run_cmd_async_out<I, S>(cmd: &str, args: I, timeout_s: u64, with_http_proxy: bool) -> Result<String> whereI: IntoIterator<Item S>,S: AsRef<OsStr>, {let mut cmd tokio::process::Command::new(cmd);// 让 sh 来运行命令&…...

利用Hadoop MapReduce实现流量统计分析

在现代大数据时代&#xff0c;处理和分析海量数据是一项常见的任务。Hadoop MapReduce提供了一种高效的方式来处理分布式数据集。本文将通过一个具体的示例——流量统计分析&#xff0c;来展示如何使用Hadoop MapReduce进行数据处理。 项目背景 在电信行业中&#xff0c;对用…...

Spring Boot应用程序接入ELK-003

Spring Boot应用程序接入ELK 一、项目依赖集成 在将Spring Boot应用程序接入ELK日志搜索引擎时&#xff0c;首先要在项目中集成相关依赖&#xff1a; &#xff08;一&#xff09;Logstash依赖 <dependency><groupId>net.logstash.logback</groupId><a…...

spark(一)

本节课围绕Spark Core展开深入学习&#xff0c;了解了Spark的运行架构、核心组件、核心概念以及提交流程&#xff0c;明晰其整体运行机制与各部分协作逻辑。重点聚焦于两个核心组件&#xff1b;对RDD相关概念进行了细致学习&#xff0c;包括其核心属性、执行原理、序列化方式、…...

绿电直供零碳园区:如何用清洁能源重塑企业竞争力?

引言 在全球积极应对气候变化的大背景下&#xff0c;“双碳” 目标已成为世界各国实现可持续发展的关键战略方向。我国也明确提出要在 2030 年前实现碳达峰&#xff0c;2060 年前实现碳中和&#xff0c;这一宏伟目标的提出&#xff0c;对各行各业都产生了深远影响&#xff0c;…...

国家科技奖项目答辩ppt设计_科技进步奖PPT制作_技术发明奖ppt美化_自然科学奖ppt模板

国家科学技术奖 为了奖励在科学技术进步活动中做出突出贡献的公民、组织&#xff0c;调动科学技术工作者的积极性和创造性&#xff0c;加速科学技术事业的发展&#xff0c;提高综合国力而设立的一系列奖项。每两三年评选一次。 科技奖ppt案例 WordinPPT / 持续为双一流高校、…...

LLM应用实战2-理解Tokens

文章目录 基本定义Tokenization 的作用主流 Tokenization 算法示例示例GPT-4o&GPT-4o miniGPT-3.5 & GPT-4 基本定义 Tokens 是大型语言模型&#xff08;LLM&#xff09;处理文本或代码的最小语义单元&#xff0c;可包含以下形式&#xff1a; 字符&#xff08;如英文…...

【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化详解 - 3-5年Java开发必备知识 引言 在当今的微服务架构中&#xff0c;分布式事务处理和性能优化是面试中经常被问及的高频话题。随着系统规模的扩大&#xff0c;如何保证数据一致性和系统性能成为了开发者…...

NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)

回忆&#xff1a;哈希函数与哈希冲突 哈希函数&#xff1a;将关键字映射成对应的地址的函数&#xff0c;记为 Hash(key) Addr 。哈希冲突&#xff1a;哈希函数可能会把两个或两个以上的不同关键字映射到同⼀地址&#xff0c;这种情况称为哈希冲突。 字符串哈希 定义⼀个把字…...

Spring MVC 请求类型注解详解

Spring MVC 请求类型注解详解 1. 核心注解分类 Spring MVC 中的请求处理注解分为以下几类&#xff1a; 类别注解示例作用范围方法级注解RequestMapping, GetMapping 等方法级别参数级注解RequestParam, RequestBody方法参数模型/会话注解ModelAttribute, SessionAttributes方…...