简述TCP三次握手和四次挥手过程

TCP三次握手

假设A是客户端,B是服务器,AB通信

第一次握手,AB发送标记位syn=1,发送序号为seq=x,请求和B建立连接,并进入到同步已发送状态(SYN-SENT),等待服务器确认。

第二次握手,B收到A发出请求之后,将SYNACK标记位都置为1,置发送序号为seq=Y,再确认序号为ack=x+1,服务端并将数据包发送给客户端确认连接请求,并由收听状态(LISTEN)切换到同步收到(SYN-RCVD)状态。

第三次握手,A收到B的数据包,将ACK标志位置为1,置发送序号为seq=x+1,确认序号为ack=y+1,将数据包发送给B,此时AB的状态为已建立连接(ESTAB-LISHED)状态,随后AB就可以传输数据了

 

TCP/IP四次挥手

断开连接需要四次过程,前提是两台主机处于正常状态,两台主机通讯完毕后断开连接的时候,两台主机都可以发起断开连接的请求。

假如客户端向服务器发出断开连接的请求

第一次挥手:客户端向服务器发送FIN数据包FIN=1,seq=u,关闭客户端和服务器端的数据传送,客户端就切换到了终止等待1状态FIN-WAIT-1

第二次挥手:服务器收到客户端的FIN数据包后,并发送一个ACK给客户端ACK=1,确认序号为收到序号+1ack=u+1

服务器切换到关闭等待状态CLOSE-WAIT,这个过程中如果还有数据没发完,会继续发送,如果客户端收到ACK之后,客户端状态就切换到了FIN-WAIT2,接收对方发送过来的残余数据。

第三次挥手:服务器向客户端发送FIN数据包关闭服务器端和客户端的数据传送,此时服务器端切换到最后确认状态LAST-ACK

第四次挥手 : 客户端收到服务器端的 FIN 数据包后进入到 TIME-WAIT 状态,等两倍的发送数据包的时间 ( 2MSL ) 之后切换到CLOSE 状态,然后同时向服务器发送一个 ACK ,服务器收到 ACK 之后也切换到 CLOSE 状态

URG:紧急指针位,表示本报文段中发送的数是否包含紧急数据,URG=1才有效

ACK:表示是否前面的确认号字段是否有效,ACK=1时,表示有效

PSH:收到数据包以后是否直接传给应用程序使用,还是先放到缓存,如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存器来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中。

rST:如果收到一个 RST=1的报文,说明与主机的连接出现了严重错误,必须释放链接,然后再重新建立连接。

SYN:建立连接时使用,用来同步序号,当SYN=1ack=0时表示这是一个请求建立连接的报文段,当SYN=1ACK=1时表示对方同意建立连接

FIN:表示通知对方本段要关闭连接了,用来标记数据是否已发送完毕,如果FIN=1,即告诉对方:我们的数据已经发送完毕,你可以释放连接了

猜你喜欢

转载自blog.csdn.net/weixin_41979048/article/details/80180843