# 传输层协议
# TCP 协议
两张动图-彻底明白TCP的三次握手与四次挥手 (opens new window)
【深度讲解+面试回答】tcp/ip协议三次握手、四次挥手,通俗易懂,亲自解答 —— B站 (opens new window)
TCP 是传输层的协议,提供面向连接的服务,在传输数据前必须先建立连接,数据传输后要释放连接,是一种可靠的传输服务。
在 TCP 中,连接作为最基本的对象,每条连接都有两个端点(套接字),端点定义为IP 地址 + 端口号
。
# 三次握手
细节理解
- 客户端发送 tcp 请求
SYN 位
置 1(表示请求建立连接)- 随机生成
seq
= x
- 服务端响应 tcp 请求
SYN 位
仍为 1- 随机生成
seq
= y ACK 位
置为 1ack
= x + 1
- 客户端响应服务端的请求
ACK 位
置为1seq
= x + 1ack
= y + 1
- 最终实现全双工通信,即同一时间信息可以双向传输
# 四次挥手
技术细节
- 客户端发送报文
- FIN 位 置1 ,表示请求断开连接,seq = x
- 服务端确认消息
- ACK 位 置1,ack = x + 1
- 服务端发送结束报文
- FIN 位置 1 ,seq = y
- 客户端确认消息
- ACK 位置1, ack = y + 1
# 拥塞控制
控制全局网络的拥塞情况,通过控制发送方每次发送的流量多少,逐渐试探整体网络的拥塞程度。
# UDP 协议
UDP (User Datagram Protocol,用户数据报协议)也是传输层的协议,是一种无连接的协议。当报文发送后,无法确认其是否安全到达。
- UDP 不会对数据报文进行任何拆分与拼接操作
- 只会增加一个UDP头标识,就传递到网络层
- 接收端只需去除报文头就传递给应用层,不会进行任何拼接操作。
- 具有一对多、多对一的方式。
- 没有拥塞控制
- 可能导致丢包
- 适合某些实时性要求高的场景(如电话会议)等
与TCP 的特点对比
特点 | UDP | TCP |
---|---|---|
是否连接 | 否 | 是 |
可靠性 | 否 | 是 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 8字节 | 20-60字节 |
传输速度 | 快 | 慢 |
连接个数 | 1对1,1对多,多对1 | 1对1 |
适用场景 | 实时应用(电话会议、直播等) | 需要可靠传输的应用(文件传输等) |
# QUIC 协议
QUIC协议浅析与HTTP/3.0 (opens new window)
QUIC(Quick UDP Internet Connections) 是谷歌基于 UDP 传输层协议改造的,提供像 TCP 一样的可靠性。
- 对队头阻塞(HOL)问题的解决更为彻底
- 切换网络时的连接保持
# QUIC 对 队头阻塞问题的处理
QUIC 的多路复用和 HTTP2 类似。在一条 QUIC 连接上可以并发发送多个 HTTP 请求 (stream)。但是 QUIC 的多路复用相比 HTTP2 有一个很大的优势:QUIC 一个连接上的多个 stream 之间没有依赖。
假如 stream2 丢了一个 udp packet,也只会影响 stream2 的处理。不会影响 stream2 之前及之后的 stream 的处理。