Page 435 - 《软件学报》2024年第4期
P. 435

李彤 等: 传输控制中的确认机制研究                                                              2013


                  4.2.7    不同机制和算法对比
                    业界往往容易混淆       ACK  相关的机制和算法. ACK      机制是指定义了       ACK  类型、各类型对应的触发条件、各
                 类型对应携带的信息的一个方法的总称; 而              ACK  相关的算法, 例如 RACK    和  FACK, 这些并不是    ACK  机制, 而是
                 基于某种    ACK  机制的丢包检测算法. 因此, 我们在表          2  中对比了上述的    ACK  相关机制和算法, 以便更明确地阐
                 述他们之间的区别和联系.


                                                表 2    ACK  相关机制和算法对比

                 机制/算法         类别           ACK频率                           携带的信息
                                               bw
                 TCP ACK     ACK报文                      后续需要的报文信息ACK number等. 参考TCP标准报文头部字段定义
                                                L·MSS
                   SACK      ACK报文         乱序事件触发        已接收的报文信息. 除标准报文头外, 选项区域携带不超过4个Range
                   HACK      ACK机制       随MAC层ACK发送                     传输层ACK不携带信息
                   RACK     丢包检测算法             -                            SACK选项
                   FACK     丢包检测算法             -                            SACK选项
                   NACK      ACK报文         乱序事件触发                            丢包信息
                                           (       β  )
                   TACK   ACK机制/ACK报文    min  bw max  ,             带宽信息、时延信息、丢包信息等
                                            L·MSS RTT min
                   IACK      ACK报文      乱序等即时事件触发                            丢包信息

                  4.3   TACK  机制的实现方案
                    TACK  机制在协议栈中的可以有如图           17  所示的  4  种形态: 依次是基于内核      UDP  的用户态实现、基于内核
                 TCP  的改进、基于用户态      IP  的  TCP  实现和基于用户态协议     QUIC  的实现.

                                                           应用
                                            TACK                        QUIC-TACK
                                                    TCP-TACK  TCP-TACK
                                            UDP                           UDP
                                             IP        IP        IP        IP
                                            驱动        驱动     UIO (Netmap)  驱动
                                                           网卡
                                                      内核态        用户态
                                            图 17 TACK  机制在协议栈中的实现方式

                  4.3.1    基于  UDP  的实现
                    基于  UDP  的  TACK  机制实现, 就是基于    TACK  机制实现可靠的、有连接、有序的传输控制. 下面从报文格
                 式和接口设计两个角度来举例说明具体的实现要点.
                    报文主要分为数据报文和          ACK  报文, ACK  报文则主要分为     IACK  报文和  TACK  报文两种. 数据报文的格式
                 的设计可参考如图       18  所示. 首先, 不论是数据报文还是        ACK  报文, 都应该携带一个自定义的、公共的、基于
                 TACK  的协议报文头, 其中类型字段指示报文的类型, 长度字段指示报文长度, 其他字段可根据报文类型灵活定
                 义. 数据报文中, 由于要保证有序的数据组装, 因此数据报文需携带一个类似于                          TCP  协议中定义的数据序号
                 (DATA.SEQ). 数据序号只与数据的内容相关, 因此重传报文与其对应的原始报文的数据序号是相同的. 同时,
                 TACK  机制要求数据报文携带一个报文序号             (PKT.SEQ), 报文序号只与报文的发送顺序相关, 与数据的内容无关,
                 因此重传报文与其对应的原始报文的报文序号是不同的. 图                   18  中给出了这种双序号设计的样例.
                    基于  UDP  实现的  IACK  报文格式如图     19  所示. 如果接收方检测到前后两个数据报文的             PKT.SEQ  差值大于
   430   431   432   433   434   435   436   437   438   439   440