5. 连接尝试 (Connection Attempts)
一旦构造出截至此时已收到的地址列表, 客户端就会尝试建立连接. 为避免不合理的网络负载, 连接尝试 SHOULD NOT 同时发起. 相反, 应先对单个地址启动一次连接尝试, 然后按列表顺序一次一个地启动后续尝试. 启动新的连接尝试不会影响先前尝试, 因为多个连接尝试可以并行进行. 一旦某个连接尝试成功 (通常是在 TCP 握手完成时), 所有尚未成功的其他连接尝试 SHOULD 被取消. 尚未尝试连接的任何地址 SHOULD 被忽略. 此时, 异步 DNS 查询 MAY 被取消, 因为新地址将不会用于此连接. 然而, DNS 客户端解析器 SHOULD 仍在短时间内处理来自网络的 DNS 回复 (推荐 1 秒), 因为这些回复会填充 DNS 缓存, 并可用于后续连接.
简单实现可以使用固定延迟来决定在启动下一次连接尝试前等待多久. 此延迟称为 "Connection Attempt Delay". 默认延迟的一个推荐值是 250 毫秒. 更细致的实现应根据 TCP 重传定时器 [RFC6298], 使延迟对应于前一次尝试发送第二个 TCP SYN 的时间. 如果客户端拥有从同一主机或前缀的其他连接收集到的历史 RTT 数据, 可以使用这些信息影响其延迟. 注意, 该算法只应尝试近似第一次 SYN 重传的时间, 而不是可能受指数定时器退避影响的后续重传.
Connection Attempt Delay MUST 有下限, 尤其是在使用历史数据计算该值时. 更具体地说, 后续连接 MUST NOT 在前一次尝试后的 10 毫秒内启动. 推荐最小值为 100 毫秒, 称为 "Minimum Connection Attempt Delay". 需要该最小值是为了在高分组丢失率存在时避免拥塞崩溃. Connection Attempt Delay SHOULD 有上限, 称为 "Maximum Connection Attempt Delay". 当前推荐值为 2 秒.