排错工具ping和trace(电子科技大学TCP/IP实验四)

news2024/12/23 20:20:22

一.实验目的

1、了解网络连通性测试的方法和工作原理

2、了解网络路径跟踪的方法和工作原理

3、掌握 MTU 的概念和 IP 分片操作

4、掌握 IP 分组生存时间(TTL)的含义和作用

5、掌握路由表的作用和路由查找算法

二.预备知识

1、ICMP 原理和作用

2、Windows 系统中的 Ping 命令及其各种选项

3、Windows 中的 Tracert 命令及其各种选项

三.实验原理

“PING”这个名字源于声纳定位操作。PING 程序的目的是测试另一台主机是否可达,它发送 ICMP 回送请求报文给被测主机,并等待返回的 ICMP 回送应答或差错报告报文。ICMP 协议(RFC 792)是 IP 协议的辅助协议,提供差错报告和查询机制。

一台主机的可达性不仅取决于 IP 层是否可达,还取决于使用的高层协议及端口号。仅当被测主机可达时,PING 程序才能收到返回的 ICMP 回送应答报文,并能测出到该主机的往返时间。如果被测主机不可达,PING 程序会收到一些 ICMP 差错报告报文,甚至收不到任何返回信息。根据 ICMP 差错报告报文的类型可粗略判定主机不可达的原因。

不同的物理网络具有不同的最大传送单元(MTU)值,因此可能需要对 IP 分组进行分片操作使其能够通过这些物理网络。当 IP 分组被分片时,需要修改分组头中的标志、分片偏移和总长度值,其余各字段将被复制到所有分片中。已经分片的 IP 分组在遇到具有更小 MTU 的网络时还会被再次分片。

TTL 字段是由发送端初始设置在 IP 分组首部中的一个 8 bit 字段,不同操作系统上的不同应用程序指定的 TTL 初始值不同。路由器在转发每个 IP 分组时需要将该分组的TTL 值减 1 或减去该分组在路由器中停留的秒数。由于大多数路由器转发 IP 分组的时延都小于 1 秒钟,因此 TTL 最终成为一个跳站计数器,即分组每经过一台路由器其 TTL 值被减 1。TTL 字段的目的是为了防止分组在选路时被无休止的转发。当路由器收到一份需转发的 IP 分组时,如果该分组的 TTL 值为 1,路由器则丢弃该分组,并向分组源发送一份 ICMP 的TTL 超时报文。

TRACE 程序使用 IP 分组首部的TTL 字段(生存时间)和 ICMP 报文,让使用者可以看到IP 分组从一台主机传到另一台主机所经过的路由。TRACE 程序首先发送一份TTL 值为 1 的 IP 分组给目的主机,处理该 IP 分组的第 1 个路由器即会返回一份以自己的 IP 地址为源的携带有 ICMP 超时报文的 IP 分组,这样 TRACE 程序就得到了该路径中第 1 个路由器的 IP 地址。然后,TRACE 程序发送一份 TTL 值为 2 的 IP 分组,同样又可获得该路径中第 2 个路由器的 IP 地址。TRACE 程序不断增加所发送 IP 分组的 TTL 值直至 IP 分组到达目的主机,即可获得到目的主机所经过的每一个路由器地址。

但是,IP 分组的目的主机不处理该分组的 TTL 值,即使收到 TTL 值为 1 的 IP 分组也不会丢弃该分组并产生一份 ICMP 超时报文。因此,TRACE 程序必须判断 IP 分组是否已到达目的主机,不同操作系统上的 TRACE 程序的判断方法不同。目前通常有两种

实现方法:一种是利用“端口不可达”的 ICMP 差错报文,另一种则是使用 ICMP 回送请求和回送应答报文。

在前一种方法中,TRACE 程序发给目的主机的IP 分组中携带的是一份UDP 数据报,该UDP 数据报的目的端口是一个目的主机上任一应用程序都不可能使用的UDP 端口(通常大于 30000)。当该 IP 分组到达目的主机时,目的主机的 UDP 模块会产生一份“端口不可达”的 ICMP 差错报文返回给TRACE 程序。这样,TRACE 程序即可根据收到的ICMP报文是超时还是端口不可达来判断何时结束。

在后一种方法中,TRACE 程序发给目的主机的 IP 分组中携带的是 ICMP 回送请求报文。当该 IP 分组到达目的主机时,目的主机即会返回一份 ICMP 回送应答报文给TRACE 程序。这样,TRACE 程序即可根据收到的 ICMP 报文是超时还是回送应答来判断何时结束

四.实验内容

 

五.实验步骤

实验步骤详见TCP//IP实验指导书。由于步骤过长,就在此不在赘述。

六、实验数据及结果分析

1、按照显示顺序记录步骤 3 中PC2 的路由表信息:

No.

Network Destination

Netmask

Gateway

1

0.0.0.0

0.0.0.0

192.168.11.254

2

127.0.0.0

255.0.0.0

127.0.0.1

3

192.168.11.0

255.255.255.0

192.168.11.2

4

192.168.11.2

255.255.255.255

127.0.0.1

5

192.168.11.255

255.255.255.255

192.168.11.2

6

224.0.0.0

240.0.0.0

192.168.11.2

7

255.255.255.255

255.255.255.255

192.168.11.2

Default Gateway

192.168.11.254

【分析】

  1. 请按照网关(gateway)地址分类分析主机路由表中每条路由表项的网关地址的特征,路由的目的地,以及所采取的分组交付方式。

第一类:缺省路由

当接收到一个报文的目的地址网络不在路由表内,就会发送到缺省网关192.168.11.254。采用间接交付。

第二类:环回地址

当主机收到一个目的网络在127.0.0.0数据包时,主机就会接收该数据包。采用直接交付。

第三类:直连网络

当主机收到一个目的网络在192.168.11.0的数据包时,主机会将数据包通过192.168.11.2这个接口转发,路由的目的地是192.168.11.0/24上的一台设备。采用直接交付

第四类:本地主机路由

当主机收到一个目的IP地址为本机网卡的IP地址的数据包时,主机会接收该数据包。采取直接交付。

第五类:本地广播路由

当主机收到一个目的网络在直连网络的广播数据包时,主机会将数据包从192.168.11.2这个接口以广播的形式发出去。路由的目的地是192.168.11.0/24上的所有设备,采用直接交付。

第六类:组播路由

当系统收到一个组播数据包,系统会将分组直接从192.168.11.2这个接口以组播的防守转发出去。路由的目的地是192.168.11.0/24上的某些设备,采用的是直接交付。

第七类:广播路由

当系统收到一个广播数据包,系统会将分组直接从192.168.11.2这个接口转发出去。目的地是局域网内的所有设备,采用直接交付。

  1. 本实验中PC2 将使用哪条路由发送对目的主机的ping 报文?

第一条,缺省路由,即发送给默认网关。

2、记录步骤 4 中PC2 上显示的PING 命令选项-n-l-f 的含义。

 -n count :Number of echo requests to send(要发送的回显请求次数)

 -l size: Send buffer size(发送缓冲区的大小)

 -f : Set Don’t Fragment flag in packet(在数据包中设置不分段标记)

3、记录步骤 6 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网A 和子网 B 上捕获的ICMP 报文信息:

Ping命令

Ping回应信息

Ping -n l 192.168.22.3

Reply from 192.168.22.3:bytes=32 time=271ms TTL=124

子网

IP分组首部

ICMP报文首部

TTL

源IP地址

目的IP地址

Type

Code

报文类型

A

128

192.168.11.2

192.168.22.3

8(Echo

request)

0

Echo request

124

192.168.22.3

192.168.11.2

0(Echo reply)

0

Echo reply

B

124

192.168.11.2

192.168.22.3

8(Echo

request)

0

Echo request

128

192.168.22.3

192.168.11.2

0(Echo reply)

0

Echo reply

说明:IP 地址用点分十进制表示,其他值均用十进制表示。

【分析】解释 PING 命令回应信息中的 bytes、time 和 TTL 参数的含义。

Bytes:报文的字节数

Time:发送ICMP请求到收到回应的之间的时间。

TTL:生存时间

  1. 记录步骤 7 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网

A 和子网 B 上捕获的ICMP 报文的 IP 分组头信息:

Ping命令

Ping回应消息

Ping -n 1 -l 1500 192.168.22.3

Reply from 192.168.22.3:bytes=1500 time=330ms TTL=124

子网

IP分组首部

总长度

标识

不分片

还有分片

分片偏移

源IP地址

目的IP地址

A

1500

74

0

1

0

192.168.11.2

192.168.22.3

48

74

0

0

185

192.168.11.2

192.168.22.3

796

103

0

1

0

192.168.22.3

192.168.11.2

48

103

0

0

185

192.168.22.3

192.168.11.2

724

103

0

1

97

192.168.22.3

192.168.11.2

B

796

74

0

1

0

192.168.11.2

192.168.22.3

724

74

0

1

97

192.168.11.2

192.168.22.3

48

74

0

0

185

192.168.11.2

192.168.22.3

1500

103

0

1

0

192.168.22.3

192.168.11.2

48

103

0

0

185

192.168.22.3

192.168.11.2

【分析】

  1. PC2 发出的 IP 分组(源 IP 地址 PC2,目的 IP 地址 PC3)在子网 A 和子网B 上分别有几个分片?这些分片分别是由实验拓扑中的哪些设备划分的? 为什么要划分这些分片?这些分片的重组操作将由实验拓扑中的哪台设备进行?

在子网A有两个分片,在子网B有三个分片

子网A中的两个分片是由PC2主机划分的,因为子网A的MTU是1500字节,而PC2要发送的数据部分就有1500字节,加上首部信息等等会超过MTU,所以会进行分片。

子网B收到三个分片是由R3划分的,因为PC2发出的数据包在经过R3之后,由于R3-R4之间的链路带宽比较大,所以分组会选择这个路径,接下来下一跳网络的MTU是800,而第一个分组有1500字节,所以还需要被分片。

分片重组操作由目的主机PC3完成。

  1. PC3 发出的 IP 分组(源 IP 地址 PC3,目的 IP 地址 PC2)在子网 A 和子网B 上分别有几个分片?这些分片分别是由实验拓扑中的哪些设备划分的? 为什么要划分这些分片?这些分片的重组操作将由实验拓扑中的哪台设备进行?

PC3发出的IP分组在子网A会有3个分片,在子网B会有2个分片。

子网B的分片由PC3划分,子网A的分片由R4划分。

原因:在子网B中,MTU为1500字节,而PC3要发送的数据部分就有1500字节,加上首部信息等等会超过MTU,所以会进行分片,将分组划分长2个分片。

在子网A中会有三个分片的原因是:因为PC2发出的数据包在经过R3之后,由于R2-R4之间的链路带宽比较大,所以分组会选择这个路径,当分组经过路由器R4时,接下来下一跳网络的MTU是800,而第一个分组有1500字节,所以还需要被分片。

分片重组操作由目的主机PC2完成。

  1. 在分片重组操作中,应根据分片首部中的什么信息判断收到的分片属于哪 个 IP 分组?属于同一 IP 分组的分片需按照分片首部中的什么信息进行重组?

应该根据分片首部中的“标识”字段判分片所收到的IP分组;属于同一 IP 分组的分片按照分片首部的“标识”字段中的第三位和“分片偏移”进行重组

5、记录步骤 8 中PC2 上的 ping 命令回应信息。

步骤

Ping命令

PING回应消息

8

Ping -n 1 -l 1500 -f 192.168.22.3

Packet needs to be fragmented but DF set

【分析】本步骤中是否捕获到 PC2 发送或接收的报文?结合 PING 回应信息解释其原因。

没有捕获到PC2发送或者接收的报文。

①PING回应消息的意思是,分组被分片才能正常传输。

②Ping -f命令使得分组不被分片,而子网A的最大的MTU只有1500字节,所以不会被传输。

6、记录步骤 9 中PC2 上的 ping 命令回应信息。

步骤

Ping命令

PING回应消息

9

ping  -n  1  192.168.22.20

Request timed out

【分析】

  1. 本步骤中是否捕获到 PC2 发送或接收的报文?结合 PING 回应信息解释其原因。

子网A内能捕获到PC2发送的PING请求报文,但是不能收到Reply报文。

原因:192.168.22.20是不存的主机的IP,所以无法给与PC2回应信息。

  1. 在 ping 时如果收到“Request timed out.”信息,是否能确定目的主机一定未开机响应或一定没有可达的路由?为什么?

不能,因为也有可能是分组丢失或者网络拥塞等原因。

7、记录步骤 10 中PC2 上的 ping 命令回应信息,并按分组的捕获顺序记录该步骤在子网A 上捕获的 ICMP 报文信息:

Ping命令

PING回应信息

Ping -n 10.1.1.1

Reply from 192.168.11.254:Destination host unreachable

IP分组首部

ICMP报文首部

ICMP差错报文的数据

标识

源IP地址

Type

Code

标识

源IP地址

77

192.168.11.2

8

0

-

-

98

192.168.11.254

3

1

79

192.168.11.2

【分析】请指出步骤 9 和步骤 10 中目的主机可达性的差异之处,并解释其差异产生的原因。

差异在于PING回应的消息不同。步骤9中只是目的主机不可达,但是步骤10中目的主机所在的网络和目的主机都不可达。

差异产生的原因是:步骤9中目的地址所在的网络存在于整个拓扑当中,路由器有相应的表项;但是步骤10中目的主机所在的网络不在拓扑当中,路由器的路由表项中不会存在这个网络。

8、记录步骤 12 中主机上输入的 TRACE 命令及其回应信息,并按分组的捕获顺序记录该步骤在子网A 和子网 B 上捕获的如下报文信息:

子网

IP分组首部

ICMP报文首部

TTL

源IP地址

目的IP地址

Type

Code

报文类型

A

1

192.168.11.2

192.168.22.3

8

0

Echo request

255

192.168.22.3

192.168.11.2

11

0

Time-to-live  exceeded

2

192.168.11.2

192.168.22.3

8

0

Echo request

254

192.168.22.3

192.168.11.2

11

0

Time-to-live  exceeded

3

192.168.11.2

192.168.22.3

8

0

Echo request

253

192.168.22.3

192.168.11.2

11

0

Time-to-live  exceeded

4

192.168.11.2

192.168.22.3

8

0

Echo request

252

192.168.22.3

192.168.11.2

11

0

Time-to-live  exceeded

5

192.168.11.2

192.168.22.3

8

0

Echo request

124

192.168.22.3

192.168.11.2

11

0

Echo reply

B

1

192.168.11.2

192.168.22.3

8

0

Echo request

128

192.168.22.3

192.168.11.2

11

0

Echo reply

【分析】

  1. TRACE 程序根据什么报文中的什么信息获得每一跳路由器的 IP 地址?

根据返回的类型11(Time-to-live exceeded类型)的ICMP报文中的源IP地址获得每一跳路由器的 IP 地址。

  1. TRACE 程序在跟踪每一跳路由器时,发送了几个测试报文?这样做的目的是什么?

发送了3条测试报文。防止分组丢失或者网络拥塞,路由器收不到报文。

3)WinXP 系统的 TRACE 程序使用何种方法判断测试分组是否已到达目的主机?

根据应答信息中的源IP是否有目的主机的IP,若收到了来自目的主机的应答,说明了分组已经到达了目的主机。从下图中可以看到存在目的IP地址,所以分组一定到达了目的主机。

 

  • 实验结论
  1. 总结 ICMP 差错报告机制的作用和 ICMP 差错报告报文中数据部分的作用。

ICMP差错报告机制可以及时通告源主机报文不可达,出现了差错。

具体:ICMP差错报告机制只是向发生差错数据报的源端报告这个错误,但是不会纠正这个错误。

ICMP 差错报告报文中数据部分的作用:通告源主机错误类型(终点不可达,源点抑制,超时,参数问题,路由重定向等)。并且数据部分不仅有类型还有代码,可以具体确定发生差错的原因。

  1. 交付出错的哪些 IP 分组不会产生 ICMP 差错报告报文?

携带ICMP差错报告的数据报,不会再产生ICMP差错报文

分片的数据段,且不是第一个分片

具有多播地址的数据报

特殊地址(127.0.0.0或0.0.0.0)的数据报

3、请根据实验中的TRACE 回应信息和实验拓扑图,写出路由器R1 的 F0/1 接口、R2 的 F0/1 和 S1/0 接口、以及 R3 和 R4 的所有接口的 IP 地址,并指出本实验中子网A 到子网 B 的通信路径。

路由器

接口的IP地址

R1

F0/1:192.168.13.1

R2

F0/1:192.168.24.1       S1/0:无法确定

R3

F0/0:192.168.13.2       S1/0:无法确定          S1/1:192.168.34.2

R4

F0/0: 192.168.24.2       S1/0:192.168.34.1

本实验中子网A 到子网B的通信路径是:PC2R1R3R4R2PC3。

八、总结及心得体会

1.在此次实验当中,学习ICMP报文中的ping,以及常见的ICMP差错报告报文。还有使用trace命令跟踪报文的路径。

2.掌握了ICMP基本的差错报告机制和查询机制的内容。

3.在实验过程中,要认真仔细,不要把步骤操作顺序搞反了。

九、对本实验过程及方法、手段的改进建议

1.不借助wireshark分析数据,让学生们加深对相关协议报文格式的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SQL Statements] 基本的SQL知识 之DDL针对数据库的基本操作

SQL Statements SQL语句的学习 之 DDL针对数据库的基本操作 什么是database 在 MySQL 中,Database(数据库)是一组有组织的数据集合,可以存储和管理相关数据的容器。一个数据库可以包含多个表(Table)&…

如何用 chatGPT,给大家来一个自我介绍

大家好,我是不吃西红柿的无线机械键盘,我的名字叫 Keychron K3 Pro。今天,我通过西红柿主人的手,使用 chatGPT 来介绍一下我自己。我的与众不同 我是由精密机械元件制作而成,并采用抗键渗设计,以提供更快、…

电子科技大学网络协议(TCP/IP作业答案)--网工(五次作业汇总)

目录 作业1:OSI/RM、TCP/IP编址和底层网络技术 作业2:IP地址规划与路由选择 作业3:ARP、IP、ICMP 作业4:UDP、Routing Protocol 作业五 作业1:OSI/RM、TCP/IP编址和底层网络技术 物理地址属于OSI/RM的哪一层&…

关于Linux内存管理的详细介绍,这篇万字长文值得你的收藏点赞

Linux内存管理一、Linux内存管理概述1.1 什么是内存管理1.2 内存管理的重要性1.3 内存管理的组成部分二、物理内存管理2.1 什么是物理内存2.2 物理内存管理方式2.2.1 连续内存管理2.2.2 非连续内存管理2.3 物理内存管理相关的函数及示例三、虚拟内存管理3.1 什么是虚拟内存3.2 …

HTML常用基础内容总结

文章目录一、对HTML的感性认知前置知识什么是web前端,什么是web后端前端技术栈、后端技术栈开发与运行的区别浏览器的功能是什么简介写一个简单可运行的的html代码前端开发方式二、VSCode的简单使用三、常用的HTML标签最最基本的HTML结构HTML代码特点注释标签标题标…

「JVM 高效并发」Java 内存模型

Amdahl 定律代替摩尔定律成为了计算机性能发展的新源动力,也是人类压榨计算机运算能力的最有力武器; 摩尔定律,描述处理器晶体管数量与运行效率之间的发展关系;Amdahl 定律,描述系统并行化与串行化的比重与系统运算加…

这9道软件测试面试题,就能刷掉90%的软件测试员

转眼就要到“金三银四”了,没点真本事真技术,没点面试经验,不了解点职场套路,如何过五关斩六将?如何打败面试官?如何拿下那梦寐以求的offer? 如果你的跳槽意向已经很确定,那么请往下…

【python量化】大幅提升预测性能,将NSTransformer用于股价预测

写在前面NSTransformer模型来自NIPS 2022的一篇paper《Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting》。NSTransformer的目的主要是为了解决其他方法出现过平稳化处理的问题。其通过提出序列平稳化以及去平稳化注意力机制可以使得模型…

我眼中的柔宇科技

关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥很早就知道了柔宇科技,当时是因为知道创始人刘自鸿,23岁清华本硕毕业,26岁获斯坦福大学电子工程博士学位,历时不超过3年&#x…

你真的了解环形队列吗?(学习数据结构必须掌握的模型)

目录 0.前言 1. 什么是环形队列 2. 如何使用数组结构 / 链表结构 对环形队列封装 3. 代码手撕环形队列各个接口 3.1 代表封装一个环形队列 3.2 环形队列的初始化 3.3 环形队列的插入 3.4环形队列的删除 3.5环形队列的判空 3.6环形队列的判满 3.7环形队列的队头 3.8环…

NCNN量化详解2

1 NCNN量化算法简介 量化算法介绍的文章的话,下面这篇文章的大佬 @章小龙 介绍的比我好多啦。虽然介绍的是NVIDIA TensorRT的算法,但是NCNN是参考其算法做出来的,方法几乎一样 首先NVIDIA有一个PPT,很好的阐述了他们的方案,推荐大家也去看一下: https://link.zhihu.com…

我来了,RK第七届开发者大会

大家好,我是发哥的朋友windsnake「也是发哥文章里面经常出现的邓总」。今年终于是有时间参加了一次Rk的开发者大会,这篇文章记录下自己的所见所闻,算是对自己福州之行的一次总结。从深圳出发月亮还没睡醒的早上,坐5号线杀到深圳北…

【项目设计】高并发内存池(二)[高并发内存池整体框架设计|threadcache]

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

【无标题String、StringBuffer、StringBuilder区别】

一、背景。 这篇文章主要介绍了String、StringBuffer、StringBuilder的区别详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想…

华为OD机试题,用 Java 解【汽水瓶】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

【华为OD机试模拟题】用 C++ 实现 - 寻找路径 or 数组二叉树(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明寻找路径 or 数组二叉树题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过…

华为开源自研AI框架昇思MindSpore数据变换:Transforms

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据变换 TransformsCommon TransformsComposeVision TransformsRescaleNormalizeHWC2CWHText TransformsBasicTokenizerLookupLambda Transforms通常情况下,直接加载的原始数据并不能直接送入…

线程安全之synchronized和volatile

目录 1.线程不安全的原因 2.synchronized和volatile 2.1 synchronized 2.1.1 synchornized的特性 2.1.2 synchronized使用示例 2.2 volatile 我们先来看一段代码: 分析以上代码,t1和t2这两个线程的任务都是分别将count这个变量自增5000次&#xff…

redis(5)列表List

Redis列表 Redis单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。 常…

【Linux学习笔记】7.Linux vi/vim

前言 本章介绍Linux的vi/vim。 Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。 但是目前我们使用比较多的是 vim 编辑器。 vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性&#xff0c…