[tor-dev] SENDME cells

Florian Tschorsch tschorsch at informatik.hu-berlin.de
Wed Jul 9 15:39:41 UTC 2014

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.


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

More information about the tor-dev mailing list