# 传输层协议

# TCP 协议

两张动图-彻底明白TCP的三次握手与四次挥手 (opens new window)

【深度讲解+面试回答】tcp/ip协议三次握手、四次挥手,通俗易懂,亲自解答 —— B站 (opens new window)

TCP 是传输层的协议,提供面向连接的服务,在传输数据前必须先建立连接,数据传输后要释放连接,是一种可靠的传输服务。

在 TCP 中,连接作为最基本的对象,每条连接都有两个端点(套接字),端点定义为IP 地址 + 端口号

# 三次握手

三次握手

细节理解

  1. 客户端发送 tcp 请求
    • SYN 位 置 1(表示请求建立连接)
    • 随机生成 seq = x
  2. 服务端响应 tcp 请求
    • SYN 位 仍为 1
    • 随机生成 seq = y
    • ACK 位置为 1
    • ack = x + 1
  3. 客户端响应服务端的请求
    • ACK 位置为1
    • seq = x + 1
    • ack = y + 1
  4. 最终实现全双工通信,即同一时间信息可以双向传输

# 四次挥手

四次挥手

技术细节

  1. 客户端发送报文
    • FIN 位 置1 ,表示请求断开连接,seq = x
  2. 服务端确认消息
    • ACK 位 置1,ack = x + 1
  3. 服务端发送结束报文
    • FIN 位置 1 ,seq = y
  4. 客户端确认消息
    • ACK 位置1, ack = y + 1

# 拥塞控制

控制全局网络的拥塞情况,通过控制发送方每次发送的流量多少,逐渐试探整体网络的拥塞程度

# UDP 协议

一文搞懂 TCP 与UDP 的区别 (opens new window)

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)

小三上位,udp逆袭!为啥HTTP/3选择了它? (opens new window)

HTTP3.0和QUIC协议那些事 (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 的处理。

最后更新时间: 9/25/2021, 6:29:57 PM