关于3次握手4次挥手总结

序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号

    确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。

    ACK:确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息

    SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接

    FIN:结束标志,用于释放连接,为1表示关闭本方数据流

 

一.3次握手

第一次:客户端向服务端发送请求

syn=1  seq=x

第二次:服务端回应客户端请求

syn=1 ACK=1 ack=x+1 seq=y

第三次:客户端确认连接服务器

syn=1 ACK=1 ack=y+1 seq=x+1

 

 

 

二.4次分手

第一次:客户端向服务端发送分手请求

Fin=1 seq=x

第二次:服务器回应分手请求

ACK=1 ack=x+1 seq=y

第三次:服务器处理完剩余数据回应分手请求

FIN =1 ACK=1 ack=x+1 seq=z

第四次:客户端确认分手

FIN=1 ACK=1 ack=z+1 seq=x+1

 

 

 

 

 

 

 

为什么“握手”是三次,“挥手”却要四次?

TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。

即SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。

TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"握手"传输的。为何建立连接时一起传输,释放连接时却要分开传输?

建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。

所以是“三次握手”,“四次挥手”。

 

posted @ 2020-07-08 13:34  KYOooo  阅读(209)  评论(0编辑  收藏  举报