分布式 | 数据库连接如何正确处理 TCP 连接三次握手失败

【网络编程】TCP 3次握手&4次挥手浅析 大家都知道传输层中的TCP协议是面向连接的,提供可靠的连接服务,其中最出名的就是三次握手和四次挥手。 阅读详情

作者:鲍凤其

爱可生 dble 团队开发成员,主要负责 dble 需求开发,故障排查和社区问题解答。少说废话,放码过来。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景

在稳定性环境中,当 dble 初始化后端连接池后,后端连接池会出现连接计数器(totalConnections)和实际连接(allConnections)数量不符合的情况,理论情况下两个变量会保持最终一致性。

后续通过查阅网上相关文档,找到了相关文档:https://mp.weixin.qq.com/s/FEybf-jRL8gMUYPBDH3aQg ,详细分析过程可参考此文章。

简单来说,在 dble 初始化后端连接池的过程中,瞬时创建的连接数量可能过大,导致部分 TCP 连接握手时触发了 TCP 的 syn_cookie 机制并且第三次 TCP 握手的 ACK 报文丢失了,从而导致了上述的情况。

后续,在稳定性环境中将 TCP 的 syn_cookie 关闭之后暂时解决了此种情况。

但假设正常 TCP 三次握手出现如下三种异常情况:

  • TCP 第一次握手包 SYN 丢包了
  • TCP 第二次握手包 SYN、ACK 丢包了
  • TCP 第三次握手包 ACK 包丢了

客户端和服务端是如何处理的,如果重传,重传多少次?每次间隔时长多少?

实验环境

在一台服务器上启动 MySQL 服务,端口是3306,IP地址:10.186.60.69

在一台服务器上使用 MySQL client 连接 MySQL 服务,IP地址:10.186.60.60

第一种场景

TCP 第一次握手包 SYN 报文丢包了,会发生什么?

在 MySQL 服务器上执行,通过 iptables 阻断客户端的发送过来的所有TCP报文:

$ iptables -i eth0 -A INPUT -p tcp --dport 3306 -j DROP

在 MySQL 服务器上开始抓包:

$ tcpdump -i eth0 tcp and port 3306 -w tcp_syn_timeout.cap

通过 MySQL client 连接 MySQL 服务端,过了一分多钟后,客户端返回报错,此时停止抓包,如下图:

$ mysql -h10.186.60.69 -uroot -p123456 -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '10.186.60.69' (110)

wireshark 分析抓包文件:

客户端在收不到 TCP SYN 报文的 ACK 报文后,会不断进行重试,示例中会进行六次重试并且每次 RTO 是不同的:

  • 第一次是1秒后重试
  • 第二次是3秒后重试,和第一次相差 2s 左右
  • 第三次是7秒后重试,和第二次相差 4s 左右
  • 第四次是15秒后重试,和第三次相差 8s 左右
  • 第五次是31秒后重试,和第四次相差 16s 左右
  • 第六次是65秒后重试,和第五次相差 32s 左右

每次超时时间 RTO 是指数上涨的。另外,这里的重试次数可以配置,由客户端机器的如下内核参数指定:

$ cat /proc/sys/net/ipv4/tcp_syn_retries
6 
 
# 不同的发行版本,参数可能不同
$ uname -a
Linux ubuntu 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

可以尝试修改此参数看看效果:

$ echo 2 > /proc/sys/net/ipv4/tcp_syn_retries

因此:

TCP 第一次握手包 SYN 报文丢包了,会发生什么?

客户端会重传 SYN 报文,直到收到 ACK 或者达到最大次数,每次重试的时间是翻倍上涨的。

第二种场景

TCP 第二次握手的 SYN + ACK 报文丢包了,会发生什么?

为了模拟 SYN + ACK 的丢包情形,在客户端设置防火墙,将MySQL服务端的报文全部拦截:

$ iptables -A INPUT -p tcp -s 10.186.60.69 -j DROP

在 MySQL 服务器端抓包:

$ tcpdump -i eth0 tcp and port 3306 -w tcp_syn_ack_timeout.cap

在 wireshark Statistics下面 flow graph 功能分析 tcp 流:

从上图来看,可以分为两个视角:

客户端视角:客户端发出 SYN 报文之后,由于设置了防火墙,没有收到 SYN + ACK 报文,因此,客户端会不断进行重试,直到收到 SYN + ACK 或者达到最大重试次数

服务器视角:服务器端在收到 SYN 报文之后,发送SYN + ACK 报文,但是收不到最后一次握手的 ACK 报文,因此服务器端会不断进行重试发送SYN + ACK 报文。

客户端超时重传的 SYN 包抵达了服务端后,服务端然后回了 SYN、ACK 包,但是 SYN、ACK 包的重传定时器并没有被重置,仍然持续在重传。

从图中可以看出,服务端在收到第三次的 SYN 报文并发出的 SYN + ACK 报文之后,后面重试了四次,将之前重试的一次也算在内。

这个重试次数也由内核参数控制:

$ cat /proc/sys/net/ipv4/tcp_synack_retries
5

将客户端内核参数 tcp_synack_retries 设置成 1 之后,TCP 交互图:

这样重试次数就更加明显了。

第三种场景

TCP 第三次握手的 ACK 丢包了

在 MySQL 服务器端设置防火墙,拦截 TCP 第三次握手的 ACK 报文:

$ iptables -A INPUT -p tcp --tcp-flag ack ack --dport 3306 -j DROP

在 MySQL 服务器端抓包:

$ tcpdump -i eth0 tcp and port 3306 -w tcp_3th_ack_timeout.cap

分析抓包文件:

从上图来看,可以分为两个视角:

客户端视角:对于客户端来说,其实连接已经建立好了

通过 netstat 命令查看连接的状态:

$ netstat -napt|grep 3306
tcp 0 0 10.186.60.60:42490 10.186.60.69:3306 ESTABLISHED 14391/mysql

此时连接的状态是 ESTABLISHED 状态。

服务器视角:由于没有收到第三次的 ACK 报文,和第二种场景类似,服务器会一直重新发送 SYN + ACK 报文,直到达到最大次数

在重试期间,服务端连接的状态一直处于 SYN_RECV 状态:

$ netstat -napt|grep 3306
tcp        0      0 10.186.60.69:3306       10.186.60.60:42868      SYN_RECV    -

过了半分钟左右,也就是服务器端达到重试次数之后,服务端刚才处于 SYN_RECV 的状态的 TCP 连接不见了。

可是此时客户端的连接却依然存在。

客户端的连接之后怎么处理?

此时分场景讨论:

一种场景是,客户端在 TCP 连接建立完成之后,直接发送数据。

另一个种场景是,客户端没有任何操作。下面对这两种情况进行讨论。

客户端发送数据

为了模拟这种场景,我们预先通过客户端连接 MySQL 服务器。

连接上之后在 MySQL 服务器端通过防火墙隔离客户端的报文:

$ iptables -A INPUT -p tcp -s 10.186.60.60 -j DROP

在 MySQL 服务端进行抓包:

$ tcpdump -i eth0 tcp and port 3306 -w tcp_data.cap

之后通过刚才建立的连接,下发 use test ; 语句。

下面分析一下抓包文件:

分析:

我们发现客户端一共重传了十一次。

TCP 建立连接后的数据包传输,最大超时重传次数是由 tcp_retries2 指定,默认值是 15 次,这里为了便于观测,将数值调整成了 10 次,如下:

$ cat /proc/sys/net/ipv4/tcp_retries2
10

可是这里的抓包文件中传输了十一次报文,这里参考文章:https://perthcharles.github.io/2015/09/07/wiki-tcp-retries/

无任何操作

在 MySQL 的协议中,TCP 建立完成之后,MySQL 服务端会发送握手包,由于 MySQL 服务端连接已经不在,因此不会下发握手包,客户端会一直 hang 住。

$ mysql -h10.186.60.69 -uroot -p123456 -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.

此时客户端连接的存活由 TCP 的保活机制确保。

keep-alive 机制:

  1. 首先,有个前提:在特定的时间段内,连接如果没有任何动作,TCP 保活机制会开始作用。
  2. 保活机制会每过一个固定时间发送一个「探测报文」,如果连续几个探测报文都没有得到响应,则认为该 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

在 Linux 内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,以下都为默认值:

$ sysctl -a|grep keepalive
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
  
# 也可以通过下面的方式来查看:
$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl
$ cat /proc/sys/net/ipv4/tcp_keepalive_probes
$ cat /proc/sys/net/ipv4/tcp_keepalive_time

参数解释:

  • tcp_keepalive_intvl=75:表示每次检测间隔 75 秒;
  • tcp_keepalive_probes=9:表示检测 9 次无响应,认为对方是不可达的,从而中断本次的连接。
  • tcp_keepalive_time=7200:表示保活时间是 7200 秒(2小时),也就 2 小时内如果没有任何连接相关的活 动,则会启动保活机制

我们可以修改参数看下效果:

$ echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl
$ echo 40 > /proc/sys/net/ipv4/tcp_keepalive_time
$ echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes

通过抓包文件查看:

可以看到在 40s 时候,开始探活包,探测了两次,每次间隔 10s 中,符合参数修改的定义

修改参数之后,client 过了大约一分钟后,就报错了:

$ mysql -h10.186.60.69 -uroot -p123456 -P3306
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 110
TCP 三次握手原理,你真的理解吗? 阿里妹导读:最近,阿里中间件小哥哥蛰剑碰到一个问题——client端连接服务器总是抛异常。在反复定位分析、并查阅各种资料文章搞懂后,他发现没有文章把这两个队列以及怎么观察... 阅读详情

相关推荐

TCP三次握手原理深度解析:从连接失败到网络通信基石

TCP(传输控制协议)是互联网可靠数据传输的核心协议,其连接建立过程是网络通信的基石。TCP通过序列号、确认号和标志位等机制,在不可靠的IP网络上构建了有序、不丢包的可靠传输通道。这一机制的核心技术价值在于解决了双向通信的同步与资源分配问题,确保了数据交换的完整性和一致性。在微服务架构、分布式系统和高并发Web服务等应用场景中,TCP连接的稳定建立是服务间通信的前提。本文聚焦于TCP三次握手这一关键过程,深入剖析其报文交互、状态变迁及参数协商机制,并结合SYN Flood攻击、TIME_WAIT状态等常见问

weixin_30457465的博客 895

从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。   1、TCP是什么? TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面...

iteye_10227的博客 5422

TCP三次握手:为什么不是两次或四次?深入解析网络连接建立的可靠性设计

在网络通信中,连接建立是确保可靠数据传输的基础。TCP协议通过序列号机制和确认应答实现可靠传输,其核心在于双方状态的同步。三次握手正是这一原理的关键实践,它通过在不可靠网络上进行最少次数的交互,完成双向通信路径的验证和初始序列号的交换,从而防止历史报文干扰和资源泄漏。这一设计体现了在保证可靠性与追求效率之间的精巧权衡,是分布式系统实现稳定通信的基石。理解三次握手不仅有助于解决连接超时、半开连接等工程问题,也为设计高可用的网络服务提供了重要启示。

weixin_34166472的博客 452

三次握手建立失败的几种情况以及三次握手的理解

上面的图是阻塞式socket进行通信的过程,阻塞的时候是操作系统内核网络协议栈在工作 调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回。其中出错返回可能有以下几种情况: 1、三次握手无法建立,客户端发出的 SYN 包没有任何响应,于是返回 TIMEOUT 错误。这可能是对应的服务端 IP 写错 2、客户端收到了 RST(复位)回答,这时候客户端会立即返回 CONNECTION REFUSED 错误。。这可能是客户端发送连接请求时的请求端口写错。 产生 RST 的.

hanhan的博客 9052

TCP三次握手与四次挥手:从原理到实战排查连接问题

TCP(传输控制协议)是互联网可靠通信的基石,它通过序列号、确认机制和滑动窗口等核心机制,确保数据在网络中可靠、有序地传输。其工作原理基于连接的生命周期管理,其中三次握手用于建立连接,四次挥手用于终止连接,这是实现全双工通信和防止旧连接干扰的关键设计。理解这些机制的技术价值在于,它不仅是网络编程的基础,更是诊断和解决线上连接问题的核心能力。在实际应用场景中,无论是高并发服务器优化、分布式系统调试,还是日常的Web服务、API调用,TCP连接状态都直接影响着系统的稳定性和性能。通过分析半连接队列、全连接队列溢

weixin_33913332的博客 437

滴滴面试复盘:HashMap、三次握手、volatile等高频八股文深度拆解

大厂技术面试越来越重视计算机基础,HashMap底层结构、TCP三次握手、volatile可见性、线程池参数、MySQL索引为何选B+树等看似经典的“八股文”,实则是考察候选人是否真正理解底层原理与知识体系。从数据结构到网络协议,从并发机制到索引优化,每一道题都能延伸出一条完整的技术链路。理解概念背后的设计动机,掌握从原理到工程实践的推导方法,不仅能应对面试追问,更能帮助我们在实际项目中做出合理的技术选型与性能优化。本文基于真实面试经历,系统拆解高频考点及答题策略,并给出从背答案到懂原理的备战路线,为后端开

weixin_33829657的博客 364

TCP三次握手

TCP三次握手 目录 TCP定义 为什么握手是三次,而不是两次或者四次? 三次握手可以携带数据吗? tcp三次握手失败,服务端会如何处理? 优雅回答四次挥手 四次挥手: 为什么握手是三次,而挥手时需要四次呢? 全双工通信 TCP定义 TCP全称为Transmission Control Protocol(传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 优雅回答三次握手

weixin_52719777的博客 867

第 26 篇:基于tcpdump抓包彻底看透TCP三次握手——从背教科书到极致工程洞察

抓包实战系列第 6 篇。上一篇我们分析了一次完整 HTTP 请求:DNS、TCP 三次握手、HTTP 请求、HTTP 响应、连接关闭。今天把其中最关键的一段单独拎出来:TCP 三次握手。我们不再只背 SYN、SYN+ACK、ACK,而是从真实抓包里看它们到底长什么样。

hzz812503533的博客 152

TCP三次握手过程详解

三次握手过程:客户端视角:1.客户端调用connect,开启计时器,发送SYN包,如果重传超时,认为连接失败2.如果收到服务端的ACK,则进入ESTABLISHED状态3.清除重传计时器,发送ACK,开启保活计时器:如果再次收到ACK+SYN说明服务端没收到第三次握手包,进行了重传,此时客户端会重传ACK服务端视角:1.listen()创建半连接队列和全连接队列2.收到SYN包,如果半连接队列已满,丢弃该连接,否则为该连接创建一个socket加入到半连接队列中。

欢迎指正、交流 5955

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 585

银河飞腾FT-M6678 DSP开发初体验:从仿真器连接到第一个网络程序(CCS5.5+FT-EMU560实战)

本文详细介绍了银河飞腾FT-M6678 DSP开发环境的搭建过程,包括CCS5.5开发环境的配置、FT-EMU560仿真器的连接与设置,以及关键模块如网络驱动的国产化替换。通过实战案例,帮助开发者快速掌握国产DSP的开发流程,实现网络通信功能。

weixin_30919429的博客 554

TCP第三次握手失败怎么办,即最后一次握手失败

http://www.cnblogs.com/heyonggang/p/3386415.html 笔试题中经常会遇到这个问题:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。当失败时服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防...

qq_32534441的博客 4098

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

DDOS攻击原理与TCP三次握手

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服...

weixin_45754572的博客 645

YOLOv8改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 1081

uniapp+google map不显示

uniapp+renderJS+google map开发安卓版APP非小程序,google map小叉号不显示,google map自定义marker右上角的小叉号如何去掉,uniapp+google map不显示

renkai721的专栏 525

TCP的特性(包含三次握手、四次挥手问题)

TCP协议基础 一、确认应答(可靠性的核心) 1.原理 2.其他场景 二、超时重传(可靠性) 三、连接管理(三次握手、四次挥手)可靠性 1.三次握手(如何建立连接) 2.四次挥手(如何断开连接) 四、滑动窗口(效率) 1.传输原理 2.窗口范围 3.滑动窗口出现丢包的情况 五、流量控制(可靠性) 1.流量控制: 2.窗口实际大小 六、拥塞控制(可靠性) 七、延时应答(效率) 八、捎带应答(效率) 九、面向字节流(粘包问题) 十、TCP中异常的情况(心跳机制) 1.进程终止 2.机器重启 3.机器掉电/网线断

SwitchD的博客 1009

AgentScope 2.0 源码解析-工具系统解读:从内置工具到权限管控的完整实践

本文深入解析AgentScope 2.0工具系统的完整架构,覆盖内置工具集(文件读写、命令执行、搜索匹配)、MCP协议集成(STDIO/HTTP双传输、客户端封装、工作空间网关)、工具包管理与动态分组、权限引擎的多级决策机制(危险路径保护、只读识别、模式控制),以及自定义工具开发流程。通过分层架构图和时序图直观展示组件协作关系,结合安全最佳实践与故障排除指南,为开发者提供从工具使用到安全管控的全链路参考。

program哲学 566

一天吃透TCP面试八股文

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。但是在关闭连接时,当Server端收到Client端发出的连接释放报文时,很可能并不会立即关闭SOCKET,所以Server端先回复一个ACK报文,告诉Client端我收到你的连接释放报文了。只有等到Server端所有的报文都发送完了,这时Server端才能发送连接释放报文,之后两边才会真正的断开连接。故需要四次挥手。

Tyson0314的博客 4056

PCB高速信号换层孔新技术:VECS(Vertical Conductive Structure Technology)解析

摘要:垂直导电结构(VeCS)是一种新型PCB互连技术,由平板信号走线和椭圆形接地层构成半同轴结构,相比传统过孔具有显著优势。通过全波仿真和实测验证,VeCS展现出更好的阻抗连续性、更低的插入损耗和回波损耗,以及优异的串扰抑制能力。其椭圆形接地结构能有效隔离电磁干扰,在相同布线密度下远端串扰比传统过孔降低约50%。VeCS制备工艺与传统PCB工艺兼容,无需新增设备,且能实现更高密度互连。测试结果显示,2.5英寸带状线通道中VeCS结构的信号完整性表现明显优于传统过孔,为高速数字系统提供了更可靠的垂直互连解决

小孟同学的博客 198

我的python学习之路

Python 是一门功能强大且易于学习的编程语言,广泛应用于数据分析、人工智能、Web 开发、自动化等领域。以下是一个 Python 学习路径的总结,帮助你系统地掌握 Python 编程。

数据知道的博客 3万+

TCP三次握手:从序列号同步到分布式共识的工程实践

在网络通信中,连接建立是确保可靠数据传输的基础。TCP协议通过序列号机制实现数据包的顺序传输与去重,其核心在于双方初始序列号的可靠同步。这一同步过程需要解决不可靠网络下的报文延迟、重复等挑战,确保通信双方状态一致。三次握手正是为此设计的分布式共识协议,它不仅完成了序列号的双向确认,更关键的是防止了历史连接导致的资源浪费与系统崩溃。从工程实践角度看,这一机制直接影响着服务端的半连接队列、全连接队列管理,以及SYN Flood攻击防御等关键问题。理解三次握手的本质,有助于优化网络参数配置、提升服务器并发处理能力

weixin_29228781的博客 271

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OSI七层模型TCPIP五层模型三次握手四次挥手

OSI参考模型,是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。 OSI(Open System Interconnect)由ISO(International Organization for Standardization)国际化标准组织提出 OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7、应用层; 6、表示层; 5、会话层; 4、传输...

Skiray的博客 774

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python 网络编程从 TCP 三次握手到 Socket 搭建极简 AI 推理服务端(零基础可跑通完整代码)

本文从零拆解 IP、端口、TCP 底层通信原理,详解三次握手、字节流编解码、Socket 粘包 / 端口占用等高频坑,配套完整可运行 Python 客户端 + 服务端代码,实现多轮对话 AI 推理骨架,结合 LLM 接口、分布式训练、Agent 网关实战场景讲解网络底层对大模型开发的影响,新手看完即可独立搭建本地推理 TCP 服务。

2601_95700725的博客 352

【面试题】计算机网络常见面试题

文章目录TCP的三次握手、四次挥手?为什么要三次握手?两次行吗?第 2 次握手传回了 ACK,为什么还要传回 SYN?四次挥手三次握手过程中可以携带数据吗?三次握手连接阶段,最后一次ACK包丢失,会发生什么?为什么TCP连接的时候是3次,关闭的时候却是4次?如果已经建立了连接,但是客户端突然出现故障了怎么办?TIME_WAIT是客户端状态还是服务端状态?作用是什么?TIME_WAIT状态过多会造成什么后果?怎样处理?TCP 滑动窗口和流量控制机制?TCP 拥塞控制机制?TCP 协议如何保证可靠传输?TCP/

早上真起不来的博客 2628

这可能是最全面的TCP面试八股文了

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。但是在关闭连接时,当Server端收到Client端发出的连接释放报文时,很可能并不会立即关闭SOCKET,所以Server端先回复一个ACK报文,告诉Client端我收到你的连接释放报文了。只有等到Server端所有的报文都发送完了,这时Server端才能发送连接释放报文,之后两边才会真正的断开连接。故需要四次挥手。

Tyson0314的博客 493
上一篇: 技术分享 | 为什么我的 MySQL 客户端字符集为 latin1
下一篇: 技术分享 | 调整 max-write-buffer-size 优化 pika 性能10倍的案例
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值