zoukankan      html  css  js  c++  java
  • sack dsack 相关介绍

      之前做过关于 sack dsack相关笔记:tcp dsack 

    其实关于sack的不好之处 也是比较明显的:在一定程度上来说,SACK可能就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n为packets in flight的数量。

    SACK Advantages

    • Receiver informs the sender about all the PDUs that have been received successfully.
    • Sender retransmits only the PDUs that have not been Acked.
    • Implemented using two TCP options.

    SACK –Permitted Option

    • First option: enabling option(2 bytes) sent in a SYN
    • Indicates SACK option can be used once connection established
      • ---Receiver may return SACK’s
      • ----Sender can process SACK’s

     

     SACK Rules

    • SACK does not change the meaning of ACK field.
    • SACK cannot be sent unless SACK permitted option has been received.
    • If SACKs are sent, they should be included in all TCP-PDUs when out-of-order data has been buffered.
    • First SACK must ack most recently received out-of-order PDU.

    SACK Rules Receiver

    • Receiver returns as many distinct SACKs as possible.
    • SACK option is filled out by repeating most recently reported SACK blocks.
    • There may be some data in receiver’s queue which should be SACKed but is not.

    SACK Rules Sender

    • Records the SACK for future reference.
    • Maintains a retransmission queue containing unacknowledged PDUs.
    • Turns SACK bit on when sender receives a SACK.
    • Skips SACK PDUs during retransmission.
    • Retransmits the PDUs not SACKed so far and less than the highest SACKed PDU.
    • Turns off SACK bit after retransmission time out.

    Reneging

    • Reneging is a case when the receiver SACK some data and later discards that data. Such discarding is discouraged, but permitted if the receiver runs out of the buffer space.

    If Reneging occurs

    •   The first SACK should reflect the newest PDU even if the PDU is going to be discarded.
    •   Except for the newest PDU, all SACK blocks must not Ack any data which is no longer held by receiver.

    Consequences of Reneging

    • Sender must maintain normal TCP timeouts. A PDU cannot be considered acknowledged until its ACK by cumulative acknowledgement.
    • PDU’s cannot be removed from the transmit buffer until ACK by the cumulative acknowledgement.

    Duplicate SACK (DSACK)Extension to SACK

    • When D-SACK is used, the first block of the SACK option should specify the duplicate PDU.
    • D-SACK block is used to report duplicate contiguous sequence of data received by the receiver in the most recent packet.
    • Each duplicate is reported at most once.
    • Allows the sender TCP to determine when a retransmission is not necessary.

    D-SACK TCP Rules

    • If D-SACK block reports duplicate PDU from (possibly larger) block of data in the receiver buffer above the cumulative acknowledgement, the second SACK block (the first non D-SACK block) should specify this block.
    • As only, the first SACK block is considered as D-SACK block, if multiple sequences are duplicated, only the first is contained in the D-SACK block.

    D-SACK TCP & Retransmissions

    • D-SACK allows TCP to determine when retransmission is not necessary and thereby undo congestion control measures.
    • D-SACK allows TCP to determine if the network is duplicating packets.
    • D-SACK does not allow a sender to determine if both the original and retransmitted PDU are received, or the original is lost and the retransmitted PDU is duplicated by the network.

    SACK & D-SACK Interaction

    • No difference between SACK & D-SACK, except that first SACK block is used to report a duplicate PDU in D-SACK.
    • No separate negotiation/options for D-SACK.
    • D-SACK is compatible with current implementations of SACK option in TCP.

    参考:

    • ftp://ftp.rfc-editor.org/in-notes/rfc2018.txt
    • ftp://ftp.rfc-editor.org/in-notes/rfc2883.txt
    • Professor Amer’s Slide
    • http://www.cse.nd.edu/~surendar/teach/spr03/cse598N/Lectures/Lecture13.pdf

    以上可以在内容来自https://www.eecis.udel.edu/~amer/856/sack.04f.ppt 

    引入D-SACK的目的是使TCP进行更好的流控,具体来说有以下几个好处:

    1. 让发送方知道,是发送的包丢了,还是返回的ACK包丢了;

    2. 网络上是否出现了包失序;

    3. 数据包是否被网络上的路由器复制并转发了

    4. 是不是自己的timeout太小了,导致重传

    通过D-SACK这种方法,发送方可以更仔细判断出当前网络的传输情况,可以发现数据段被网络复制、错误重传、ACK丢失引起的重传、重传超时等异常的网络状。

    D-SACK使用了SACK的第一个段来做标志,如何判断D-SACK:

    1. 如果SACK的第一个段的范围被ACK所覆盖,那么就是D-SACK

    2. 如果SACK的第一个段的范围被SACK的第二个段覆盖,那么就是D-SACK

    D-SACK的规则如下:

    1. 第一个block将包含重复收到的报文段的序号
    
    2. 跟在D-SACK之后的SACK将按照SACK的方式工作
    
    3. 如果有多个被重复接收的报文段,则D-SACK只包含其中第一个
    http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
  • 相关阅读:
    Linux 组管理、权限
    Linux 简单文本处理
    Linux 基础内容
    Python selectors实现socket并发
    Python select实现socket并发
    SOA专博收藏
    高亮显示代码编辑器控件【转】
    WCF开源开发框架Zyan
    ubuntu中文实训手册
    Easy UI treegrid 分页实例
  • 原文地址:https://www.cnblogs.com/codestack/p/15563433.html
Copyright © 2011-2022 走看看