# HTTP

# 一、 TCP和UDP的区别和使用场景?

# 一、TCP和UDP的区别

# 1. 连接

TCP: 是面向连接的传输协议,即:传输数据之前必须先建立好连接。 UDP: 是属于无连接的传输协议。

# 2. 服务对象

TCP: 是点对点的两点之间的服务,即:一条TCP连接只能有两个端点。 UDP: 支持一对一、一对多、多对一、多对多的交互通信。

# 3. 可靠性

TCP: 是可靠的传输协议,进行的是可靠交付,即:无差错、不丢失、不重复、按序到达等。 UDP: 是不可靠的传输协议,只是尽最大努力交付,不能保证可靠交付。

# 4. 拥塞控制&流量控制

TCP: 有拥塞控制和流量控制保证数据传输的安全性。 UDP: 没有拥塞控制,当网络拥塞时不会影响源主机的发送效率。

# 5. 报文长度

TCP: 属于“动态报文长度”,即:TCP的报文长度是根据接收方的窗口大小和当前网络拥塞情况来决定的。 UDP: 是面向报文的,它是保留上面传下来的报文边界,不合并,不拆分。

# 6. 首部开销

TCP: 首部开销大,因为首部就占了20个字节。 UDP: 首部开销相对小一点,只占了8个字节。 (eg: UDP的8个字节分布在:源端口、目的端口、数据长度、校验和)

# 二、TCP和UDP的适用场景

根据上述特点,可知:

  • TCP 是可靠的传输协议,但传输速度慢;
  • 而UDP 是不可靠的传输协议,但传输速度快;
  • TCP的适用场景: 要求通信数据的完整性和准确性较高,eg: 文件传输、邮件发送与接收、重要状态的更新等。
  • UDP的适用场景: 要求通信的响应度高,对数据信息的安全性和完整性要求相对较低,常用于实时通信,eg: 网络电话、网络视频、实时通信等。

# 二、 quic基于udp怎么保证可靠性?

QUIC是一种新的传输 方式,与TCP相比可以减少延迟。 表面上,QUIC与在UDP上实现的TCP + TLS + 
HTTP /2非常相似。
由于TCP是在操作系统内核和中间件固件中实现的,所以对TCP进行重大改变几乎是不可能的。
但是,由于QUIC是建立在UDP之上的,所以没有这样的限制。
1
2
3
4

# QUIC相比于上述介绍的HTTP、HTTPS和HTTP2协议最大的不同就在于,其传输层采用的是UDP协议而不是TCP协议,因此其具备的特性有以下几点:

  • 0-RTT 建联(首次建联除外)
  • 类似TCP的可靠传输
  • 类似TLS的加密传输,支持完美前向安全
  • 用户空间的拥塞控制,最新的BBR算法
  • 支持h2的基于流的多路复用, 但没有TCP的HOL问题
  • 前向纠错FEC
  • 类似MPTCP的Connection migration