首页 > 代码库 > TCP状态变迁
TCP状态变迁
上图18-13是TCP连接建立和关闭的抽象图,下面的图18-3是具体实例
其中包括:三次握手(建立连接)、四次挥手(终止连接)
三次握手:SYN/FIN的序列号可理解为通信操作的version
client发送一个SYN(握手信号)给server的端口,SYN中包括client的初始序列号ISN-client;
server接收到后,回应包括server的初始序列号ISN-server,同时,将确认序号ACK设置为ISN-client+1以对client的SYN进行确认,一个SYN占用一个序号;
client接收后,回应server,将确认序号ACK设为ISN-server+1以对server的SYN进行确认
即:
client-->server: SYN (ISN-client : J)
server-->client: SYN (ISN-server : K),ACK(J+1)
client-->server: ACK (K+1)
四次挥手:一个FIN也占用一个序号
client发送一个FIN给server的端口,FIN的序列号为上次请求序列号+1,(假设建立连接之后立马关闭连接)则为ISN-client + 1,ACK为ISN-server + 1;
server接收到后,知晓client关闭client-->server方向的数据传送,发送ACK为ISN-client+2;
server发送一个FIN给client,FIN的序列号为ISN-server+1,ACK为ISN-client+2;
client接收到后,知晓server关闭server-->client方向的数据传送,发送ACK为ISN-server+2
即:
client-->server: FIN (ISN-client :J+1),ACK (ISN-server : K+1),关闭client-->server方向的数据传送
server-->client:ACK (ISN-client : J+2)
server-->client:FIN (ISN-server :K+1),ACK(ISN-client : J+2),关闭server-->client方向的数据传送
client-->server:ACK (ISN-server : K+2)
长连接和短连接的区别:在于连接的关闭策略不同
短链接:建立TCP连接后,进行一次读写操作,然后关闭连接,是双向关闭
长链接:建立TCP连接后,进行读写操作,之后client/server都不主动关闭连接,后续的读写操作都使用此连接。
期间,用TCP具备的保活功能进行定时检测client的状态,这种保活功能大多放在服务器实现。
假设半小时内,client和server之间没有任何操作,则server发送一个探测报文给client:
1、client正常,server重置保活定时器
2、client异常(关闭,崩溃,正在重启),即server收不到client回应,或者说是回应超时,server可以设定一个每隔m秒,总共重发n次的机制,若client还是没反应,则终止连接
3、client重启完毕,server收到一个复位响应,server终止连接
4、client正常,但server的探测报文无法送达,则执行第二种情况的操作
TCP状态变迁