在三次握手中,首先客户端向服务器发送一个SYN包,表示请求建立连接。服务器收到后回复一个SYN-ACK包,表示接受连接请求,并且向客户端发送确认。最后客户端再回复一个ACK包,表示连接建立成功。
在四次断开中,首先当一方(假设为客户端)确定不再发送数据时,发送一个FIN包给另一方(假设为服务器),表示要关闭连接。接收到FIN包的服务器发送一个ACK包作为确认。然后服务器发送一个FIN包给客户端,表示同意关闭连接。
第1次握手:客户端主机A发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
四次断开
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。