Avatar billede f2 Nybegynder
22. november 2008 - 18:30 Der er 8 kommentarer og
1 løsning

UDP i Online Spil

Hej allesammen.

Der er noget der har undret mig gennem længere tid.

Jeg bor på et kollegium hvor vi deler den samme ip-adresse (vi bor nok ca. 40 her). Jeg er ikke sat ind i hvordan dette mere præcist finder sted, men jeg går ud fra at de har en stor router som deler internetforbindelsen. Jeg ved at man fra ledelsens side har valgt at folk ikke skal have lov til at "hoste" servere, så det er altså ikke muligt for mig fx at køre en FTP server som andre udenfor kollegiet kan få fat på.

Det der undrer mig er hvordan forbindelsen i et online spil virker (fx Counter-Strike). UDP er en connection-less forbindelse, hvilket medfører at man bliver nødt til at angive både ip og port hver gang man vil sende en pakke via UDP. Men jeg er sikker på at der ikke er nogen porte åbne i kollegiets router (derudover kan det nævnes at jeg også har en lokal router, som heller ikke har nogen porte åbnet).

Så når spil-serveren vil sende en UDP pakke til "kollegiet's-ip:port", hvordan kan det så være at den ryger videre til min computer? Man skulle da tro at den ville blive blokeret i en af routerne?

Baggrund for mit spørgsmål: Man kan få nogle spil-servere til at sende "live logs", dvs. de sender alt hvad der sker på serveren til en give IP:Port over UDP. Men når jeg sidder bag en router som jeg ikke kan åbne porte i, så ved jeg ikke hvordan jeg skal gøre det. Jeg ved dog det kan lade sig gøre, for HLSW gør det til perfektion. For mere information om dette specifikke problem, læs: http://forum.hlsw.net/viewtopic.php?f=16&t=1772
Avatar billede erikjacobsen Ekspert
22. november 2008 - 22:20 #1
Ikke anderledes end at du kan se en HTML-side, der også skal sendes retur som data.

Når du sender en pakke ud via routeren, registrerer routeren en "returadresse" som svarene fra denne pakke skal sendes til: din computer.
Avatar billede f2 Nybegynder
22. november 2008 - 22:50 #2
Nej, der er en væsentlig forskel.

Ved TCP opretter min computer forbindelse til en anden computer, hvorefter vi kommunikerer - ikke omvendt. Det er umuligt for andre computere (uden for mit netværk) at oprette en TCP forbindelse til mig. Det er mig der skal "initiere".

Ved UDP bliver der ikke oprettet nogen forbindelse. Og selv om jeg er bag (mindst) to routere, så kan jeg åbenbart godt "listen" på en UDP port, og rent faktisk modtage data fra omverdenen (i mit tilfælde en spil-server). Dette er umuligt for mig at gøre via TCP - hvis jeg kunne det, ville jeg kunne køre en FTP-server fx.

Hvis jeg beder spil-serveren om at sende til mig på en eller anden port (lad os sige 23000), så modtager jeg intet. Men hvis jeg lader HLSW gøre det, så kan den på en eller anden måde vælge en port således at jeg modtager data på trods af at jeg er bag routere. Bemærk, det er en-vejs kommunikation: Efter at jeg har bedt serveren om at sende data til ip:port, så kontakter jeg ikke længere serveren - det er kun serveren der sender data (til mig), ikke omvendt.
Avatar billede f2 Nybegynder
22. november 2008 - 22:54 #3
Det er altså ikke et spørgsmål om at jeg sender en request ud via UDP, og så modtager et svar. Faktisk sender jeg forespørgslen ud via TCP (dvs. via TCP beder jeg serveren om at sende data til mig på UDP ip:port), og derefter begynder jeg at modtage data på den givne UDP port. Jeg forstår ikke hvordan det kan lade sig gøre når jeg er bag routere.
Avatar billede erikjacobsen Ekspert
22. november 2008 - 22:56 #4
Nej, det er det samme. Der er ingen forbindelse oprettet med TCP, kun en aftale mellem sender og modtager. Pakker kan tage forskelige veje. Hver TCP-pakke indeholder port-numre for modtager og afsender, fuldstændig på samme måde som UDP.

Så når der sendes en pakke ud, TCP eller UDP, åbner routeren/routerne for en vej tilbage.
Avatar billede f2 Nybegynder
23. november 2008 - 00:46 #5
På det dybeste niveau er der selvfølgelig ikke forbindelse. Det er jo bare noget strøm der bliver sendt igennem nogle ledninger.

Men altså, spørgsmålet står stadigvæk klart: Jeg vil våge at påstå at jeg på ingen måde kan starte en FTP-server der lytter efter connections på en port (behøver ikke at være 21), som andre kan tilslutte sig udefra. Men hvis jeg lytter efter UDP pakker på en given port, så kan jeg rent faktisk godt modtage noget udefra.

Du skriver "Så når der sendes en pakke ud, TCP eller UDP, åbner routeren/routerne for en vej tilbage.".
Spørgsmålet er så hvordan man tricker routerne til at få UDP data på en given port sendt tilbage til mig. Og det er ikke kun 1 pakke man skal have tilbage, men en masse pakker over længere tid.
Avatar billede erikjacobsen Ekspert
23. november 2008 - 08:44 #6
Du kan ikke i dit setup starte en FTP-server, der kan modtage pakker udefra. Korrekt.

"hvordan man tricker routerne til at få UDP data på en given port sendt tilbage til mig" - det gør man ved at sende en pakke ud. Den indeholder en returport, både for TCP og UDP.
Avatar billede f2 Nybegynder
29. november 2008 - 20:10 #7
Den sidste uges tid har jeg eksperimenteret lidt. Her er hvad jeg har fundet ud af:

Hvis jeg sender en UDP pakke ud og siger at retur-porten er 7140, så vil modtageren tro at min lokale port er en anden (retur-porten bliver åbenbart ændret af de routere som pakken bliver sendt igennem). Hvis jeg opsnapper den port (fx 19035) og begynder at sende data tilbage på den port, så vil min computer modtage det på port 7140. Dvs. du har ret, hvis jeg sender en pakke og siger at retur-porten er 7140, så åbnes der en vej tilbage.

Og faktisk var det bare det jeg ville have at vide i første omgang. Så skal jeg bare have fundet en god måde at finde den port som andre skal sende data på - men det har jeg en god ide til.

Smid et svar og snup pointene. :)
Avatar billede erikjacobsen Ekspert
29. november 2008 - 21:07 #8
Jeg samler ikke på point, tak. Skype gør det på ca. den måde - det kan vist googles efter.  Ja, NAT-routeren er nødt til at lave nummeret om, fordi flere maskiner på dens LAN kunne be' om at få noget retur på samme portnummer. Den laver så 7140 om til 19035, og noterer sig at hvis den får noget retur på 19035, så skal den sendes 7140 på din maskine.
Avatar billede f2 Nybegynder
29. november 2008 - 21:26 #9
Tak for din hjælp. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester