- Transmission Control Protocol 传输控制协议
- 基于 TCP 的应用层协议
HTTP
- SMTP
- FTP
特点
- 面向连接
- 面向字节流
- 全双工
- 可靠
面向连接
- 使用TCP传输数据钱,必须先建立TCP连接,传输完成后释放
全双工
- 建立连接后通信双方都是发送数据
可靠
- 通过 TCP 传输的数据:不丢失、无差错、不重复 & 按序到达
面向字节流
优缺点
- 优点:数据传输可靠
- 缺点:效率慢(需要建立连接、发送确认包)
应用场景
- 要求通信数据可靠,数据要准确无误地传递给对方
-
如传输文件、发送邮件
报文段格式
- | 字段 | 作用 | 备注 | | ----------- | ----------- | | 序号(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. 流量控制 & 拥塞控制协议