根据TCP协议的字段,存在三个重要的标识ACK SYN FIN
①:ACK:表示验证字段
②:SYN:位数置1,表示建立TCP连接
③:FIN:位数置1,表示断开TCP连接
一、TCP三次握手
TCP三次握手原理图如下图所示:
TCP三次握手与四次挥手建立过程:
(1)客户端发起:由client发送建立TCP连接的请求报文,其中报文中包含seq序列号(seq=100),是由发送端随机生成的,并且还将报文中SYN(SYN=1)字段置为1,表示需要建立TCP连接。
(2)server接收与确认数据连接:server接收到client的请求后会回复client发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将回复报文的SYN字段置为1,而且会产生ACK字段,ACK字段数值(ACK=seq+1=100+1)是建立在A发送过来的seq序列号基础上加1进行回复的,以便client收到信息是知道自己的TCP建立请求已得到了验证。
(3)回送确认数据包:主机client收到主机server发送的TCP建立验证请求后,会使自己的序列号在接收到ACK的数值上加1表示。这时主机A的seq的值是主机B的ack的值(seq=ACK=seq+1=101),并且再次回复ACK验证请求(ACK=seq+1=301),在B端发送过来的seq基础上加1(seq=ACK),进行回复。
(4)取得最后确认:若一切都顺利,在服务器收到带有SYN=1且ack=301序号的数据包后,就能建立这次连接了。
二、TCP四次挥手
TCP四次挥手原理图如下图所示:
TCP三次握手与四次挥手断开过程说明:
(1)主动方发送断开TCP连接请求的报文,其中报文中包含seq序列号,是有发送端随机生成的,并且还将报文中FIN字段的值设为1,表示需要断开TCP连接。
(2)被动方会回复主动方发送的TCP断开请求报文,其中包含seq序列号,是由恢复段随机生成的,而且会产生ACK字段,ACK字段的数值,是在A发送过来的seq序列号基础上加1进行回复的,以便A收到信息时,知晓自己的TCP断开请求已得到了验证。
(3)在被动方回复完A的TCP断开请求后,不会马上就进行TCP连接的断开,被动方先会确认确保断开前,所有传输到主动方的数据是否已经传输完毕,一旦确认传输完毕就会将回复报文的FIN字段置为1,并产生随机seq序列号。
(4)主动方收到被动方的TCP断开请求后,会回复被动方的断开请求,包含随机生成的seq字段和ack字段,ack字段会在被动方的TCP断开请求的seq的基础上加1,从而完成被动方请求的验证回复。