This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

  • Resolved

DM648 with NDK 2.0 and support of fast retransmission of a dropped packet

Prodigy 90 points

Replies: 3

Views: 1448

Does the current NDK2.0 version support fast retransmission of a packet after three duplicate acks are seen? I cannot wait the the retransmssion timer to expire as waiting for 100ms causes issue with our application. I need to recover as fast as possible.

Any thoughts or feedback is welcomed.

  • Hi dchasse,

    The NDK supports a feature called Selective Acknowledgement.  Perhaps this feature can help you with your issue?

    From a quick Google search:

    http://opalsoft.net/qos/TCP-90.htm:

    The problem
    Multiple packet losses from a window of data can have a catastrophic effect on TCP throughput. TCP uses a cumulative acknowledgment scheme in which received segments that are not at the left edge of the receive window are not acknowledged. This forces the sender to either wait a roundtrip time to find out about each lost packet, or to unnecessarily retransmit segments which have been correctly received. With the cumulative acknowledgment scheme, multiple dropped segments generally cause TCP to lose its ACK-based clock, reducing overall throughput.
    The solution
    Selective Acknowledgment (SACK) is a strategy which corrects this behavior in the face of multiple dropped segments. With selective acknowledgments, the data receiver can inform the sender about all segments that have arrived successfully, so the sender need retransmit only the segments that have actually been lost.

    The NDK supports SACK via the following socket option:

    TCP_SACKPERMITTED

    Permit RFC-2018 Selective Acknowledgment(SACK) conformant
    connection. The SACK permitted option is exchanged at socket
    connection time. Hence; on server side, the setting must be done before
    calling "accept()", and on clint side before calling "connect()".

    Steve

  • In reply to Steven Connell:

    Thanks for responding.

     

    I am currently using the SACK option and it works as advertized.

     

    What I am looking for is a faster way to recover dropped/lost packets other than waiting for the NDK timer (100ms) to expire and then retransmit the lost packet. I have read about fast retransmission that detects a certain number of Duplicate Acks and when reached will retansmit the missing packet without the need to wait for the NDK timer to expire.

     

    This functionality is described in RFC 2581.

     

    As a seperate question does there exist a different TCP stack that can run on the DM648 other that the NDK that may be full featured?  For DSP/ARM processors are there TCP stacks available?

     

     

  • In reply to dchasse:

    Ok, I see, this clarifies it ... however, this feature is not supported in the NDK unfortunately.  I've filed a bug so that this will be tracked and we can consider adding support for this feature in the future:

    SDOCM00090231 consider adding fast retransmit to NDK (RFC 2581)

    There are other stacks, but the one that supports the DSP/BIOS and SYS/BIOS operating systems is the NDK.

    Steve

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.