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

2004                                                       软件学报  2024  年第  35  卷第  4  期


                    如前面所述, Bounded ACK    机制和   TACK  机制相比于   Delayed ACK  机制的区别, 在于   ACK  发送频率控制逻
                 辑正好相反    (max  和  min). Delayed ACK  机制中, 触发发送  ACK  的两个条件是“或”的关系, 而    Bounded ACK  机制
                 和  TACK  机制使用的是“与”的逻辑. 因此, 在不同的网络条件下, Bounded ACK               机制、TACK    机制和   Delayed
                 ACK  机制的  ACK  发送频率大小截然不同. 例如, 当带宽很大的时候, 在              ACK  数目方面, Delayed ACK  可能会比
                 Bounded ACK  机制和  TACK  机制高出若干个数量级       [30]  . 进一步地, TACK  机制相比  Bounded ACK  机制, 除了同
                 样具有良好的带宽适应性以外, 还增加了对时延的适应性, 因此                   TACK  机制能够更好地适应时延和带宽同时动态
                 变化的场景.
                  3.2   主流传输协议中的确认机制
                  3.2.1    TCP  的确认机制
                    (1) TCP  报文和选项
                    TCP  报文格式如图    12  所示. 从上到下的源端口字段到选项区域, 属于报文头. 报文头后续部分为数据区域, 携
                 带来自上层    (如应用层) 的数据. 下面, 以      ACK  标记位、PSH   标记位和选项区域等与确认机制密切相关的字段为
                 例, 对  TCP  报文格式进行介绍.

                                           00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 bit
                                                源端口号             目的端口号
                                                         数据序号
                                                          确认号
                                           头部    保留   U A P R S  F  窗口大小
                                                      G K H T N
                                           长度         R C S S Y  N I
                                                校验和               紧急指针
                                                       选项区域
                                                       数据区域
                                                    图 12 TCP  报文结构

                    针对  ACK  标记位, 如果值为     1, 则表示该报文是一个       ACK  报文, 否则是一个数据报文. 更进一步, 如果          ACK
                 标记位为   1  并且数据区域不为空, 则表示处于          ACK Piggybacking  模式——如果  (数据) 接收方在接收数据的同时
                 也有数据要发送给       (数据) 发送方, 那么可以在数据报文中带上            ACK  需要携带的反馈信息, 从而避免大量的           ACK
                 以一个单独的报文发送, 减少网络资源请求的次数, 降低通信开销.
                    发送方在发送数据时可以设置            PSH  标记位, 用于通知接收方立即进行响应. 默认情况下, 接收方的响应是将
                 缓冲区的数据立即提交到上层应用. 然而, 如果与确认机制相结合, 则可以重新定义接收方的响应方式, 例如, 无需
                 满足  Delayed ACK  机制下的触发条件, 就可以立即回复一个           ACK  报文. 值得一提的是, 即使不修改已有标记位的
                 含义, TCP  报文头中的保留字段, 也为上述确认机制的扩展提供了条件.
                    TCP  选项区域可包含多个选项         (Option) 字段, 采用经典的   TLV (type-length-value) 结构来表示. 选项字段都
                 以  1 字节的“Type”开头, 指明    Option  的类型, 1  字节的  Length  指明选项字段的总长度      (包括  Type, Length  和
                 Value 的总长度). TCP  定义了丰富的选项字段, 例如         SACK  选项、Timestamp  选项、window scale (WSCALE  或
                 WSopt) 选项和  maximum segment size (MSS) 选项等. 下面, 针对  SACK  选项的设计进行详细讨论.
                    (2) SACK
                    SACK (selective acknowledgment) 选项扩展了传统  ACK  的反馈信息量, 由   RFC 2018  定义  [31]  . 具体地, 它允许
                 接收方单独确认非连续的片段, 用于告知发送方哪些报文收到了. SACK                     选项可以帮助发送端确认真正丢失的报
                 文, 从而只重传丢失的片段. SACK        选项可以减少不必要的重传, 提升传输效率.
                    要使用    SACK, 收发双方必须同时支持          SACK  选项. 因此双发双方需要在建立连接的时候使用                  SACK
                 Permitted  选项进行协调. 如果双方都支持      SACK, 则后续的传输过程中        ACK  报文可以携带    SACK 选项. SACK  选
                 项由数据接收方发送, 以通知数据发送方已经接收、并且在接收方接收缓存中排队的非连续数据块                                     (本文称
   421   422   423   424   425   426   427   428   429   430   431