[Algemeen][Perl] Zoeken van ip-adressen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 06:17
Dit is iets dat ik me al lang loop af te vragen (ook weer in het kader van een schoolopdracht):
Stel je maakt een sharing programma (zoals bv Napster,Kazaa,...).
Wat is de meest efficiënte manier om aan de andere gebruikers van dit programma duidelijk te maken dat je online bent en er dus kan gedownload worden van jouw pc?

Ik dacht dit eerst te realiseren op de Napster manier:
- Alle clients geven hun ip adres door aan 1 centrale server
- Elke client die zich aanmeld heeft dus direct een lijst van ip adressen waar er kan gezocht worden naar files.
=> voordeel: clients hoeven geen ip adressen te weten/in te tikken van andere clients

Deze manier heeft echter een aantal nadelen:
- de client moet nog altijd het ip weten van de 'master' server (wel op te lossen door een domein en dns service te gebruiken, maar het gaat hier om een schoolopdracht dus dit is 'out of the question')
- als de 'master' stopt wegens omstandigheden dan kunnen de clients niet meer verder (dit is ook de ondergang geweest van Napster)

Mijne tweede gedacht was dan een soort van broadcast techniek te gebruiken, maar kwam ik ook meteen tot de bedenking dat er ontzettend veel subnetten zijn op het internet en is deze techniek dus alleen bruikbaar op een lokaal netwerk (misschien zie ik dit helemaal fout...).

Hoe zien jullie dit? Ik zou graag een peer-2-peer structuur gebruiken die niet afhankelijk is van een centrale server maar toch andere ip-adressen snel weet op te snorren van het internet. (Of ben ik toch beter af door de Napster structuur na te apen?)

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Elke client is ook een server. En elke server heeft een lijstje (gekregen van andere servers) waar een aantal 'vrienden'-IPs in staan. Je kan er vanuit gaan dat er nog wel een aantal van die 100 IP's hetzelfde ipadres heeft en online is, waardoor je van hun weer up-to-date lijsten kan krijgen met ipadressen met servers.

Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 06:17
En elke server heeft een lijstje (gekregen van andere servers) waar een aantal 'vrienden'-IPs in staan.
En hoe vinden die servers elkaar? Blijkbaar heb ik het nog niet helemaal door...

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

Anoniem: 22001

Kapoen schreef op 05 november 2002 @ 19:29:
[...]


En hoe vinden die servers elkaar? Blijkbaar heb ik het nog niet helemaal door...
Kijk naar projecten als gnutella en emule. Als je het programma download kun je op zich nog niets, je moet eerst een deelnemer zien te vinden als entry point. Zodra je ergens een ip vandaan hebt geplukt van iemand die aangesloten is op het netwerk (het kan niet anders als je geen centrale server wilt gebruiken) kun je van die peer wel weer andere IPs krijgen om je lijst uit te breiden.

Acties:
  • 0 Henk 'm!

  • Kapoen
  • Registratie: Mei 2002
  • Laatst online: 06:17
Ok dus het gebruik van een centrale server die ip's bijhoud is dus onvermijdelijk...

goed dan doen we het zo maar :)

Clowns to the left of me, Jokers to the right


Acties:
  • 0 Henk 'm!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Nee het is niet onvermijdelijk... het hoeft nmlk niet EEN centrale server te zijn. Ik ga ervan uit dat je programma een groot succes wordt (ten onrechte, er zijn al te veel file sharing programma's, maar het is even makkelijk om er wel van uit te gaan).

Zodra het af is, zet je zelf 5 a 6 clients/servers (want elke client is een server) aan met je eigen mp3-collectie erop. Deze servers laat je op verschillende netwerken lopen (ja, we pakken het professioneel aan natuurlijk) zodat er altijd een netwerk uit kan vallen zonder dat je prog er last van heeft. Deze servers (vanaf nu noem ik ze de roots) hebben elkaars IP-adressen. Goed. Nu stel je dus de clients (noem ik vanaf nu ook clients en servers, maar laat je niet verwarren, ze zijn hetzelfde) beschikbaar vanaf een website. Met deze clients lever je dus ook de lijst van de IP-adressen van de roots. Zodra de user iets gaat zoeken, maakt de client dus verbinding met een van de roots (bijv. root3), dat zijn op dat moment tenslotte nog de enige servers die hij kent. De betreffende root server denkt: hee, dit IP adres komt nog niet voor in mijn lijstje. Even toevoegen en kijken of hij nog meer servers kent die ik niet ken. Dat blijkt niet het geval, maar root3 kent wel een nieuw IP-adres.

Daarna download nog iemand anders je client en hij legt verbinding met root5. Ook root5 ontdekt een nieuw ip-adres en slaat het op, gaat bij de user kijken of die nog meer onbekende IP's heeft. Je hebt nu al twee IP's verzameld. Je programma wordt populair! Nog iemand download je client en hij maakt ook verbinding met root3. Hee denkt root3, weer een nieuw IP, even toevoegen en kijken of hij nog meer IP's heeft. Nee dus, alweer niet.

Goed, je hebt nu al 3 nieuwe IP's + 6 root IP's. Maar de 3 gebruikers kennen elkaar's IP nog niet. En 2 IP adressen staan bij root3 en 1 bij root5, zonder dat ze dat van elkaar weten. Tsjah, wat doe je daar aan... er is wel een mogelijkheid:

telkens als een server een nieuw IP tegenkomt, slaat hij dat IP op en gaat kijken of de client nog meer nieuwe IP's heeft, zoals we steeds al gedaan hebben. Daarna gaat hij alle IP adressen die hij heeft, verspreiden onder de IP-adressen die hij heeft. Hierop worden de lijsten van iedereen die ooit op de server heeft ingelogd krijgt dus uitgebreid.
Voordeel: een nieuwe gebruiker logt in op een rootserver, gelijk is zijn IP bekend bij alle andere gebruikers, omdat de roots ook steeds hun nieuwe IP-adressen aan elkaar hebben doorgegeven. Elk IP-adres is dus gelijk bekend
Nadeel: deze methode zal op den duur, als er echt veel gebruikers komen, een enorme vertraging veroorzaken op het moment dat er een nieuwe gebruiker inlogt, omdat er wereldwijd IP-adressen verstuurd gaan worden.

Wel weer een ander voordeel van deze methode is dat je op den duur, als je versie 2 wil gaan uitbrengen, je zo'n grote lijst IP-adressen hebt verzameld met je roots, dat je deze lijst kan meeleveren met de download en je kan je eigen rootservers uit de lucht halen.

[ Voor 0% gewijzigd door muba op 05-11-2002 22:20 . Reden: typo en onvolledige info ]

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Acties:
  • 0 Henk 'm!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Let op, mijn vorige bericht heeft een groter na- dan voordeel EN het gaat uit van statische IP-adressen... je zult dus sowieso iets anders moeten vinden, maar ik wou alleen maar aantonen dat EEN centrale server niet nodig is, je kan best meerdere zuster-servers hebben zonder een moeder-server, die je op den duur, als je veel users begint te krijgen, kan weghalen.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1