TCP三次握手四次挥手及各状态解释

常说的三次握手和四次挥手的意思就是TCP建立连接和断开连接的过程
下图为TCP三次握手和四次挥手的过程图
TCP三次握手四次挥手及各状态解释_第1张图片
状态或符号解释

  • seq(sequence number),序列号,用来标记数据段的顺序,TCP把连接中发送的数据字节都编上一个序号,第一个字节的编号由本地随机产生
  • ack(acknowlege number),确认号,指的是期望接收到下一个字节的编号,因此当前报文段最后一个字节的编号+1即为确认号
  • ACK(acknowledgement),确认,当ACK=1确认号字段才有效,ACK=0确认号无效
  • SYN(synchronous),同步,连接建立时用于同步序号
  • 握手过程:
  • SYN_SENT 客户端发送连接服务器请求后的状态
  • SYN_RCVD 服务器接收到客户端的请求后返回响应后的状态,此时握手还没有完成
  • ESTABLISHED 握手成功后的状态,对于客户端而言,客户端发送连接请求后接收到服务器的响应,并发送确认连接后的状态;对于服务器而言,接收到客户端第三次握手信息后确认连接的状态
  • 挥手过程:
  • FIN_WAIT1是主动断开连接方发出关闭请求后的状态,表示主动方(主动断开TCP连接的一方)已经没有信息要发送给被动方
  • CLOSED_WAIT是被动方接收到主动方的关闭请求后返回ACK响应后的状态,此时被动方应该做的是查看自身是否还有数据需要传递给主动方,如果没有则发送关闭请求
  • FIN_WAIT2是主动方向被动方发送关闭请求后接收到响应后的状态
  • LAST_ACK是被动方已经确定没有数据需要传递给主动方后,发送给主动方关闭请求后的状态,表示最后一次响应主动方,它最后再等待主动方的ACK报文,当收到报文后便CLOSED
  • WAIT_TIME是主动方接收到被动方关闭请求后的状态,它再返回响应给被动方,被动方收到这个响应后便断开连接。此时主动方再等待2MSL,来确保被动方已经没有信息传递给主动方了,时间过后则关闭连接

为什么是三次握手,而不是两次或者四次
1、根据图中三次握手的信息来看,第一次客户端发送连接请求,第二次服务器接收请求并响应,如果两次的话,可能会出现以下问题,由于网络原因,客户端可能接收不到服务器的响应,那么客户端会认为服务器没有同意它的连接,而服务器确已经开始和客户端的连接了,浪费服务器的资源
2、因为三次握手已经可以满足连接的需求了,三次握手是理论上的最小值,为了提高效率,因此没必要采用四次连接

为什么是四次挥手
熟悉上面断开连接的过程即可理解为什么四次挥手了,这里就不再赘述了

这里是引用为什么等待2MSL
1、在主动方发送出最后的ACK回复,但该ACK可能丢失。被动方如果没有收到ACK,将不断重复发送FIN片段。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,主动方都没有再次收到FIN,那么主动方推断ACK已经被成功接收,确保被动方已经断开连接,则结束此次TCP连接。
2、等待2MSL就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段。

你可能感兴趣的:(计算机网络,http,计算机网络,三次握手四次挥手,tcp)