20|兼容:网络协议怎样在存量中迭代?

协议兼容



- 深入了解
- 翻译
- 解释
- 总结

1. 网络协议的演进需要考虑兼容性和平滑过渡,常见设计方式包括预留“保留位”和可选字段,以及采用TLV格式和版本号设计。 2. 协议的协商是确定使用哪个版本的关键,常见做法包括通过协商来确定使用的协议版本或算法,如SSL/TLS的加密算法协商、HTTP版本的协商等。 3. HTTP/2协商可以通过HTTP头中的Upgrade协商来切换到HTTP/2协议,客户端在HTTP请求头中添加Upgrade: h2c和HTTP2-Settings,服务器支持h2c时会发送HTTP 101响应头并携带Upgrade: h2c,从而实现协议切换。 4. 在HTTPS下,HTTP/2的协商通常不会使用Upgrade机制,而是通过TLS握手中的ALPN(Application-Layer Protocol Negotiation,应用层协议协商)来完成。 5. HTTP/3与HTTP/1和HTTP/2在传输层上有显著的差异,使用的是QUIC协议,基于UDP实现。 6. 客户端在不知道服务器是否支持HTTP/3时,必须首先使用HTTP/1或HTTP/2进行通信,然后通过Alt-Svc头部来告知客户端服务器支持的协议,并可以通过max age参数告知客户端在该有效期的后续通信使用HTTP/3。 7. 为了避免不必要的连接延迟,客户端第一次请求时会使用HTTP/1或HTTP/2,与服务器通信。如果服务器支持HTTP/3,它会在HTTP响应头中携带Alt-Svc头部,告知客户端自己支持哪些协议,并可以通过max age参数,告知客户端在该有效期的后续通信使用HTTP/3。 8. 客户端首次会使用HTTP/1或HTTP/2,后续的请求会使用HTTP/3,通过响应头中返回的协议版本(如HTTP/2 200或HTTP/3 200)来判断当前使用的协议版本。 9. HTTP/3的协商实验可以通过指定参数的方式访问支持HTTP/3协议的服务器,观察服务器响应中的Alt-Svc信息,以及后续请求使用的协议版本. 10. 通过Alt-Svc头部,服务端不仅告诉客户端其443端口支持HTTP/3,还提供了有效期以及支持的HTTP/3草案版本,对于兼容性和协议发展中的版本非常有帮助。
《网络架构实战课》,新⼈⾸单¥59