跳到主要内容

9. 连接迁移

9. 连接迁移 (Connection Migration)

connection ID 的使用允许 connection 在 endpoint address (IP address 和 port) 变化后继续存在, 例如 endpoint 迁移到新网络所导致的变化. 本节描述 endpoint 迁移到新 address 的过程.

QUIC 的设计依赖 endpoint 在 handshake 持续期间保持稳定 address. endpoint MUST NOT 在 handshake 被确认之前发起 connection migration, 如 [QUIC-TLS] 第 4.1.2 节所定义.

client 负责发起所有 migration. server 在看到来自某个 client address 的 non-probing packet 之前, 不会向该 address 发送 non-probing packet (见第 9.1 节).

9.1 探测新路径 (Probing a New Path)

endpoint MAY 在将 connection 迁移到新的 local address 之前, 使用 path validation (第 8.2 节) 从新的 local address 探测 peer 可达性.

9.2 发起连接迁移 (Initiating Connection Migration)

endpoint 可以通过从新的 local address 发送包含 non-probing frame 的 packet, 将 connection 迁移到新的 local address.

9.3 响应连接迁移 (Responding to Connection Migration)

从新的 peer address 收到包含 non-probing frame 的 packet, 表明 peer 已经迁移到该 address.

9.3.1 Peer address 伪造 (Peer Address Spoofing)

peer 可能伪造其 source address, 使 endpoint 向不愿接收的 host 发送过量数据.

9.3.2 路径上 address 伪造 (On-Path Address Spoofing)

on-path attacker 可以复制并转发带有伪造 address 信息的 packet, 从而造成虚假的 connection migration.

9.3.3 路径外 packet 转发 (Off-Path Packet Forwarding)

能够观察 packet 的 off-path attacker 可能向 endpoint 转发真实 packet 的副本.

9.4 丢失检测和拥塞控制 (Loss Detection and Congestion Control)

新路径上的可用容量可能不同于旧路径. 在旧路径上发送的 packet MUST NOT 参与新路径的 congestion control 或 RTT 估计.

9.5 连接迁移的隐私影响 (Privacy Implications of Connection Migration)

在多个网络路径上使用稳定的 connection ID, 会允许 passive observer 关联这些路径之间的活动.

9.6 Server 的首选地址 (Server's Preferred Address)

QUIC 允许 server 在一个 IP address 上接受 connection, 并在 handshake 后不久将这些 connection 转移到更 preferred address.

9.6.1 传达首选地址 (Communicating a Preferred Address)

server 通过在 TLS handshake 中包含 preferred_address transport parameter 来传达 preferred address.

9.6.2 迁移到首选地址 (Migration to a Preferred Address)

迁移到 preferred address 的 client MUST 在向该 address 发送任何数据之前验证新路径.

9.6.3 Client 迁移与首选地址的交互 (Interaction of Client Migration and Preferred Address)

client 可能需要在迁移到 server 的 preferred address 之前执行 connection migration.

9.7 IPv6 Flow Label 的使用和迁移 (Use of IPv6 Flow Label and Migration)

使用 IPv6 发送数据的 endpoint SHOULD 按照 [RFC6437] 应用 IPv6 flow label, 除非本地 API 不允许设置 IPv6 flow label.