网络架构实战课
谢友鹏
某大厂技术专家
1122 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 24 讲/共 28 讲
网络架构实战课
15
15
1.0x
00:00/00:00
登录|注册

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

你好,我是谢友鹏。
网络是一个庞大且复杂的分布式系统,遍布全球的设备和服务依赖网络协议进行通信。
随着技术的发展,网络协议也在不断迭代更新,但现实的挑战在于,无法让所有网络设备一下子同时升级到新的协议。所以如何在保持现有网络基础设施的同时,实现协议的平滑过渡和演进,成为了我们必须面对的重要课题。今天的课程,我们将深入探讨网络协议兼容这一话题。

协议兼容

为了实现协议的演进,协议设计时需要考虑未来的扩展需求。
常见的协议扩展设计方式之一是预留“保留位”。许多协议在设计时都会留出“保留位”,以便未来进行扩展。保留位的主要目的是字节对齐,确保协议能够高效地进行编解码。当某些字段的功能暂时不确定时,这些位就被保留下来,未来如果需要添加新的功能或字段时,可以利用这些保留位进行微小的扩展。
比如后面图中圈出的就是 tcp header 的保留位。
如果说“保留位”是为了兼顾性能并顺便为扩展做准备,那么设计可选字段则是故意为扩展留出空间的设计。例如,TCP 协议中的 Options 字段,为协议的扩展提供了很大的灵活性。
用 Wireshark 打开一个 TCP 报文可以看到,tcp options 里面包括很多个 option。
如图所示,每个 TCP Options 选项包括 kind、length 和 value 三个部分。由于 TCP 是底层协议,性能要求非常严格,因此如果某些 kind 选项不需要 value,就可以省略 length 和 value 字段,以节省带宽和减少开销。这需要在协议中标明哪些 kind 可以省略 length 和 value,以确保协议的正确解析。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

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
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)