Mint ahogy az első fejezetben leírtuk, a ZORP alapvetően négy alacsonyszintű komponensből áll: Listen, Connect, Stream, Proxy. Ezeket egészítjük ki Pythonban készült osztályokkal.
Nézzük meg, hogy milyen lépések figyelhetők meg egy kapcsolat felépülésekor, és hogyan vesznek részt ebben a fenti komponensek.
Inicializáláskor a Zorp példány neve (--as paraméter) alapján létrejönnek a tűzfal konfigurációjának megfelelő Listenerek. A Listener feladata, hogy kapcsolat érkezése esetén létrehozza a session-t (mely a MasterSession osztály egy példánya) majd elindítsa a megfelelő szolgáltatást a session részeként.
A session egy hierarchikus adatszerkezet, mely a proxykhoz hasonlóan egymásba ágyazódik. A beágyazott session (StackedSession példány) örökli a felette levő sessionök attribútumait, ilyen módon lehetőséget adva az adatcserére beágyazott proxyk között.
A session létrehozása után, elindul egy példány a szolgáltatásból (Service.startInstance metódus), mely paraméterként megkapja az imént leírt sessiont.
Egy szolgáltatásra jellemző az alkalmazandó proxy típusa (proxy osztály), a továbbkapcsolódás módja (Chainer), valamint az authentikáció típusa.
A Proxy osztályból (ami már C-ben iródott) létrejön egy példány, mely megkapja a klienst jelképező streamet. A proxy a protokoll megfelelő pontján kezdeményezi a szerveroldali kapcsolat kialakítását. Ekkor jut szerephez a már korábban említett Chainer osztály. A Chainer feladata, hogy a rendelkezésre álló adatok alapján (session, valamint a proxy által kért cím) kapcsolódjon a szerverhez.
Az előre definiált chainerek közül a legfontosabb talán a TransparentChainer, mely a kliens eredeti céljához kapcsolja a proxyt. További chainerek találhatók a /usr/share/zorp/pylib/Zorp/Chainer.py fájlban.
Miután a szerver oldali kapcsolat is kiépült, a proxy modul gondoskodik az adatáramlás biztosításáról, a döntési pontokon meghívva a Python kód eseménykezelőit, az adminisztrátorra bízva a döntés pontos leírását.
Amennyiben beágyazott Proxyról van szó, úgy a kliens oldal nem egy Listener által visszaadott kapcsolat, hanem a szülő proxy felé létrehozott full-duplex kapcsolat (unix-domain socket). Ilyenkor nem használunk Chainer-t, helyette a szülő másik oldali kapcsolatát vesszük használatba.