TCP共有6个标志位,分别是:

  • SYN(synchronous),建立联机。
  • ACK(acknowledgement),确认。
  • PSH(push),传输。
  • FIN(finish),结束。
  • RST(reset),重置。
  • URG(urgent),紧急。

TCP/IP三次握手

通俗:

A与B建立TCP连接时:

  • 1、首先A向B发SYN(同步请求),
  • 2、然后B回复SYN+ACK(同步请求应答),
  • 3、最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了

TCP/IP三次握手、四次挥手流程

详细:

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。

在上述过程中,还有一些重要的概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数: 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

四次挥手流程

通俗:

  1. 客户端发个“时间不早了,我要走了”给服务器,等服务器起身送他
  2. 服务器听到了,发个“我知道了,那我送你出门吧”给客户端,等客户端走
  3. 服务器把门关上后,发个“我关门了”给客户端,然后等客户端走(尼玛~矫情啊)
  4. 客户端发个“我知道了,我走了”,之后自己就走了

TCP/IP三次握手、四次挥手流程

详细:

假设客户机A向服务器B请求释放TCP/IP连接,则:
第一次挥手:主机A向主机B发送FIN包;A告诉B,我(A)发送给你(B)的数据大小是N,我发送完毕,请求断开A->B的连接。

第二次挥手:主机B收到了A发送的FIN包,并向主机A发送ACK包;B回答A,是的,我总共收到了你发给我N大小的数据,A->B的连接关闭。

第三次挥手:主机B向主机A发送FIN包;B告诉A,我(B)发送给你(A)的数据大小是M,我发送完毕,请求断开B->A的连接。

第四次挥手:主机A收到了B发送的FIN包,并向主机B发送ACK包;A回答B,是的,我收到了你发送给我的M大小的数据,B->A的连接关闭。

相关文章: