首页 > 代码库 > TCP状态变迁

TCP状态变迁

技术分享



技术分享

上图18-13TCP连接建立和关闭的抽象图,下面的图18-3是具体实例

其中包括:三次握手(建立连接)、四次挥手(终止连接)

 

三次握手:SYN/FIN的序列号可理解为通信操作的version

client发送一个SYN(握手信号)server的端口,SYN中包括client的初始序列号ISN-client

server接收到后,回应包括server的初始序列号ISN-server,同时,将确认序号ACK设置为ISN-client+1以对clientSYN进行确认,一个SYN占用一个序号;

client接收后,回应server,将确认序号ACK设为ISN-server+1以对serverSYN进行确认

即:

client-->server: SYN (ISN-client : J)

server-->client: SYN (ISN-server : K),ACK(J+1)

client-->server: ACK (K+1)

  

 

四次挥手:一个FIN也占用一个序号

client发送一个FINserver的端口,FIN的序列号为上次请求序列号+1(假设建立连接之后立马关闭连接)则为ISN-client + 1ACKISN-server + 1

server接收到后,知晓client关闭client-->server方向的数据传送,发送ACKISN-client+2

server发送一个FINclientFIN的序列号为ISN-server+1ACKISN-client+2

client接收到后,知晓server关闭server-->client方向的数据传送,发送ACKISN-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的状态,这种保活功能大多放在服务器实现。

假设半小时内,clientserver之间没有任何操作,则server发送一个探测报文给client

1client正常,server重置保活定时器

2client异常(关闭,崩溃,正在重启),即server收不到client回应,或者说是回应超时,server可以设定一个每隔m秒,总共重发n次的机制,若client还是没反应,则终止连接

3client重启完毕,server收到一个复位响应,server终止连接

4client正常,但server的探测报文无法送达,则执行第二种情况的操作

 

TCP状态变迁