Avatar billede Lasse Novice
24. august 2005 - 18:26 Der er 15 kommentarer og
1 løsning

Hjaelp til algoritme og lagring

Dette er et kryds kategori spg, men jeg haaber det gaar her.

Jeg har foelgende data (en bruger saetter denne data op, saa jeg har ingen ide om hvad han saetter vaerdierne til):

server ip (f.eks. 50.0.255.1)
subnet mask (f.eks. 1.0.0.0)

udfra dette skal jeg generere en ny ip som endnu ikke er brugt.

Hvordan gemmer jeg dette nemmest saaledes at jeg hurtigt kan faa en ny IP ud?

En loesning er brute force (for loekke). Men dette kan godt tage RIGTIG lang tid, hvis man skal igennem alle 2^32 og der skal vaere et check (om IP'en allerede er taget) hver gang. En anden loesning?????
Avatar billede Lasse Novice
24. august 2005 - 18:27 #1
Hvordan gemmer jeg dette (brugte IP'er samt server ip og server mask) nemmest saaledes at jeg hurtigt kan faa en ny IP ud?
Avatar billede arne_v Ekspert
24. august 2005 - 19:01 #2
snakker vi in memory data struktur eller on disk eller ... ?
Avatar billede Lasse Novice
24. august 2005 - 22:18 #3
jeg kommer nok til at gemme det i en db, men jeg aaben for forslag.
Avatar billede arne_v Ekspert
24. august 2005 - 22:23 #4
hvad med at vedligeholde en free list

du har en tabel med X ledige

når du skal bruge en så snupper du en af de ledige

når der ikke er flere ledige så laver du en simpel SELECT og indsætter
de første X huller i ledige tabellen

super hurtigt X-1 gange og ikke så langsomt igen den ene gang
Avatar billede Lasse Novice
24. august 2005 - 22:43 #5
en free list i en db?

Jeg er ikke helt sikker paa at jeg forstaar.... du vil kun indsaette f.eks. 5% af de ledige, og tage derfra?
Avatar billede arne_v Ekspert
24. august 2005 - 22:46 #6
nej jeg vil lave f.eks. 1000 ledige og gemme i en seperat tabel

når man snupper en så sletter man den (eller markerer den som brugt)

når man løber tør så laver man en helt banal

SELECT * FROM brugttabel

og udskriver huller i free list tabellen

man stopper så når man har 1000 ledige igen
Avatar billede Lasse Novice
24. august 2005 - 23:27 #7
Hvordan vil du populere tabellen?

Et grumt eksempel kunne vaere foelgende for subnet mask:

128.0.0.128
10000001 00000000 00000000 10000001

Har du et smart forslag til at finde lad os sige... de 10 foerste ledige som skal indsaettes i ledig tabellen?
Avatar billede arne_v Ekspert
24. august 2005 - 23:34 #8
nu skal du vel ikke søge efter ledige subnet masker men efter ledige IP adresser

SELECT * FROM brugttabel ORDER BY ip
lastip = -1 (ellee hvor du nu vil starte)
while read
{
    ip = ... // eller ipstart = og ipslut = hvis blok allokering
    if(ip > lastip+1)
    {
      // interval lastip+1 .. ip-1 er ledige
    }
    lastip = ip // eller lastip = ipslut hvis blok allokering
Avatar billede Lasse Novice
24. august 2005 - 23:41 #9
Problemet er desvaerre ogsaa afhaengig af subnet masken, da det er den der bestemmer hvilke IP'er der kan gives vaek. I tilfaelde af foernaevnte subnet mask, saa er der foelgende IP'er tilgaengelig:

0.0.0.0
0.0.0.1
0.0.0.127
0.0.0.128
1.0.0.0
1.0.0.1
1.0.0.127
1.0.0.128
127.0.0.0
127.0.0.1
127.0.0.127
127.0.0.128
128.0.0.0
128.0.0.1
128.0.0.127
128.0.0.128

Der er selvfoelgelig nogen af disse som ikke er mulige... eftersom de har en bestemt mening.

Med din algoritme skal finder jeg disse
0.0.0.0
0.0.0.1
0.0.0.127
0.0.0.128
1.0.0.0
1.0.0.1
1.0.0.127
1.0.0.128
127.0.0.0
127.0.0.1

Det betyder at jeg skal loebe ... puha, maaaange gange for at finde de 10 foerste.
Avatar billede arne_v Ekspert
24. august 2005 - 23:48 #10
hvorfor det ?

er det ikke almindelig blok allokering ?

ipstart = gemt ip adress
ipslut = gems ip adress | ~ subnet maske

lastip + 1 .. ipstart - 1 er ledig

lastip = ipslut i bunden af løkken
Avatar billede Lasse Novice
24. august 2005 - 23:55 #11
jeg sidder lige og laeser om ip addressering...

Kan IP'er KUN findes i blokke (dvs. fortloebne)?

Som jeg laeser det, saa kan Net ogsaa skrives som

192.168.0.1 / 24 hvilket betyder at subnet er:

24 1'er efterfulgt af 8 0'er.

Er det ikke korrekt at lave en mask hvor 1'er og 0'er er "mixet"?
Avatar billede arne_v Ekspert
24. august 2005 - 23:57 #12
nej
Avatar billede Lasse Novice
25. august 2005 - 00:02 #13
Kan IP'er KUN findes i blokke (dvs. fortloebne)?
Nej
eller
Er det ikke korrekt at lave en mask hvor 1'er og 0'er er "mixet"?
Nej

???
Avatar billede arne_v Ekspert
25. august 2005 - 00:04 #14
IP kan kun findes i blokke

det er ikke korrekt at mixe

[og de 2 ting er ekvivalente]
Avatar billede Lasse Novice
25. august 2005 - 00:07 #15
ja, det kan du jo selvfoelgelig have ret i...

mange takker arne, som altid en glaede at faa hjaelp fra dig.

svar => point
Avatar billede arne_v Ekspert
25. august 2005 - 00:09 #16
kommer her
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