Naar inhoud springen

Direct Client-to-Client

Uit Wikipedia, de vrije encyclopedie
Dit is een oude versie van deze pagina, bewerkt door IIVQ (overleg | bijdragen) op 12 nov 2005 om 23:44.
Deze versie kan sterk verschillen van de huidige versie van deze pagina.

Direct Client-to-Client (DCC) is een sub-protocol van IRC-related dat het 2 gebruikers mogelijk maakt een peer-to-peer verbinding op te zetten. Het maakt alleen gebruik van de IRC-server voor het opzetten van de verbinding, maar als de verbinding eenmaal gemaakt is, gaat deze verder los van de server. Oorspronkelijk werd het gebruikt in IrcII, maar nu wordt het door veel IRC-clients ondersteund.

DCC-verbindingen kunnen op twee manieren opgezet worden:

  • De gebruikelijke manier is om CTCP te gebruiken om een DCC-sessie op te zetten. De CTCP-aanvraag wordt via het IRC-netwerk van een naar een andere gebruiker gestuurd.
  • Een andere manier is dat een client direct met een DCC-server verbind. Op deze manier hoeven beide partijen niet met een IRC-netwerk verbonden te zijn.

Veelgebruikte DCC-diensten

DCC CHAT

De CHAT-service maakt het mogelijk dat gebruikers met elkaar praten (Chatten) over een DCC-verbinding. Het verkeer gaat direct tussen de gebruikers, in plaats van over het IRC-netwerk. Dit vermindert het verkeer op de IRC-netwerken en maakt het mogelijk grote berichten direct heen en weer te sturen, waar dat op IRC-netwerken vaak verboden is (Flood control). Ook is de verbinding veiliger omdat de IRC-servers hem niet zien. De verbinding is echter nog steeds in platte tekst.

DCC CHAT wordt normaal geinitialiseerd met een CTCP handshake. De gebruiker die de verbinding op wil zetten zendt het volgende CTCP-commando naar het doel:

DCC CHAT <protocol> <ip> <poort>

waar <ip> en <poort> het IP-adres en de Poort die van de zender zijn, uitgedrukt als integers. <protocol> is altijd "chat". De ontvangende partij verbindt vervolgens met de gegeven poort en adres.

Als een verbinding eenmaal gemaakt is, is het DCC CHAT-protocol heel simpel: Gebruikers wisselen CRLF-beeindigde berichten uit.

DCC SEND

De SEND-service maakt het mogelijk voor gebruikers om elkaar bestanden te verzenden. In de oorspronkelijke standaard voor de handshake wist de ontvanger de bestandsgrootte niet, ook was het niet mogelijk om een verbinding te hervatten. Vervolgens hebben vele clients uitbreidingen op de standaard geintroduceerd, die intussen wijd verspreid zijn.

In de ookspronkelijke handshake verzonde de zender het volgende CTCP-commando naar de ontvanger:

DCC SEND <bestandsnaam> <ip> <poort>

Zoals met DCC CHAT zijn <ip> en <poort> het ip-adres en poort waar de sendende machine naar luistert voor een binnenkomende verbinding. Vaak wordt ook de bestandsgrootte meegegeven:

DCC SEND <bestandsnaam> <ip> <poort> <bestandsgrootte>

Volgens de oorspronkelijke standaard kon een ontvanger nu verbinden met het gegeven adres en poort en wachten op gegevens, of de aanvraag negeren. Voor clients die de DCC RESUME-uitbreiding ondersteunen, is het mogelijk om te vragen om een deel van het bestand over te slaan door het volgende CTCP antwoord te geven:

DCC RESUME <bestandsnaam> <poort> <positie>

Als de zendende client DCC RESUME ondersteunt, zal hij antwoorden met

DCC ACCEPT <bestandsnaam> <poort> <positie>

en kan de ontvanger met het gegeven adres en poort verbinden. Vervolgens zal hij alle binnenkomende data aan het bestaande bestand hangen.

Gegevens wordt in blokken gestuurd, en de client moet deze bevestigen door de grootte van de inkomende gegevensblokken als 32-bit network byte order integers terug te sturen. Dit vertraagt de verbinding, en is overbodig omdat verbindingscontrole al in TCP geimplementeerd is. De Send-Ahead-uitbreiding lost dit probleem deels op door niet te wachten op de bevestigingen, maar omdat de ontvanger ze nog steeds moet verzenden voor elk ontvangen blok, in geval de ontvanger ze verwacht, is het probleem van overhead niet geheel opgelost. Een andere uitbreiding, TSEND of Turbo Send stuurt geen bevestigingen maar gebruikt een veranderde handshake (SEND wordt door TSEND vervangen) en is niet veel ondersteund.

DCC XMIT

Passive DCC

DCC Server

RDCC

DCC REVERSE

DCC RSEND

File Servers (FSERVs)

Zie Ook