TCP和UDP

131 阅读2分钟

TCP三次握手和四次挥手

三次握手
客户端服务端
SYN
SYN ACK
ACK
四次挥手
客户端服务端
FIN
ACK
FIN
ACK

为什么三次握手,四次挥手?

三次握手

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误——谢希仁著《计算机网络》 客户端发送的连接请求报文段在某个网络节点长时间滞留。服务端收到失效的连接请求报文段,向客户端发出确认报文段,同意连接。如果只有两次握手,服务端发出确认,就建立了连接,而客户端不会发送需要的数据,会浪费服务端的资源。

四次挥手

TCP是全双工通信(双向传输数据)。

  • 第一次挥手:主动方发送断开连接的请求给被动方,主动方不会发送数据报文但可以接收数据报文
  • 第二次挥手:被动方可能还有数据报文,为避免主动方继续发送FIN报文发送ACK报文
  • 第三次挥手:被动方发送FIN报文,后进入LAST_ACK阶段(超时等待)。
  • 第四次挥手:主动方发送ACK报文,被动方释放连接。

LAST_ACK阶段(超时等待):如果迟迟收不到这个 ACK,内核就会重发 FIN 报文,如果重传的次数超过 tcp_orphan_retries 内核参数设置的次数,就会放弃重传,然后进入close状态。

TCP和UDP的区别

  • TCP是面向连接的,UDP是无连接的(发送前不需要先建立连接)
  • TCP提供可靠的服务,TCP传输的数据按序到达,不丢失,不重复,无差错。因为TCP可靠,面向连接适合大数据量的交换。UCP尽最大努力交付,不保证可靠交付。
  • TCP是一对一的,UDP可以一对多。
  • TCP面向字节流,UDP面向报文,并且网络出现拥塞不会降低发送速率,适合实时的应用。
  • TCP首部有20字节,UDP首部只有8字节
  • TCP是可靠连接
  • TCP数据传输的单位是报文段(segment),UDP数据传输的单位是用户数据报