跳到主要内容

TCP 协议

备注
  • TCP 属于传输层协议
  • TCP 是面向连接的协议
  • TCP 用于处理实时通信

TCP 协议具有数据传输可靠性高的特点,因为具备实时性,所以在传输效率上相对于 UDP 来讲会低一些

报文结构

TCP报文结构

端口

作用是标明自己和目标应用进程

常见控制字段

  • SYN = 1 表示请求建立连接
  • FIN = 1 表示请求断开连接
  • ACK = 1 表示数据信息确认

三次握手

TCP三次握手

  1. 客户端向服务端发送建立连接的请求 SYN = 1

  2. 服务端收到请求后回送一条消息表示接收到了请求 ACK = 1 任何一次完整的通信都是有来有回的 说明:这两次完成之后相当于建立了一条由客户端向服务端发送数据的通道

  3. 服务端向客户端发送建立连接的请求 SYN = 1(客户端的连接建立好之后服务端也想建立)

  4. 客户端收到请求后回送一条消息表示接收到了请求 ACK = 1

    至此建立好了由服务端向客户端发送数据的通道

四次连接发生之后就有了客户端与服务端之间的双向通道。那为什么是“三次握手”?在实际处理的时候服务端在回复客户端 ACK = 1 的时候同时会发送 SYN = 1

四次挥手

当客户端与服务器之间的数据传输结束之后应该断开连接,让服务端处理其他客户端请求

  1. 客户端向服务端发送断开连接的请求

  2. 服务端回送消息确认

    此时断开了客户端到服务端的连接通道

  3. 服务端向客户端发送断开连接的请求

  4. 客户端回送消息确认

    此时断开了服务端到客户端的连接通道

为什么三次握手合并了请求,而四次挥手没有?

一个服务端会服务于多个客户端,我们不能保证某一个客户端将请求发送给服务端之后服务端可以马上将结果数据全部传输回到当前的客户端 (有些时候客户端已经把所有数据发送给服务端了,但是服务端还没有将客户端想要的数据都全部传回,所以在断开连接的时候需要进行分开处理)