Wireshark TS | Linux 系统对时问题

问题描述

节前业务运维同事提交了一个 case ,说是部署在新业务区域的 Linux 服务器和老业务区域的 Linux 服务器无法对时,脚本里使用的是 clockdiff 命令,无法正常返回结果,而在老业务区域两台服务器之间执行命令就正常,因为跨业务区域就有问题,所以怀疑是网络或是安全上有问题,而新老区域之间并无防火墙,排除掉,遂进入疑似网络故障分析。

问题分析

拿到这样一个问题,基于经验,可以简单梳理出以下处理步骤:

  1. 新老网络环境区别;
  2. clockdiff 实现原理;
  3. 故障复现和验证;
  4. 网络抓包分析。

新老网络环境区别

老业务区域网络环境为全思科设备,由于国产化替代趋势,新业务区域网络环境为全华为设备,仅此区别,也都是传统基础路由交换环境,配置上并无任何特殊之处。如果能排除服务器或操作系统的问题,那么问题就有可能出现在思科或华为网络设备上。

clockdiff 实现原理

clockdiff 命令用于测量两个主机之间的时钟差异,具体来说 clockdiff 是使用 ICMP 时间戳报文或使用 ICMP ECHO 的 IP 时间戳选项,以 1ms 精度测量两者之间的时钟差。

使用 ICMP 时间戳报文
clockdiff 10.1.1.1

使用 ICMP ECHO 的 IP 时间戳选项
clockdiff -o 10.1.1.1

Linux clockdiff 命令参考:https://linux.die.net/man/8/clockdiff

故障复现和验证

进一步和业务运维同事明确了故障环境和现象,补充了一点说是在老业务区域下成功的两台服务器是同一网段,且命令是加参数的 -o 。
基于上述情况,临时申请了几台新老环境下的虚机服务器,用于验证。验证方式很简单,clockdiff 命令执行的成功否类似网络中的通或者不通,故障很好复现,也很方便抓包排障。

测试环境和验证结果:

执行命令网络环境(思科)网络环境(华为)
同网段不同网段同网段不同网段
clockdiff成功成功成功成功
clockdiff -o成功失败成功成功

验证结果初步说明可能是思科区域核心网关交换机的问题,同网段二层交换机时正常,只有跨网段三层路由时有问题,而且只有加了参数 -o 也就是使用 IP 时间戳选项时有问题。

网络抓包分析

思科同网段

  1. 在虚机服务器上执行 clockdiff 成功的现象和抓包结果,如下:
[root@10-1-1-1 ~]$ clockdiff 10.1.1.2
.
host=10.1.1.2 rtt=750(187)ms/0ms delta=22ms/22ms Sun Jan 29 15:34:00 2023
[root@10-1-1-1 ~]$

clockdiff 命令 ICMP 数据包类型为 Timestamp request(Type 13)Timestamp reply (Type 14)

image.png

image.png

  1. 在虚机服务器上执行 clockdiff -o 成功的现象和抓包结果,如下:
[root@10-1-1-1 ~]$ clockdiff -o 10.1.1.2
..
host=10.1.1.2 rtt=562(280)ms/0ms delta=23ms/23ms Sun Jan 29 15:34:05 2023
[root@10-1-1-1 ~]$

clockdiff -o 命令 ICMP 数据包类型实际为普通的 Echo request(Type 8)Echo reply (Type 0),区别是在 IPv4 Options 上使用 Time Stamp。

image.png

image.png

思科不同网段

在虚机服务器上执行 clockdiff 成功和 clockdiff -o 失败的现象,如下:

[root@10-1-1-1 ~]$ clockdiff 10.2.1.1
.
host=10.2.1.1 rtt=750(187)ms/0ms delta=1ms/1ms Sun Jan 29 15:34:16 2023
[root@10-1-1-1 ~]$ clockdiff -o 10.2.1.1
10.2.1.1 is down
[root@10-1-1-1 ~]$ 

从抓包结果来说:

  1. clockdiff 命令不同网段执行没有区别, ICMP 数据包类型仍为 Timestamp request(Type 13)Timestamp reply (Type 14),结果成功;
  2. clockdiff -o 命令不同网段执行结果失败,源服务器抓包可以看到 ICMP Echo request (Type 8)发出,但是在目的服务器上并没有抓到任何请求包,因此判断为思科区域核心网关交换机丢包

image.png

问题总结

经测试环境实际验证,判断为思科区域核心网关交换机疑似不识别 IPv4 Options 里的 TimeStamp 字段,从而造成丢包。后向原厂开 case 沟通,确认说是 N9K 网关不支持 IPv4 Options 里的时间戳的 standard timestamps,导致丢弃,同时查询内部信息,目前暂没有计划支持,也没有相关的支持配置命令,Over。

参考:

  1. 在 linux.die.net clockdiff 命令参考页面,还有一句貌似相关的注释:Some nodes (Cisco) use non-standard timestamps, which is allowed by RFC, but makes timestamps mostly useless.
  2. RFC 791 Options: variable,The options may appear or not in datagrams. They must be implemented by all IP modules (host and gateways). What is optional is their transmission in any particular datagram, not their implementation.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java基于微信小程序的校园二手物品交易系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

公厕智慧化_智慧化的公厕

公厕智慧化是现代城市建设中的重要一环。通过信息化、数字化和智慧化技术手段,实现对公共厕所的高效管理和服务,不仅提升了城市环境质量,还改善了居民生活品质。智慧公厕的智慧化包括监测、管理、服务和设备的智慧化,利用先进科技…

Unity中URP实现水体效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片,使其倾斜一个角度,来模拟水底和岸边的效果2、随便创建几个物体,作为与水面接触的物体3、再新建一个面片,作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

汇编语言movs指令学习

字符串传送指令(Move String Instruction) movs 该指令是把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元,并根据标志位DF对寄存器DI和SI作相应增减。该指令的执行不影响任何标志位。 记不清这指令是8086就有的,还是386以后新加的&…

【Redis】常见的5种数据类型(上)

文章目录 1 :peach:前言:peach:2 :peach:Redis 基本的全局命令:peach:2.1 :apple:keys:apple:2.2 :apple:exists:apple:2.3 :apple:del:apple:2.4 :apple:expire:apple:2.5 :apple:ttl:apple:2.6 :apple:type:apple: 3 :peach:单线程架构:peach:4 :peach:Redis 的 5 种常见数据…

Qt_纯虚函数的信号和槽

简介 在C中,纯虚函数是一个在基类中声明但没有实现的虚函数。纯虚函数的声明以 “ 0” 结尾。纯虚函数的目的是为了提供一个接口,但是不提供实现。派生类必须实现纯虚函数,否则它也会成为一个抽象类。纯虚函数可以在基类中定义,也…

MySQL--索引结构

索引-索引结构 1. 概述2. 二叉树3. B-Tree4. BTree5. Hash 1. 概述 MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种: 上述是MySQL中所支持的所有的索引结构,下面展示不同的存储引擎对于索引…

力扣382.链表随机节点

Problem: 382. 链表随机节点 文章目录 题目描述思路复杂度Code 题目描述 思路 由水塘抽样易得,当遇到i个元素,有 1 / i 1/i 1/i的概率选择该元素;则在实际操作中我们定义一个下标i从1开始遍历每次判断rand() % i 0(该操作就是判断…

Chrome插件(二)—Hello World!

本小节将指导你从头到尾创建一个基本的Chrome插件,你可以认为是chrome插件开发的“hello world”! 以下详细描述了各个步骤: 第一步:设置开发环境 确保你拥有以下工具: 文本编辑器:如Visual Studio Cod…

2278. 企鹅游行(最大流,拆点)

活动 - AcWing 在南极附近的某个地方,一些企鹅正站在一些浮冰上。 作为群居动物,企鹅们喜欢聚在一起,因此,它们想在同一块浮冰上会合。 企鹅们不想淋湿自己,所以它们只能利用自己有限的跳跃能力,在一块块…

容器_Docker ( 06 )

容器_Docker ( 05 ) Kubernetes 资源对象管理 资源对象文件 模板与帮助信息 资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理 , 保存 , 追溯历史 资源对象文件太长 , 记不住怎么办 使用命令创建模板查询帮助信息查询官方手册 生成资源…

区块链游戏解说:什么是 Ultimate Champions

作者:lesleyfootprint.network 编译:cicifootprint.network 数据源:Ultimate Champions Dashboard 什么是 Ultimate Champions Ultimate Champions 是一款免费的奇幻足球和篮球游戏,拥有官方授权的数字卡牌作为区块链上的 NFT…

go interface{} 和string的转换问题

1.遇到的问题 问题来源于,我sql模版拼接遇到的问题。 首先,这样是没有问题的。 var qhx interface{} "qhx"s : qhx.(string)fmt.Println(s) 但是当我在这段代码里用:1.类型断言 var sqlStr "select * from tx_user where username %s" join…

SpringBoot -【SmartInitializingSingleton】基础使用及应用场景

SmartInitializingSingleton 在继续深入探讨 SmartInitializingSingleton接口之前,让我们先了解一下 Spring Framework 的基本概念和背景。Spring Framework 是一个开源的 JavaEE(Java Enterprise Edition)全栈(full-stack&#x…

C++面试题精选与解析

C面试题精选与解析 一、基础与语法 请问C中的指针和引用有什么区别? 指针是一个变量,存储的是另一个变量的内存地址。指针可以被重新赋值以指向另一个不同的对象。而引用是某个变量的别名,一旦引用被初始化为一个变量,就不能改变…

高级统计方法 第4次作业

作业评阅: 概念 2.问题 KNN分类和KNN回归都是KNN算法在不同类型数据上的应用,但它们之间存在明显的区别。 解决的问题类型不同:KNN分类适用于解决分类问题,而KNN回归则适用于解决回归问题。当响应变量是连续的,根据…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网,点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装,我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑,第二种方法需要 Erlang 的依赖&#x…

UE蓝图 函数调用(CallFunction)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理:把被识别的物体转成图、立体图、柱形图,3D模型、环境模型,然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容,然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去! 不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功…

uni-app vue3 setup nvue中webview层级覆盖问题

核心就是这两行,🤣发现设置后不能点击了,这个玩意可能只能弹窗打开的时候动态的修改 position: static, zindex: 0onLoad(options > {loadWebview()})function loadWebview() {let pageInfo uni.getSystemInfoSync();width.value pageI…