为了准确无误地把数据送达目标处,
TCP
协议采用了“三次握手”策略:
用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK。
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
为什么A还要发送一次确认呢?主要是为了防止已失效的连接请求报文段突然又传送到了B。
断开一个TCP连接则需要“四次挥手”:
A先向其TCP发出连接释放报文段,并停止再发送数据,主动断开TCP连接;
B收到连接释放报文段后即发出确认,然后B就进入关闭等待状态;
(此时从A到B这个方向的连接就释放了,这时的TCP连接处于
半关闭状态;从B到A这个方向的连接并未关闭,如果B发送数据,A仍要接收)
如果B已经没有要向A发送的数据,其应用进程就通知TCP释放连接;
A收到B的连接释放报文段后,必须对此发出确认;
(此时,TCP连接还没有释放掉,必须经过
时间等待计时器设置的时间后,才中断连接)