TCP三次握手
第一次握手:
client给server发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包), 该段中也包含客户端的初始序列号(Sequence number = J)。SYN是同步的缩写,SYN 段是发送到另一台计算机的 TCP 数据包,请求在它们之间建立连接
第二次握手:
server返回客户端 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP 数据包), 该段中包含服务器的初始序列号(Sequence number = K);同时使 Acknowledgment number = J + 1来表示确认已收到客户端的 SYN段(Sequence number = J)。ACK 是“确认”的缩写。 ACK 数据包是任何确认收到一条消息或一系列数据包的 TCP 数据包
第三次握手:
客户端给server响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包), 该段中使 Acknowledgment number = K + 1来表示确认已收到服务器的 SYN段(Sequence number = K)。
三次握手作用
是为了 确认双方的接收与发送能力是否正常 + 同步序列号。
*SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
*ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。
四次断开
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
第一次挥手:
客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
第二次挥手:
服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
第三次挥手:
服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
第四次挥手:
客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)
四次断开的原因
TCP是一个全双工(即A与B建立连接,则A可以向B发送数据,而B也可以向A发送数据。)所以,只有当两端的数据都发送完毕,连接才能安全的断开。如A接收到了B的FIN报文段,他会等到自己所有的数据发送完,然后也向B发送一个FIN报文,告诉B我也没数据了,这时候连接才能真正断开,两端各自释放资源。