TCP的三次握手,四次挥手详解

三次握手
为了准确无误的将数据发送到指定IP,TCP协议采用了三次握手

1 客户端向服务端提出请求,内容带有syn标识,随机序列x

2 服务端向客户端回应请求,内容带有syn和ack标识,随机序列y,确认序列x+1

3 客户端向服务端确认请求,内容带有ack,随机序列x+1,确认序列y+1

完成三次握手

 

三次握手总结:

客户端向服务端发送一个带有syn标识的数据包,服务端回用一个带有synack标识的数据包,最后客户端向服务端发送一个ack标识的数据包,三次握手完成

三次握手图如下: 

四次挥手
四次挥手是用来断开服务器和客户端之间的通信的,之所以要断开连接,是因为TCP/IP 协议是要占用端口号的,而计算机的端口却是有限的,不进行断开的话,会造成计算机资源的浪费。

客户端向服务端提出请求,标识带有fin和ackseq=xack=y

服务端向客户端回应请求,标识带有ack,seq=yack=x+1

服务端向客户端回应请求,标识带有fin和ackseq=yack=x+1

客户端向服务端确认请求,标识带有ack,seq=x+1ack=y+1

 

四次挥手总结:

客户端向服务端发送一个带有fin和ack标识的数据包,服务端先会用一个带有ack标识的数据包,等待数据传输完成,服务端在发送一个带有finack标识的数据包,最后客户端向服务端发送一个

带有ack标识的数据包,四次挥手完成


四次挥手图如下:

注:

  三次握手为什么不能改成两次握手?
解:三次握手中的每一次都是必须的。如果是两次握手,在第二次结束后,服务器并不能保证客户端已经收到了第二次的请求,如此一来的话,服务器会一直保存着这个通信过程,因为TCP通信都是要占用端口的,造成了一定的资源浪费。所以,就一定要让客户端来发送ACK的确认请求。

  关闭的时候为什么会是四次挥手?
解:四次挥手不能像三次握手一样,三次握手可以将ACK+SYN 一起发送,ACK用于确认信息,SYN却是用来建立联机的;四次挥手中ACK是不能和FIN一起发送,ACK只是告诉客户端确认我收到了,等我将数据发送完毕之后会向其发送FIN的标志,所以四次挥手是不能够改变的。

 

posted @ 2018-12-07 17:29  59111618  阅读(114)  评论(0编辑  收藏  举报