三次握手和四次挥手

来源:互联网 发布:网络小额贷款平台 编辑:程序博客网 时间:2024/05/22 03:53

TCP连接:

    三次握手:建立连接;四次挥手:断开连接。


直接上图:


符号解释:

SYN:表示发起一个新连接;(标志位)

Seq序号:用来标识从TCP源端向目的端发送的字节流,发送方发送数据时对此进行过标记;

ACK:确认序号有效,ACK=Seq+1;(标志位)

FIN:表示释放一个链接;(标志位)


三次握手

第一次握手:客户端(Client)发送SYN=1,随机产生Seq=X,将数据包发送给服务器(Server),并进入SYN_SENT状态,等待服务器确认;

第二次握手:服务器接收到数据包后,由SYN=1知道客户端请求建立连接,服务器将SYN和ACK都置为1,ack=X +1,随机产生Seq=Y,将数据包发送给客户端以确认连接请求,服务器端进入SYN-RCVD状态;

第三次握手:客户端收到确认后,检查ACK=1?ack=X+1?如果是,则将ACK置为1,ack=Y+1,Seq=X+1,并将数据包发送给服务器。服务器接收到数据包后,确认ACK=1?ack=Y+1?如果是,则连接建立成功,客户端和服务器端都进入ESTABLISHED状态,也即完成了三次握手。


四次挥手(由于TCP连接是全双工的,需要对每个方向单独进行关闭,也即需要客户端和服务器端分别发送FIN来关闭连接。首先进行关闭的一方将执行主动关闭,另一方则执行被动关闭。客户端和服务器端都可以是主动关闭的那一方。)

第一次挥手:客户端发送FIN=1(为了简便,图中其余标志位和符号这里略,和三次握手的原理是一样的),用来关闭客户端到服务器端的数据传送,客户端进入FIN-WAIT-1状态;

第二次挥手:服务器接收到数据包后,由FIN=1知道客户端请求断开连接,将ACK置为1,ack=X+1,服务器端进入CLOSE-WAIT状态(注意:这里服务器端还是可以正常发送数据,只是客户端不再发送数据);客户端受到确认后,检查ACK和ack,如果正确,进入FIN-WAIT-2状态;

第三次挥手:服务器端发送FIN=1,用来关闭服务器端到客户端的数据传送,进入LAST-ACK状态;

第四次挥手:客户端接收到数据包后,进入TIME-WAIT状态,然后发送数据包(ACK=1,ack=Z+1)给服务器,服务器端进入CLOSED状态,即完成四次挥手。

1 0