当前位置: 首页 > news >正文

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

一.实验目的

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分析数据,让学生们加深对相关协议报文格式的理解。

相关文章:

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

一.实验目的 1、了解网络连通性测试的方法和工作原理 2、了解网络路径跟踪的方法和工作原理 3、掌握 MTU 的概念和 IP 分片操作 4、掌握 IP 分组生存时间(TTL)的含义和作用 5、掌握路由表的作用和路由查找算法 二.预备知识 …...

node.js中ws模块创建服务端和客户端

一、WebSocket出现的原因 1、Http协议发布REST API 的不足: 每次请求响应完成之后,服务器与客户端之间的连接就断开了,如果客户端想要继续获取服务器的消息,必须再次向服务器发起请 求。这显然无法适应对实时通信有高要求的场景…...

kubernates-1.26.1 kubeadm containerd 单机部署

k8s1.26 kubeadm containerd 安装 kubeadm init 时提示 containerd 错误 failed to pull image “k8s.gcr.io/pause:3.6” 报错日志显示containerd pull时找不到对应的pause版本,而不是registry.k8s.io/pause:3.9 [rootk8s-master containerd]# kubeadm init --k…...

如何在 iPhone 上恢复已删除的通话记录/通话记录

您的通话记录/通话记录可能很重要,尤其是当您想要拨打之前联系过但未保存的号码时。如果您碰巧删除了通话记录(有意或无意),本指南将帮助您了解如何检索它们并找回您需要使用的所有记录。我们将根据您的情况和您拥有的工具讨论不同…...

Canonical为所有支持的Ubuntu LTS系统发布了新的Linux内核更新

导读Canonical近日为所有支持的Ubuntu LTS系统发布了新的Linux内核更新,以解决总共19个安全漏洞。新的Ubuntu内核更新仅适用于长期支持的Ubuntu系统,包括Ubuntu 22.04 LTS(Jammy Jellyfish)、Ubuntu 20.04 LTS(Focal F…...

MS9122是一款USB单芯片投屏器,内部集成了USB2 0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示

MS9122是一款USB单芯片投屏器,内部集成了USB2.0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示或者扩展PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备,支持HDMI视频接口。 主要功能特征 HDMI v1.4兼容 最大…...

C++学习笔记-数据抽象

简单的说,数据抽象是用来描述数据结构的。数据抽象就是 ADT。一个 ADT 主要表现为它支持的一些操作,比方说 stack.push、stack.pop,这些操作应该具有明确的时间和空间复杂度。另外,一个 ADT 可以隐藏其实现细节,比方说…...

【Android】Android开发笔记(一)

【Android】Android开发笔记(一) 在Android Studio中import module和delete moduleimport moduledelete moduleAndroid Studio中App(Module)无法正常运行在实机上测试App一些基本概念App的工程结构结语在Android Studio中import m…...

C语言数据结构(二)—— 受限线性表 【栈(Stack)、队列(Queue)】

在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。一般线性表详解,请参考文章&…...

线程安全之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…...

量子计算对网络安全的影响

量子计算的快速发展,例如 IBM 的 Quantum Condor 处理器具有 1000 个量子比特的容量,促使专家们宣称第四次工业革命即将实现“量子飞跃”。 量子计算机的指数处理能力已经受到政府和企业的欢迎。 由于从学术和物理原理到商业可用解决方案的不断转变&am…...

MyBatis——增删改查操作的实现

开启mybatis sql日志打印 可以在日志中看到sql中执行的语句 在配置文件中加上下面这几条语句 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.example.demodebug查询操作 根据用户id查询用户 UserMapper: User…...

【7】linux命令每日分享——cat查看文件内容

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…...

新氧2023年财务业绩预测:退市风险大幅降低,收入增长将放缓

来源:猛兽财经 作者:猛兽财经 公司进展 与新氧(SY)有关的两个重要积极进展值得一提。 第一个积极进展是新氧的退市风险已在很大程度上降低。 2023年1月6日,新氧披露,它已经“重新符合纳斯达克规定的股价每…...

C++使用shared_ptr与weak_ptr轻松管理内存

智能指针之shared_ptr与weak_ptr前言智能指针实例分析前言 C与其他语言的不同点之一就是可以直接操作内存,这是一把双刃剑,直接操作内存可以提高开发的灵活度,开发人员在合适的时机申请内存,在合适的时机释放内存,减少…...

Buuctf reverse [FlareOn4]IgniteMe 题解

一. 查壳 无壳32位程序 二. ida打开 GetStdHandle函数根据微软官方文档可以得知是获取标准输入/输出/错误的句柄 参数里的 0xFFFFFFF6转换一下是4294967286, 对应(DWORD) -10 所以这里的WriteFile函数实际上是实现了printf的功能 sub_4010F0()函数 其功能是通过ReadFile函数读取…...

ChatGPT懂SAP吗?跟ChatGPT聊完后,我暂时不担心会失业

我弄了个ChatGPT账号。随便问了一下他SAP的问题。贴出来跟大家分享一下。 问题1:我是 SAP 开发工程师,你有什么可以帮到我。 作为一个语言模型,我可以为您提供关于SAP开发的一般性建议,以及关于如何使用SAP软件的一些技巧。以下是…...

Communications link failure 解决方法 !!!

Communications link failure 解决方法 最近在使用mybatis逆向生成的时候遇到了link failure的问题, 这里记录解决方法 文章目录Communications link failure 解决方法generatorConfig 里的数据库链接或数据库或密码或账户填写错误mysql响应时间设置太短, 还没等链接上就关闭连…...

pytorch入门2--数据预处理、线性代数的矩阵实现、求导

数据预处理是指将原始数据读取进来使得能用机器学习的方法进行处理。 首先介绍csv文件: CSV 代表逗号分隔值(comma-separated values),CSV 文件就是使用逗号分隔数据的文本文件。 一个 CSV 文件包含一行或多行数据,每一…...

15.消息队列RabbitMQ

一、基本概念 RabbitMQ 是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息&#xf…...

并发编程之死锁问题介绍

一、本文概览 死锁问题在并发编程中是一个非常致命的问题,问题一旦产生,只能通过重启机器、修改代码来修复问题,下面我们通过一小段文章内容介绍下死锁以及如何死锁的预防 二、什么是死锁? 在介绍死锁之前,先来明确下什…...

【python学习笔记】:SQL常用脚本(一)

1、行转列的用法PIVOT CREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N苹果,1,1000) insert into test values(1,N苹果,2,2000) insert into test values(1,N苹果,3,4000) insert into test values(1,N苹果,4,5000) insert…...

Spring是怎么解决循环依赖的

1.什么是循环依赖: 这里给大家举个简单的例子,相信看了上一篇文章大家都知道了解了spring的生命周期创建流程。那么在Spring在生命周期的哪一步会出现循环依赖呢? 第一阶段:实例化阶段 Instantiation 第二阶段:属性赋…...

HTML创意动画代码

目录1、动态气泡背景2、创意文字3、旋转立方体1、动态气泡背景 <!DOCTYPE html> <html> <head><title>Bubble Background</title><style>body {margin: 0;padding: 0;height: 100vh;background: #222;display: flex;flex-direction: colum…...

软工第一次个人作业——阅读和提问

软工第一次个人作业——阅读和提问 项目内容这个作业属于哪个课程2023北航敏捷软件工程这个作业的要求在哪里个人作业-阅读和提问我在这个课程的目标是体验敏捷开发过程&#xff0c;掌握一些开发技能&#xff0c;为进一步发展作铺垫这个作业在哪个具体方面帮助我实现目标对本课…...

urho3d的自定义文件格式

Urho3D尽可能使用现有文件格式&#xff0c;仅在绝对必要时才定义自定义文件格式。当前使用的自定义文件格式有&#xff1a; 二进制模型格式&#xff08;.mdl&#xff09; Model geometry and vertex morph data byte[4] Identifier "UMDL" or "UMD2" …...

spark第一章:环境安装

系列文章目录 spark第一章&#xff1a;环境安装 文章目录系列文章目录前言一、文件准备1.文件上传2.文件解压3.修改配置4.启动环境二、历史服务器1.修改配置2.启动历史服务器总结前言 spark在大数据环境的重要程度就不必细说了&#xff0c;直接开始吧。 一、文件准备 1.文件…...

MySQL---存储过程与存储函数的相关概念

MySQL—存储过程与存储函数的相关概念 存储函数和存储过程的主要区别&#xff1a; 存储函数一定会有返回值的存储过程不一定有返回值 存储过程和函数能后将复杂的SQL逻辑封装在一起&#xff0c;应用程序无需关注存储过程和函数内部复杂的SQL逻辑&#xff0c;而只需要简单地调…...

PMP值得考吗?

第一&#xff0c;PMP的价值体现 1、PMP是管理岗位必考证书。 多数企业会选择优先录用持PMP证书的管理人才&#xff0c;PMP成为管理岗位的必考证书。PMP在很多外企和国内中大型企业非常受重视&#xff0c;中石油、中海油、华为等等都会给内部员工做培训。 这些机构对项目管理…...

Quartus 报错汇总(持续更新...)

1、Error (10663): Verilog HDL Port Connection error at top_rom.v(70): output or inout port "stcp" must be connected to a structural net expression输出变量stcp在原设计文件中已经定义为reg型&#xff0c;在实例化时不能再定义为reg型&#xff0c;而应该是…...