[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] further spec cleanup
Update of /home/or/cvsroot/doc
In directory moria.mit.edu:/home/arma/work/onion/cvs/doc
Modified Files:
tor-spec.txt
Log Message:
further spec cleanup
Index: tor-spec.txt
===================================================================
RCS file: /home/or/cvsroot/doc/tor-spec.txt,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- tor-spec.txt 12 Jun 2003 06:19:34 -0000 1.18
+++ tor-spec.txt 12 Jun 2003 07:13:01 -0000 1.19
@@ -100,7 +100,7 @@
For later use, the server sets its keys for this connection,
setting K_f to the client's K_b, and K_b to the client's K_f.
- The server then creates a server authentication message[M2] as
+ The server then creates a server authentication message [M2] as
follows:
Modified client authentication [48 bytes]
A random nonce [N] [8 bytes]
@@ -353,7 +353,7 @@
When an onion router receives a CREATE cell, if it already has a
circuit on the given connection with the given ACI, it drops the
- cell. Otherwise, some time after receiving the CREATE cell, completes
+ cell. Otherwise, sometime after receiving the CREATE cell, it completes
the DH handshake, and replies with a CREATED cell, containing g^y
as its [128 byte] payload. Upon receiving a CREATED cell, an onion
router packs it payload into an EXTENDED relay cell (see section 5),
@@ -371,14 +371,15 @@
circuit's intended lifetime is over. Circuits may be torn down
either completely or hop-by-hop.
- To tear down a circuit completely, an OR or OP sends a DESTROY cell
- with that direction's ACI to an adjacent nodes on that circuit.
+ To tear down a circuit completely, an OR or OP sends a DESTROY
+ cell to the adjacent nodes on that circuit, using the appropriate
+ direction's ACI.
- Upon receiving a DESTROY cell, an OR frees resources associated
- with the corresponding circuit. If it's not the start or end of the
- circuit, it sends a DESTROY cell for that circuit to the next OR in
- the circuit. If the node is the start or end of the circuit, then
- it tears down any associated edge connections (see section 5.1).
+ Upon receiving an outgoing DESTROY cell, an OR frees resources
+ associated with the corresponding circuit. If it's not the end of
+ the circuit, it sends a DESTROY cell for that circuit to the next OR
+ in the circuit. If the node is the end of the circuit, then it tears
+ down any associated edge connections (see section 5.1).
After a DESTROY cell has been processed, an OR ignores all data or
destroy cells for the corresponding circuit.
@@ -394,6 +395,9 @@
RELAY_TRUNCATED cell towards the OP; the node farther from the OP
should send a DESTROY cell down the circuit.
+ [We'll have to reevaluate this section once we figure out cleaner
+ circuit/connection killing conventions. -RD]
+
4.5. Routing data cells
When an OR receives a RELAY cell, it checks the cell's ACI and
@@ -454,8 +458,8 @@
5 -- RELAY_SENDME
6 -- RELAY_EXTEND
7 -- RELAY_EXTENDED
- 8 -- RELAY_TRUNCATE
- 9 -- RELAY_TRUNCATED
+ 8 -- RELAY_TRUNCATE
+ 9 -- RELAY_TRUNCATED
All RELAY cells pertaining to the same tunneled stream have the
same stream ID. Stream ID's are chosen randomly by the OP. A
@@ -517,39 +521,38 @@
for running a node, we plan to leave out link padding until this
tradeoff is better understood.
-6.3. Circuit flow control
+6.3. Circuit-level flow control
To control a circuit's bandwidth usage, each OR keeps track of
two 'windows', consisting of how many RELAY_DATA cells it is
allowed to package for transmission, and how many RELAY_DATA cells
it is willing to deliver to streams outside the network.
- Each 'window' value is initially set to 500 data cells
+ Each 'window' value is initially set to 1000 data cells
in each direction (cells that are not data cells do not affect
- the window). When an OR wants to deliver more cells, it sends a
+ the window). When an OR is willing to deliver more cells, it sends a
RELAY_SENDME cell towards the OP, with Stream ID zero. When an OR
receives a RELAY_SENDME cell with stream ID zero, it increments its
packaging window.
Either of these cells increment the corresponding window by 100.
- The OP behaves identically, except that it must track a packaging and
- delivery windows for every OR in the circuit.
+ The OP behaves identically, except that it must track a packaging
+ window and a delivery window for every OR in the circuit.
An OR or OP sends cells to increment its delivery window when the
- corresponding window value falls under some threshold (400), and
- the node is ready to process more cells on that circuit.
+ corresponding window value falls under some threshold (900).
If a packaging window reaches 0, the OR or OP stops reading from
TCP connections for all streams on the corresponding circuit, and
- sends no more RELAY_DATA cells until receiving a RElAY_SENDME cell.
+ sends no more RELAY_DATA cells until receiving a RELAY_SENDME cell.
-6.4. Topic flow control
+6.4. Stream-level flow control
- Edge nodes use RELAY_SENDME data cells to implement end-to-end flow
- control for individual connections across circuits. As with circuit
- flow control, edge nodes begin with a window of cells (500) per
- topic, and increment the window by a fixed value (50) upon receiving
- a RELAY_SENDME data cell. Edge nodes initiate TOPIC_SENDME data
+ Edge nodes use RELAY_SENDME cells to implement end-to-end flow
+ control for individual connections across circuits. Similarly to
+ circuit-level flow control, edge nodes begin with a window of cells
+ (500) per stream, and increment the window by a fixed value (50)
+ upon receiving a RELAY_SENDME cell. Edge nodes initiate RELAY_SENDME
cells when both a) the window is <= 450, and b) there are less than
ten cell payloads remaining to be flushed at that edge.