【Linux】网络诊断 traceroute命令详解

目录
一、traceroute概述
1.1 traceroute命令简介
1.2 命令格式
1.3 原理
1.4 命令功能
二、使用实例
实例1:traceroute 用法简单、最常用的用法
实例2:跳数设置
实例3:设置探测数据包数量
实例4:显示IP地址,不查主机名
实例5:绕过正常的路由表,直接发送到网络相连的主机
实例6:探测包使用的基本UDP端口设置6888
网络诊断相关命令或工具使用:
【Linux】网络诊断 ping命令详解_linux ping-CSDN博客
【网络】抓包工具Wireshark下载安装和基本使用教程-CSDN博客
【网络】网络层ICMP协议-CSDN博客
一、traceroute概述
1.1 traceroute命令简介
traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并尝试从通往主机的路径上的每个网关引出ICMP TIME_EXCEEDED响应,它默认发送的数据包大小是60字节(IPv4,CentOS7.X)。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute默认要测3次,输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,我们会在linux主机系统下,直接执行命令行:
traceroute hostname
而在Windows系统下是执行tracert的命令:
tracert hostname
1.2 命令格式

官方释义翻译:
traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并尝试从通往主机的路径上的每个网关引出ICMP TIME_EXCEEDED响应。
traceroute唯一需要的参数是目标主机的名称或IP地址。可选的packet_length是探测报文的总大小(IPv4默认60字节,IPv6默认80字节)
程序试图通过启动带有TTL(生存时间)的探测数据包来跟踪IP数据包将遵循的路由到某些internet主机,然后侦听来自网关的ICMP“超时”回复。我们以ttl为1开始探测,然后再增加1,直到我们得到ICMP“端口不可达”(或TCP重置),这意味着我们到达了“主机”,或者达到了最大值(默认为30跳)。每个ttl设置发送三个探测(默认情况下) 打印出一行显示ttl、网关地址和每个探针的往返时间。如果需要,可以在地址后面加上其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在5.0秒(默认)内没有响应,则为该探测打印“*”(星号)。
在行程时间之后,可以打印一些附加的注释:!H, !N,或!P(主机,网络或协议不可达),!S(源路由失败),!F(需要分片),!X(管理禁止通信),!V(主机优先级违反),!C(优先级有效切断),或!<num> (ICMP不可达代码<num>)。如果几乎所有探测都导致某种不可达,traceroute将放弃并退出。
1.3 原理
traceroute程序完整过程:首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。

如图所示,在IPv4中,ICMP报文属于IP子协议,协议(Protocal)字段值为1表示该报文携带了ICMPv4。

如图所示,为ICMPv4的报文格式。所有的ICMP报文都以8位的类型(Type)和代码(Code)字段开始,其后的16位校验和(CheckSum)字段涵盖了整个报文。

其中各字段的含义如下:
- 类型(Type):指定 ICMP 报文的类型,占 1 个字节。常见类型有:回显应答(Echo Reply:0)、回显请求(Echo Request:8)等。
- 代码(Code):指定 ICMP 报文的代码,占 1 个字节。用于进一步描述 ICMP 报文,与 Type 字段组合使用。
- 校验和(Checksum):校验和,用于检查 ICMP 报文是否有损坏,占 2 个字节。
- 数据(Data):数据,可变长度。可以是任意数据,长度由具体的 ICMP 报文类型和代码决定。

基于ICMP报文的traceroute是这样实现的:让你在客户端输入 traceroute 命令+ip时, 客户端就发起一个ICMP回显请求报文,第一个数据包,TTL=1,这样第一跳路由器收到后,要转发出去时,会将TTL减一,即TTL=0, 就丢弃,然后第一跳路由器就返回一个ICMP超时的错误信息,客户端收到后,会判断是否收到ICMP 回显应答 报文? 如果还没收到,就会继续发送回显请求报文,TTL加1进行尝试,当到底服务器后,服务器就会发送ICMP 回显应答报文。


1、客户端发送第一个TTL=1的ICMP 回显请求报文,第1跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第1跳地址:10.10.10.10


2、由于客户端发现还没收到回显应答的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=1。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。
客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第2跳地址:20.20.20.20


3、由于客户端仍然还没收到 回显应答 的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=2。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=1, TTL不是0,路由器就继续转发。数据包终于到达服务器啦!服务器查看目的地址,就是找我的,于是继续解封装,查看IP数据部分(ICMP),发现是回显请求的ICMP报文,于是向客户端发送一个 回显应答的ICMP报文。
客户端收到,回显应答的ICMP报文,确认UDP数据包已成功到达服务器了,traceroute结束,并记录源IP地址:192.168.2.1
1.4 命令功能
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
具体参数格式:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
命令参数:
| 参数 | 释义 |
| -d | 使用Socket层级的排错功能。 |
| -f | 设置第一个检测数据包的存活数值TTL的大小。 |
| -F | 不要分割数据包。 |
| -g | 设置来源路由网关,最多可设置8个。 |
| -i | 使用指定的网络界面送出数据包。 |
| -I | 使用ICMP ECHO进行跟踪路由 |
| -T | 使用TCP SYN进行跟踪路由(默认端口为80) |
| -m | 设置检测数据包的最大存活数值TTL的大小。 |
| -N | 同时发送探测报文的个数。同时发送多个探针可以提高速度traceroute很大。默认值为16。 |
| -n | 直接使用IP地址而非主机名称。 |
| -p | 设置UDP传输协议的通信端口。 |
| -r | 忽略普通的Routing Table,直接将数据包送到远端主机上。 |
| -s | 设置本地主机送出数据包的IP地址。 |
| -t | 设置检测数据包的TOS数值。 |
| -v | 详细显示指令的执行过程。 |
| -w | 设置等待远端主机回报的时间。 |
| -x | 开启或关闭数据包的正确性检验。 |
二、使用实例
实例1:traceroute 用法简单、最常用的用法
命令:
traceroute www.baidu.com
输出:
[root@hdp105 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets1 * * *2 * * *3 124.89.90.205 (124.89.90.205) 4.446 ms 4.398 ms 3.707 ms4 123.139.0.85 (123.139.0.85) 3.225 ms 123.139.1.29 (123.139.1.29) 12.200 ms 123.139.1.177 (123.139.1.177) 2.085 ms5 * 221.11.0.145 (221.11.0.145) 35.491 ms *6 219.158.111.233 (219.158.111.233) 33.572 ms * 221.11.0.45 (221.11.0.45) 33.728 ms7 110.242.66.166 (110.242.66.166) 65.619 ms 110.242.66.170 (110.242.66.170) 65.541 ms *8 110.242.66.178 (110.242.66.178) 20.313 ms 221.194.45.134 (221.194.45.134) 20.487 ms 110.242.66.182 (110.242.66.182) 19.403 ms9 221.194.45.134 (221.194.45.134) 22.095 ms * 221.194.45.130 (221.194.45.130) 19.838 ms.....
29 * * *
30 * * *
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到有的行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
实例2:跳数设置
命令:限制路由经过 10跳停止
traceroute -m 10 www.baidu.com
输出:
[root@hdp105 ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 10 hops max, 60 byte packets1 * * *2 * * *3 124.89.90.205 (124.89.90.205) 5.417 ms 5.530 ms 5.287 ms4 123.139.1.29 (123.139.1.29) 1.992 ms 123.139.1.177 (123.139.1.177) 1.968 ms 123.139.2.161 (123.139.2.161) 1.945 ms5 * 221.11.0.1 (221.11.0.1) 2.090 ms *6 219.158.111.233 (219.158.111.233) 35.322 ms 221.11.0.69 (221.11.0.69) 28.003 ms *7 219.158.111.233 (219.158.111.233) 33.298 ms 33.255 ms *8 221.194.45.130 (221.194.45.130) 20.088 ms 110.242.66.170 (110.242.66.170) 20.029 ms 221.194.45.130 (221.194.45.130) 20.582 ms9 * * 221.194.45.134 (221.194.45.134) 21.801 ms
10 * * *
[root@hdp105 ~]#
实例3:设置探测数据包数量
命令:限制路由经过 10跳且 每一跳发送4个探测数据包
[root@hdp105 ~]# traceroute -q 4 -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.3), 10 hops max, 60 byte packets1 * * * *2 * * * *3 124.89.90.205 (124.89.90.205) 3.536 ms 3.507 ms 2.734 ms 3.425 ms4 * * * 123.139.2.37 (123.139.2.37) 2.599 ms5 221.11.0.1 (221.11.0.1) 2.756 ms 2.727 ms 5.096 ms 7.570 ms6 * 221.11.0.169 (221.11.0.169) 22.440 ms 221.11.0.69 (221.11.0.69) 27.588 ms *7 * 110.242.66.186 (110.242.66.186) 25.913 ms 219.158.111.233 (219.158.111.233) 21.579 ms 110.242.66.178 (110.242.66.178) 20.378 ms8 221.194.45.130 (221.194.45.130) 23.732 ms 110.242.66.162 (110.242.66.162) 20.793 ms 221.194.45.130 (221.194.45.130) 20.476 ms 23.077 ms9 221.194.45.134 (221.194.45.134) 24.247 ms * * *
10 * * * *
[root@hdp105 ~]#
如下图可以看到 发送4个探测数据包 输出了 4个数据包的时间

实例4:显示IP地址,不查主机名
命令:
traceroute -n -m 10 www.baidu.com
输出:

实例5:绕过正常的路由表,直接发送到网络相连的主机
命令:
traceroute -r www.baidu.com
输出:

实例6:探测包使用的基本UDP端口设置6888
命令:
traceroute -p 6888 www.baidu.com
输出:
[root@hdp105 ~]# traceroute -p 6888 -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 10 hops max, 60 byte packets1 * * *2 * * *3 124.89.90.205 (124.89.90.205) 2.079 ms 2.502 ms 2.440 ms4 123.139.0.85 (123.139.0.85) 2.280 ms 123.139.2.161 (123.139.2.161) 1.945 ms 123.139.1.29 (123.139.1.29) 2.212 ms5 * 221.11.0.53 (221.11.0.53) 27.007 ms *6 221.11.0.97 (221.11.0.97) 22.444 ms * *7 110.242.66.170 (110.242.66.170) 20.305 ms * *8 110.242.66.174 (110.242.66.174) 20.119 ms 221.194.45.130 (221.194.45.130) 19.840 ms 221.194.45.134 (221.194.45.134) 21.036 ms9 * 221.194.45.130 (221.194.45.130) 20.001 ms *
10 * * *
[root@hdp105 ~]#

参考文章:
【Linux】网络诊断 ping命令详解_linux ping-CSDN博客
traceroute 命令,Linux traceroute 命令详解:显示数据包到主机间的路径 - Linux 命令搜索引擎
Linux命令:traceroute命令(路由跟踪)-CSDN博客
原文链接:linux网络命令--traceroute_traceroute命令详解-CSDN博客
动态图解 | 9分钟让你明明白白看懂Traceroute(路由追踪)的原理与实现
相关文章:
【Linux】网络诊断 traceroute命令详解
目录 一、traceroute概述 1.1 traceroute命令简介 1.2 命令格式 1.3 原理 1.4 命令功能 二、使用实例 实例1:traceroute 用法简单、最常用的用法 实例2:跳数设置 实例3:设置探测数据包数量 实例4:显示IP地址,…...
c#cad 创建-圆(二)
运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是一个AutoCAD插件,用于在模型空间中创建一个圆形。 首先,我们需要定义一个命令类CreateCircleCommand,并在命名空间CreateCircleInCad中声明。 在CreateCircleCommand类中&a…...
面试高频知识点:2线程 2.1.5如何自定义实现一个线程池
在Java中,线程池是一种用于管理线程的机制,它可以有效地管理多个线程并且可以重复使用它们,从而减少了线程创建和销毁的开销,提高了线程的利用率。本文将介绍如何自定义实现一个简单的线程池,并提供相应的Java代码示例…...
【stm32】hal库学习笔记-ADC模数转换(超详细)
【stm32】hal库学习笔记-ADC模数转换(超详细) 本篇章介绍了ADC实现电压检测的三种方式 ADC原理及选型 ADC将连续的模拟电压信号转换为二进制的数字信号 选型参数 速度(采样频率) 功耗 精度 转换原理 ADC hal库驱动函数 普通…...
蓝桥杯基础知识6 pair
蓝桥杯基础知识6 pair pair 的定义和结构:在C中,pair是一个模板类,用于表示一对值的组合,头文件<utility>。 pair类 的定义: template<class T1, class T2> struct pair{T1 first; // 第一个值T2 seco…...
后端返回给前端的数据格式有哪些?
后端返回的数据格式有很多种,常见的包括JSON、XML、HTML、CSV等。这些格式各有特点,适用于不同的应用场景。 JSON(JavaScript Object Notation):JSON是一种轻量级的数据交换格式,易于阅读和编写,…...
Transformer的PyTorch实现之若干问题探讨(一)
《Transformer的PyTorch实现》这篇博文以一个机器翻译任务非常优雅简介的阐述了Transformer结构。在阅读时存在一些小困惑,此处权当一个记录。 1.自定义数据中enc_input、dec_input及dec_output的区别 博文中给出了两对德语翻译成英语的例子: # S: de…...
系统参数SystemParameters.MinimumHorizontalDragDistance
SystemParameters.MinimumHorizontalDragDistance 是一个系统参数,它表示在拖放操作中鼠标水平移动的最小距离。 当用户按下鼠标左键并开始移动鼠标时,系统会检查鼠标的水平移动距离是否超过了 SystemParameters.MinimumHorizontalDragDistance。只有当…...
平屋顶安装光伏需要注意哪些事项?
我国对于房屋建设的屋顶形式,主要有平屋顶、斜屋顶、曲面屋顶和多波式折板屋顶等。今天来讲讲在平屋顶安装光伏,需要注意的事项。 1.屋顶结构:在安装光伏系统之前,需要对屋顶结构进行评估,确保屋顶能够承受光伏系统的…...
《Git 简易速速上手小册》第7章:处理大型项目(2024 最新版)
文章目录 7.1 Git Large File Storage (LFS)7.1.1 基础知识讲解7.1.2 重点案例:在 Python 项目中使用 Git LFS 管理数据集7.1.3 拓展案例 1:使用 Git LFS 管理大型静态资源7.1.4 拓展案例 2:优化现有项目中的大文件管理 7.2 性能优化技巧7.2.…...
从0开始学Docker ---Docker安装教程
Docker安装教程 本安装教程参考Docker官方文档,地址如下: https://docs.docker.com/engine/install/centos/ 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest…...
嵌入式学习之Linux入门篇笔记——15,Linux编写第一个自己的命令
配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是命令? 命令就是可执行程序。 比如 ls -a…...
【C语言】SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
一、SYSCALL_DEFINE3与系统调用 在Linux操作系统中,为了从用户空间跳转到内核空间执行特定的内核级操作,使用了一种机制叫做"系统调用"(System Call)。系统调用是操作系统提供给程序员访问和使用内核功能的接口。例如&…...
C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)
1环境说明 2获取鼠标位置的接口 void GetMouseCurPoint() {POINT mypoint;for (int i 0; i < 100; i){GetCursorPos(&mypoint);//获取鼠标当前所在位置printf("% ld, % ld \n", mypoint.x, mypoint.y);Sleep(1000);} } 3操作鼠标左键和右键的接口 void Mo…...
Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】
文章目录 Matplotlib绘制炫酷散点图:二维、三维和散点图矩阵的参数说明与实战引言二维散点图三维散点图散点图矩阵二维散点图进阶:辅助线、注释和子图三维散点图进阶:动画效果和交互性散点图矩阵进阶:调整样式和添加密度图总结与展…...
Docker-Learn(一)使用Dockerfile创建Docker镜像
1.创建并运行容器 编写Dockerfile,文件名字就是为Dockerfile 在自己的工作工作空间当中新建文件,名字为Docerfile vim Dockerfile写入以下内容: # 使用一个基础镜像 FROM ubuntu:latest # 设置工作目录 WORKDIR /app # 复制当前目…...
问题:银行账号建立以后,一般需要维护哪些设置,不包括() #学习方法#经验分享
问题:银行账号建立以后,一般需要维护哪些设置,不包括() A.维护结算科目对照 B.期初余额初始化刷 C.自定义转账定义 D.对账单初始化 参考答案如图所示...
教授LLM思考和行动:ReAct提示词工程
ReAct:论文主页 原文链接:Teaching LLMs to Think and Act: ReAct Prompt Engineering 在人类从事一项需要多个步骤的任务时,而步骤和步骤之间,或者说动作和动作之间,往往会有一个推理过程。让LLM把内心独白说出来&am…...
FPGA_工程_按键控制的基于Rom数码管显示
一 信号 框图: 其中 key_filter seg_595_dynamic均为已有模块,直接例化即可使用,rom_8*256模块,调用rom ip实现。Rom_ctrl模块需要重新编写。 波形图: 二 代码 module key_fliter #(parameter CNT_MAX 24d9_999_99…...
WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)
0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin HTML5 Video Player 插件 get_v…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
