NNCP: behandeling van online en gecensureerde verslavingen met behulp van de store-and-forward-methode

 

NNCP: behandeling van online en gecensureerde verslavingen met behulp van de store-and-forward-methode

Haagbeuk
35 min
11 juni 2017
Dit artikel stelt de deprimerende situatie aan de orde met de beschikbaarheid van gegevens op internet, misbruik van censuur en totale bewaking. Zijn de regeringen of bedrijven de schuldige? Wat moeten we doen? Creëer uw eigen sociale netwerken, neem deel aan anonimiseringsnetwerken, bouw mesh-netwerken en store-and-forward-oplossingen. Demonstratie van NNCP-hulpprogramma's voor het maken van deze store-and-forward vriend-naar-vriend-oplossingen.

Wie is schuldig?


Er zijn de laatste tijd veel discussies geweest in RuNet over de angst voor wetsontwerpen die het bestaan ​​van ons deel van het internet in het algemeen in twijfel zouden kunnen trekken. De interpretatie van deze rekeningen kan zodanig zijn dat alles waar encryptie wordt gebruikt, illegaal en verboden is, en wie heeft er een netwerk nodig waar het onmogelijk is om gegevens niet openbaar over te dragen, om privé te praten?

Autoriteiten zeggen dat er geen sprake is van een verbod, maar alleen van controle: dat wil zeggen, als ze kunnen lezen, dan geen probleem - maar we weten dat er geen codering "transparant" is voor sommigen, maar betrouwbaar voor anderen. Een dergelijke "controle" komt neer op het feit dat al onze woorden via een tussenpersoon moeten worden verzonden, directe communicatie tussen twee gesprekspartners is onaanvaardbaar. Daarnaast is de aanwezigheid van een gecentraliseerde tussenpersoon gevaarlijk vanwege het misbruik van censuur en het ontzeggen van toegang tot informatielagen. Bovendien is dit een kolossale stroom van privé-informatie over mensen (elk van hun kliks wordt geregistreerd) - dat wil zeggen wereldwijde bewaking met alle daaruit voortvloeiende problemen.

Al deze problemen worden gepresenteerd in oppositievorm tegen de autoriteiten, ze zeggen dat ze verantwoordelijk zijn voor het feit dat wij, gewone mensen, zo'n wonder van de wereld als het Netwerk van Netwerken kunnen verliezen. Is alles zo erg en is het echt zo dat we met onze technologieën de autoriteiten “niet leuk vinden”?

Het is niet zo erg - het is veel erger. Omdat de beschikbaarheid van informatie, wereldwijde totale bewaking en censuur al lang de facto zijn geworden, zonder dat er wetsvoorstellen zijn aangenomen. Maar de aanstichters van dit alles waren en zijn bedrijven als Google, Facebook, Microsoft en Apple.

Het is geen geheim dat webtechnologieën uiterst complex, omslachtig en tijdrovend zijn om te ontwikkelen: probeer eens een webbrowser helemaal opnieuw te schrijven met alle CSS en DOM JavaScript. Het is bekend dat actief ontwikkelde browsers op de vingers te tellen zijn en mensen van deze bedrijven zijn bezig met hun ontwikkeling. Daarom beweegt elke ontwikkeling zich uitsluitend en logischerwijs naar de behoeften van bedrijven.

Wat was het web daarvoor, vanuit technologisch oogpunt? Gebruikers hebben een speciaal programma (de goede oude warme tube-webbrowser) dat, met behulp van een gestandaardiseerd HTTP-protocol (zeggend welk document, welke bron moet worden opgehaald), verbinding maakt met servers, een HTML-document (mogelijk plus afbeeldingen) ontvangt en weergeeft. Dit is een gedistribueerd opslagnetwerk voor documenten waarin één protocol aanwezig is. Via het netwerk ontvangen we kant-en-klare documenten die op een harde schijf kunnen worden opgeslagen en zonder verdere verbinding met servers kunnen worden uitgelezen.

Hoe werkt het web "bedrijven"? De gebruiker heeft een speciaal programma (nog steeds een webbrowser genoemd), dat een in JavaScript geschreven programma ontvangt (hoewel het nu een soort WebAssembly kan zijn, wat een gewone binaire uitvoerbare code is, vergelijkbaar met een .exe-bestand), start het in een virtuele machine en dit programma begint, volgens zijn eigen protocol (dat wil zeggen, de regels voor interactie met de server en het berichtformaat), te communiceren met de server om de gegevens op te halen en op het scherm weer te geven. Het opslaan van de weergegeven gegevens, denkend dat dit een document is, zal waarschijnlijk niet lukken. Het zal ook niet werken om de ontvangst van documenten te automatiseren, omdat elke individuele site een apart programma is en een eigen communicatieprotocol met een eigen berichtformaat (bijvoorbeeld JSON-verzoekstructuur). Nu is het een gedistribueerd netwerktoepassingen die zijn gedownload naar gebruikerscomputers.

Natuurlijk zijn al deze programma's gesloten, aangezien de code op zijn minst versluierd is en niet geschikt voor mensen om te lezen of te bewerken. Voorheen hebben we ooit een programma voor onszelf geïnstalleerd dat één bepaald protocol implementeert en minimaal één gestandaardiseerd documentformaat ondersteunt. Nu downloaden we elke keer, bij elke site, een ander programma.

Wat is een gesloten propriëtair programma? Dit is wanneer je je computer niet onder controle hebt, wanneer je niet weet wat het programma erop gaat doen.Je vertelt je machine niet wat hij moet doen, maar het programma vertelt je wat je mag doen. Dit alles is natuurlijk van toepassing op elk ander propriëtair programma, niet alleen op automatisch gedownloade JS-code. Een belangrijk verschil tussen Microsoft Windows geïnstalleerd met wat Microsoft Word op uw computer en JS-code is echter dat u ze één keer installeert en als u niets gevaarlijks of alarmerends opmerkt in hun werk, hoeft u zich geen zorgen te maken en te vertrouwen. In de webwereld kunt u echter elke keer dat u een site bezoekt een nieuwe versie van het programma krijgen en een moderne browser zal u dit niet eens vertellen. Als u voorheen niet opmerkte dat de site privégegevens naar de server stuurt, dan na vijf minuten te hebben bezocht, kan hij beginnen. Niemand, zonder speciale plug-ins en dansend met een tamboerijn, zal je hierover vertellen en je waarschuwen dat je een andere versie van het gedownloade programma gebruikt. Het ecosysteem is gericht op het onvoorwaardelijk downloaden van niet-vrije software. De eigenaren van dergelijke sites kunnen ze dwingen om te doen wat ze willen op gebruikerscomputers door letterlijk een paar bestanden op hun servers te wijzigen en de nieuwe versie van het programma wordt automatisch uitgevoerd.

Misschien zijn de problemen overdreven, omdat dit geen gewoon .exe-programma is dat toegang heeft tot een enorme hoeveelheid computerbronnen, maar een programma dat in theorie op een geïsoleerde virtuele machine draait? Helaas is de omvang en complexiteit van de codebase van moderne browsers zo enorm dat zelfs het analyseren van hun beveiliging erg duur is, om nog maar te zwijgen van het feit dat deze codebase zo snel verandert dat elke analyse op het moment van voltooiing ervan niet relevant zal zijn. Complexiteit is de belangrijkste vijand van elk beveiligingssysteem. Geavanceerde protocollen zoals TLS hebben bewezen dat zelfs als honderden miljoenen mensen gebruik maken van en ontwikkelen onder OpenSSL, wat gratis en open source software is, er fatale kritieke bugs kunnen zijn. Bovendien hebben we allemaal Row Hammer- aanvallen gezien.kan ook vanuit een browser. Daarnaast zijn er succesvolle aanvallen op de processorcache gericht op het herkennen van de AES-sleutel, eveneens uitgevoerd vanuit de browser. Een virtuele machine die zo snel verandert en zo complex is, kan niet per definitie veilig zijn, want zelfs volledige virtualisatie in sommige Xen of KVM helpt niet tegen sommige aanvallen. En wat heeft het voor zin om een ​​goed geïsoleerde omgeving te creëren als het de taak van bedrijven is om zoveel mogelijk gegevens te verzamelen?

Laten we nu proberen JavaScript in onze browser uit te schakelen en een aantal moderne sites te bekijken. Tegenwoordig zullen sommige bronnen helemaal niet werken, maar op de resterende 99% van de sites zullen we zien dat er ergens een enorme hoeveelheid advertenties is verdwenen. We zullen zien dat er orden van grootte minder verzoeken van ons komen, waarbij onze privégegevens worden verstrekt aan sites / servers van derden - dat wil zeggen dat het toezicht aanzienlijk is verminderd, althans door het gebrek aan contact met tal van derde partijen.

Dit alles wordt gedaan, zoals officieel gemeld, omwille van reclame, omwille van gerichte reclame, omwille van de verbetering ervan en omwille van ons. Dit alles wordt alleen maar beter alleen dankzij ons toezicht. De bekende beveiligingsexpert en cryptograaf Bruce Schneier benadrukt herhaaldelijk dat het bedrijfsmodel van internet is om gebruikers te bespioneren. Al deze bedrijven leven dankzij het feit dat ze gebruikers volgen (ik benadruk dat toezicht betekent dat ze gegevens over hen verzamelen) en de ontvangen informatie verkopen.

Iemand kan bezwaar maken: wat voor bespioneren mij in de winkel, als ik in die en die jas kwam en mijn gezicht zichtbaar is - ik heb deze informatie zelf verstrekt. Ik stuur inderdaad het IP-adres, de TCP-poorten, de User-Agent van mijn browser zelf en kan het niet anders dan verzenden - zo werkt het web. Maar als de verkoper begint te vragen wat mijn naam is, waar ik vandaan kom, mij op de hielen volgt - dit is al een verzoek om informatie dat niet nodig is om een ​​verkoop- en aankooptransactie te voltooien, dit is al toezicht. Maar bedrijfswebsites doen precies dat, door de toegang tot informatie te vernietigen met behulp van gestandaardiseerde protocollen (die zo weinig over ons zeggen) en documentformaten - als ze je dwingen hun software te gebruiken, dan zijn ze vrij om die te volgen zoals ze willen.

Interview de meerderheid van de mensen die specifiek echt getroffen waren door de blokkering van Roskomnadzor en ze verloren de beschikbaarheid van bepaalde informatie? Afgezien van luide kortetermijnverboden zoals Github, zullen de meeste mensen zeggen dat het verlies van Rutracker is. Echter, zoals in het geval van Pirate Bay, moet men begrijpen dat dit niet langer een gril van de autoriteiten is en niet van de politiek, maar de macht van bedrijven zoals Hollywood en dergelijke. Hun financiële fortuin en invloed op de macht van landen zijn vrij aanzienlijk. Het heeft geen zin voor de autoriteiten zelf om Rutracker of Pirate Bay te sluiten, aangezien dit in wezen goedkoop (in termen van infrastructuur) amusement is dat mensen afleidt van de politiek (mogelijk een gevaar vormt voor de autoriteiten).

Maar het verlies van tonnen informatie vanwege het feit dat de site niet meer werkte met eenvoudige HTTP + HTML-methoden, mensen dwong om de software te gebruiken, waardoor ze gedwongen werden constant online te zijn (als een persoon niet online is, hoe informatie te verzamelen over hem?) - naar mijn mening hebben beïnvloed en beïnvloeden steeds sterker. Koppel een persoon los van internet en hij kan helemaal niets doen, zelfs niet de e-mail lezen of zijn foto's bekijken of de vergadering onthouden, omdat dit alles in de wolken blijft.

Informatie die in een sociaal netwerk als VKontakte is "gevallen", is niet beschikbaar voor indexering door robots van derden en is vaak niet beschikbaar voor onbevoegde personen. Alleen als ik het downloaden van gesloten propriëtaire programma's toesta, me registreer door de identificatiegegevens van mijn "baken" (gsm) op te geven, alleen dan zal ik een paar alinea's tekst over een regulier muziekconcert kunnen zien. Een enorm aantal webontwikkelaars is gewoon vergeten hoe ze sites anders kunnen maken - zonder bewaking en het installeren van hun eigen software voor elke gebruiker, zullen ze niets laten zien, geen beetje payload-informatie. Omdat bedrijven mensen alleen opleiden in deze onethische en respectloze ontwikkelingsmethode. Om ten minste één bericht in Google Discussiegroepen te zien, moet u bijna twee megabytes aan JS-programma's downloaden - opmerkingen zijn overbodig.

Dus totale bewaking, ontoegankelijkheid van informatie, gecentraliseerde censuur - dit is allemaal al gebeurd, dit alles wordt gecultiveerd door de ontwikkelaars zelf, gewone mensen. Sociale netwerken zijn "schoon": ze zeggen dat niemand ons dwingt dit allemaal te posten. Mensen zijn inderdaad extreem gemakkelijk te manipuleren en extreem gemakkelijk om te zwijgen over wat ze verliezen, waarbij ze alleen de positieve aspecten van hun benaderingen laten zien. En de waarde begint pas te worden begrepen met het verlies.

Er zijn veel mensen die bijna uitsluitend VKontakte en YouTube gebruiken: hun elke actie is algecontroleerd, al hun correspondentie (ze hebben geen e-mail, alleen een VK- of Telegram-account) wordt gelezen, alle binnenkomende informatie wordt triviaal gecensureerd (hoe vaak is Facebook gezien mensen te manipuleren, door gegevens te censureren?). En er is misschien al een meerderheid van hen, maar niemand heeft ze daartoe gedwongen, en er is nog steeds een keuze. Voor hen hebben aanbieders al speciale goedkopere tariefplannen waarbij alleen toegang is tot een aantal diensten. Wanneer de massa van deze mensen absoluut kritiek wordt, blijven alleen dergelijke tariefplannen over, want wat heeft het voor zin om de provider te ondersteunen met infrastructuur die toegang biedt tot het hele internet, als het voldoende is om peering te hebben met een half dozijn bedrijfsnetwerken en 99,99% van de gebruikers tevreden is? Prijzen voor volwaardige tarieven zullen stijgen (als ze al blijven) en dit zal al een belemmering vormen voor internettoegankelijkheid.

Zijn mensen bang dat er in een TLS-verbinding een CA-certificaat wordt geforceerd, zoals bijvoorbeeld in Kazachstan is gebeurd om te monitoren, luisteren en censureren? Maar tegelijkertijd kan het diezelfde mensen niet schelen dat andere partijen (bedrijfsdiensten) over het algemeen hun propriëtaire software en hun protocollen installeren? Door alleen informatie op sociale netwerken te plaatsen, ondersteunen dezelfde mensen opnieuw de centralisatie en hegemonie van één bedrijf over alle gegevens. Ze graven al heel lang hun eigen internetgraven en proberen alle problemen de schuld te geven van het 'standaard'-extremisme.

Naar bedrijven met uitgestrekte armen, en de autoriteiten, die veel minder catastrofale dingen doen, vinden fouten.

Wat moeten we doen?


De weinige mensen die het internet echt nodig hebben, die de mogelijkheid nodig hebben om, ruwweg, willekeurige gegevens van de ene willekeurige computer naar de andere te sturen?

Als je de diensten van bedrijven of sociale netwerken niet leuk vindt, dwingt niemand je om ze te gebruiken en kun je altijd je eigen analoog maken (met blackjack en hoeren, optioneel). Ieder huis heeft een krachtige computer, een snel netwerk en alle mogelijkheden van technische uitvoering. Social media-engines zoals Diaspora of GNU Social bestaan ​​al heel lang.

Als het je niet bevalt hoe gegevens worden verstrekt, doe je het met een enorme toegangsdrempel (zijn eigen protocol en formaat), doe het dan in ieder geval zelf op een correcte en bevredigende manier. Dit geldt voor ontwikkelaars.

Als de bron niet genoeg harde schijven heeft, een kanaal om aan alle behoeften te voldoen, vergeet dan niet de samenwerking en bied de mogelijkheid om de bron te spiegelen. In plaats daarvan verhuizen velen helaas naar CDN's zoals Cloudflare, die vaak inloggen op het Tor-netwerk verbiedt, waardoor ze gedwongen worden om vernederende deanonimiseringsprocedures te doorlopen.

Als je het niet prettig vindt dat steeds meer providers geen statische IP-adressen geven, helemaal geen volledige adressen geven, maar alleen een intern adres achter NAT, plaats dan resources binnen overlay-netwerken zoals Tor hidden service (.onion) of I2P ( .i2p) is mogelijk de enige manier om van buitenaf verbinding met u te maken. U moet eraan denken deel te nemen aan dergelijke netwerken en de vaak ongebruikte bronnen van uw computers te doneren. Ontwikkel en onderhoud niet alleen netwerken met een lage latentie, die vanwege hun aard a priori onderhevig zijn aan een aantal aanvallen, maar ook netwerken zoals Freenet en GNUnet . Om niet zoals altijd te zijn: totdat de donder losbarst.

Als de censuur die door bedrijven wordt ondersteund, echt een punt bereikt waarop willekeurige computers geen versleuteld verkeer met elkaar kunnen uitwisselen, dat wil zeggen, het internet wordt gesloten en er blijft alleen een witte lijst met externe toegang tot een dozijn services over, dan kunt u uw eigen netwerk creëren.

Het aanleggen van glasvezel of kabels valt nauwelijks te overwegen, aangezien het veel geld kost (vergeet dat dit nog niet mag). Maar mesh-netwerken via draadloze communicatiekanalen kunnen ook worden geïmplementeerd in Spartaanse thuissituaties. Een optie hoeft niet noodzakelijkerwijs het creëren van een volledig geïsoleerd netwerk te zijn, maar een waarin in ieder geval iemand toegang heeft tot het werkende internet, zijnde een gateway. Er zijn genoeg projecten om uit te kiezen.

Maar vergeet niet de wens van bedrijven om firmwarewijzigingen op wifi-routers te verbieden en vergeet niet dat een groot aantal wifi-modules niet werkt zonder binaire blobs. Een dergelijke vendor-lockin sluit strikte controle over het verkeer niet uit, aangezien het bijvoorbeeld in moderne eigen besturingssystemen onmogelijk is om programma's te installeren die niet cryptografisch zijn ondertekend door bedrijven (die de lancering van deze software hebben goedgekeurd). Thuis zelf een wifi-chip maken is erg duur en het is mogelijk dat degenen die een mesh-netwerk kunnen maken ook van de markt verdwijnen. Dit gaat niet alleen over wifi, maar ook over alle andere draadloze oplossingen met een dik communicatiekanaal. Thuis kunnen amateurradiostations worden gemaakt, maar de capaciteit van hun kanalen is betreurenswaardig, en je kunt zo'n station niet zomaar thuis oppikken en verhogen - je hebt toestemming nodig.

Het is in theorie mogelijk om een ​​mesh-netwerk te creëren, maar in de praktijk zijn er een groot aantal redelijk geografisch verspreide mensen nodig om iets van indrukwekkende omvang te creëren dat praktische voordelen heeft, niet alleen academische. Er zijn verschillende meningen, maar mijn persoonlijke ervaring laat zien dat mensen niet bepaald enthousiast zijn om samen te werken, en daarom is er geen hoop dat er een mesh-netwerk kan worden gecreëerd, althans in Moskou. En mensen hebben echt veel nodig, want wifi (of andere beschikbare ruime radio-oplossingen) werkt over relatief korte afstanden.

Bovendien zijn mesh-netwerken en hun protocollen uitsluitend op maat gemaakt voor real-time verbindingen. Ze zijn ontworpen om sites in realtime te kunnen openen of de terminal op afstand te kunnen gebruiken. Als de connectiviteit in het netwerk wegvalt, komt dit neer op een kabelbreuk en, tot herstel, zal een ander deel van het netwerk niet beschikbaar zijn, waardoor real-time programma's met lage vertraging onbruikbaar worden. Het is ook noodzakelijk om te zorgen voor een goede kanaalredundantie - wat duur en arbeidsintensief is.

Een meer radicale oplossing is om real-time diensten te vergeten en te onthouden dat het leven heel goed mogelijk is zonder hen. Is het zo belangrijk dat uw bericht niet binnen een seconde aankomt, maar misschien wel binnen een paar minuten of uren? E-mail blijft het meest betrouwbare en wijdverspreide communicatiemiddel en garandeert geen leveringstermijnen: vertragingen van tientallen minuten zijn standaard.

Voor het uitlezen van de meeste sites is in principe geen real-time nodig. De site is te downloaden, beschikbaar in alle gratis besturingssystemen, met programma's zoals GNU Wget en stuur een mirror van de site naar jezelf. Er is ook een standaard voor het opslaan van webgegevens: WARC (Web ARCHive), gebruikt door het Internet Archive . Eén bestand kan de hele website bevatten. Dezelfde aanpak wordt gebruikt in het Freenet-netwerk: sites worden ook gearchiveerd om niet honderden datablokken via het netwerk te downloaden, wat waarschijnlijk zou zijn aangevraagd, maar om alles meteen atomair te krijgen. Ik benadruk: het formaat van webarchieven is er algestandaardiseerd en er zijn tientallen petabytes van het internetarchief in gemaakt. Waardevolle pagina's moeten eenvoudig door middel van een webbrowser op schijf worden opgeslagen, want vandaag werkt de link en morgen is hij zo weg. Je hebt er misschien de informatie over geleerd, maar je kunt het niet langer aan je vriend geven. Dit is verloren informatie, vooral in de context van gecentraliseerde systemen zoals CDN en sociale netwerken.

Als u real-time en de verplichte tijdelijke online-modus weigert, zijn zelfs mesh-netwerken niet nodig, maar zijn veel minder veeleisende store-and-forward (opslaan en verder verzenden) oplossingen voldoende. Een van die netwerken die vandaag de dag nog steeds bestaat, is FidoNet , dat vóór de verspreiding van goedkoop internet een vrij wijdverspreid (onder diezelfde minderheid) wereldwijd netwerk was. Ja, de berichten gingen uren of hele dagen door, maar geloof me, er was gemakkelijk veel meer interessante communicatie in Fido dan je nu kunt vinden tussen een ongelooflijk aantal internetfora en mailinglijsten.

Knooppunt-naar-knooppunt kopiëren


Ik pleit op geen enkele manier voor de wederopstanding van FidoNet of UUCP (Unix-to-Unix CoPy), waarover ik al eerder heb geschreven !

Ten eerste zijn al deze systemen ontstaan ​​in een tijd dat cryptografie eigenlijk nog niet beschikbaar was voor gewone stervelingen en toen communicatiekanalen nauwelijks werden afgeluisterd, en als ze werden afgeluisterd, dan alleen doelbewust en niet massaal (puur technisch is het nu gemakkelijker om af te luisteren iedereen dan specifieke individuen). Destijds was er geen business gebaseerd op het bespioneren van mensen. Ze boden geen codering of sterke authenticatie.

Ten tweede is hetzelfde FidoNet gemaakt voor eenvoudige pc's met DOS, in tegenstelling tot UUCP, de voormalige de facto communicatiemethode tussen Unix-systemen. Nu is bijna elk gratis besturingssysteem een ​​Unix-achtige wereld. Niet veel mensen willen de gebruikelijke e-mailclient en de gebruikelijke programma's voor communicatie met de "buitenwereld" opgeven. FidoNet met UUCP zijn totaal verschillende ecosystemen.

Idealiter zou men iets willen hebben dat zo transparant mogelijk is voor e-mail en bestandsoverdrachten. Daarnaast had het moderne cryptografische beveiliging. Dit kan worden bereikt met UUCP, maar door er extra wikkels op te schroeven voor codering en authenticatie. Bovendien zijn noch FidoNet noch UUCP standaard ontworpen om via verwisselbare opslagmedia te werken. Ja, in FidoNet kun je uitgaande pakketten naar een diskette kopiëren en ze terug kopiëren naar het doelknooppunt, maar dit is een handmatige actie, gemakkelijk te verkrijgen vanwege de eenvoud van het systeem, maar wordt niet standaard geleverd (er zijn geen commando's " hier is een floppydisk, ik wil naar Vovan", "hier ben ik met een floppydisk van Vovan, die ook Vaska bezocht, act").

Om aan deze wens te voldoen, is een set gratis (GNU GPLv3 +) programma's NNCP gemaakt Ze zijn gericht op het organiseren van een modern klein store-and-forward netwerk met zo min mogelijk menselijke kosten.

Laten we eens kijken hoe we dit allemaal kunnen gebruiken met specifieke voorbeelden.

Wij, Alice (laten we namen uit de wereld van cryptografie nemen) en Bob, hebben NNCP voor onszelf geïnstalleerd en we hebben een heleboel nnCP-*-commando's. Laten we eerst (met de opdracht nncp-cfgnew ) onze eigen cryptografische sleutelparen maken:

alice% nncp-cfgnew | tee alice.yaml
self:
  id: ZY3VTECZP3T5W6MTD627H472RELRHNBTFEWQCPEGAIRLTHFDZARQ
  exchpub: F73FW5FKURRA6V5LOWXABWMHLSRPUO5YW42L2I2K7EDH7SWRDAWQ
  exchprv: 3URFZQXMZQD6IMCSAZXFI4YFTSYZMKQKGIVJIY7MGHV3WKZXMQ7Q
  signpub: D67UXCU3FJOZG7KVX5P23TEAMT5XUUUME24G7DSDCKRAKSBCGIVQ
  signprv: TEXUCVA4T6PGWS73TKRLKF5GILPTPIU4OHCMEXJQYEUCYLZVR7KB7P2LRKNSUXMTPVK36X5NZSAGJ632KKGCNODPRZBRFIQFJARDEKY
  noiseprv: 7AHI3X5KI7BE3J74BW4BSLFW5ZDEPASPTDLRI6XRTYSHEFZPGVAQ
  noisepub: 56NKDPWRQ26XT5VZKCJBI5PZQBLMH4FAMYAYE5ZHQCQFCKTQ5NKA
neigh:
  self:
    id: ZY3VTECZP3T5W6MTD627H472RELRHNBTFEWQCPEGAIRLTHFDZARQ
    exchpub: F73FW5FKURRA6V5LOWXABWMHLSRPUO5YW42L2I2K7EDH7SWRDAWQ
    signpub: D67UXCU3FJOZG7KVX5P23TEAMT5XUUUME24G7DSDCKRAKSBCGIVQ
    noisepub: 56NKDPWRQ26XT5VZKCJBI5PZQBLMH4FAMYAYE5ZHQCQFCKTQ5NKA
    sendmail:
    - /usr/sbin/sendmail
spool: /var/spool/nncp/alice
log: /var/spool/nncp/alice/log

NNCP creëert uitsluitend Friend-to-Friend (F2F)-netwerken, waarbij elke deelnemer weet met welke buren hij communiceert. Als Alice contact moet opnemen met Bob, moeten ze eerst hun openbare sleutels uitwisselen en deze in de configuratiebestanden schrijven. De knooppunten wisselen zogenaamde versleutelde pakketten met elkaar uit - een soort analoog van OpenPGP. Elk pakket is expliciet geadresseerd aan een bepaald lid. Dit is geen peer-to-peer (P2P), waar iedereen verbinding kan maken met iedereen en iets kan verzenden: dit creëert de mogelijkheid van Sybil-aanvallen , wanneer aanvallers het hele netwerk kunnen uitschakelen, of op zijn minst de activiteit van deelnemers eraan kunnen volgen.

Het eenvoudigste configuratiebestand bevat de volgende velden:

  • self.id - ID van onze node
  • self.exchpub/self.exchprv en self.signpub/self.signprv zijn sleutels die worden gebruikt om gecodeerde pakketten te maken
  • self.noisepub/self.noiseprv - optionele sleutels die worden gebruikt bij communicatie met knooppunten via een TCP-verbinding
  • neigh - bevat informatie over alle bekende netwerkleden, "buren". Het bevat altijd een zelfinvoer - het bevat uw openbare gegevens en het is het dat veilig onder mensen kan worden verspreid, aangezien het alleen openbare delen van de sleutels bevat
  • spool - pad naar de spool-directory waar uitgaande gecodeerde pakketten en onverwerkte inkomende pakketten zich bevinden
  • log - het pad naar het log waarin alle uitgevoerde acties worden opgeslagen (verzonden bestand / brief, ontvangen, etc.)

Bob genereert zijn bestand. Wisselt zijn sleutel uit met Alice en voegt deze toe aan haar configuratiebestand (Alice doet hetzelfde):
alice% cat bob.yaml
self:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
  exchprv: HXDO6IG275S7JNXFDRGX6ZSHHBBN4I7DQ3UGLOZKDY7LIBU65LPA
  signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
  signprv: TT2F5TIWJIQYCXUBC2F2A5KKND5LDGIHDQ3P2P3HTZUNDVAH7QUPO6L7GFDTZKXFNVAIEQY7GDO2NNESVZXX6JL3BXRF7JVYQGYU3IA
  noiseprv: NKMWTKQVUMS3M45R3XHGCZIWOWH2FOZF6SJJMZ3M7YYQZBYPMG7A
  noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
neigh:
  self:
    id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
    exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
    signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
    noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
    sendmail:
    - /usr/sbin/sendmail
  alice:
    id: ZY3VTECZP3T5W6MTD627H472RELRHNBTFEWQCPEGAIRLTHFDZARQ
    exchpub: F73FW5FKURRA6V5LOWXABWMHLSRPUO5YW42L2I2K7EDH7SWRDAWQ
    signpub: D67UXCU3FJOZG7KVX5P23TEAMT5XUUUME24G7DSDCKRAKSBCGIVQ
    noisepub: 56NKDPWRQ26XT5VZKCJBI5PZQBLMH4FAMYAYE5ZHQCQFCKTQ5NKA
spool: /var/spool/nncp/bob
log: /var/spool/nncp/bob/log

Vervolgens wil Bob een bestand naar Alice sturen:
en ook een back-up van zijn bestandssysteem, maar dit doen via Unix-pijplijnen:
bob% export NNCPCFG=/path/to/bob.yaml
bob% zfs send zroot@backup | xz -0 | nncp-file - alice:bobnode-$(date "+%Y%m%d").zfs.xz
2017-06-11T15:44:20Z File - (1.1 GiB) transfer to alice:bobnode-20170611.zfs.xz: sent

Dan kan hij kijken naar wat er rommelig is in zijn spool-directory :
bob% nncp-stat
self
alice
        nice: 196 | Rx:        0 B,   0 pkts | Tx:    1.1 GiB,   2 pkts

Elk pakketje bevat naast informatie over de afzender en ontvanger ook het zogenaamde nice level. Het is maar een nummer van één byte - een prioriteit. Vrijwel alle acties kunnen gepaard gaan met een beperking van het maximaal toegestane nice level. Dit is het equivalent van cijfer in UUCP. Wordt gebruikt om eerst pakketten met een hogere prioriteit (lagere nice-waarde) te verwerken, zodat e-mailberichten doorkomen ondanks het feit dat er op de achtergrond een dvd-film probeert te worden overgedragen. Standaard staat prioriteit 196 voor het versturen van bestanden, wat we zien. Rx zijn ontvangen pakketten die nog niet zijn verwerkt en Tx zijn pakketten die moeten worden verzonden.

Pakketten zijn gecodeerd en hun integriteit wordt gegarandeerd geverifieerd. De pakketten zijn ook geauthenticeerd - het is betrouwbaar bekend van wie ze afkomstig zijn. In bijna alle opdrachten kunt u de minimaal vereiste pakketgrootte specificeren - er wordt automatisch afval aan toegevoegd, waardoor het wordt aangevuld tot de gewenste grootte. Tegelijkertijd wordt de werkelijke grootte van de lading verborgen voor een externe waarnemer, versleuteld.

Bij het overbrengen van bestanden kunt u de optie -chunked specificeren, waarmee u de grootte aangeeft van het stuk waarmee het bestand moet worden geslagen. Het gebruikt een schema dat erg doet denken aan BitTorrent: het bestand wordt in stukjes gebroken en er wordt een metabestand toegevoegd met informatie over elk stuk, voor gegarandeerd, vanuit het oogpunt van integriteit, bestandsherstel. Dit kan handig zijn als u de grootte van grote bestanden wilt verbergen (zoals bij een lijk - het is problematisch om het in één stuk te slepen, maar het is veel gemakkelijker om het in zes delen te verdelen). Het is ook handig wanneer u grote hoeveelheden gegevens moet overbrengen via schijven van duidelijk kleinere afmetingen: dan wordt de gegevensoverdracht in verschillende iteraties uitgevoerd.

Nu moet het op de een of andere manier aan Alice worden overgebracht. Eén manier is via een datadrive, door bestanden op het bestandssysteem te kopiëren.

Bob pakt een USB-stick, maakt er een bestandssysteem op en voert het volgende uit:

bob% nncp-xfer -mkdir /mnt/media
2017-06-11T18:23:28Z Packet transfer, sent to node alice (1.1 GiB)
2017-06-11T18:23:28Z Packet transfer, sent to node alice (350 KiB)

en ontvangt daar een set mappen met alle uitgaande pakketten voor elk hem bekend knooppunt. Welke knooppunten "overwegen" kunnen worden beperkt door de optie -node. De optie -mkdir is alleen vereist voor de eerste run - als de mappen voor de corresponderende knooppunten al op de schijf staan, worden ze verwerkt, anders worden de knooppunten gewoon overgeslagen. Dit is handig omdat als de flashdrive alleen tussen sommige leden van het "netwerk" "loopt", er alleen pakketten voor hen op de schijf worden geplaatst, zonder dat u constant -node hoeft op te geven.

In plaats van een USB-station kan een tijdelijke map worden gebruikt van waaruit een ISO-image wordt gemaakt om op een cd te branden. Het kan een openbare FTP/NFS/SMB-server zijn die is aangekoppeld in de map /mnt/media. Zo'n NAS kan op het werk of ergens anders worden geplaatst - zolang twee contacterende deelnemers tenminste af en toe de mogelijkheid hebben om er verbinding mee te maken. Het kan een draagbare PirateBox zijn die onderweg NNCP-pakketten verzamelt en verspreidt. Dit kan een USB-dead drop zijn , waarmee van tijd tot tijd totaal verschillende en onbekende mensen verbinding maken: als er onbekende knooppunten in de doeldirectory zijn, negeren we ze en kunnen we alleen te weten komen over het feit van hun bestaan ​​en het aantal verzonden pakketten.

Al deze schijven en opslagplaatsen bevatten alleen versleutelde pakketten. Hierop is te zien van wie en voor wie ze bestemd zijn, hoeveel, welke omvang en prioriteit. Maar niet meer. Zonder privésleutels kunt u niet eens het type pakket achterhalen (of het nu een e-mailbericht, een bestand of een transitpakket is). NNCP probeert niet anoniem te zijn.

Het gebruik van ncp-xfer vereist geen privésleutels: alleen kennis over buren is nodig - hun identifiers. U kunt dus op pad gaan met een spool-directory en een minimaal configuratiebestand (zonder privésleutels) dat is voorbereid door de opdracht nnCP-cfgmin zonder bang te hoeven zijn voor gecompromitteerde sleutels. Een nncp-toss-oproep waarvoor privésleutels nodig zijn, kan op elk ander geschikt moment worden gedaan. Als u echter nog steeds bang bent voor de veiligheid van privésleutels of zelfs een configuratiebestand waarin al uw buren worden vermeld, kunt u het hulpprogramma nncp-cfgenc gebruiken , waarmee u het kunt coderen. De wachtwoordzin die vanaf het toetsenbord wordt ingevoerd, wordt gebruikt als de coderingssleutel: er zit een zout in het gecodeerde bestand, het wachtwoord wordt versterkt door de CPU en het harde geheugenalgoritmeBallon , dus met een goede wachtwoordzin hoef je je niet al te veel zorgen te maken dat je wordt gecompromitteerd (behalve met een soldeerbout).

Alice hoeft alleen maar de opdracht uit te voeren om de voor haar bestemde bestanden naar haar spooldirectory te kopiëren:

alice% nncp-xfer /mnt/media
2017-06-11T18:41:29Z Packet transfer, received from node bob (1.1 GiB)
2017-06-11T18:41:29Z Packet transfer, received from node bob (350 KiB)
alice% nncp-stat
self
bob
        nice: 196 | Rx:    1.1 GiB,   2 pkts | Tx:        0 B,   0 pkts

We zien dat ze onbewerkte (Rx) pakketten in de spool-directory heeft. Niet allemaal zo eenvoudig. Hoewel we een netwerk van vrienden hebben (F2F), vertrouwen, maar verifiëren. U moet de gegeven node expliciet toestemming geven om bestanden naar u te verzenden. Om dit te doen, moet Alice aan Bob's sectie van het configuratiebestand een indicatie toevoegen van waar de door hem overgedragen bestanden moeten worden geplaatst.
bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
  signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
  noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
  incoming: /home/alice/bob/incoming

Daarna moet u beginnen met het verwerken van inkomende gecodeerde pakketten met de opdracht nncp-toss (vergelijkbaar met tosser in FidoNet):
alice% nncp-toss
2017-06-11T18:49:21Z Got file ifmaps.tar.xz (350 KiB) from bob
2017-06-11T18:50:34Z Got file bobnode-20170611.zfs.xz (1.1 GiB) from bob

Dit commando heeft een -cycle-optie waarmee het op de achtergrond kan blijven hangen en regelmatig de spool-directory kan controleren en verwerken.

Naast het versturen van bestanden is het ook mogelijk om een ​​bestandsoverdracht aan te vragen. Om dit te doen, moet u expliciet een freq-item (bestandsverzoek) schrijven in het configuratiebestand voor elk knooppunt waaruit directorybestanden kunnen worden opgevraagd:

bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
  signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
  noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
  incoming: /home/alice/nncp/bob/incoming
  freq: /home/alice/nncp/bob/pub

nu kan Bob een aanvraag doen voor een bestand:
bob% nncp-freq alice:pulp_fiction.avi PulpFiction.avi
2017-06-11T18:55:32Z File request from alice:pulp_fiction.avi to pulp_fiction.avi: sent
bob% nncp-xfer -node alice /mnt/media

en Alice zal hem, na het verwerken van inkomende berichten, automatisch het gevraagde bestand sturen:
alice% nncp-toss
2017-06-11T18:59:14Z File /home/alice/nncp/bob/pub/pulp_fiction.avi (650 MiB) transfer to bob:PulpFiction.avi: sent
2017-06-11T18:59:14Z Got file request pulp_fiction.avi to bob

Er is geen functionaliteit om een ​​lijst met bestanden te verzenden, maar gebruikers kunnen er altijd mee instemmen, bijvoorbeeld door de uitvoer van ls -lR op te slaan in een ls-lR-bestand in de hoofdmap.

Laten we ons nu voorstellen dat Alice en Bob Eve kennen (maar deze Eve is goed, niet slecht cryptografisch, omdat we een netwerk van vrienden hebben), maar Alice heeft geen direct contact met haar. Ze wonen in verschillende steden en alleen Bob houdt af en toe toezicht tussen hen. NNCP ondersteunt transitpakketten die vergelijkbaar zijn met Tor's uienversleuteling: Alice kan een versleuteld pakket voor Eve maken en het in een ander versleuteld pakket voor Bob plaatsen, wat aangeeft dat het naar Eve moet worden verzonden. De lengte van de keten is onbeperkt en de tussenliggende deelnemer kent alleen de vorige en volgende schakel in de keten en kent de echte afzender en ontvanger niet.

De aanduiding van het transitpad wordt gespecificeerd door de vermelding via in het knooppunt. Alice wil bijvoorbeeld zeggen dat Eve beschikbaar is via Bob:

bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
  signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
  noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
eve:
  self:
  id: URVEPJR5XMJBDHBDXFL3KCQTY3AT54SHE3KYUYPL263JBZ4XZK2A
  exchpub: QI7L34EUPXQNE6WLY5NDHENWADORKRMD5EWHZUVHQNE52CTCIEXQ
  signpub: KIRJIZMT3PZB5PNYUXJQXZYKLNG6FTXEJTKXXCKN3JCWGJNP7PTQ
  noisepub: RHNYP4J3AWLIFHG4XE7ETADT4UGHS47MWSAOBQCIQIBXM745FB6A
  via: [bob]

Alice weet niet precies hoe Eve contact opneemt met Bob en dat hoeft ook niet: op de een of andere manier moeten de berichten haar bereiken en Bob ziet alleen de feiten van het verzenden van transitverkeer. Het uitgaande bericht van Bob aan Eve wordt automatisch aangemaakt door nncp-toss na verwerking van het bericht van Alice.

Als we het hebben over goede beveiliging, dan moet u hiervoor computers met een luchtspleet (air-gapped) gebruiken - niet verbonden met datanetwerken, idealiter met bijvoorbeeld alleen cd-rom / RW. En "vóór" staat een computer waarin flashdrives of verkeer van andere knooppunten vastzitten: daarop kunt u ervoor zorgen dat de flashdrives niets kwaadaardigs bevatten, en als deze is verbonden met internet of een ander netwerk, dan kunnen kwetsbaarheden van het besturingssysteem de air-gapped computer niet in gevaar brengen. Alleen transitpakketten komen naar zo'n knooppunt, dat uitgaande berichten zal genereren voor een air-gapped computer die naar een cd is geschreven.

Als u een sectie toevoegt aan het configuratiebestand:

notify:
  file:
    from: nncp@bobnode
    to: bob+file@example.com
  freq:
    from: nncp@bobnode
    to: bob+freq@example.com

dan worden meldingen over overgedragen bestanden verzonden naar bob+file@example.com, en meldingen over aangevraagde bestanden worden verzonden naar bob+freq@example.com.

NNCP kan eenvoudig worden geïntegreerd met een mailserver voor transparante mailoverdracht. Waarom is reguliere SMTP niet geschikt, omdat het ook store-and-forward is? Het feit dat je geen flashdrives kunt gebruiken (zonder te dansen), het feit dat SMTP-verkeer, net als e-mailberichten, niet erg compact is (binaire gegevens in Base64-vorm), plus dat het vrij ernstige beperkingen heeft op de maximale wachttijd voor mail levering. Als je een dorp in Oeganda bent en een koerier met een flashdrive komt één keer per week naar je toe, dan werkt SMTP hier niet en stuurt NNCP gewoon een aantal brieven voor elke inwoner van het dorp en brengt ze terug naar de stad .

De opdracht nnCP-mail wordt gebruikt om e-mail te verzenden In feite is het precies dezelfde bestandsoverdracht, maar dan wordt sendmail aangeroepen op de doelmachine, in plaats van het bericht op schijf op te slaan, en wordt het bericht zelf gecomprimeerd. Het opzetten van Postfix kost letterlijk een paar regels :

  • master.cf geeft aan hoe het nncp-transport moet worden gebruikt (hoe het nncp-mail-commando moet worden aangeroepen)
  • voor het gegeven domein/gebruiker is ingesteld dat dit nncp-transport moet worden gebruikt
  • aangeven dat het opgegeven domein of de gebruiker transit (relay) is

Op de doelcomputer is het noodzakelijk om het pad in te stellen naar de opdracht voor het verzenden van e-mail voor het gegeven knooppunt (als dit niet is ingesteld, wordt er geen e-mail verzonden):
bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  exchpub: GQ5UPYX44T7YK5EJX7R73652J5J7UPOKCGLKYNLJTI4EBSNX4M2Q
  signpub: 654X6MKHHSVOK3KAQJBR6MG5U22JFLTPP4SXWDPCL6TLRANRJWQA
  noisepub: M5V35L5HOFXH5FCRRV24ZDGBVVHMAT3S63AGPULND4FR2GIPPFJA
  sendmail: [/usr/sbin/sendmail, "-v"]

Met deze transparante aanpak kunt u zich volledig ontdoen van POP3-/IMAP4-servers en e-mailclients die brieven als concept opslaan wanneer u op transparante wijze e-mail moet ontvangen en verzenden tussen uw mailserver en laptop. De mailserver kijkt altijd naar het internet, en de laptop maakt niet uit hoe vaak hij verbinding maakt: NNCP accepteert de mail en stuurt deze naar zijn lokale sendmail, die hem aflevert in de lokale mailbox. En op dezelfde manier, verzenden: vallende berichten naar de lokale mailserver op de laptop worden opgeslagen in de NNCP-spooldirectory en worden zo snel mogelijk naar de server verzonden (vanuit het oogpunt van de mailclient is de mail succesvol verzonden onmiddellijk). Plus gecomprimeerd mailverkeer.

Het gebruik van draagbare schijven is niet altijd handig, zeker nu we nog een werkbaar internet hebben. NNCP kan handig worden gebruikt om pakketten over TCP-verbindingen te verzenden. Om dit te doen, is er een nncp-daemon daemon en de opdracht nncp-call die deze aanroept.

Om gecodeerde pakketten uit te wisselen, zou men het rsync-protocol kunnen gebruiken, mogelijk via een OpenSSH-verbinding, maar dit zou een soort kruk betekenen, plus de volgende link en de volgende sleutels voor node-authenticatie. NNCP gebruikt een zelfstandig SP-synchronisatieprotocol ( synchronisatieprotocol ) dat wordt gebruikt via een met Noise-IK gecodeerd en geverifieerd communicatiekanaal. Hoewel NNCP-pakketten versleuteld zijn, is het niet goed om ze publiekelijk te tonen in communicatiekanalen - daarom zit er een extra laag boven. Ruis biedt perfecte voorwaartse geheimhouding (PFS, wanneer het compromitteren van de privésleutels van Ruis voorkomt dat eerder onderschept verkeer wordt gelezen) en tweerichtingsauthenticatie: vreemden kunnen geen verbinding met u maken en iets verzenden of proberen te ontvangen.

Het SP-protocol probeert zo efficiënt mogelijk te zijn in half-duplex-modus: zoveel mogelijk gegevens moeten in één richting worden verzonden zonder op iets terug te wachten. Dit is van cruciaal belang voor satellietcommunicatiekanalen, waarbij protocollen die wachten op bevestiging van acceptatie of verzoeken om het volgende stuk gegevens verzenden, volledig achteruitgaan in prestaties. De full duplex-modus wordt echter volledig ondersteund en probeert het communicatiekanaal in beide richtingen te gebruiken.

SP probeert zuinig te zijn met het aantal verzonden datapakketten: al op het moment van de Noise-IK-handshake worden lijsten met pakketten die beschikbaar zijn om te downloaden onmiddellijk verzonden en worden downloadverzoeken in batches verzonden.

SP is ontworpen om te werken in foutloze communicatiekanalen: het hoeft geen TCP te zijn - alles kan als transportmiddel worden gebruikt, zolang er maar geen fouten zijn. Pakketten met een verbroken integriteit worden niet in behandeling genomen. Succesvolle acceptatie van het pakket wordt pas aan de andere kant gemeld na controle van de integriteit.

Met het protocol kunt u doorgaan met het downloaden van elk pakket vanaf elke willekeurige locatie. Dat wil zeggen, wanneer de verbinding wordt verbroken, is het meest opvallende verlies de TCP + Noise-handshake en vervolgens de voortzetting vanaf dezelfde plaats. Zodra er een nieuw pakket op het te verzenden knooppunt verschijnt, is de andere kant hiervan onmiddellijk (een keer per seconde) op de hoogte, waardoor het de huidige download kan onderbreken en een pakket met een hogere prioriteit in de wachtrij kan plaatsen.

% nncp-daemon -nice 128 -bind [::]:5400

het commando wekt een daemon op die luistert naar alle adressen op TCP-poort 5400, maar pakketten doorgeeft met een mooi niveau niet hoger dan 128. Als de mogelijke daemon-adressen van een bepaald knooppunt bekend zijn, kunnen ze in het configuratiebestand worden geschreven:
bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  ...
  addrs:
    lan: "[fe80::be5f:f4ff:fedd:2752%igb0]:5400"
    pub: "bob.example.com:5400"

en noem dan het knooppunt:
% nncp-call bob
% nncp-call bob:lan
% nncp-call bob:main
% nncp-call bob forced.bob.example.com:1234

Het eerste commando zal alle adressen van addrs proberen, het tweede en derde commando zeggen expliciet om lan- en pub-items te gebruiken, en het laatste zegt om een ​​goed gedefinieerd adres te gebruiken, ongeacht het configuratiebestand.

De daemon kan, net als nncp-call, worden ingesteld op het minimaal noodzakelijke nice-niveau: geef bijvoorbeeld alleen mailberichten door via het internetkanaal (ervan uitgaande dat ze een hogere prioriteit hebben), en laat de overdracht van zware bestanden over aan draagbare schijven of een afzonderlijk gelanceerde daemon die alleen luistert in snelle lokale netwerken. U kunt de opties -rx en -tx voor nncp-call specificeren om ervoor te zorgen dat het alleen pakketten ontvangt of alleen verzendt.

Helaas kunnen de partijen in het SP-protocol niet overeenkomen dat de verbinding kan worden verbroken. Nu wordt dit geïmplementeerd vanwege een time-out: als beide knooppunten niets te verzenden en te ontvangen hebben, verbreken ze na een bepaalde tijd de verbinding. Maar deze tijd kan met de optie -onlinedeadline heel lang (uren) worden ingesteld en dan hebben we een langlevende verbinding waarin notificaties over nieuwe pakketten direct worden verzonden. Dit bespaart dure protocolhandshakes. In het geval van het versturen van mail is dit ook een zeer snelle notificatie van inkomende mail, zonder de noodzaak, zoals in POP3, constant te pollen, de verbinding te verbreken.

TCP-verbindingen kunnen ook zonder internetverbinding worden gebruikt. Met een beetje zalving met shell-scripts kun je bijvoorbeeld een ad-hoc wifi-netwerk opzetten op een laptop en naar de daemon luisteren op een IPv6 link-local adres, terwijl je probeert constant verbinding te maken met een ander bekend adres. En terwijl ze op een roltrap in de metro rijden, kunnen twee laptops elkaar relatief snel zien in een gemeenschappelijk ad-hocnetwerk en elkaar snel "schieten" met NNCP-pakketten. WiFi is vrij snel, dus zelfs binnen enkele seconden kunt u grote hoeveelheden e-mail alleen overbrengen. En als dit een elektrische treinwagon is, waar regelmatig dezelfde mensen elke dag op ongeveer dezelfde tijd van of naar het werk reizen, dan kan er tientallen minuten aan constante communicatie zijn. Maar vergeet niet dat, door elke dag een harde schijf van twee terabyte over te zetten,

Een ander opvallend hulpprogramma is nncp-caller . Dit is een daemon die buren via TCP op een bepaald tijdstip, op bepaalde adressen, met bepaalde verzend-/ontvangstparameters oproept. De configuratie wordt voor elk vereist knooppunt geschreven met behulp van cron- expressies. Bijvoorbeeld:

bob:
  id: FG5U7XHVJ342GRR6LN4ZG6SMAU7RROBL6CSU5US42GQ75HEWM7AQ
  ...
  calls:
    -
      cron: "*/10 9-21 * * MON-FRI"
      nice: 128
      addr: pub
      xx: rx
    -
      cron: "*/1 21-23,0-9 * * MON-FRI"
      onlinedeadline: 3600
      addr: lan
    -
      cron: "*/1 * * * SAT,SUN"
      onlinedeadline: 3600
      addr: lan

Deze oproepbeschrijving zegt het volgende: elke tien minuten op weekdagen, tijdens kantooruren, neem contact op met Bob (op het openbare adres zodat een poging om verbinding te maken met het lokale IPv6 link-local adres zijn adres niet aan het netwerk geeft), accepteer alleen pakketten met hoge prioriteit (waarschijnlijk mail ), maar zonder iets te verzenden; probeer tijdens niet-werkuren contact met hem op te nemen via een LAN-adres, pakketten van welke prioriteit dan ook te accepteren en een TCP-verbinding aan te houden (het is niet nodig om geld uit te geven aan handdrukken), voor ten minste een uur downtime; werk in het weekend de klok rond alleen met zijn LAN-adres.

Met dergelijke oproepbeschrijvingen kunt u flexibel bepalen wanneer en hoe u met wie communiceert. Als er een telefoonlijn tussen de knooppunten is, wordt de beltijd direct weerspiegeld in de kosten. Helaas is de aanroep naar niet-TCP-adressen nu niet geïmplementeerd, maar dit zal zeker in de addrs-sectie van het configuratiebestand worden geschreven.

Natuurlijk worden niet alle functies en scenario's voor het gebruik van NNCP overwogen. Er wordt helemaal geen rekening gehouden met pakketindelingen en het SP-protocol. Het belangrijkste principe achter het creëren van deze hulpprogramma's is: KISS en de boycot van complexiteit. Hoewel deze set niet alles op de Unix-manier doet en veel werk vergt dat verder gaat dan het absolute minimum dat vereist is voor store-and-forward-netwerken, is het puur om extra afhankelijkheden te besparen.

Просмотры:

Коментарі

Популярні публікації