标签:image seconds 四次握手 读写 三次 信息 完成 完成后 数据
当server和client进行TCP通信时,发送数据之前,需要先建立连接。数据发送完毕时,需要选择是否断开。这里就需要先认识下TCP的三次握手和四次分手机制。
3次握手时 第一次握手:client端向server端发送连接请求信息:SYN=1,seq=x,
第二次握手:server端回复:ACK=x+1的确认信息。
第三次握手:server端向client端发送连接请求信息:SYN=1,seq=y,
第四次握手:client端回复:ACK=y+1的确认信息。
因为连接之前,没有别的数据在发送,所以第二次和第三次握手可以合并一起发送。即:
第一次握手:client端向server端发送连接请求信息:SYN=1,seq=x,
第二次握手:server端向client端发送回复和连接请求信息:ACK=x+1,SYN=1,seq=y,
第三次握手:client端回复:ACK=y+1的确认信息。
四次分手 第一次分手:client端向server端发送断开连接请求信息:FIN=1,seq=x+2
第二次分手:server端回复:ACK=x+3的确认断开连接信息。
第三次分手:server端向client端发送断开连接请求信息:FIN=1,seq=y+1,
第四次分手:client端回复:ACK=y+2的确认断开连接信息。
为什么这里第二次和第三次分手不能合并一起呢?因为client向server端发送信息完毕时,会发送断开连接请求,server会回复确认断开连接回复,但此时server端可能还在向client发送数据,所以不能同时发送断开连接请求,只有当server端向client发送数据完毕时,才能向client端发送断开连接请求。
言归正传,说一下我理解的长连接和短连接。
长连接:在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)即:Keepalive(存活定时器)功能。过程如下:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);
默认的Keepalive超时需要7,200,000 milliseconds,即2小时,探测次数为5次。
客户主机必须处于以下4个状态之一:
短连接:
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);过程如下:
连接→数据传输→关闭连接;
标签:image seconds 四次握手 读写 三次 信息 完成 完成后 数据
原文地址:https://www.cnblogs.com/sly123/p/9574805.html