【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理

了解更多银河麒麟操作系统全新产品,请点击访问

麒麟软件产品专区:https://product.kylinos.cn

开发者专区:https://developer.kylinos.cn

文档中心:https://documentkylinos.cn


情况描述

中标麒麟服务器操作系统V7运行在 ARM虚拟机上java业务解析存储域名,出现偶发性失败。

情况分析

业务模型及抓包分析

通过和应用研发人员沟通确认域名解析的接口为java标准库提供的InteAddress.getAllByName()函数,用于获取与一个域名相关的所有IP地址。同时支持IPV4和IPV6地址解析。

dns报文格式如下:

dns请求报文

dns响应报文

DNS的报文格式。其中,事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这6个字段是DNS的报文首部,共12个字节。整个DNS报文格式主要分为3部分内容,即基础结构部分、问题部分、资源记录部分。

事务ID:DNS 报文的 ID 标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的。

标志Flags:DNS 报文中的标志字段。

问题计数:DNS 查询请求的数目。

回答资源记录数:DNS 响应的数目。

权威名称服务器计数:权威名称服务器的数目。

附加资源记录数:额外的记录数目(权威名称服务器对应 IP 地址的数目)。

同时根据现有抓包信息:

解析异常时间点,ipv4和ipv6 dns请求报文的事务ID一致,且先回复了ipv6的结果,同时状态为“拒绝”即reply code为5。

所以此处怀疑事务ID冲突是导致解析异常的直接原因,怀疑底层存在事务ID初始化非原子性的情况。

后续验证及代码分析

为排除应用层代码逻辑的影响,编写对应测试程序调用InteAddress.getAllByName()解析存储端域名,经过4天测试复现问题。

对应复现的抓包信息:

关于DNS报文头部的初始化逻辑在底层glibc的reslov相关基础库中。初始化代码如下:

对比glibc-2.17和glibc-2.28版本此处算法及初始化逻辑并无变化。随后追溯2.17及之后相关小版本的补丁,确认Redhat7.9中遇到相关并行DNS请求ID冲突的问题,导致解析超时或失败的情况,详见https://bugzilla.redhat.com/show_bug.cgi?id=2065058。

    该补丁修复并不是针对并行初始化ID时原子锁缺失的场景,而是增加相关逻辑处理ID重复且可能有效的DNS响应报文。

相关补丁代码如下:

分析结论及升级方案

分析结论

并行DNS请求时可能存在事务ID一致的情况,原始glibc相关函数(res_send)只会处理第一个响应报文,忽略第二个报文,可能导致真实的解析结果丢失,最终解析超时或者失败。

高版本glibc-2.17-326通过增加相关逻辑处理同ID的第二个响应报文,修复该问题。

升级方案

中标麒麟操作系统v7.6当前最新版本为glibc-2.17-326.el7.ns7.02,该版本除修复了dns解析相关问题,同时优化解决timezone以及GB18030字符集的问题,所有补丁和红帽7系列对齐,经过严格测试后入库,升级不会影响当前系统稳定性。

具体升级方案:

rpm -Uvh glibc*.rpm nscd*.rpm

升级完成后需重启系统。

以下为测试环境升级结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492502.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌浏览器的界面调整与设置方法

谷歌浏览器是一款广受欢迎的网络浏览器,其简洁的界面和丰富的扩展功能吸引了大量用户。本文将详细介绍如何调整谷歌浏览器的界面以及一些实用的设置方法,帮助你更好地使用这款浏览器。(本文由https://chrome.sungyun.cn/的作者进行编写&#…

05、GC基础知识

JVM程序在跑起来之后,在数据的交互过程中,就会有一些数据是过期不用的,这些数据可以看做是垃圾,JVM中,这些垃圾是不用开发者管的,它自己会有一套垃圾回收系统自动回收这些内存垃圾,以备后面继续…

苍穹外卖-day05redis 缓存的学习

苍穹外卖-day05 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作Redis店铺营业状态设置 学习目标 了解Redis的作用和安装过程 掌握Redis常用的数据类型 掌握Redis常用命令的使用 能够使用Spring Data Redis相关API操作Redis 能够开发店铺营业状态功能代码 功能实…

Spark-Streaming集成Kafka

Spark Streaming集成Kafka是生产上最多的方式,其中集成Kafka 0.10是较为简单的,即:Kafka分区和Spark分区之间是1:1的对应关系,以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整,下面我们…

启动报错java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus

报错信息图片 日志: Exception in thread "Quartz Scheduler [scheduler]" java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus先说我自己遇到的问题,我们项目在web设置了自定义的log输出路径,多了一个 / 去…

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效…

数据增强的几大方式

1. 随机擦除(Random Erasing) 说明 随机在图像中选取一个矩形区域,将其像素值随机化或设为零,以增加模型对部分缺失信息的鲁棒性。 import numpy as np import cv2def random_erasing(image, sl0.02, sh0.2, r10.3):h, w, _ image.shapearea h * wta…

leecode416.分割等和子集

这道题目看了题解把题目转化为01背包问题才恍然大悟,sum为数组的总和,背包容量为sum/2,价值和背包重量都为nums[i],由于价值和背包重量都为nums[i],那么容量为sum/2的背包最多只能获得最大的价值是sum/2,所…

首次下载steam更新速度慢解决方法

下载免费的加速器,在加速器的steam商店加速页面→加速后页面上方的区服选择 (香港移动)→双箭头→改为登录异常专用→在下部的登录修复进入steam更新 就好了,亲测有效

芯片级IO (Pad) Ring IP Checklist

SoC top顶层数字后端实现都会涉及到IO Ring (PAD Ring)的设计。这里面包括VDD IO,VDDIO IO, Signal IO, Corner IO,Filler IO,IO power cut cell等等。 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字IC后端实现TOP F…

通过算法识别运行过程中产生的常见缺陷,及时处理,避免运行故障,影响正常作业的智慧快消开源了

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。 基于多年的深度…

μC/OS-Ⅱ源码学习(7)---软件定时器

快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) μC/OS-Ⅱ源码学习(3)---事件模型 μC/OS-Ⅱ源码学习(4)---信号量 μC/OS-Ⅱ源码学习(5)---消息队列 μC/OS-Ⅱ源码学习(6)---事件标志组 本文进一…

CRYPTO密码学

加解密算法/编码 编码base家族unicodeASCII哈希算法MD5 Message Digest AlgorithmnSM3SHA-3GBGB18030GB2312GBKutf家族恺撒二进制分区法DSADSSCRC32校验对称非对称gbk编码h264SEA初探smc动态代码保护四方密码曼彻斯特编码剖析基本概念什么是编码?什么是加密与解密寻找银弹-有没…

【前端】深入探讨 JavaScript 的 reduce() 方法

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是 reduce() 方法?定义与核心概念语法结构参数解析返回值 💯基础用法与示例示例 1:计算数组元素的和解析 示例 2:统计…

postman关联接口用于登录(验证码会变情况)

目录 一、介绍 二、操作步骤 (一)Fiddler抓取到登录信息 (二)postman发送请求 新建请求一:登录值请求 (三)易变值赋值固定住 新建请求二:易变值验证码(uuid)请求 切换到请求一里面进行赋值绑定 一、介绍 接口有两种形式,一种是单…

SSC338Q SigmaStar 摄像头主控芯片

SSC338Q 是一款由 SigmaStar(星宸科技)推出的高集成度多媒体系统级芯片(SoC),广泛应用于高分辨率智能视频录制设备,如 IP 摄像机、车载摄像机和 USB 摄像机。 处理器: CPU:32 位双…

苹果将推出超薄和折叠款iPhone,2024年带来哪些变化?

苹果公司(AAPL)近日宣布,将对其iPhone系列进行重大升级,以应对当前市场中的销量压力。这一改变,或许会为苹果带来新的增长动力。那么,苹果的2024年新iPhone究竟有哪些亮点呢?下面我们来详细了解…

QML 粒子模拟

粒子模拟 粒子模拟 粒子模拟的核心是粒子系统(ParticleSystem), 它控制共享时间线。一个粒子使用发射器元素(Emitter)发射, 使用粒子画笔(ParticlePainter)实现可视化, 它可以是一张…

Java中的Consumer接口应该如何使用(通俗易懂图解)

应用场景: 第一次程序员A写好了个基础的遍历方法: public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来,则…

WPF+MVVM案例实战与特效(四十四)- WPF多语言支持全解析:轻松实现国际化应用

文章目录 1、引言2、案例效果3、准备工作1、创建项目结构2、代码实现1、语言资源2、资源引用3、页面功能4、实现效果3、总结1、引言 在当今全球化的背景下,开发一个多语言支持的应用程序变得越来越重要。WPF提供了强大的功能来实现应用程序的国际化和本地化。本文将详细介绍如…