• QUIC为什么使用这样的connectionID?


    考虑下TCP建立连接时为什么是三次握手中客户端和服务器分别选择自己的sequence?
    首先,这是为了区分相同四元组新旧连接上的报文。
    其次,能够进行双向的连通性验证和源地址验证。

    QUIC可以看做是TCP的改进版本,以上两个功能则是由connectionID完成的。
    首先,新旧连接的connectionID不同。但是即使不用connectionID区分,新旧连接的秘钥不同也能区分开,但基于connectionID判断更快。
    其次,connectionID的回应证明了连通性,也执行了源地址验证。
    除此之外,QUIC可以看做是基于UDP隧道的可靠性传输,但是为了支持地址迁移(和隐私)UDP四元组会变化,必须依靠上层的标识区分连接和或者关联连接。虽然QUIC是要求更换源IP时,必须更换connectionID,但是仍然可以看做一整个connectionID组之间的关联性。
    另外,也可以选择0的connectionID,这个意思是说不使用connectionID区分连接,只使用UDP区分连接,这也就没办法跨UDP迁移连接。

    1、connectionID怎么支持连接迁移?
    因为QUIC需要支持源地址迁移。
    在无意的地址迁移时,迁移前后connectionID相同,可以使用connectionID辨别是属于同一连接;
    在有意的地址迁移时,迁移前后connectionID不同,但是连接自己知道两者关系,所以仍然可以关联。
    有意的地址迁移既然可以在前connectionID标识的报文中携带新的connectionID,来让连接知道两者关系,那能不能不使用connectionID,旧地址的报文中携带新地址或者新地址的报文中携带旧地址?不可以,因为可能会经历nat。那能不能变更地址后携带token?如果token是密文,那么接收端找不到对应的秘钥,如果是明文,那跟connectionID有多大区别?另外QUIC报文是会乱序的,迁移后收到的第一个报文就应该能够让对端关联起来。

    2、是不是两端必须分别分配自己的connectionID?
    使用自己分配的connectionID路由,不需要处理冲突的情况,比如服务器上很可能收到不同客户端的相同connectionID,这时候就很难标识一个客户端,因为源地址会变化,不能使用。
    也能够保证新旧连接的connectionID不同。

  • 相关阅读:
    聚焦能源与双碳管理需求,格创东智为锂电企业降耗赋能
    制作一个简单HTML电影网页设计(HTML+CSS)
    React进阶之路(三)-- Hooks
    GR5515 使用心得纪录片
    AXI EPC IP 使用详细说明
    远程计算机或设备将不接受连接
    Java之线程相关应用实现
    Linux学习: 压缩及解压缩命令tar|zip|rar|xz
    Springboot后端跨域处理
    Gof23设计模式之命令模式
  • 原文地址:https://blog.csdn.net/aashuii/article/details/134294714