什么是 TCP 连接的三次握手?

314 阅读2分钟

TCP 连接的三次握手

TCP 是因特网中的传输层协议,使用建立连接,完成三次握手,与服务器开始传送

第一次握手

建立连接时,发送包(syn=j)到服务器,并进入等待状态,等待服务器确认;SYN: 同步序列编号(Synchronize Sequence Numbers)

第二次握手

服务器收到 SYN 包,必须确认客户的 SYN (syn=j+i),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK包,此时服务器进入等待状态

第三次握手

客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK (ack=k+1),此包发送完毕,客户端和服务器进入 (TCP 连接成功)状态,完成三次握手

TCP 协议的优缺点

优点

TCP 发送的包有序列号,对方收到包后要给一个反馈,如果超过一定时间还没收到反馈就自定执行超时重发,因此 TCP 最大的优点是可靠

缺点

麻烦,如果数据量比较小的话建立连接的过程反而占了大头,不断地重发也造成网络延迟,因此比如视频聊天通常就使用 UDP ,因为丢失一些包也没关系,速度流畅才是最重要的

为什么 TCP 连接需要三次握手和四次挥手

为什么是三次握手

为了防止已失效的连接请求报文端突然又送到了服务器,因而产生了错误,假设两次握手时,客户发出第一个请求连接报文段在某一个网络节点长时间滞留,以致延误到连接释放后才到达服务器。服务器收到失效的连接请求报文段后,认为是客户又发出一次新的连接请求。于是向客户发送确认报文段,统一建立连接,此时在假定两次握手的前提下,连接建立成功。这样会造成资源白白浪费

为什么是四次挥手

TCP 协议是全双工通信,这意味着客户端和服务端都可以向彼此发送数据,所以关闭连接是双方都需要确认的公共行为,假设是三次挥手时,首先释放了客户到服务器方向的连接,此时 TCP 连接处于半关闭状态这时客户不能向服务器发送数据,而服务器仍可以向客户发送数据。如果此时客户收到了服务器的确认报文段后,就立即发送一个确认报文段,这会导致服务器向客户还在发送数据时连接就被关闭。这样会导致客户没有完整收到服务器所发的报文段。