pub struct Connecting { /* private fields */ }展开描述
正在进行的连接尝试的 Future
实现§
源代码§impl Connecting
impl Connecting
源代码pub fn into_0rtt(self) -> Result<(Connection, ZeroRttAccepted), Self>
pub fn into_0rtt(self) -> Result<(Connection, ZeroRttAccepted), Self>
以牺牲一定的安全性为代价,转换为一个 0-RTT 或 0.5-RTT 连接
若本地端点能够尝试发送 0/0.5-RTT 数据,本方法会立即返回 Ok。返回的 Connection 可用于在握手完成之前发送应用数据,代价是密码学安全保证被削弱。返回的 ZeroRttAccepted future 在握手完成时求解,此后新打开的流与新写入的数据将获得完整的密码学保护。
§出站连接
对于出站连接,若 crypto::ClientConfig 尝试恢复之前的 TLS 会话,则初次将连接转换为发送 0-RTT 数据的 Connection 的尝试会进行下去。然而,远端实际可能并不会接受这些 0-RTT 数据,但仍会接受此次连接尝试。这种可能性通过 ZeroRttAccepted future 表达——握手完成时,若 0-RTT 数据被接受则解析为 true,被拒绝则解析为 false。若被拒绝,在握手完成之前已打开的流与已发送的应用数据不会传达给远端应用,且本地的相关操作将返回 ZeroRttRejected 错误。
服务器可以自行决定是否拒绝 0-RTT 数据;而接受 0-RTT 数据则要求服务器保存相应的恢复状态,服务器可能出于各种原因对恢复状态进行限制或丢失,包括不跨服务器重启持久化恢复状态。
若自行提供 crypto::ClientConfig,请查阅其实现文档中关于 0-RTT 的注意事项。
§入站连接
对于入站连接,转换为 0.5-RTT 总能完全成功。into_0rtt 始终返回 Ok,且 ZeroRttAccepted 始终解析为 true。
若自行提供 crypto::ServerConfig,请查阅其实现文档中关于 0-RTT 的注意事项。
§安全性
对于出站连接,此方法启用 0-RTT 数据的发送,而 0-RTT 数据容易遭受重放攻击,因此永远不应触发非幂等操作。
对于入站连接,此方法启用 0.5-RTT 数据的发送,这类数据可能在 TLS 客户端认证完成之前就已发出,因此不应发送依赖客户端认证才可信的数据。
源代码pub async fn handshake_data(&mut self) -> Result<Box<dyn Any>, ConnectionError>
pub async fn handshake_data(&mut self) -> Result<Box<dyn Any>, ConnectionError>
握手期间协商出的参数
返回值的动态类型由所配置的 Session 决定。对于默认的 rustls 会话,返回值可以 downcast 为 crypto::rustls::HandshakeData。
源代码pub fn local_ip(&self) -> Option<IpAddr>
pub fn local_ip(&self) -> Option<IpAddr>
对端建立连接时所使用的本地 IP 地址
当端点绑定到通配地址(如 0.0.0.0 或 ::)时,该地址可能与端点所绑定的地址不同。
对客户端或当平台未暴露此信息时返回 None。使用 quinn_udp(默认)作为 I/O 时,支持的平台列表请参阅 quinn_udp::RecvMeta::dst_ip。
若在 poll 返回 Ready 之后调用会 panic。
源代码pub fn remote_address(&self) -> SocketAddr
pub fn remote_address(&self) -> SocketAddr
对端的 UDP 地址
若在 poll 返回 Ready 之后调用会 panic。