TCP三次握手) )。
要建立TCP连接,客户端和服务器必须发送总共三个数据包以确认连接的建立。
TCP握手三次:
初始握手: Client将标志位SYN设置为1,随机生成值seq=J,然后将其包发送到服务器。 客户端将进入SYN_SENT状态,并等待服务器确认。
第二次握手:服务器收到包后,从标志位SYN=1开始知道客户端要建立连接。 Server将标志位SYN和ACK都设置为1,ack=J 1,并随机生成一个值seq=K,然后将该包发送到客户端以确认连接请求,从而使Server进入SYN_RCVD状态
第三次握手: Client收到确认后,检查ack是否为J 1,如果标志位ack正确设置为1,ack=K 1,服务器将该数据包发送到服务器,ack为K 1
TCP挥手(Four-Way Wavehand ) )。
断开TCP连接时,客户端和服务器端需要发送总共四个数据包来确认连接的断开。
TCP挥了四下手:
第一次挥手时:客户端发送FIN以关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态。
第二次挥手:服务器收到FIN后,向客户端发送ACK,确认序列号与接收序列号1(syn相同,一个FIN占用一个序列号,服务器进入CLOSE_WAIT状态
第三次挥手:服务器发送FIN以关闭从服务器到客户端的数据传输,服务器进入LAST_ACK状态。
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,然后向Server发送ACK,确认序列号为接收号1,Server进入CLOSED状态,完成4次挥手
以下是客户端建立与MySQL数据库的连接并打开事务后,由于MySQL数据库没有成功接收到断开连接而导致长时间未提交事务的情况:
1、APP应用服务器异常宕机
2、APP应用程序异常中止或线程异常终止
3、网络抖动和网卡故障
对于由于上述连接异常断开而导致的未提交事务,可以触发事务回滚:
1、数据库级连接等待超时由MySQL参数wait_timeout控制,缺省时间为8小时。
2、操作系统级TCP连接超时,有以下TCP参数控制:
/proc/sys/net/IP v4/TCP _ keepalive _ time=7200 (等待时间(/proc/sys/net/IP v4/TCP _ keepalive _ intvl=75
3、手动或自动进行基尔连接
参考:
1、https://blog.csdn.net/sssnmnmjmf/article/details/68486261
2、赞扬DBA在DTCC2019上的技术共享