TCP协议

198 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

1 概述

TCP全名是(Transport Control Protocol),是一个可以提供可靠的支持全双工连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。

2 TCP的特点

2.1 什么是连接

  • 连接是虚拟、抽象的概念
  • 能让两个通信的程序间确保彼此都在线,能够尽快响应对方的请求
  • 加快响应请求速度
  • 连接也被称为会话(Session)
  • 使通信更稳定、安全
  • 消耗更多资源 连接不是一个物理概念,是通过传输双方的约定和程序的手段形成的抽象的概念,连接使传输的双方资源的倾斜来保证连接的通畅。链接使双方的资源传输更加的稳定安全。

2.2 什么是全双工

  • 单工:任何时刻数据只能单向发送
  • 半双工:允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输
  • 全双工:任何时刻都能双向发送数据

2.3 保证正确性

可靠性指数据保证无损传输

  • 使无序的数据恢复原有顺序
  • 多播时每个接收方都获得无损副本

如何保证:

  • TCP是面向连接的,三次握手四次挥手都保证了连接的可靠性。
  • 增加序列号
  • 超时重传
  • 进行流量控制
  • 进行拥塞控制

3 TCP协议的工作过程

3.1 建立连接的过程(三次握手)

image.png

  • 客户端发送SYN(握手信号,同步序列编号)
  • 服务端准备好进行连接
  • 服务端针对客户端的SYN给ACK(确认字符)
  • 服务端发送SYN
  • 客户端准备就绪
  • 客户端发送ACK

3.2 断开连接的过程(四次挥手)

image.png

  • 客户端发送断开请求FIN(Finsh)
  • 服务端收到请求,发送ACK
  • 服务端经过一个等待,确定可以关闭连接,发送FIN
  • 客户端收到FIN,处理完自己的事情后发送ACK

3.3 传输数据

步骤:

  • 报文拆分

  • 增加TCP头

  • 数据重组 传输数据-报文拆分

  • 应用层数据很大时无法一次性传输完

  • 拆分后可实现并行传输

  • 数据也不宜拆分的太小,拆分数据这个行为也是消耗CPU资源的 传输数据-顺序保证

  • TCP序号:发送序号(Seq)、接收序号(Ack)

  • 一个端的发送序号是另一个端的接受序号

4 TCP头部结构

  • 源端口:描述发送方机器上的应用
  • 目标端口:描述接收方服务器上的应用
  • 发送序号(Seq)/接收序号(Ack)
    • 每个序号是32个字节 TCP头-标志位
  • NS、CWR、ECE:TCP扩展协议
  • ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题,
  • URG:紧急标志位,若是一个数据的UGR字段被置为1了,表示这个数据是紧急数据,需要优先处理。
  • SYN(Synchronize Sequence Numbers):同步序号,在建立连接的时候用。
  • FIN: 终止连接
  • ACK(Achnowledgment):响应。
  • PSH(push):传送数据
  • RST(Reset Connection): 重置连接

5 TCP协议周边配置

纠错能力:保证数据可靠性

  • TCP拥有一个16bit的Checksum字段
  • Checksum是一个函数,把原文映射到一个不可逆的16bit的编码中这样就可以知道原文传输过程中有没有发生变化

流控能力:协同两边速率,保证可靠性

  • 主要目标:让发送方和接收方协商一个合理的收发速率,让两边都可以稳定的工作。
  • 滑动窗口

拥塞控制能力:确定网络的拥堵情况决定传输速度。