让这篇4000字长文告诉你什么是TCP 序列号和确认号

3.TCP协议-序列号和确认号 3.TCP协议-序号和确认号 阅读详情

在网站上回答了很多同学的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号和确认号的变化就不知道了。

也有很多同学跟我反馈,希望我写一篇关于 TCP 序列号和确认号变化过程的文章。大家别小看这个基础知识点,其实很多人都不知道的,因为很少书详细说明这个,即使讲了,也没有说明白规律。

所以,这次就跟大家聊聊以下过程中,TCP 序列号和确认号是如何变化的?

  • 三次握手中 TCP 序列号和确认号的变化

  • 数据传输中 TCP 序列号和确认号的变化

  • 四次挥手中 TCP 序列号和确认号的变化

万能公式

我根据经验总结了一条万能公式。发送的 TCP 报文:

  • 公式一:序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为上一次发送的序列号 + 1。

  • 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1。

可能有点抽象,接下来举一些实际的场景,加深对这个万能公式的理解。

先给大家看看 TCP 序列号和确认号在 TCP 头部的哪个位置。可以看到,这两个字段都是 32 位。

TCP 头部

这里重点关注这三个字段的作用:

  • 序列号:在建立连接时由内核生成的随机数作为其初始值,通过 SYN 报文传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

  • 确认号:指下一次「期望」收到的数据的序列号,发送端收到接收方发来的 ACK 确认报文以后,就可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。

  • 控制位:用来标识 TCP 报文是什么类型的报文,比如是 SYN 报文、数据报文、ACK 报文,FIN 报文等。

三次握手阶段的变化

先来说说三次握手中 TCP 序列号和确认号的变化。

假设客户端的初始化序列号为 client_isn,服务端的初始化序列号为 server_isn,TCP 三次握手的流程如下:

TCP 三次握手

在这里我们重点关注,下面这两个过程。

服务端收到客户端的 SYN 报文后,会将 SYN-ACK 报文(第二次握手报文)中序列号和确认号分别设置为:

  • 序列号设置为服务端随机初始化的序列号 server_isn。

  • 确认号设置为 client_isn + 1,服务端上一次收到的报文是客户端发来的 SYN 报文,该报文的 seq = client_isn,那么根据公式 2(确认号 =  上一次收到的报文中的序列号 + len。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为 + 1),可以得出当前确认号 = client_isn + 1。

客户端收到服务端的 SYN-ACK 报文后,会将 ACK 报文(第三次握手报文)中序列号和确认号分别设置为:

  • 序列号设置为 client_isn + 1。客户端上一次发送报文是 SYN 报文,SYN 的序列号为 client_isn,根据公式 1(序列号 = 上一次发送的序列号 + len。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 + 1),所以当前的序列号为  client_isn + 1。

  • 确认号设置为 server_isn + 1。客户端上一次收到的报文是服务端发来的 SYN-ACK 报文,该报文的 seq = server_isn,那么根据公式 2(确认号 =  收到的报文中的序列号 + len。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为 + 1),可以得出当前确认号 = server_isn + 1。

为什么第二次和第三次握手报文中的确认号是将对方的序列号 + 1 后作为确认号呢?

SYN 报文是特殊的 TCP 报文,用于建立连接时使用,虽然 SYN 报文不携带用户数据,但是 TCP 将 SYN 报文视为 1 字节的数据,当对方收到了 SYN 报文后,在回复 ACK 报文时,就需要将 ACK 报文中的确认号设置为 SYN 的序列号 + 1 ,这样做是有两个目的:

  • 告诉对方,我方已经收到 SYN 报文。

  • 告诉对方,我方下一次「期望」收到的报文的序列号为此确认号,比如客户端与服务端完成三次握手之后,服务端接下来期望收到的是序列号为  client_isn + 1 的 TCP 数据报文。

数据传输阶段的变化

完成了,三次握手后,客户端就可以发送第一个 TCP 数据报文了,假设客户端即将要发送 10 字节的数据,流程图下:

TCP 数据传输阶段

客户端发送 10 字节的数据,通常 TCP 数据报文的控制位是 [PSH, ACK],此时该 TCP 数据报文的序列号和确认号分别设置为:

  • 序列号设置为 client_isn + 1。客户端上一次发送报文是 ACK 报文(第三次握手),该报文的 seq = client_isn + 1,由于是一个单纯的 ACK 报文,没有携带用户数据,所以 len  = 0。根据公式 1(序列号 = 上一次发送的序列号 + len),可以得出当前的序列号为  client_isn + 1 + 0,即  client_isn + 1。

  • 确认号设置为 server_isn + 1。没错,还是和第三次握手的 ACK 报文的确认号一样,这是因为客户端三次握手之后,发送 TCP 数据报文 之前,如果没有收到服务端的  TCP 数据报文,确认号还是延用上一次的,其实根据公式 2 你也能得到这个结论。

可以看到,客户端与服务端完成 TCP 三次握手后,发送的第一个 「TCP 数据报文的序列号和确认号」都是和「第三次握手的 ACK 报文中序列号和确认号」一样的。

接着,当服务端收到客户端 10 字节的 TCP 数据报文后,就需要回复一个 ACK 报文,此时该报文的序列号和确认号分别设置为:

  • 序列号设置为 server_isn + 1。服务端上一次发送报文是 SYN-ACK 报文,序列号为 server_isn,根据公式 1(序列号 = 上一次发送的序列号 + len。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 + 1),所以当前的序列号为 server_isn + 1。

  • 确认号设置为 client_isn + 11 。服务端上一次收到的报文是客户端发来的 10 字节 TCP 数据报文,该报文的 seq = client_isn + 1,len = 10。根据公式 2(确认号 =  上一次收到的报文中的序列号 + len),也就是将「收到的 TCP 数据报文中的序列号 client_isn + 1,再加上 10(len = 10) 」的值作为了确认号,表示自己收到了该 10 字节的数据报文。

之前有读者问,如果客户端发送的第三次握手  ACK 报文丢失了,处于 SYN_RCVD 状态服务端收到了客户端第一个 TCP 数据报文会发生什么?

刚才前面我也说了,发送的第一个 「TCP 数据报文的序列号和确认号」都是和「第三次握手的 ACK 报文中序列号和确认号」一样的,并且该 TCP 数据报文也有将 ACK 标记位置为 1。如下图:

所以,服务端收到这个数据报文,是可以正常完成连接的建立,然后就可以正常接收这个数据包了。

四次挥手阶段的变化

最后,我们来看看四次挥手阶段中,序列号和确认号的变化。

数据传输阶段结束后,客户端发起了 FIN 报文,请求服务端端开该 TCP 连接,此时就进入了 TCP 四次挥手阶段,如下图。

TCP 四次挥手阶段

客户端发送的第一次挥手的序列号和确认号分别设置为:

  • 序列号设置为 client_isn + 11。客户端上一次发送的报文是 [PSH, ACK] ,该报文的 seq = client_isn + 1, len = 10,根据公式 1(序列号 = 上一次发送的序列号 + len),可以得出当前的序列号为 client_isn + 1 + 10(len = 10),即 client_isn + 11。

  • 确认号设置为 server_isn + 1。客户端上一次收到的报文是服务端发来的 ACK 报文,该报文的 seq = server_isn + 1,是单纯的 ACK 报文,不携带用户数据,所以 len 为 0。那么根据公式 2(确认号 = 上一次收到的序列号 + len),可以得出当前的确认号为 server_isn + 1 + 0 (len = 0),也就是 server_isn + 1。

服务端发送的第二次挥手的序列号和确认号分别设置为:

  • 序列号设置为 server_isn + 1。服务端上一次发送的报文是 ACK 报文,该报文的 seq = server_isn + 1,而该报文是单纯的 ACK 报文,不携带用户数据,所以 len 为 0,根据公式 1(序列号 = 上一次发送的序列号 + len),可以得出当前的序列号为 server_isn + 1 + 0 (len = 0),也就是 server_isn + 1。

  • 确认号设置为 client_isn + 12。服务端上一次收到的报文是客户端发来的 FIN 报文,该报文的 seq = client_isn + 11,根据公式 2(确认号=  _上一次_收到的序列号 + len,特殊情况,如果收到报文是 SYN 报文或者 FIN 报文,则改为 + 1),可以得出当前的确认号为 client_isn + 11 + 1,也就是 client_isn + 12。

服务端发送的第三次挥手的序列号和确认号还是和第二次挥手中的序列号和确认号一样。

  • 序列号设置为 server_isn + 1。

  • 确认号设置为 client_isn + 12。

客户端发送的四次挥手的序列号和确认号分别设置为:

  • 序列号设置为 client_isn + 12。客户端上一次发送的报文是 FIN 报文,该报文的 seq = client_isn + 11,根据公式 1(序列号 = 上一次发送的序列号 + len。特殊情况,如果收到报文是 SYN 报文或者 FIN 报文,则改为 + 1),可以得出当前的序列号为 client_isn + 11 + 1,也就是 client_isn + 12。

  • 确认号设置为 server_isn + 2。客户端上一次收到的报文是服务端发来的 FIN 报文,该报文的 seq = server_isn + 1,根据公式 2(确认号 =  _上一次_收到的序列号 + len,特殊情况,如果收到报文是 SYN 报文或者 FIN 报文,则改为 + 1),可以得出当前的确认号为 server_isn + 1 + 1,也就是 server_isn + 2。

实际抓包图

在这里贴一个,实际过程中的抓包图。

抓包图

套入我的万能公式,发送的 TCP 报文:

  • 公式一:序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1。

  • 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1。

懂了这套公式之后,相信你在看这类的抓包图中序列号和确认号的变化的时候,就不会没有逻辑了。

6.1 序列号与确认号 由前文可知,TCP的序列号(seq)与确认号(ack_seq)都是无符号32的整数。seq用于为每一字节TCP数据编号(SYN和FIN标记位也会占用一个seq);ack_seq用于告知数据发送端:“接收端已经收到了ack_seq - 1号数据,请发送ack_seq号数据”。下面我们重温一下TCP连接建立和数据传输过程,在这个过程中探究一下seq和ack_seq是如何使用的。首先来介绍一下tcp_s 阅读详情

相关推荐

【网络协议】【TCP】精讲TCP序列号和确认号!图解超赞超详细!!!

这里我们可以看到,服务端发的包,序列号一直是1,因为当前服务端只是接收数据,并没有发送数据,所以服务端的序列号一直是1,而客户端的确认号也一直是1,表示期待服务端发送第一个字节过来。:确认号通常是接收方期望接收的下一个字节的序列号。上一次发送时为【5】,【5】中seq为1,但【5】为ACK数据包,所以数据长度为0且不会驱使seq加1,所以这一次的seq为1(1+0)。在TCP通信中,接收方会向发送方发送一个确认数据包,其中包含了确认号,表示接收到的数据包中的最后一个字节的下一个字节的序列号。

风云说通信 2099

TCP 序列号和确认号是如何变化的?

大家好,我是小林。在上回答了很多人的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号和确认号的变化就不知道了。也有很多同学跟我反馈,希望我写一篇关于 TCP 序列号和确认号变化过程的文章。大家别小看这个基础知识点,其实很多人都不知道的。所以,这次就跟大家聊聊以下过程中,TCP 序列号和确认号是如何变化的?

小林coding 6228

噪声整形与过采样实战:从N-bit ADC到DSM的SQNR优化指南

本文深入探讨了噪声整形与过采样技术在DSM(Delta-Sigma调制器)中的应用,重点分析了量化器位数(N)、滤波器阶数(L)和过采样率(OSR)对SQNR优化的影响。通过实战案例和参数协同优化策略,帮助工程师在音频处理和通信系统设计中实现更优的信号质量。

weixin_42561040的博客 340

6-TCP 协议(序号和确认号)

转载请注明出处:http://blog.youkuaiyun.com/q1007729991/article/details/69261780接下来的内容是学习后续内容的基础,必须先讲清楚。为了方便你回忆 TCP 首部,这里再次把这个图贴出来,以便对照。 图1 TCP 首部 1. 序号序号占用 4 字节,即 32 位。它的范围是 [0,232−1][0, 2^{32}-1],也就是说一共有 4 294

进击的小学生 3万+

基于DBSCAN聚类算法的超像素实时分割

Real-Time Superpixel Segmentation by DBSCAN Clustering Algorithm 摘要 在本文中,我们提出了一种基于密度的带噪声应用空间聚类(DBSCAN)算法的50帧/秒实时图像超像素分割方法。为了降低超像素算法的计算量,我们采用了一种快速的两步框架。在第一个聚类阶段,使用具有颜色相似性和几何约束的DBSCAN算法对像素进行快速聚类,然后在第二个合并阶段,通过颜色和空间特征定义的距离度量,将小簇按其邻域合并为超像素。为了在这两个步骤中获得更好的超像素,定义了

yttt的博客 3493

GD32F105RBT6 keil工程模板

创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。

RMDYBW的博客 1930

TCP保证可靠性机制确认应答与超时重传

当发送方发送数据时,发送方就会等待接收方发送ACK报文代表接收方已经收到数据,这个ACK报文告诉我们确认序号前面的数据接收方已经接收到了,发送方可以从确认序号以后的数据开始发送.

欢迎来到我的博客,在这里我会用我的方式来讲解知识,请大家多多关照 973

unity 休闲游戏 动效规范说明

在特效制作中,有时为了完成更丰富、更绚丽的效果,可能会添加一些高级Shader(着色器),例如扭曲、溶解,这些Shader(着色器)往往需要用到显卡的部分功能,会造成较大的性能损耗。如果对纹理细节要求较高,那么建议使用贴图比例为1∶1的正方形(不强制),使用不等边贴图制作特效时会对纹理清晰度造成一定的损失(引擎算法决定)。首先选择模型体,然后在Inspector(检测视图)中查看该物体的属性,找到MeshRenderer(网格渲染)组件中的阴影设置项,如图。制作特效时,尽量不要使用灯光系统。

丛小胖 1612

硬核长文!解析TCP/UDP的前世今生

通过多张图详细解析TCP/UDP的工作原理,从需求出发讲解为什么需要该功能,如何使用该功能,并且使用wireshark作为抓包工具进行对TCP/UDP包的详细刨析

weixin_57208136的博客 1701

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 521

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 552

TCP 三次握手:详解与原理

TCP 三次握手是建立可靠连接的关键步骤,通过同步序列号、确认号和状态机的配合,确保了连接的可靠性和数据的完整性。三次握手不仅防止了已失效的连接请求报文段突然又传送到了服务端,还同步了双方的初始序列号,为后续的数据传输奠定了基础。在实际应用中,三次握手可能会面临 SYN 泛洪攻击等安全威胁,通过 SYN Cookie、限制 SYN 数据包速率、使用防火墙和 IDS 等技术,可以有效防御这些攻击。此外,通过优化技术如 TCP 快速打开(TFO)和并行连接,可以进一步提高连接建立的效率和数据传输的性能。

兔子的博客 6135

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 789

万字长文 | 23 个问题 TCP 疑难杂症全解析

每个时代,都不会亏待会学习的人。 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题。 TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 SACK,为什么要有 D-SACK? 都知道有滑动窗口,那由于接收方的太忙了滑动窗口降为了 0 怎么办?发送方就永远等着了? Silly Window 又是什么? 为什么有滑动窗口流控还需要拥塞控制? 快速重传一定要依赖三次重复 ACK ? 这篇文章我想由浅到深地过一遍 TCP,不是生硬.

yes 1009

Office 365中的Assigned Access详细功能介绍

本文系统介绍了Office365中AssignedAccess功能的应用与管理。作为Windows系统的重要安全特性,AssignedAccess可将设备锁定为单应用模式,有效防范未授权访问。文章详细阐述了其核心功能、技术架构及配置方法,包括UWP/Win32应用支持、多用户配置、与AzureAD集成等。通过MicrosoftEndpointManager可实现批量部署和远程监控,适用于公共终端、零售设备等场景。该功能为企业数字化转型提供了安全、可控的终端管理方案,在保障数据安全的同时优化用户体验。

xueyunshengling的博客 227

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【面试系列】万字长文,速通TCP、HTTP(s)、DNS、CDN、websocket、SSE

本文系统介绍了计算机网络的核心概念和协议,重点讲解了OSI七层模型、TCP/UDP协议及其区别、TCP的三次握手与四次挥手流程及相关问题、DNS、CND、Websocket和SSE协议。文章详细解析了TCP可靠性传输机制,包括序列号机制、校验和、重传机制等,并对非正常关闭连接时的TCP Keepalive机制进行了说明。内容涵盖面试常见考点,适合求职者快速掌握计算机网络关键知识点,文中配有清晰的流程图和报文结构图辅助理解。

fkcaikengren 842

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

万字长文带你解析23 个问题 TCP 疑难杂症!

作者 |是Yes呀责编 | 王晓曼来源 | yes的练级攻略(ID:yes_java)在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题。TCP 握手一定是三次?TCP ...

优快云资讯 3174

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

tcp假连接_万字长文 | 23 个问题 TCP 疑难杂症全解析

在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题。TCP 握手一定是三次?TCP 挥手一定是四次?为什么要有快速重传,超时重传不够用?为什么要有 SACK,为什么要有 D-SACK?都知道有滑动窗口,那由于接收方的太忙了滑动窗口降为了 0 怎么办?发送方就永远等着了?Silly Window 又是什么?为什么有滑动窗口流控还需要拥塞控制?快速重传一定要依赖三次重复 ACK...

weixin_39974882的博客 247

【计网】万字长文带你深入理解 TCP/IP 协议:从网络分层到 TCP 三次握手

本文详细介绍了TCP/IP协议族,这是互联网通信的核心协议体系。主要内容包括:①TCP/IP协议概述:解释了TCP/IP协议族的核心作用,包含IP、TCP、UDP、HTTP等协议,解决了数据组织、主机寻址和可靠传输三大问题。②网络分层模型:对比了理论性的OSI七层模型和实际应用的TCP/IP四层模型(应用层、传输层、网际层、网络接口层)。③数据传输过程:描述了数据从应用层向下封装到物理层,以及接收方解封装的过程。④IP协议详解:包括IPv4/IPv6地址、私有地址范围和子网掩码的作用。

欢迎来到我的优快云个人博客主页! 1004

再深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

转载地址:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 如果对网络工程基础不牢,建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》 下面就是TCP/IP(Transmission Control Protoco/Internet Protocol )协议头部的格式,是理解其它内容的基础,就关键字段做一些说明 Source Port和Des..

alpha_love的博客 441

sql server tcp 信号灯超时时间已到_万字长文 | 23 个问题 TCP 疑难杂症全解析

每个时代,都不会亏待会学习的人。在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题。TCP 握手一定是三次?TCP 挥手一定是四次?为什么要有快速重传,超时重传不够用?为什么要有 SACK,为什么要有 D-SACK?都知道有滑动窗口,那由于接收方的太忙了滑动窗口降为了 0 怎么办?发送方就永远等着了?Silly Window 又是什么?为什么有滑动窗口流控还需要拥塞控制?快速重传一定...

weixin_39724793的博客 767

tcp假连接_万字长文带你解析23 个问题 TCP 疑难杂症!

作者 |是Yes呀责编 | 王晓曼来源 | yes的练级攻略(ID:yes_java)在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题。TCP 握手一定是三次?TCP 挥手一定是四次?为什么要有快速重传,超时重传不够用?为什么要有 SACK,为什么要有 D-SACK?都知道有滑动窗口,那由于接收方的太忙了滑动窗口降为了 0 怎么办?发送方就永远等着了?Silly Win...

weixin_39852688的博客 176

八千字长文详细图解:从输入URL到浏览器显示页面到底发生了什么?

我们每天上网都使用http协议,我们每天编程也使用http协议,Spring Cloud的微服务使用Http template实现RPC调用,到处都是HTTP这四个字…… 作为一名天天接触HTTP协议的程序员,不管是前端还是后端,怎能不了解HTTP协议呢?就连校招面试,HTTP协议也作为考官必点的一道开胃菜进行提问! 不管是面试还是开发,学好http协议都是必要的~ 今天我们就来好好深入钻研,死磕HTTP协议!现在让我们泡杯咖啡,好好梳理一下HTTP协议~

浩然的博客 2382
上一篇: Java数据结构之AVL树详解
下一篇: 不看后悔,最全介绍Spring Bean的8种加载方式
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值