你正蹲在图书馆用校园网查论文,网页转了半天,最后弹出一句"连接超时"。你恨不得把电脑砸了。
你开黑打王者,团战正要切后排,画面突然卡住,等你恢复过来,自己已经躺在了泉水里。
一、TCP
1. 为什么需要TCP协议?
IP 层(网络层)是「不可靠 」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。因为 TCP 是一个工作在传输层的可靠 数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

2. TCP的特点
TCP是面向连接的、可靠的、面向字节流的传输层通信协议。
- 面向连接 :一定是「一对一 」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
- 可靠的 :无论网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
- 字节流 :用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组 」成多个的 TCP 报文,如果接收方的程序不知道「消息的边界 」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的 」,当「前一个 」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复 」的 TCP 报文会自动丢弃。
3. TCP的头格式

序列号 :在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加 」一次该「数据字节数 」的大小。用来解决网络包乱序问题。
确认应答号 :指下一次「期望 」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
控制位:
- ACK :该位为 1 时,「确认应答 」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。
- RST :该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
- SYN :该位为 1 时,表示希望建立连接,并在其「序列号 」的字段进行序列号初始值的设定。
- FIN :该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
划重点:控制位这里是描述三次握手四次挥手的重要部分,需要掌握!!
4. TCP连接
(1)什么是TCP连接
连接的定义:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。
建立一个TCP连接,是需要客户端和服务器达成这三个信息的共识:
- Socket :由 IP 地址和端口号组成
- 序列号 :用来解决乱序问题等
- 窗口大小 :用来做流量控制
(2)如何唯一确定一个TCP连接
通过TCP四元组能唯一确定一个连接,四元组包含:

**注:**这个四元组是一个逻辑层面的概念,IP和端口实际上是在不同层级的头部,但是内核会将其组合在一起看。本质上用来在操作系统内核唯一标识一个连接。
- 源地址 和目的地址的字段(32 位)是在 IP 头部中**【注:网络层】**,作用是通过 IP 协议发送报文给对方主机。
- 源端口 和目的端口的字段(16 位)是在 TCP 头部中**【注:传输层】**,作用是告诉 TCP 协议应该把报文发给哪个进程。
5. TCP如何保证可靠性
- 面向连接:发送数据之前需要建立连接,停止发送数据之后需要断开连接
- 确认应答机制:在接收方收到数据包之后需要回复一个数据包告诉发送方某些数据接收方已经接到了
- 重传机制:超时重传:发送完数据包之后在规定的时间内没有收到对该数据包的确认应答,发送方会重新传这个包,快重传。
- 流量控制
- 拥塞控制
二、UDP
1. UDP的特点
UDP是面向报文的、无连接、不可靠交付协议。
- **无连接:**通信前无需建立连接,随时可以发送数据,也没有断开连接的流程。
- **不可靠交付:**不保证数据能到达目的地,没有确认机制、重传机制,也不保证数据包的顺序。
- **面向报文:**应用层交下来的报文,不拆分、不合并,直接封装成 UDP 数据报发送,保留报文边界。
- **无拥塞控制:**不关心网络拥堵状况,始终以恒定速度发送数据,不会主动降低发送速率。
- **首部开销小:**固定首部仅 8 字节。
- **支持多播和广播:**天然支持一对一、一对多、多对多的通信模式。
2. UDP的头格式

目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
- 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
- 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。
三、TCP和UDP
1. 二者的区别
| 对比维度 | TCP | UDP |
|---|---|---|
| 连接状态 | 面向连接:传输数据前需先建立连接(三次握手),结束后要断开(四次挥手) | 无连接:随时可以发送数据,无需事先建立连接 |
| 服务对象 | 一对一:一条连接只有两个端点,不支持多播或广播 | 灵活多播:支持一对一、一对多、多对多的交互通信 |
| 可靠性 | 可靠交付:数据无差错、不丢失、不重复、按序到达(通过确认重传机制保证) | 不可靠:不保证可靠交付,丢包不重传。但可基于UDP上层实现可靠传输(如QUIC协议) |
| 拥塞控制 &流量控制 | 有:根据网络状况动态调整发送速率,防止网络过载 | 无:即使网络拥堵,发送速率也不受影响,持续以恒定速度发送 |
| 首部开销 | 较大:固定首部20字节(未使用选项字段),启用选项字段后可变 | 极小:固定首部仅8字节,开销非常小 |
| 传输方式 | 流式传输:数据像水流一样无边界,但保证顺序和可靠 | 数据报传输:每个包独立发送,有明确边界,但可能丢包或乱序 |
| 分片机制 | 传输层分片(MSS):数据超过MSS则在传输层分片,丢失后仅重传丢失的分片 | IP层分片(MTU):数据超过MTU则在IP层分片,丢失后需重传整个IP数据报 |
2. 二者的应用场景
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
- FTP 文件传输;
- HTTP / HTTPS;
由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:
- 包总量较少的通信,如 DNS 、SNMP 等;
- 视频、音频等多媒体通信;
- 广播通信;