[tor-dev] SENDME cells

Mashael Alsabah malsabah at gmail.com
Wed Jul 9 16:37:16 UTC 2014

Hi Gareth,

You can find more details about the flow control algorithm in Tor and how 
Sendmes work in this paper: "DefenestraTor: Throwing out Windows in Tor".


On Jul 9, 2014, at 11:39 AM, Florian Tschorsch <tschorsch at informatik.hu-berlin.de> wrote:

> Dear Gareth,
> actually the sentence is correct.
> Every OR maintains a package window and a deliver window for each
> traversing circuit. You can check the source code: In or.h the circuit_t
> struct definition declares a package_window and a deliver_window variable.
> The reason is that Tor's circuits are originally following the leaky
> pipe principal. Thus it is possible to leave the circuit at every
> intermediate OR (as long as the exit policy allows it) and not only at
> the last OR (i.e. the exit).
> Eventually the OP maintains a window for each OR in the circuit.
> As far as I know, this is not used in practice. Therefore to think there
> is only one pair of windows at the OP and at the exit approximates the
> current behavior sufficiently.
> Cheers,
> Florian.
> On 03.07.2014 12:36, Gareth Owen wrote:
>> Just to answer my own question for any others.
>> I've played around with it a for a few days and it seems the
>> intermediate ORs don't maintain windows, it's only the edge nodes,
>> maintaining a circuit, and individual stream windows.
>> Hope someone can update the spec to be clearer on this to save others
>> the effort.  The offending sentence is:
>> /"The OP behaves identically, except that it must track a
>> packaging window and a delivery window for every OR in the circuit."/
>> Best
>> Gareth
>> On 1 July 2014 09:51, Gareth Owen <gareth.owen at port.ac.uk
>> <mailto:gareth.owen at port.ac.uk>> wrote:
>>    (sorry re-post - forgot subject)
>>    Dear all
>>    I'm working on a tor research project and am having difficulty
>>    understanding the SENDME cells.  The tor spec acknowledges that it
>>    isn't particularly clear so I would welcome some clarification please.
>>    The spec says that *all* nodes in a circuit maintain a send and
>>    receive window, and that this window is decremented on each
>>    RELAY_DATA and incremented on each SENDME.  Cells that are neither
>>    of these do not affect the window size.  The problem I have
>>    understanding is, that only edge nodes will know whether a cell is a
>>    RELAY_DATA, the intermediate nodes only know that its a RELAY but
>>    not what type.  So, if only RELAY_DATA decrements the window size,
>>    and intermediate nodes cannot spot these, what point is there in
>>    intermediate nodes having a window?
>>    Any help greatly appreciated.
>>    Gareth
> _______________________________________________
> tor-dev mailing list
> tor-dev at lists.torproject.org
> https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev

More information about the tor-dev mailing list