看到了一道面试题:“为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?”,想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章,希望对你们有所帮助。
TCP 连接
我们先来补一下基础什么是 TCP 协议?传输控制协议( Transmission Control Protocol, TCP )是种面向连接、确保数据在端到端间可靠传输的协议。面向连接是插在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上“流动”完成传输。
TCP 是可靠的,会尽自己最大的努力去完成数据传输,TCP 协议比较复杂,可以看下面这张 TCP 协议的报文头图片:
内容非常的丰富,跟我们今天要讨论的连接协议相关的就是中间那六个状态位: URG、ACK、PSH、RST、SYN、FIN ,都置为 1 表示有效,在这六个当中,我们主要关注重点关注 ACK、SYN、FIN 这三个。下面解释一下这三个状态位:
ACK:用于对收到的数据进行确认,所确认的数据由确认序列号表示。
SYN:用作建立连接时的同步信号
FIN:表示后面没有数据需要发送,通常意昧着所建立的连接需要关闭了。
好了,到这里,TCP 的基础知识我们就知道了,下面我们就来看看为什么
是三次握手,而不是四次或者两次,为了让你更好的理解,我把知乎上一个高赞特别形象的比喻放在这里,希望对你有所帮助。