1 什么是三次握手?
TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,三次握手就是是建立TCP连接的机制,它主要完成以下目标:
1 确定连接双方的起始序列号,以支持可靠传输;
2 解决已失效的连接请求再次到达了服务端而导致的服务端资源浪费问题,提高效率;
2 三次握手的过程
TCP 的可靠连接是靠 seq( sequence numbers 序列号)来达成的,通过TCP 连接发送的每一个包都有一个序列号。而因为每个包都是有序列号的,所以都能被确认收到这些包。确认机制是累计的,所以一个对sequence number X 的确认,意味着 X 序列号之前(不包括 X) 包都是被确认接收到的。
3 为什么需要三次握手?
实现第一个目标只需要前面两次握手即可。
要实现第二个目标,就需要区分失效的首次握手和正常的首次握手。首次握手是客户端发出的,只有客户端才知道其是否有效,所以解决该问题的方式就是,在原有的两次握手基础上再增加一个从客户端到服务器的第三次握手,来确认首次握手是有效的。所以若服务器无法收到首次握手的第三次握手,就可以判定该首次握手是失效的。
所以,最终TCP的链接机制就变成了三次握手。
概括来说,就是TCP需要 seq 序列号来做可靠重传或接收,而避免连接复用时无法分辨出 seq 是延迟或者是旧链接的 seq,因此需要三次握手来约定确定双方的 ISN(初始 seq 序列号)
4 例外情况的处理
消息丢失会导致无法收到ACK,处理策略就是
1 发送方超时会进行重发;
2 接收方对重复包会进行丢弃;