以太网帧、IP数据报图解
注:本文为 “以太网帧、IP数据报”图解相关文章合辑。
未整理去重。
以太网帧、IP数据报的图解格式(包含相关例题讲解)
Rebecca.Yan已于 2023-05-27 14:13:19 修改
一、基础知识
UDP 段、IP 数据包,以太网帧图示
通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation), 如下图所示。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层主教座数据包(datagram), 在链路层叫做帧(frame)。数据封装称帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
第三行是以太网帧数据包的基本格式。

测试环境
| 机器名 | mac | ip | port |
|---|---|---|---|
| tcp_server | 00:0c:29:8b:37:da | 10.1.2.7 | 9502 |
| tcp_client | 00:50:56:c0:00:08 | 10.1.2.1 | 12345 |
抓包 客户端向服务端发送 'hello world’
原始数据帧
00 0c 29 8b 37 da 00 50 56 c0 00 08 08 00 # Ethernet_II 格式数据帧首部
45 00 00 33 28 5b 40 00 80 06 ba 80 0a 01 02 01 0a 01 02 07 # ip 协议头
30 39 25 1e 84 a4 e6 82 cf f2 ea 28 50 18 10 0a 7b 45 00 00 # tcp 协议头
68 65 6c 6c 6f 20 77 6f 72 6c 64 # data
以太网数据帧构成

Ethernet_II 格式、数据帧首部 链路层
总长度 14B
以太网帧图示
其中,以太网首部占用 14 字节、FCS(Frame Check Sequece)(帧校验码) 长 4 个字节,用于检验数据在传输过程中数据是否出现了错误,为 CRC32 校验码。

以太网首部占用 14 字节,首位开始是目的地址占用六个字节,其次是源地址,占用 6 个字节,然后是类型占用两个字节。以太网帧除去首部 14 字节和尾部 FCS,4 字节,(共 18 字节)剩下的中间的部分就是 IP 数据报
| 字段名称 | 长度(byte) | 含义 |
|---|---|---|
| D.MAC | 6 | 接收方 MAC 地址,网络包接收方的 MAC 地址,在局域网中使用这一地址来传输网络包 |
| S.MAC | 6 | 网络包发送方 MAC 地址,接收方通过它来判断是谁发送了这个包 |
| Type | 2 | 使用的协议类型 TCP 通信中 IP 协议与 ARP 协议较常见 0000-05DC:IEEE802.3 0800:IP 协议 0806:ARP 协议 86DD:IPv6 |
以太网帧格式
| 目的 MAC 地址(6 字节) | 源 MAC 地址(6 字节) | 类型(2 字节) | 数据(45–1500 字节) | CRC |
|---|
1.IP 数据报
| 目的 MAC 地址(6B) | 源 MAC 地址(6B) | 类型 0x0800 | IP 数据包 | CRC |
|---|
2.ARP 请求应答
| 目的 MAC 地址(6B) | 源 MAC 地址(6B) | 类型 0x0806 | ARP 请求应答(28B) | CRC |
|---|
3.RARP 请求应答
| 目的 MAC 地址(6B) | 源 MAC 地址(6B) | 类型 0x0835 | RARP 请求应答 | CRC |
|---|
ICMP 协议:差错控制协议
ARP 协议:地址解析协议
实例
Ethernet_II 格式数据帧首部 14 bytes
00 0c 29 8b 37 da # 目标 MAC 地址 00:0c:29:8b:37:da
00 50 56 c0 00 08 # 源 MAC 地址 00:50:56:c0:00:08
08 00 # IP 协议
IP 协议数据包首部 网络层
总长度 20B+
IP 数据报格式如下图所示,IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节(如图所示前五行为 IP 首部),是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

实例
ip 协议头 20 字节
4 # 协议版本 ipv4
5 # ip 协议头长度 5 * 4 = 20 字节
00 # 服务类型 000-0-0-0-0-0
00 33 # ip 包总长度 hex => dec 51 字节
28 5b # ID 号
40 00 # 标志与分片偏移量 0100 0000 0000 0000 DF 位为 1 不允许分包 偏移量为 0
80 # 生存时间 dec 128
06 # 协议号 TCP 协议
ba 80 # 头部校验和
0a 01 02 01 # 发送方 ip 10.1.2.1
0a 01 02 07 # 接收方 ip 10.1.2.7
ip 协议头 头部校验和计算方法
-
头部校验和置 0;
-
对 IP 头部中的每 16bit 进行二进制求和;
-
如果和的高 16bit 不为 0,则将和的高 16bit 和低 16bit 反复相加,直到和的高 16bit 为 0,从而获得一个 16bit 的 值;
-
将该 16bit 的值取反,存入校验和字段。
TCP 协议头 传输层
图示

总长度 20B+
实例
tcp 协议头 20 字节
30 39 # 源端口 12345
25 1e # 目的端口 9502
84 a4 e6 82 # 序列号
cf f2 ea 28 # 确认序列号
5 # 首部长度 5 * 32 / 8 = 20 bytes
0 1 8 # 000000 保留 011000 ACK=1 PSH=1
10 0a # 窗口大小 4106
7b 45 # 校验和
00 00 # URG=0 无效
传输的数据
68 65 6c 6c 6f 20 77 6f 72 6c 64 # ascii 码
hello world
附录
每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。举例来说,现在收到了 4 号包,但是没有收到 5 号包。ACK 就会记录,期待收到 5 号包。过了一段时间,5 号包收到了,那么下一轮 ACK 会更新编号。如果 5 号包还是没收到,但是收到了 6 号包或 7 号包,那么 ACK 里面的编号不会变化,总是显示 5 号包。这会导致大量重复内容的 ACK。如果发送方发现收到三个连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即 5 号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。
UDP 协议

例题讲解
答案:
填空1:00-80-c8-5a-e3-88
填空2:00-60-2f-87-01-03
填空3:44
填空4:20
填空5:24
填空6:140.128.100.116
填空7:140.128.99.5
填空8:63
填空9:6
填空10:tcp
(1) Client 段和 Server 段的以太网网卡 48 位地址是 [填空 1] 和 [填空 2]
根据以太网数据帧(OSI 二层)的数据包头部,分别是目的 MAC 地址(6 字节)、源 MAC 地址(6 字节)、类型(2 字节),所以根据上图 Frame#1 帧中的前 6 个字节是 Client MAC 地址,紧接着 6 个字节是 Server 端地址。
分别是:
填空 1:00-80-c8-5a-e3-88
填空 2:00-60-2f-87-01-03
(2) Frame#1 帧中封装的 IP 分组的总长度 [填空 3] 44 B
首部长度 [填空 4] 20 B
IP 数据长度 [填空 5] 24 B
Frame1 帧总长度 58 字节,由于题干说,已通过侦差错校验,所以这个以太网帧不包含 FCS 帧(4 字节) ,所以 IP 数据报的长度应该是 Frame1 帧总长度 58 字节减去以太网帧首部 14 字节,IP 分组的长度应该是 44 字节,IP 首部长度是固定不变的 20B(记下来就行),IP 数据部分长度是 44B-20B=24B
(3) Client 段和 Server 段的 32 位 IP 地址(用点分十进制格式表示)[填空 6] 和 [填空 7]。
根据 Ip 数据包的 20 字节长度中 IP 地址的排列位置,可知源 Ip 地址(4 字节)和目的 IP 地址(4 字节)分别在 20 字节的后八个字节中。58-14-20+8=32,从 Frame#1 帧中的倒数第 32 个字节(两个 16 进制数是 1 个字节)往后数 8 个字节。
0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 a b c d e f
IP 首部 20 个字节
58-14B(帧首部)=44 字节(IP 数据包)=20 字节(IP 首部)+24(上层数据 udp/tcp)
8c 80 63 05 # client Ip 地址 140.128.99.5
10001100 10000000 01100011 00000101
140 128 99 5
8c 80 64 74 # server IP 地址 140.128.100.116
10001100 10000000 01100100 01110100
140 128 100 116
(4) Frame#1 帧中封装的 IP 分组和生存时间值是 [填空 8] 协议字段值是 [填空 9]。# 63 6
先从 Frame#1 帧中找到生存时间值(1 个字节)对应的十六进制数,14+4+4=22,Frame#1 帧中的第 23 个字节就是 TTL 了。TTL 的十六进制数为 3f (0011 1111), 转换成十进制为 2^6-1=63
协议字段(1 字节)值的十六进制数为 06,就是十进制的 6 了。
(5) IP 分组中封装的是 [填空 10] 的数据 # tcp
由于本题建立的是 TCP 链接,所以以太网帧封装的是 TCP 段。
58-14(Frame 帧头)-20(IP 包头)=24 字节
24 字节 - 20 字节(TCP 头部长度)=4 (应用层数据),也即是 seq(4 字节),就是 TCP 三次握手中的第一次(请求建立连接的一方)
以太网数据帧详细解析 逐字节分析
Qazink 于 2020-08-25 21:18:49 发布
详细解析以太网通信数据帧
测试环境
| 机器名 | mac | ip | port |
|---|---|---|---|
| tcp_server | 00:0c:29:8b:37:da | 10.1.2.7 | 9502 |
| tcp_client | 00:50:56:c0:00:08 | 10.1.2.1 | 12345 |
抓包 客户端向服务端发送 'hello world’
原始数据帧
00 0c 29 8b 37 da 00 50 56 c0 00 08 08 00 # Ethernet_II 格式数据帧首部
45 00 00 33 28 5b 40 00 80 06 ba 80 0a 01 02 01 0a 01 02 07 # ip 协议头
30 39 25 1e 84 a4 e6 82 cf f2 ea 28 50 18 10 0a 7b 45 00 00 # tcp 协议头
68 65 6c 6c 6f 20 77 6f 72 6c 64 # data
以太网数据帧构成

Ethernet_II 格式数据帧首部 链路层
总长度 14B
| 字段名称 | 长度 (byte) | 含义 |
|---|---|---|
| D.MAC | 6 | 接收方 MAC 地址,网络包接收方的 MAC 地址,在局域网中使用这一地址来传输网络包 |
| S.MAC | 6 | 网络包发送方的 MAC 地址,接收方通过它来判断是谁发送了这个包 |
| Type | 2 | 使用的协议类型。 TCP 通信中 IP 协议与 ARP 协议较常见 0000-05DC:IEEE 802.3 0800 :IP 协议 0806 :ARP 协议 86DD :IPv6 |
实例
Ethernet_II 格式数据帧首部 14 bytes
00 0c 29 8b 37 da # 目标 MAC 地址 00:0c:29:8b:37:da
00 50 56 c0 00 08 # 源 MAC 地址 00:50:56:c0:00:08
08 00 # IP 协议
IP 协议数据包首部 网络层
总长度 20B+
| 字段名称 | 长度 (bit) | 含义 |
|---|---|---|
| 版本号 (Version) | 4 | 协议的版本一般的值为 0100(IPv4), 0110(IPv6) |
| 头部长度(IHL) | 4 | Header Length, 描述 IP 包头的长度, 因为在 IP 包头中有变长的可选部分。 长度 = 值 * 4, 4bit 最大 ‘1111’ = 15, IP 头长度为 20 - 60 (15 * 4) 字节 |
| 服务类型(ToS) | 8 | Type of Service,服务类型 8 位 按位被如下定义 PPP DTRC0 PPP:定义包的优先级,取值越大越重要 000 普通 (Routine) 001 优先的 (Priority) 010 立即的发送 (Immediate) 011 闪电式的 (Flash) 100 比闪电还闪电式的 (Flash Override) 101 CRI/TIC/ECP (找不到这个词的翻译) 110 网间控制 (Internetwork Control) 111 网络控制 (Network Control) D 时延: 0: 普通 1: 延迟尽量小 T 吞吐量: 0: 普通 1: 流量尽量大 R 可靠性: 0: 普通 1: 可靠性尽量大 M 传输成本: 0: 普通 1: 成本尽量小 0 最后一位被保留,恒定为 0 |
| 总长度 | 16 | Total Length IP 包总长度 以字节为单位计算的 IP 包的长度 (包括头部和数据),所以 IP 包最大长度 65535 字节 |
| ID 号 | 16 | 该字段和 Flag 和 Fragment Offest 字段联合使用,对较大的上层数据包进行分段(fragment)操作。 路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。 |
| 标志(Flags) | 3 | 长度 3 比特。 该字段第一位不使用。 第二位是 DF (Don’t Fragment)位,DF 位设为 1 时表明路由器不能对该 上层数据包分段。如果一个上层数据包无法在不分段的情况 下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。 第三位是 MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的 IP 包 的包头中将 MF 位设为 1。 |
| 分片偏移量 | 13 | Fragment Offest 表示该 IP 包在该组分片包中位置,接收端 靠此来组装还原 IP 包。 |
| 生存时间(TTL) | 8 | 当 IP 包进行传送时,先会对该字段赋予某个特定的值。 当 IP 包经过每一个沿途的路由器的时候,每个沿途的路由器会将 IP 包的 TTL 值减少 1。 如果 TTL 减少为 0,则该 IP 包会被丢弃。 这个字段可以防止由于路由环路而导致 IP 包在网络中不停被转发。 |
| 协议号 | 8 | 标识了上层所使用的协议。以下是比较常用的协议号: 1 ICMP 2 IGMP 6 TCP 17 UDP 88 IGRP 89 OSPF |
| 头部校验和 | 16 | Header Checksum 用来做 IP 头部的正确性检测,但不包含数据部分。 因为每个 路由器要改变 TTL 的值,所以路由器会为每个通过的数据包重 新计算这个值。 |
| 发送方 IP 地址 | 32 | Source Addresses 发送方 IP 地址。除非使用 NAT,否则 整个传输的过程中,这两个地址不会改变 |
| 接收方 IP 地址 | 32 | Destination Addresses 接收方 IP 地址。除非使用 NAT,否则 整个传输的过程中,这两个地址不会改变 |
| 可选字段 | 一般测试使用 |
实例
ip 协议头 20 字节
4 # 协议版本 ipv4
5 # ip 协议头长度 5 * 4 = 20 字节
00 # 服务类型 000-0-0-0-0-0
00 33 # ip 包总长度 hex => dec 51 字节
28 5b # ID 号
40 00 # 标志与分片偏移量 0100 0000 0000 0000 DF 位为 1 不允许分包 偏移量为 0
80 # 生存时间 dec 128
06 # 协议号 TCP 协议
ba 80 # 头部校验和
0a 01 02 01 # 发送方 ip 10.1.2.1
0a 01 02 07 # 接收方 ip 10.1.2.7
ip 协议头 头部校验和计算方法
- 头部校验和置 0;
- 对 IP 头部中的每 16bit 进行二进制求和;
- 如果和的高 16bit 不为 0,则将和的高 16bit 和低 16bit 反复相加,直到和的高 16bit 为 0,从而获得一个 16bit 的 值;
- 将该 16bit 的值取反,存入校验和字段。
TCP 协议头 传输层
图示

总长度 20B+
| 字段名 | 长度 (bit) | 含义 |
|---|---|---|
| 源端口号 | 16 | 发送网络包的程序的端口号 |
| 目的端口号 | 16 | 网络包的接收方程序的端口号 |
| 序列号 seq | 32 | 发送的时候,TCP 协议为每个包编号(sequence number, 简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包 ,也可以知道丢失的是哪一个包。 当前序列号 + 数据长度 = 下一个包的序列号 |
| 确认序列号 ack | 32 | 期待要收到下一个数据包的编号,ack 与 seq 搭配确保数据的 完整性,确认号只有 ACK 位为 1 时才有效。 |
| 首部长度 (数据偏移量) | 4 | 表示数据部分的起始位置,也可以认为表示头部的长度 |
| 保留 | 6 | 保留,未使用 |
| 控制位 | 6 | 该字段中的每个比特分别表示以下通信控制含义。 URG:表示紧急指针字段有效 ACK:接收数据序号字段有效,一般表示数据已被接收方接收 该位只有在连接未建立时为 0,连接建立后始终为 1 PSH:表示通过 flush 操作发送的数据,指示接收方在接收到 该报文段以后,应尽快将这个报文段交给应用程序,而不是 在缓冲区排队。 RST:强制断开连接,用于异常中断的情况 SYN:同步序号,用于建立连接过程,在连接请求中发送 SYN=1 和 ACK=0, 应答 SYN=1 和 ACK=1 FIN:用于释放连接,为 1 时表示发送方已经没有数据发送了, 即关闭本方数据流。 |
| 窗口 | 16 | 接收方告知发送方窗口大小(即无需等待确认可一起发送的数据量) |
| 校验和 | 16 | 用来检查是否出现错误 |
| 紧急指针 | 16 | 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 |
| 选项和填充 | 不定 | 最常见的可选字段是最长报文大小,又称为 MSS (Maximum Segment Size),每个连接方通常都在通 信的第一个报文段(为建立连接而设置 SYN 标志为 1 的那 个段)中指明这个选项,它表示本端所能接受的最大报 文段的长度。 选项长度不一定是 32 位的整数倍,所以要 加填充位,即在这个字段中加入额外的零,以保证 TCP 头是 32 的整数倍。 |
| 数据 | 可选 |
实例
tcp 协议头 20 字节
30 39 # 源端口 12345
25 1e # 目的端口 9502
84 a4 e6 82 # 序列号
cf f2 ea 28 # 确认序列号
5 # 首部长度 5 * 32 / 8 = 20 bytes
0 1 8 # 000000 保留 011000 ACK=1 PSH=1
10 0a # 窗口大小 4106
7b 45 # 校验和
00 00 # URG=0 无效
传输的数据
68 65 6c 6c 6f 20 77 6f 72 6c 64 # ascii 码
hello world
附录
每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。
举例来说,现在收到了 4 号包,但是没有收到 5 号包。ACK 就会记录,期待收到 5 号包。过了一段时间,5 号包收到了,那么下一轮 ACK 会更新编号。
如果 5 号包还是没收到,但是收到了 6 号包或 7 号包,那么 ACK 里面的编号不会变化,总是显示 5 号包。这会导致大量重复内容的 ACK。
如果发送方发现收到三个连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即 5 号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。
UDP 协议

Qazink
via:
-
以太网帧、IP数据报的图解格式(包含相关例题讲解)_以太网帧格式-CSDN博客 Rebecca.Yan 已于 2023-05-27 14:13:19 修改
https://blog.csdn.net/weixin_45440484/article/details/129667838 -
以太网数据帧详细解析 逐字节分析_以太网帧包括哪些字段?-CSDN博客 Qazink 于 2020-08-25 21:18:49 发布
https://blog.csdn.net/weixin_43197795/article/details/108229234
相关文章:
以太网帧、IP数据报图解
注:本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式(包含相关例题讲解) Rebecca.Yan已于 2023-05-27 14:13:19 修改 一、基础知识 UDP 段、IP 数据包,以太网帧图示 通信过程中&…...
01.大模型起源与发展
知识点 注意力机制(Attention)的主要用途是什么? 选择重要的信息并忽略不相关的信息 Transformer 模型是基于什么理论构建的? C. 注意力机制(Attention) GPT 和 BERT 的主要区别是什么? C. GPT…...
leetcode刷题日记03——javascript
题目3: 回文数https://leetcode.cn/problems/palindrome-number/ 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向…...
vue横向滚动日期选择器组件
vue横向滚动日期选择器组件 组件使用到了element-plus组件库和dayjs库,使用前先保证项目中已经下载导入 主要功能:选择日期,点击日期可以让此日期滚动到视图中间,左滑右滑同理,支持跳转至任意日期,支持自…...
【大模型】大模型项目选择 RAGvs微调?
RAG 输入问题,在知识库匹配知识,构建提示词:基于{知识}回答{问题} 微调 用知识问答对重新训练大模型权重,输入问题到调整后的大模型 如何选择 如果业务要求较高,RAG和微调可以一起使用 1-动态数据 选择RAG 原因&a…...
2024年12月CCF-GESP编程能力等级认证Python编程一级真题解析
本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. Hopfield)和杰弗里辛顿(Geof…...
【机器学习】元学习(Meta-learning)
云边有个稻草人-CSDN博客 目录 引言 一、元学习的基本概念 1.1 什么是元学习? 1.2 元学习的与少样本学习的关系 二、元学习的核心问题与挑战 2.1 核心问题 2.2 挑战 三、元学习的常见方法 3.1 基于优化的元学习 3.1.1 MAML(Model-Agnostic Meta…...
详解Redis的String类型及相关命令
目录 SET GET MGET MSET SETNX SET和SETNX和SETXX对比 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN 内部编码 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么…...
android RadioButton + ViewPager+fragment
RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...
给机器装上“脑子”—— 一文带你玩转机器学习
目录 一、引言:AI浪潮中的明星——机器学习 二、机器学习的定义与概念 1. 机器学习与传统编程的区别 2. 机器学习的主要任务类型 3. 机器学习的重要组成部分 三、机器学习的工作原理:从数据到模型的魔法之旅 1. 数据收集与预处理——数据是机器的…...
论文笔记:是什么让多模态学习变得困难?
整理了What Makes Training Multi-modal Classification Networks Hard? 论文的阅读笔记 背景方法OGR基于最小化OGR的多监督信号混合在实践中的应用 实验 背景 直观上,多模态网络接收更多的信息,因此它应该匹配或优于其单峰网络。然而,最好的…...
ChatGPT Search开放:实时多模态搜索新体验
点击访问 chatTools 免费体验GPT最新模型,包括o1推理模型、GPT4o、Claude、Gemini等模型! ChatGPT Search:功能亮点解析 本次更新的ChatGPT Search带来了多项令人瞩目的功能,使其在搜索引擎市场中更具竞争力。 1. 高级语音模式&…...
Centos7.9 离线安装docker
实验环境: [root192 ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core)下载二进制压缩包 a. 官网下载地址: https://download.docker.com/linux/static/stable/x86_64/b. 阿里云下载地址 https://mirrors.aliyun.com/docker-ce/lin…...
C语言函数在调用过程中具体是怎么和栈互动的?
从栈开始的一场C语言探险记 —— C语言函数是如何与栈"共舞"的。 栈的舞步解析 通过一个简单的例子来看看这支"舞蹈": int add(int a, int b) {int result a b;return result; }int main() {int x 10;int y 20;int sum add(x, y);retur…...
【Java中常见的异常及其处理方式】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 字符串修改的实现——StringBuilder和StringBuffer异常常见异常①算数异常②数组越界异常③空指针异…...
如何更新项目中的 npm 或 Yarn 依赖包至最新版本
要升级 package.json 文件中列出的包,你可以使用 npm(Node Package Manager)或 yarn。以下是两种工具的命令来更新你的依赖项: 使用 npm 更新所有包到最新版本 npm update如果你想将所有依赖项更新到其各自最新的大版本…...
SpringBoot3整合FastJSON2如何配置configureMessageConverters
在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤,包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤: 1. 添加依赖 首先,你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…...
《Vue3实战教程》2:Vue3快速上手
如果您有疑问,请观看视频教程《Vue3实战教程》 快速上手 线上尝试 Vue 想要快速体验 Vue,你可以直接试试我们的演练场。 如果你更喜欢不用任何构建的原始 HTML,可以使用 JSFiddle 入门。 如果你已经比较熟悉 Node.js 和构建工具等概念…...
ubuntu 24.04.1安装FTP流程
1、安装vsftpd: sudo apt update sudo apt install vsftpd 2、安装后重启查看vsftpd状态 sudo systemctl status vsftpd 输出如下所示,表明vsftpd服务处于活动状态并正在运行: * vsftpd.service - vsftpd FTP server Loaded: loaded (/…...
多功能护照阅读器港澳通行证阅读机RS232串口主动输出协议,支持和单片机/Linux对接使用
此护照阅读器支持护照、电子芯片护照、港澳通行证、台湾通行证,和串口的被动的方式不一样。此护照阅读器通电后,自动读卡,串口输出,软件只需要去串口监听数据即可,例如用串口助手就可以收到读卡信息。 非常适用于单片…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
