• Transmission Control Protocol 传输控制协议
  • 基于 TCP 的应用层协议 HTTP
    • SMTP
    • FTP

特点

  • 面向连接
  • 面向字节流
  • 全双工
  • 可靠

面向连接

  • 使用TCP传输数据钱,必须先建立TCP连接,传输完成后释放

全双工

  • 建立连接后通信双方都是发送数据

可靠

  • 通过 TCP 传输的数据:不丢失、无差错、不重复 & 按序到达

面向字节流

优缺点

  • 优点:数据传输可靠
  • 缺点:效率慢(需要建立连接、发送确认包)

应用场景

  • 要求通信数据可靠,数据要准确无误地传递给对方
  • 如传输文件、发送邮件

报文段格式

  • image.png
  • | 字段 | 作用 | 备注 | | ----------- | ----------- | | 序号(SeqNum) | 本报文段发送的第一个字节的序号 | 4 字节 | | 确认号 (ACK) | 期望收到下一个报文段的第一个数据字节的序号 | 4字节; 若确认号 = N说明序号 N - 1为止的所有数据都已正确收到,ACK位为1时,确认号才有意义 | | SYN(同步位)| 连接建立时用于同步序号 | SYN = 1; ACK = 0 认为是连接请求报文段;;SYN = 1,ACK = 1 认为是连接请求的响应报文段 | | FIN(终止控制位)| 释放连接 | FIN = 1 时,表明此报文段的发送方已经发送数据完毕 & 要求释放连接 |

为什么要三次握手?

  • 防止早已失效的连接请求阻塞服务器
    • 假设第一个连接请求滞留在网络中
    • 重传后正确的连接建立且释放后,失效的连接请求到达服务器
    • 服务器响应并等待客户端的输入

为什么要四次挥手

  • 保证全双工的正确断开
  • 为什么要 2ms TIME-WAIT
    • 确保客户端发送的最后一个 FIN 报文能够到达服务器
    • 防止早已失效的连接请求出现在本连接中

2. 无差错传输

  • 为什么 TCP 是可靠的?

2.1 含义

  • 无差错:传输信道不出差错
  • 发送 & 接收效率匹配

2.2 滑动窗口协议

  • 发送窗口、接收窗口
  • | 类型 | 定义 | 作用 | | -------- | ---------- | | 发送窗口 | 任意时刻,发送方维护的一组连续的、允许发送帧的帧序号 | 对发送方进行流量控制 | | 接收窗口 | 任意时刻,接收方维持的一组连续的、允许接收帧的帧序号 | 控制 可以收到 & 不可以收到哪些帧,丢弃不需要的帧 |

2.3 实现无差错传输的解决方案

  • 出错重传
  • 速度匹配:接收房来不及接收数据时,通知发送发降低发送速率
  • 对应的两个方案:1. 自动重传协议 2. 流量控制 & 拥塞控制协议