常见网络协议
TCP
首先 TCP是一个面向连接的协议,它的数据传输建立在连接上。这也意味着,TCP协议基于双向的连接实现可靠的数据传输。 TCP的特殊点:
- 面向连接:TCP协议是 面向连接的协议,它建立连接后才能进行数据传输。
- 一对一通信:TCP协议是一对一通信的协议,即通信双方必须事先建立连接。
- 可靠传输:TCP协议提供可靠的数据传输,它采用超时重传、校验和、滑动窗口等机制保证数据传输的可靠性。
- 面向字节流:TCP协议是面向字节流的协议,它不保留消息边界,但通过序列号保证数据的按序到达和完整性。
- 首部开销较大(20字节) 上面提到TCP协议建立在可靠的连接上,这就涉及到了TCP的连接过程,简单概述为三次握手,四次挥手。
TCP三次握手
- 第一次握手:建立连接时,客户端发送一个SYN包到服务器,并进入SYN_SENT状态。
- 第二次握手:服务器收到SYN包,必须确认客户的SYN(acknowledgement number)包,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RCVD状态。
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
TCP四次挥手
- 第一次挥手:主机1(客户端)发送一个FIN包,用来关闭主机1到主机2的数据传送。即通知主机2,主机1准备关闭连接。
- 第二次挥手:主机2收到FIN包,发送一个ACK包,确认序号为收到的序号加1。并进入CLOSE_WAIT状态。即主机2告诉主机1,它知道要准备关闭连接了。
- 第三次挥手:主机2发送一个FIN包,用来关闭主机2到主机1的数据传送。即主机2处理完数据后,关闭了连接并告诉了主机1。
- 第四次挥手:主机1收到FIN包,发送一个ACK包,确认序号为收到的序号加1。即主机1收到了主机2的关闭信息,主机1也关闭了连接。
UDP
UDP与TCP不同,它一种无连接的协议,即发送数据之前不需要建立连接。它只提供数据报文的不可靠传输,不保证数据包的顺序,也不保证数据包的完整性。 UDP的特点:
- 无连接:UDP不需要在数据传输前建立连接,发送数据前不需要握手。这也是为何UDP的传输效率高但是并不可靠的原因。
- 不可靠传输:UDP的数据传输不建立在连接上,这也导致了它不能保证消息的可靠送达。接收方收到的数据包的顺序可能与发送顺序不同、且数据包也可能会丢失或重复。
- 无拥塞控制:UDP不进行拥塞控制,因此其网络数据的发送速度不会自动调整,在高负载情况会导致数据的丢失。
三次握手示意
sequenceDiagram
participant C as 客户端
participant S as 服务端
C->>S: SYN
S->>C: SYN + ACK
C->>S: ACK
Note over C,S: ESTABLISHED
总结
| 特性 | TCP | UDP |
|---|---|---|
| 连接类型 | 面向连接的 | 无连接的 |
| 可靠性 | 高(通过ACK和序列号保证) | 低(不保证消息送达) |
| 头部开销 | 较大(至少约 20 字节) | 较小(8 字节) |
| 使用场景 | 需要可靠传输的应用 | 更在意时延/吞吐的应用 |
| 控制机制 | 流量控制、拥塞控制 | 无(应用层自理) |
TCP 常见于需要可靠字节流的场景;浏览网页时应用层是 HTTP(S),传输层往往是 TCP(HTTP/3 则基于 QUIC/UDP)。
UDP 常见于实时音视频、部分游戏同步、DNS 查询等——更在 意时延或由应用层自建可靠性。