Prawidłowa maska IP

Witam, mam napisac programik nakładający maskę na adres IP (pisze to w javie, juz mam całość) jednak mam jeden problem - z poprawnością maski IP. Jaka powinna być ? Wiem, że to jest np. 255.255.255.0, ale chyba są jakieś zasady, czytałem, że bity 1 i 0 w masce powinny byc rozdzielone, ale nie wiem dokładnie o co chodzi … Mógłby mi ktoś to wyjaśnić ?

http://pl.wikipedia.org/wiki/Maska_podsieci

http://42.pl/ipcalc/

Czyli maski moga byc tylko takie jak w tabeli na Wikipedii, tzn. moze byc ich tylko (jest) 30 ? I nie moze byc maski przykaldowo takiej: 255.192.5.0 bo to bylby blad ?

tak jest tylko 30 masek (w sumie 31 ponieważ wikipedia nie uwzględniła maski 255.255.255.255), ponieważ jak być sobie rozpisał maskę na system dwójkowy, to po cyfrze zero nie może wystąpić ponownie cyfra jeden!!

np. zapis prawidłowy

255.255.255.224 = 111111111.111111111.11111111. 111** 00000**

np. zapis nieprawidłowy ponieważ wystąpiło " 1" po " 0"

225.255.255.232 = 11111111.11111111.11111111.111 0** 1 **000

czyli dozwolone wartości to:

/1 128 = 10000000

/2 192 = 11000000

/3 224 = 11100000

/4 240 = 11110000

/5 248 = 11111000

/6 252 = 11111100

/7 254 = 11111110

/8 255 = 11111111

“”“0=00000000"”" zero tez jest dozwolone (tylko nie w pierwszym oktecie) ale to chyba logiczne jest. np. 11111111.00000000.00000000.00000000 = 255.0.0.0 :slight_smile:

a skrócony zapis maski np. /24 to ilość jedynek jedynek w systemie dwójkowym liczonych od lewej strony:

np: /24 = 11111111.11111111.11111111.00000000 = co w dziesiętnym daje 255.255.255.0

hmm, nie do końca, w 3, 2 czy nawet 1 oktecie też mogą być zera, maska może wyglądać nawet tak

10000000.00000000.00000000.00000000

krasnaaal, dziękuję za piękne wyjaśnienie :slight_smile: Zulowski, więc jesli twierdzisz, że jest inaczej, mógłbyś jakoś to rozwinąć ?

Dodane 22.11.2009 (N) 13:58

Ok, wiem, że to nie ten dział,ale chciałbym się upewnić, że dobrze zrozumiałem. Czyli ta metoda, która mi to sprawdzi, może wyglądać np tak:

public static boolean sprMaske(int maska[]){ //spr. poprawność wprowadzonej maski

        int tab[]={128,192,224,240,248,252,254,255};


        for(int i=0;i<8;i++){

            if(maska[0]==tab[i]&&(maska[1]==0&&maska[2]==0&&maska[3]==0))

                return true;

        }

        for(int i=0;i<8;i++){

            if(maska[0]==tab[i]||(maska[1]==tab[i])&&(maska[2]==0&&maska[3]==0))

                return true;

        }

        for(int i=0;i<8;i++){

            if(maska[0]==tab[i]||(maska[1]==tab[i])||(maska[2]==tab[i])&&(maska[3]==0))

                return true;

        }

        for(int i=0;i<8;i++){

            if((maska[0]==tab[i])||(maska[1]==tab[i])||(maska[2]==tab[i])||(maska[3]==tab[i]))

                return true;

        }

        return false;

    }

?

Jest prawie tak jak on napisał, z tym, że NIE jesteśmy ograniczeni do ostatniego oktetu

11111111.11111111.11110000.00000000

Też jest prawidłową maską.

Co ciekawe 11111111.11111111.11111111.11111111 (255.255.255.255) też jest prawidłową :slight_smile:

295b72x.jpg

… poza tym, co napisano - możesz jeszcze dodać “fukcjonalność”, aby nakładana maska była zależna od ilości komputerów w sieci (efektywne dzielenie na podsieci).

powiedz mi człowieku czy gdzieś napisałem że jesteśmy ograniczeniu do jakiegoś ostatniego oktetu ??

gdzieś napisałem że tak nie jest?? A gdy być czytał dokładnie mój post to byś przeczytał:

moim zdaniem Ty jesteś

@up, dzięki, że na mnie najeżdżasz, napisałem to co napisałem, a że nie zrozumiałeś, że mu tylko rozjaśniam, bo twoje rozpisanie przedstawiłeś TYLKO na ostatnich oktetach, to nie mój problem.

Ok, tylko nie kłóćcie się przeze mnie ! :wink: Chyba już zrozumiałem - odpowiedź Zulowski’ego po prostu zawierała się w odpowiedzi krasnaaal’a :slight_smile: Przecież link do wikipedii, który podał aTaSerwis, jasno twierdził, że maska może byc także postaci 255.255.255.255 (bardzo,bardzo pomocne było także wytłumaczenie krasnaaal’a) :wink: W każdym razie dziękuję wszystkim za odpowiedzi - co prawda programik nieco pokręciłem (coś z maskami, heh!) - ale to pewnie przez zastosowanie złego warunku :wink: Raz jeszcze pięknie dziękuję za pomoc i wyjaśnienia, w końcu to zrozumiałem :slight_smile: