linux tcp SACK分析(一)

why  should SACK be designed  ?

   TCP may experience poor performance when multiple packets are lost from one window of data. With the limited information available from cumulative acknowledgments, a TCP sender can only learn about a single lost packet perround trip time. An aggressive sender could choose to retransmit packets early,but such retransmitted segments may have already been successfully received.

    Tcp协议在一个窗口内多个数据丢失时,由于ACK携带信息有限,仅知其后的一个数据包丢失,发送方激进一点的做法是重传所有ACK后没有被应答的数据(到snd_una), 缺点是对端接受到的数据也会重传,这个重传是无效的。

   A Selective Acknowledgment (SACK) mechanism, combined with a selective repeat retransmissionpolicy, can help to overcome these limitations. The receiving TCP sends backSACK packets to the sender informing the sender of data that has beenreceived. The sender can then retransmit only the missing datasegments.

    鉴于传统tcp存在上面的缺点,于是提出了SACK机制,SACK机制的原理是接收端检查到丢包时通过ACK携带信息,告知对端已经接受到的数据,之后不用重传已经接受到的数据包。SACK机制是重传机制更加高效。

How  to support  SACK?

    The selective acknowledgment extension uses two TCP options. The firstis an enabling option, "SACK-permitted", which may be sent in a SYN segment to indicate that the SACK option can be used once the connectionis established.  The other is the SACK option itself, which may be sent over an established connection once permission has beengiven by SACK-permitted.

    标准tcp扩展了额两个选项Sack-PermittedOption和Sack Option,Sack-Permitted Option用来协商连接是否可以启用SACK支持,通过SYN携带Sack Permitted标志在连接建立过程中进行协商。Sack Option携带在ACK中,如果接受端发现了当前窗口有丢包时,需要携带SACK选项和SACK信息告知对端。

    The SACK option is to be included in a segment sent from a TCP that is receiving data to the TCP that is sending that data; we willrefer to these TCP's as the data receiver and the data sender, respectively.  We will consider a particular simplex data flow; any dataflowing in the reverse direction over the same connection can be treated independently.

Sack-Permitted Option

   This two-byte option may be sent in a SYN by a TCP that has been extended to receive (andpresumably process) the SACK option once the connection has opened.  ItMUST NOT be sent on non-SYN segments. 

TCP Sack-Permitted Option:

         

Sack Option Format

   TheSACK option is to be used to convey extended acknowledgment information from thereceiver to the sender over an established TCP connection.

TCP SACK Option:

         

   *   Left Edge of Block

        This is the first sequence number ofthis block.

   *   Right Edge of Block

        This is the sequence number immediatelyfollowing the last sequence number of this block.

Note:

1、SACK的left/right edge描述的是已经接受到的数据段情况。

2、tcp 选项最大长度为40个字节,所以ACK最大可以携带4组边界,tcp header中有一个字段4bit描述tcp header的总长度(2^4 – 1) * 4 = 60,不包含选项时tcp头部为20个字节,所以tcp运行最大选项长度为40,所以ACK最大允许携带4组SACK边界。

3、SACK引入对数据包重传机制影响很大,后面分析SACK数据包重传策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值