Wireshark抓包实战:VXLAN协议解析与故障排查

从某天深夜开始,我的工作群里突然炸了锅:某个跨机房的业务系统出现间歇性不通,虚拟机迁移后全网段丢包,底层物理网络看起来一切正常,ping网关也通,但业务就是像被什么东西掐住了脖子。我第一反应不是重启任何服务,而是抓起抓包工具在宿主机上看了一眼,问题瞬间清晰——overlay网络里的VXLAN报文长得完全不符合预期,内层MAC表也是一团乱麻。这正是VXLAN协议最折磨人的地方:它在物理网络上又套了一层虚拟网络,数据包在传输时要经历“外层封装+内层解封装”两道工序,任何一个环节出了偏差,外表看可能毫无痕迹,内里却早已乾坤颠倒。

这篇文章就围绕Wireshark分析VXLAN协议这条主线,把虚拟扩展局域网的核心原理、报文结构、过滤技巧、排障思路全部摊开讲。适合三类人看:一是刚接触overlay网络、只听过VXLAN但没见过真实抓包的网络工程师;二是要在云平台或虚拟化环境里排查“诡异不通”问题的运维老手;三是准备面试、想深入理解封装细节的进阶学习者。读完你会知道怎么在Wireshark中迅速定位VXLAN流量,怎么一眼看懂外层IP、UDP和八字节VXLAN头,怎么通过过滤器缩小排查范围,更重要的是掌握一套能直接复制的抓包分析方法论。

1. 内容整体设计与思路拆解

1.1 为什么要折腾VXLAN而不是直接拉线

传统二层网络的设计很简单:交换机靠MAC地址表转发帧,广播靠广播域扩散,一切都在同一个物理局域网内完成。问题在于,数据中心一旦大到要跨楼栋、跨园区甚至跨地域,二层网络的扩展性就捉襟见肘。STP要砍掉冗余链路,VLAN只有4094个编号,MAC表规模受限于交换机硬件,带宽利用率也因为环路阻断大打折扣。云平台要的是成千上万台虚拟机可以像在同一台交换机上一样自由迁移、随意组网,传统VLAN根本扛不住这种规模。

VXLAN的解决思路非常巧妙:它不直接扩展二层网络,而是把二层以太网帧封装进四层UDP报文里,再透过底层IP网络传输。通俗点说,就是把原来只能在“同一根网线”上跑的以太网帧,塞进一辆可以在任意IP网络中行驶的“货车”,到了目的地再拆开外包装,还原成原始以太网帧。因为UDP报文可以正常跨三层路由,VXLAN理论上可以跨越任何IP可达的网络边界,同时通过24位的VNI字段提供超过1600万个虚拟网络标识,彻底摆脱4094个VLAN的束缚。这个设计既保留了二层的灵活性,又借助三层的成熟路由和ECMP能力实现了大范围扩展,是当前主流云平台网络虚拟化的基石。

1.2 Wireshark看VXLAN的优势和拆解路径

Wireshark对VXLAN的支持在近几个版本里已经相当成熟。它不仅能根据UDP目标端口4789自动识别VXLAN流量,还支持手动“解码为”强制重解析,遇到非标准端口(比如某些虚拟化平台默认用8472)也能从容应对。更重要的是,Wireshark会把外层以太网、外层IP、外层UDP、VXLAN头、内层以太网帧逐层展开,像是剥洋葱一样把完整报文结构呈现在面板上。你不需要自己手工去计算偏移量、逐个字节解读十六进制内容,一切都在GUI里直观展示。

然而工具再强大也替代不了思维方式。分析VXLAN数据包时需要时刻区分“外层”和“内层”:外层头属于承载网络,解决的是“报文从哪里到哪里”的问题;内层帧属于租户网络,解决的是“虚拟机/容器之间如何通信”的问题。排查问题首先要判断问题出在哪一层,才能决定该盯着外层路由还是内层MAC地址。如果思路不清,抓了一堆包也只是看到一堆乱码,无法转化为有效判断。

2. 核心细节解析与实操要点

2.1 VXLAN报文封装结构逐字节拆解

拿到一个VXLAN报文,Wireshark会从上到下显示四层结构。第一层是外层以太网头,依次包含目的MAC、源MAC和可选的802.1Q VLAN标签。这一层主要用于物理网络上相邻设备之间的帧传输,目的MAC通常是下一跳网关或者远端VTEP的MAC。第二层是外层IP头,源IP是本地VTEP的IP地址,目的IP是远端VTEP的IP地址,它决定了这个报文在底层网络里怎么路由。第三层是外层UDP头,其中源端口不是随机分配的,而是通过对内层以太网帧做哈希计算得出的,范围通常在49152到65535之间。这个设计意图很实用:底层网络做等价多路径负载均衡时需要依据哈希因子来分流,如果所有VXLAN报文的源端口都固定不变,那么所有流量都会挤在同一条链路上。

第四层就是VXLAN头本身,一共8个字节。第一个字节是Flags标志位,一般取0x08,表示I位(VNI有效标志)置1,其余位保留为0。接下来的24位是保留字段,必须全0。再接下来是24位的VNI,也就是VXLAN网络标识符,取值范围从0到16777215。最后一个字节也是保留字段。Wireshark在Packet Details面板里会细致地把这些字段展开标示,比如“VXLAN Network Identifier (VNI): 100”,一眼就能知道报文属于哪个虚拟网络。

报文最里层是完整的内层原始以太网帧。它包含源MAC、目的MAC,也可能是VLAN标签,以及上层的IP报文、甚至TCP/UDP载荷。接收端VTEP收到外层报文后,会检查VNI和目的MAC,做相应的VXLAN解封装,再把原始二层帧从对应的虚拟网络中转发出去。

2.2 Wireshark识别VXLAN的端口逻辑与手动解码技巧

Wireshark判断一个UDP报文是不是VXLAN,主要依据是UDP目标端口。IANA分配的VXLAN标准端口是4789,Linux内核VXLAN模块默认也监听这个端口。但实际环境里并不总是这么标准:某些虚拟化平台为了避免与现有网络服务冲突,会把默认端口改成8472;有些交换机的VXLAN硬件网关也会用其他端口。遇到这类非标准端口,Wireshark默认不会主动解析,把它当成普通UDP数据对待,内层内容就完全看不到了。

解决办法有两种。第一种是一劳永逸地修改Wireshark的配置:在“Preferences” -> “Protocols” -> “VXLAN”里把默认端口改为实际使用的UDP端口,可以填多个端口,用逗号分隔。第二种是只针对单个捕获文件临时处理:选中任意一条UDP报文,右键选择“Decode As”,在弹出窗口里把该UDP端口的协议强制指定为“VXLAN”,改动会立刻生效,当前打开文件的全部流量都会按新规则重新解析。这个方法在排查别人提供的pcap文件时特别有用,不需要动全局配置就能快速验证推测。

一个小提醒:如果设备使用的是VXLAN-GPE(Generic Protocol Extension),也就是IETF定义的VXLAN头扩展版本,需要把解析协议改成“VXLAN-GPE”而不是标准VXLAN。VXLAN-GPE在头部的Flags字段里追加了Next Protocol字段,用于指示内层载荷类型是IP、以太网还是其他协议。用错解析器会导致内层信息被完全误读,这个坑我在现场踩过,排查了半天才发现是解析协议选错了。

2.3 核心过滤器与显示列配置

抓包只是第一步,面对成千上万条数据包,纯粹靠肉眼滚动翻找的效率极低。Wireshark的显示过滤器能精准锁定VXLAN流量以及特定虚拟网络内的报文,以下是我日常使用频率最高的几条过滤表达式:

vxlan

显示所有被识别为VXLAN的报文。这条过滤器也可以写作udp.port == 4789,但如果端口被手动改过,建议优先使用vxlan这个协议名,它会覆盖所有当前被解析为VXLAN的UDP报文。

vxlan.vni == 100

只看VNI等于100的虚拟网络流量。这个条件在定位“某个租户网络异常而其他网络正常”的场景中极其好用,一条命令就能把目标流量从海量数据包里拎出来。

vxlan && ip.addr == 192.0.2.10

同时匹配VXLAN报文和外层或内层IP地址。注意ip.addr是包含条件,它在Wireshark的匹配逻辑里会同时检查外层IP和内层IP,只要任意一个匹配就算命中。如果你只想匹配外层源IP,必须写成ip.src == 192.0.2.10;只想匹配内层目的IP,需要写成ip.dst == 192.0.2.10。这个细节很多人忽略,排查时容易把不属于目标链路的数据包误纳入范围。

vxlan && eth.addr == 00:16:3e:05:03:01

按内层MAC地址过滤。用于追踪某一台虚拟机发出的流量,尤其是在多租户共享同一VTEP的场景中,这个过滤器能很快定位到单一虚拟机的通信行为。

除了过滤器,我还会自定义Wireshark的显示列。默认的Protocol列对VXLAN报文一律显示为“VXLAN”,但如果想知道这个报文具体属于哪个虚拟网络,需要额外添加一列显示VNI。操作步骤是:右键点击Packet Details面板中的VNI字段,选择“Apply as Column”,该字段就会成为表格中的独立一列。再把外层源IP、外层目的IP、内层源MAC、内层目的MAC也分别作为列展示,一张完整的VXLAN流量视图就出来了。按照外层源目IP、VNI、内层MAC的顺序去审视流量特征,很多问题不看载荷就能猜个八九不离十。

3. 实操过程与核心环节实现

3.1 抓包点选择与抓包准备

VXLAN报文通常不是直接出现在业务虚拟机里的,它的封装和解封装都发生在VTEP上。VTEP的形态可能是物理交换机、虚拟交换机,也可能是宿主机内核里的VXLAN模块。因此抓包点选择直接影响能否抓到有意义的数据。

如果VXLAN终端是宿主机,最直接的抓包方式是在宿主机的物理网卡上抓取,这样能看到完整的外层封装报文;如果在虚拟机内部直接抓包,一般只能看到内层原始以太网帧,因为虚拟交换机已经把外衣脱掉了。排查“VXLAN隧道建立正常、但内层通信异常”的问题时,两边的包都必须抓:宿主机物理口看外层封装的完整过程,虚拟机内部确认内层业务报文是否正常到达,两相对照才能定位脱节环节。

抓包时要开启promiscuous混杂模式,以免网卡过滤掉目标MAC不是本机的数据包。尤其是抓VXLAN报文时,外层目的MAC可能是远端网关而非本机MAC,如果没开混杂模式,很可能一条VXLAN包都抓不到。命令行抓包可以用tcpdump指定端口和特定主机:

tcpdump -i eth0 -nn host 192.0.2.10 and udp port 4789 -s 0 -w vxlan_capture.pcap

-s 0表示抓取完整包长,避免截断导致内层信息不完整。抓包文件事后用Wireshark打开分析即可,这样既能在现场快速定位,又能在工位上慢慢复盘。

3.2 完整分析流程:从外层到内层追踪一次跨节点通信

为了讲清楚完整分析思路,我构造一个典型场景:虚拟机A在计算节点1上,虚拟机B在计算节点2上,两个节点都配置了VXLAN网络,VNI为100,两个节点之间的物理网络为三层可达。现在虚拟机A ping虚拟机B,我们在节点1的物理网卡上抓包,通过Wireshark观察完整数据流。

抓到数据后,第一步先用过滤器vxlan.vni == 100锁定目标流量。这时Packet List里应该能看到大量UDP报文,颜色通常会被标记成浅紫色(Wireshark默认的UDP颜色)。点击任意一条报文,Packet Details面板从上到下依次是:

外层的Ethernet II部分显示宿主机的MAC地址到对端物理IP网关的MAC地址。这里要确认外层目的MAC是否是下一跳设备的MAC。如果这是一个跨网段环境,目的MAC应该是路由器或网关的MAC,而不是远端VTEP的MAC。若目的MAC填了远端VTEP的MAC,但两台主机不在同一个二层网络,这个报文会在转发途中被丢弃,非常典型的错误。

外层IP部分确认源IP是本地VTEP,目的IP是远端VTEP。很多配置问题都出在这一段:源IP填了管理IP而不是隧道IP,或者目的IP是虚拟机的“虚拟IP”而不是VTEP地址。一个快速判断方法是,看这条UDP流量的源和目的地是否为物理网络中真实存在的三层接口地址。如果出现192.168.x.x这种明显属于内层规划的地址出现在外层,说明隧道封装配置错了。

外层UDP的源端口会是一个高位随机端口。把多条同一条流的报文展开对比,可以发现源端口通常是固定值,源端口是同一个值是因为同一虚拟机到同一目的虚拟机的内层五元组没变,哈希结果自然稳定。如果不固定,说明哈希计算输入里包含随机因素,这可能影响底层网络的负载均衡效果。

VXLAN头里重点看两个字段:Flags是否为0x08,以及VNI是否为100。如果Flags的I位没置1,接收端可能不识别VNI,报文视为无效丢弃;如果VNI不是100,可能抓到了别的租户的流量。接下来的内层以太网帧部分,检查源MAC是否为虚拟机A的MAC,目的MAC是否为虚拟机B的MAC或网关MAC。然后看内层IP:源IP是虚拟机A的IP,目的IP是虚拟机B的IP。到了这一步,整个路径的通断判断就清晰了:只要封装正确、外层路由可达、内层目标地址明确,报文理应被远端VTEP解封装后转发给目标虚拟机。

在真实环境中,常用方法是通过“跟随TCP流”或“显示IP对话”来把一次完整交互的所有报文聚合在一起。比如ping测试选择ICMP协议的报文,数一下有没有请求和响应成对出现。如果只看到请求没有响应,说明响应报文要么在远端丢了,要么在返回路径上封装出错。此时必须再抓远端VTEP的出入口数据,形成对照后才能下结论。

3.3 多VTEP组网场景中的抓包对照检查

另一种高频场景是多VTEP组成的大二层网络,配合头端复制(Head-end Replication)或组播实现广播域。此时一个广播帧到达VTEP后,会被复制发送给多个远端VTEP,抓包时会看到源IP是本地VTEP,目的IP是多个不同的远端VTEP,但内层帧完全相同。这个现象是正常的。

排查组播或头端复制异常时,重点检查复制报文的完整性。比如源VTEP是否把VXLAN头正确填充、每个复制报文的VNI是否一致、目的IP列表是否完整。如果某个远端VTEP一直收不到复制报文,而其他VTEP都正常,就去核对那个VTEP的IP是否在组播成员列表或头端复制列表里。抓包时最好把本地宿主机和对端宿主机同时抓下来,对比序列号和时间戳,确认报文是否真的发出、是否真的收到、是否在中间环节被策略丢弃。时间戳对齐很关键,我的习惯是把所有抓包机的时间先同步,再使用Wireshark的“Time Reference”功能,让对比更直观。

4. 常见问题与排查技巧实录

4.1 VNI配置不一致导致流量“隐形丢失”

现象是虚拟机A能ping通同节点虚拟机,但跨节点不通,抓包时看到外层VXLAN报文源源不断发出,远端也确认收到了报文,但内层就是不通。进一步检查发现,发送端VNI配置为100,接收端VTEP对应的网桥里配置的VNI却是200。接收端收到VNI=100的报文后,无法映射到任何本地虚拟网络,直接丢弃,但抓包时它确实曾经收到过这个报文,从物理网络层面看报文“已经到达”。

这种问题在Wireshark里很容易识别:发出端抓包看到报文的vxlan.vni是100,接收端抓包如果能看到同一条消息,可以确认外层传输没问题。如果接收端打开报文后发现VNI与本地网络不匹配,那基本可以断言是VNI配置漂移了。排查时先列出两边VTEP实际使用的VNI清单,再在抓包里提取所有VNI的值做对比,很快就能找到不一致。

4.2 MTU引发的“能通但慢”异常

VXLAN封装会额外增加50字节左右开销(外层以太网14字节+IP 20字节+UDP 8字节+VXLAN头8字节)。如果物理网络MTU是1500,参与VXLAN通信的虚拟机看到的内层接口MTU是1450,才能保证外层报文不超过1500。很多虚拟化平台会自动配置好内层接口MTU,但一旦虚拟机内部手动设置了1500,就会产生“报文过大需要分片”的场景。

这种问题在抓包里表现得很典型:看到大量内层IP标志带“Fragment Offset”的报文,或者看到ICMP报文里出现“Fragmentation needed”的错误消息。检查方法是在Wireshark里启用IP分片过滤,输入ip.flags == 0x01查看DF位置位的报文。如果报文DF置位且被丢弃,往往会出现“ping大包不通、ping小包通”的现象。解决方向很明确:要么把虚拟机网卡MTU调整为1450或更低,要么把物理网络MTU提升到1550以上承载封装开销。抓包在这里的价值是确认丢包发生在封装路径的哪一段,从而决定调整哪一侧的MTU。

4.3 内层MAC表与VXLAN隧道学习混乱

VXLAN的数据平面通常采用“内层MAC学习+外层VTEP映射”的方式建立转发条目。简单说,VTEP看到内层源MAC后,会记录“某个MAC地址来自某个远端VTEP”,后续发往该MAC的报文就通过对应的隧道转发。这种动态学习机制一旦出现异常,就会出现流量“左右横跳”或大规模乒乓。

比较常见的原因是不同租户的网络使用相同的MAC地址。由于VXLAN VNI不同,理论上MAC可以在不同VNI里重复,但如果VTEP的学习表没有把VNI纳入索引维度,新学到的MAC就可能覆盖旧条目,导致发往这个MAC的报文被送到错误的VTEP。抓包时看到的现象是:同一个内层MAC在一段时间内,先通过VTEP-X的隧道收到报文,然后又通过VTEP-Y的隧道收到同MAC的报文,期间伴随着网络震荡。排查时结合vxlan.vni过滤和MAC地址统计,看看同一个MAC是否存在跨VNI的重复出现。若存在,就需要检查VTEP的学习机制是否关闭了“多VNI隔离”,或者考虑配置静态MAC-VNI映射来规避。

4.4 非标准UDP端口与UDP端口重复冲突

有些环境里管理员为了“以防万一”给VXLAN改了端口,结果和上层某个业务端口撞在一起。比如把VXLAN监听端口配置成8472,恰好内部某个应用也用这个端口传数据,Wireshark会把所有该端口的UDP都解析成VXLAN,让协议识别假象满天飞。

解决办法是在过滤时加上外层IP条件加以区分。例如只关心两台VTEP之间的VXLAN流量,可以写成udp.port == 8472 && ip.addr == 10.10.1.1 && ip.addr == 10.10.1.2,把所有非这两台设备之间的8472端口报文排除在外。另外,用Wireshark的“Protocol Hierarchy”统计菜单查看各种协议占比,可以快速发现某个端口流量被大量解成VXLAN但实际内层不是以太网的异常,辅助识别端口冲突。

4.5 隧道两端各说各话:外层IP和内层IP容易被混淆

分析VXLAN时最容易犯的错误是把外层IP当成内层IP,或者反过来。VXLAN中存在两套IP地址体系:一套属于物理网络,一套属于虚拟网络。很多刚接触VXLAN的同事会拿着“虚拟机IP”在抓包里搜,结果搜半天搜不到,因为虚拟机IP作为内层IP被藏在VXLAN头的后面,Wireshark默认不会把它显示在外层IP的单独列中。强行过滤ip.addr == 虚拟机IP时,显示的是深层协议字段,但主列里不会自动展示,导致误判“流量不存在”。

解决办法就是前面说的:把内层IP字段添加为独立列,通过自定义显示列展示内层源IP、内层目的IP,并配合vxlan过滤器使用。这样可以同时看到两套IP,脑子里也能时刻记住“外层代表隧道走向,内层代表业务走向”,定位问题时就不会被表象带偏。

4.6 无回应问题的标准排查顺序

如果VXLAN流量在抓包里看起来一片正常但业务就是不通,我通常按这个顺序排查:先检查外层封装是否满足物理网络的转发要求(目的MAC是否下一跳,外层IP是否可路由),再检查VNI是否在接收端有对应虚拟网络,然后看内层目的MAC是否在接收端VTEP的转发表里,最后还需要核对安全策略(包括防火墙、安全组、ACL)是否拦截了相关流量。Wireshark的“Expert Info”窗口可以汇总异常报文(如checksum验证失败、断包、重传),优先处理这些红色警告信息。很多“正常中的不正常”就藏在checksum错误或者TCP乱序里,这些细节比单纯看某个IP通不通更敏锐。

5. 常用工具配合与生产环境的操作建议

5.1 命令行工具与Wireshark形成互补

抓包不只是图形界面Wireshark的事,生产环境往往没有图形界面,这时候tcpdump是主力。配合-c参数限制抓包数量,配合-w落盘保存文件,再用Wireshark离线分析,是标准做法。抓VXLAN时tcpdump指定udp port 4789或8472都可以,如果端口不确定,可以先用“udp portrange 4780-8500”这种宽范围抓一小段时间,再离线分析。

另一个常用命令是ethtool查看网卡队列数。如果物理网卡开启多队列,而VXLAN封装后的UDP源端口做哈希时未考虑网卡RSS(Receive Side Scaling)配置,可能出现部分队列过载、其他队列闲置的现象,导致抓包时某些队列的报文丢失。这种情况下抓包容易漏掉关键报文,需要把网卡队列收敛或开启flow-steering的匹配规则,才能确保抓包完整。

5.2 大流量环境下降低抓包开销

VXLAN报文包含双层头,报文整体变大,抓包带来的CPU和磁盘开销也相应增大。在高流量生产环境里,建议使用BPF过滤器限定范围,而不是全量抓包。常见策略是先按外层IP过滤:只抓本机到特定远端VTEP的流量,或者只抓带特定VNI的流量(通过过滤二进制偏移实现很困难,一般还是靠端口加IP做初筛)。如果流量实在太猛,还可以用snaplen截断抓包,只保留头部长度,比如-s 128字节足够看到外层IP、UDP和VXLAN头的大半内容,但会丢失内层IP关键信息,需要根据问题类型权衡。

我见过很多人抓包不加任何过滤,直接在核心节点上抓了几分钟,一个pcap文件几个GB,导入Wireshark后流畅度大打折扣,过滤响应也慢。与其事后后悔,不如在抓包前多花一分钟想清楚当前要验证什么、目标流量从哪个端口来、外层源目的IP是什么,然后用一个精确的BPF表达式去抓,效率和准确性都会高很多。

6. 最后一个值得铭记的实战心得

从我处理过的故障看,VXLAN模式的排障难点从不在于协议字段本身有多深奥,而在于它在物理网络和虚拟网络之间架了一座桥,你必须能够同时游走两端,且随时清楚自己此刻在哪一端。Wireshark的强项正是把这种“双重身份”透明化,只要你会读它的层级展开,你就同时拥有物理网络和虚拟网络的两个视图。我建议每个做数据中心网络或云平台运维的人,都找一个VXLAN抓包文件,按照外层IP、UDP、VXLAN头、内层帧的顺序,逐字段拆开看几遍,直到能够闭着眼睛画出封装结构为止。

最后再分享一个不算技巧但很重要的经验:永远不要只看单点抓包。VXLAN是点对点隧道技术,问题往往出在两端配置的匹配度上。无论Wireshark给出的单侧分析多么完美,只要没有另一侧的抓包做比对,就得对结论保持余量。正确做法是至少在两台VTEP上同时抓包,用pcap文件里的相对时间戳互相对齐,把报文的来龙去脉完整拼出来。只有完整地把路径拆开、对照、再拼起来,才算真正把VXLAN排查透了。

相关新闻

Linux内核挂死全解析:从现象到kdump实战排查

Linux内核挂死全解析:从现象到kdump实战排查

干内核这一行的人,最怕的其实不是进程崩溃,也不是磁盘写满,而是那种半夜被电话叫醒,电话那头只说一句“机器连不上了,ping 不通,屏幕卡死,按什么都没反应”。这种时候,十有八九是 Li…

2026/10/20 23:46:41 阅读更多 →
五星级酒店弱电设计工程逻辑链与国标落地指南

五星级酒店弱电设计工程逻辑链与国标落地指南

简介:本资源是一份面向建筑智能化设计工程师、酒店弱电系统集成商及高校智能建筑相关专业师生的五星级酒店弱电智能化设计方案PPT,聚焦于高规格酒店场景下的系统规划与工程落地。方案由具备国家建筑智能化设计施工一级资质的XXXXXX科技有限责任公司于201…

2026/10/20 23:46:41 阅读更多 →
从11.25亿网民到2亿次AI下单:AI正在重塑互联网交互与支付

从11.25亿网民到2亿次AI下单:AI正在重塑互联网交互与支付

1. 从一组数据聊起:互联网行业正在换挡最近有朋友问我,现在做互联网方向还有没有机会。我的回答是,先别急着看机会,先看一组刚刚出来的行业数据:我国网民规模达到11.25亿人,互联网普及率突破80%&#xff1b…

2026/10/20 23:46:41 阅读更多 →

最新新闻

贪心题目:受标签影响的最大值

贪心题目:受标签影响的最大值

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:受标签影响的最大值 出处:1090. 受标签影响的最大值 难度 5 级 题目描述 要求 有一个 n\texttt{n}n 项的集合。给定两个整数数组 values\…

2026/10/21 1:10:54 阅读更多 →
【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
基于Python+MySQL的员工档案管理系统

基于Python+MySQL的员工档案管理系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
什么是GC

什么是GC

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
Feign踩坑源码分析 -- 请求参数分号变逗号

Feign踩坑源码分析 -- 请求参数分号变逗号

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
MIPI D-PHY一致性测试失败排查:从CTS规范到Layout与调参的工程实践

MIPI D-PHY一致性测试失败排查:从CTS规范到Layout与调参的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:09:54 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →