Tor funciona como una cadena de proxies, donde cada proxy solo conoce el siguiente salto y el salto anterior.
Simplificando mucho, cuando su computadora envíe datos usando Tor, su cliente tor cifrará la carga útil y la enviará a otro nodo. El siguiente nodo hace lo mismo, y después de unas pocas iteraciones, su paquete llega al nodo de salida, se descifra completamente y se envía al servidor web de destino.
El servidor web envía el paquete al nodo de salida, porque el nodo de salida era la computadora que se conectó al servidor web. El nodo de salida usa una tabla (parece la tabla NAT, pero con más información) para decidir dónde enviar la respuesta. Así que volverá a cifrar el paquete y lo enviará al siguiente nodo, que hará lo mismo, hasta que el paquete llegue a su computadora, se descifre localmente y se envíe a la aplicación.
Los nodos intermedios no tienen que esperar todos los datos antes de enviarlos al próximo salto, o descargar archivos de varios MB grandes sería una molestia. En su lugar, tienen un espacio limitado en el búfer, y cada vez que el búfer se llena (o se produce un tiempo de espera), lo cifran y lo envían por delante.
Su aplicación pensará que el servidor remoto es su cliente tor, por lo que solo tiene que reconocer la transferencia de paquetes hasta el primer nodo. El servidor web de destino piensa que el nodo de salida es el cliente, y todos los nodos intermedios reconocerán los paquetes entre ellos, ya que existe una conexión punto a punto entre ellos.