三次握手
Client发送带有 SYN 标志的数据包–一次握手Server
Server发送带有 SYN/ACK 标志的数据包–二次握手Client
Client发送带有带有 ACK 标志的数据包–三次握手Server
三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手 ==>Client 只能发送,什么也确认不了;Server 确认了Client 发送正常。
第二次握手==>Client 确认了:自己发送、接收正常,Server 发送、接收正常;Server 确认了自己接收正常,Client 发送正常。
第三次握手==>Client 确认了:自己发送、接收正常,Server 发送、接收正常;Server 确认了:自己发送、接收正常,Client 发送接收正常。
第二次握手传回Client 所发送的 SYN 是为了告诉Client ,我接收到的信息确实就是你所发送的信号了。
四次挥手
Client发送一个 FIN,用来关闭Client到Server 的数据传送
Server 收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。
Server 关闭与Client的连接,发送一个FIN给Client
Client发回 ACK 报文确认,并将确认序号设置为收到序号加1
Client发回 ACK 报文后会进入TIME_WAIT的状态,Server收到Client发回的ACK则关闭连接,如果Server在规定时间内没收到Client发回ACK报文,Server会重新发送一个FIN给Clinet,重新等待Client发回ACK报文。周而复始。
TIME_WAIT状态:
TIME_WAIT也叫做为2MSL。
MSL==>Maximum Segment Lifetime(忽略翻译结果!)
这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失,TCP允许不同的实现可以设置不同的MSL值。Server给Client发送FIN报文后的MSL内,如果Server没收到Client发送的ACK报文,Server将重新向Client发送FIN报文,如果Client向Server发送ACK报文后,在TIME_WAIT的状态中没收到Server发送的FIN报文,Client会关闭连接。TIME_WAIT会持续两倍的MSL,这就是TIME_WAIT为什么被称为2MSL。
TCP还有一个保活计时器。Server每收到一次Client的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。