Alles wat met URD te maken heeft

Usenet 4 dummies

Door Cruz op vrijdag 22 mei 2009 12:07 - Reacties (23)
Categorie: URD, Views: 9.392

Na het plaatsen van de eerste blogpost ontdekte ik al meteen een bugje die ervoor zorgde dat de lettergrootte van reacties niet in te stellen is via CSS beheer. Crisp heeft het inmiddels gefixt dus \o/ het ziet er weer wat beter uit nu. Blijkbaar ben ik de eerste die de reactie lettergrootte heb gewijzigd :D

Maar genoeg over de vorige post, nu is het tijd voor... Usenet voor dummies!
Introductie
Usenet is een internetdienst waarmee gebruikers elkaar berichten kunnen sturen, een soort kruising tussen email en een forum. Dat was in ieder geval de oorspronkelijke opzet ;)

Om het overzichtelijk te houden is er een onderverdeling gemaakt. Zoals je bij tweakers.net een forum hebt voor hardware zaken en een forum voor software zaken heb je bij usenet zogenaamde 'nieuwsgroepen'. Een aantal voorbeelden hiervan:
  • misc.sci.chem
  • comp.lang.c
  • alt.binaries.pictures.wallpaper
Hiervoor geldt dat alle nieuwsgroepen die met 'alt.' beginnen, over het algemeen niet worden gemodereerd door iemand die bepaalt wat wel en niet gepost mag worden.

Omdat het een supercomputer en een enorme internetverbinding vereist als alle eindgebruikers op 1 systeem hun berichten plaatsen, maakt het usenet gebruik van een heleboel servers. Deze worden nieuwsservers genoemd.
Om te illustreren hoe dat werkt heb ik een tekeningetje gemaakt:

http://www.urdland.com/images/usenet.png

Hierbij zijn er 4 nieuwsservers (1,2,3,4) en de rode blokjes zijn eindgebruikers die via een usenet client berichten plaatsen in bijvoorbeeld comp.lang.c.
  • Een gebruiker die op server 3 is aangesloten stuurt een bericht naar comp.lang.c
  • Server 3 stuurt dit bericht door naar servers 1 en 4, die het allebei doorsturen naar server 2
  • Een gebruiker die op server 4 is aangesloten vraagt de nieuwe berichten van comp.lang.c op
  • Server 4 stuurt het zojuist geplaatste bericht naar de eindgebruiker
De berichten (voor usenet wordt de benaming "artikelen" gebruikt) worden zo dus voor iedereen beschikbaar gemaakt. Feitelijk is het een variant op email waarbij je het niet naar een eindgebruiker stuurt maar naar een centrale database waar iedereen toegang toe heeft. Als gebruiker heb je een usenet-client en daarin abonneer je jezelf op een aantal nieuwsgroepen die je interessant vindt. Vervolgens haalt jouw client de artikelen op van de nieuwsserver waar je toegang tot hebt.

In eerste instantie vraagt de client alleen de headers van de berichten op, dus de naam van de persoon die het heeft gepost, het onderwerp etc. De inhoud van de berichten wordt pas gedownload als je dat handmatig bevestigd, dit om verspilling van bandbreedte te voorkomen.
Retentie
Omdat een usenet-server maar een beperkte capaciteit heeft, worden oude artikelen na verloop van tijd weggegooid. De tijd waarover artikelen beschikbaar zijn voor eindgebruikers wordt de retentietijd genoemd. Met een langere retentietijd, of ook wel gezegd met een grotere retentie, is er meer informatie beschikbaar.
Binaire data
Usenet was dus bedoeld om tekstberichten uit te wisselen. Maar het zou natuurlijk ook handig zijn als je soms een (binair) bestand kan versturen, bijvoorbeeld een C-programma in plaats van alleen broncode. Usenet ondersteunt echter alleen 7-bit US ASCII karakters (dus alleen normale leestekens). Om dit toch mogelijk te maken hebben mensen wat trucs bedacht. Door de binaire data om te zetten in leesbare tekst, en er een soort label voor te zetten, kan toch binaire data geplaatst worden. Hiervoor zijn verschillende functies geschikt, zoals UUencoding, Base64 encoding en yENC, waarvan de laatste het meest efficient is.

Een ander probleem is dat een deel van de usenet servers een limiet aan de grootte van een artikel hanteren: naast het omzetten van binaire data naar tekst moet die tekst ook worden opgesplitst in meerdere artikelen. Dit is weergegeven in onderstaand plaatje.

Je begint met binaire data, dat wordt omgezet in leesbare tekst, en opgesplitst in stukken die in 1 artikel passen.

http://www.urdland.com/images/usenet2.png

De ontvanger van die artikelen volgt het omgekeerde proces om tot de oorspronkelijke data te komen.
Robuustheid
Helaas komt het wel eens voor dat bepaalde artikelen verdwijnen bij het synchroniseren tussen verschillende usenet-servers. Als het niet al te veel moeite is kan de originele poster een zogenaamde 'repost' doen waarbij hij hetzelfde bestand nogmaals plaatst. Maar voor grote bestanden is dat natuurlijk niet praktisch. Daarom wordt er gebruik gemaakt van Par2 (Par1 werd oorspronkelijk gebruikt maar is vervangen door het veel beter werkende Par2).

Dit is een algoritme dat informatie over de te versturen data in een aantal par2-bestanden plaatst. Als nu enkele artikelen zijn weggevallen kunnen de par2-bestanden worden gebruikt om de verloren informatie terug te halen.
Bestanden downloaden
Stel, iemand heeft 1G aan data geplaatst in een nieuwsgroep. Die data bestaat uit 100 bestanden, 90 rar-bestanden van 10MB plus 10 Par2 bestanden van 10MB. Deze staan verspreid over zo'n 4000 artikelen, maar gelukkig brengen de meeste usenet-clients dit weer terug tot 100 berichten. Elk bericht heeft een onderwerp dat bestaat uit de bestandsnaam van de artikelen die erin zijn samengevat.

Handmatig downloaden van die 100 berichten is een kwestie van selecteren en op downloaden klikken. Maar stel dat je een bestand wil hebben waarvan je weet dat het in een nieuwsgroep staat waar je niet op geabonneerd bent, en die zo groot is dat alleen het downloaden van de headers al een halve dag gaat duren. Dan zou het handig zijn als je precies wist welke artikelen je van de nieuwsserver op moet vragen.

Om dat probleem te tackelen is het .nzb bestandsformaat opgezet. In een NZB bestand staat een verzameling van artikel-identifiers die vervolgens direct vanaf de nieuwsserver gedownload kunnen worden.

Het is dan niet nodig om je te abonneren op een nieuwsgroep, en alle headers op te halen maar gewoon 'klik' en 'download'. Deze NZB bestanden zijn daarom erg populair. Je kan het vergelijken met een .torrent bestand: er staan verwijzingen in waar informatie te verkrijgen is.
Usenet-clients
Er zijn een boel verschillende usenet-clients, de belangrijkste verschillen zijn:
  • Het besturingssysteem waarvoor ze geschikt zijn
  • Ondersteuning voor tekstberichten
  • Ondersteuning voor binaire bestanden
  • Automatisch uitpakken/repareren van binaire bestanden
  • Command-line, Grafische client en/of via een webinterface
URD, waaraan ik dus knutsel, is voor linux, werkt via een webinterface en kan alles met binaire bestanden :)

PS: Mocht er iets niet kloppen, lemme know en ik fix het!