跳至主要內容

TCP应知应会(上)

YihuiNetwork大约 3 分钟

TCP应知应会(上)

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决的是传输的可靠、有序、无丢失和不重复的问题。

协议特点

  • TCP是面向连接的传输层协议

  • 每条TCP连接只能由两个端点,每条TCP连接只能是点对点的(一对一)

  • TCP提供可靠的交付业务,保证传送数据的无差错,不丢失、不重复而且有序

  • 全双工通信,TCP连接的两端都设有发送缓存和接收缓存,用于临时存放双向通信的数据

  • TCP面向字节流(对比UDP面向报文)

TCP报文段

TCP传送的数据单元称为报文段,TCP报文段用于运载数据、建立连接、释放连接和应答。

字段

直接上图:

image-20220731210136537

常考的有:

  • 源端口和谜底端口字段

  • 确认位ACK:ACK=1时确认号字段才有效,为0确认号无效。TCP规定,在连接后的所有传送的报文段都需要吧ack设置为1

  • 同步位SYN:为1表示这是一个连接请求或者连接接收的报文

  • 终止位FIN:释放连接,为1表示此报文段的发送方的数据已经发送完毕,并要求释放传传输接

  • 窗口字段:表示允许对方发送的数据量,单位为字节

TCP连接管理

TCP连接的管理就是使得连接的建立和释放都能够正常进行。连接分为三个阶段:连接建立、数据传送、连接释放。

TCP连接建立的时候所需要面对(解决)的问题:

  • 每一方都要知道对方的存在
  • 要允许双方协商一些参数(例如窗口大小、是否扩大窗口、时间戳选项和服务质量等)
  • 能够对传输实体的资源(例如缓存大小、连接表中的项目等)进行分配

建立连接(三次握手)

  1. 客户机先向服务器发送连接请求报文段【SYN = 1,seq = x】
  2. 服务器接收后,同意建立连接并回付,同时为该TCP连接分配TCP缓存和变量【SYN = 1, ACK = 1,ack = x+1,seq = y】
  3. 当客户机确认之后,还需要给服务器进行确认,并且也要为该TCP连接分配TCP缓存和变量【ACK = 1,seq = x+1,ack = y+1】

连接释放(四次握手)

  1. 客户机向其TCP发送一个连接释放报文的,并停止发送数据,主动关闭TCP连接【FIN = 1,seq = u】
  2. 服务器收到连接释放报文后立即做出确认【ACK = 1,seq = v,ack = u+1】
  3. 服务器通知客户端TCP释放连接【FIN = 1,ACK = 1,seq = w,ack = u+1】
  4. 客户机收到连接释放报文之后,发出确认,此时进入等待时间【ACK = 1,seq = u+1,ack = w+1】