Internetworking e Indirizzamento

Indirizzo IP

  • Identifica una terminazione di connessione

  • Se due nodi sono potenzialmente raggiungibili tra loro, non possono avere lo stesso Indirizzo IP

  • E’ a 32 bit in IP Versione 4

    • Dimensione registro di CPU delle macchine ARPA storiche
  • Espresso in Notazione Punto

    • 4 bytes in decimale, separati da punti
    • Esempio: 167.19.230.45

Tre tipi tradizionali:

  • Indirizzo di Host
    • Singola interfaccia di una macchina in rete
  • Indirizzo di Rete
    • La rete come entità
  • Indirizzo di Broadcast
    • Tutti gli host di una rete

Evoluzione degli Indirizzi

Svilind

Inizialmente vi era una sola rete e gli indirizzi degli host sulla rete erano semplici numeri interi.

Gli host erano macchine col sistema operativo Fuzzball della ditta Bolt, Beranek and Newman. Il loro registro di CPU era a 32 bit e lo storaggio di tipo MSB (Most Significat Byte first), quindi i numeri bassi cadevano nell'ultimo byte e i primi byte erano vuoti.

Quando altre reti, con governance autonoma, si sono agganciate alla originale ARPAnet vi è stata la necessità di identificare la rete oltre che lo host.

E' stato deciso di porre l'indirizzo di rete nel primo byte. Chi mai avrebbe pensato che vi sarebbero state più di 255 reti in futuro?

Incidentalmente a questo punto è sorto anche il concetto di gateway: lo host particolare collegato a due reti contemporaneamente.

Il percorso di smistamento veniva indicato con una opzione del datagramma IP, chiamata source routing: la lista di indirizzi di gateways attraverso cui il pacchetto doveva passare.

Classi di Indirizzamento

Con l'aumentare del numero di reti connesse la soluzione originale non era più praticabile.

Si è constatato che vi erano reti grandi, medie e piccole, e si è deciso di chiamarle rispettivamente reti di classe A, B e C.

Se in un indirizzo il primo bit è 0 allora è un classe A. Se il primo bit è 1 e il secondo è 0, allora è in classe B. Se i primi due bit sono 1 e il terzo è 0 allora è in classe C. (Incidentalmente, il terzo bit non può mai essere un 1).

Classindir

  • Lunghezza variabile dell’indirizzo di rete
  • Separazione al confine di byte
  • Possibile costruire sottoreti, ma lo smistamento Internet avviene a livello di rete

Le classi di indirizzamento non sono più la norma nel moderno uso di attribuzione di indirizzi. La rete a cui appartiene un indirizzo viene esplicitamente indicata come parametro di asswgnazione di un indirizzo IP. Con certe utility, se tale parametro di indicazione di rete manca, viene assegnata di default una rete conforme alla classe di indirizzamento tradizionale.

Per esempio, a meno di ulteriori specifiche, l'indirizzo IP 192.168.12.27 è in classe B, l'indirizzo IP 10.12.240.18 è in classe A.

CIDR

Problemi col passare del tempo (circa 1995):

  • Problema del numero delle classi - gli indirizzi in classe A sono quasi finiti, in classe B scarseggiano, in classe C sono ancora molti.
  • Problema dello spreco: circa il 90% degli indirizzi in classe B non sono assegnati a host, circa il 98% di quelli in classe A
  • Problema del routing: al proliferare delle reti, le tabelle di routing dei gateway principali diventano enormi

Toomany

Occorre una maggiore granularità nell'assegnare reti.

Classless InterDomain Routing (CIDR)

Cidr

Indirizzi non devono più essere in Classi:

  • Suddivisione Classi in Sottoclassi
  • Aggregazione Classi in Superclassi
  • Semplificazione delle Tabelle di Routing

Un terminatore di connessione (indirizzo) ha sempre associati due registri di 32 bit:

  • registro di indirizzo (I)
  • registro di maschera (M)

Entrambi sono divisi da un setto separatore nello stesso punto.

Prima del separatore il registro di maschera ha tutti i bit a 1, dopo il separatore tutti i bit a 0.

La parte del registro di indirizzo prima del separatore si chiama prefisso di rete, quella dopo il separatore indirizzo di host. La lunghezza del prefisso di rete P può andare da 0 a 32, e non è più necessariamente un multiplo di 8 come con le classi di indirizzamento.

La notazione CIDR per indicare un indirizzo è:

indirizzo_completo_a_32_bit / lunghezza_del_prefisso

Per la parte indirizzo completo si usa la notazione punto: i 4 byte dell'indirizzo a 32 bit ciascuno indicato come intero, separati da un punto. Ogni byte, essendo di 8 bit, ha naturalmente un valore compreso tra 0 e 255.

La parte lunghezza del prefisso, dopo la barra (slash) si indica semplicemente come valore intero.

Un indirizzo conseguente è l'indirizzo di rete (N), che si ottiene ponendo dopo il prefisso di rete tanti 0 quanto necessari per arrivare a 32 bit.

Il numero teorico di indirizzi host disponibili in quella rete è quindi 2 elevato alla diferenza 32-P.

Un secondo indirizzo derivato è l'Indirizzo di Broadcast (B), che si ottiene completando il prefisso di rete a 32 bit con degli 1. Un pacchetto con l'indirizzo di broadcast nel campo di destinazione viene inviato a tutti gli host di quella rete.

Il numero di host effettivamente disponibili in una rete è quindi il numero teorico meno i due indirizzi speciali di rete e di broadcast.

Logicamente possiamo dire che:

N = I .and. M
B = I .or. ( .not. M )

Routing CIDR

La vera, e più sottile e recondita, innovazione del CIDR è nelle tabelle di routing. Non per niente il CIDR è stato fortemente voluto da Cisco.

Una tabella di routing non contiene indirizzi di reti vere, e la maschera non si chiama più Netmask, ma Genmask. Rappresenta una aggregazione di reti, volendo, una superrete, raggiungibile tramite lo stesso gateway, ovvero il prossimo hop a cui inviare il pacchetto smistato.

Man mano che il pacchetto smistato procede verso destinazione, trverà nella tabella di routing degli hop successivi delle Genmask più precise, meno generiche, fino ad arrivare a destinazione finale.

I due limiti sono:

  • un Genmask di lunghezza di prefisso 32 rappresenta un singolo host
  • un Genmask di lunghezza di prefisso 0 rappresenta l'intera Internet

Per i router le reti vere non esistono, solo regole di snistamento

Utility ipcalc

Un indirizzo CIDR, espresso in notazione punto, non ha la parte di rete che necessariamente termina con byte a zero, come avveniva per gli indirizzi in classi di indirizzamento.

Semplicemente guardando un indirizzo generico, è arduo dedurre se si tratti di un indirizzo di una rete o di uno host, e nell'ultimo caso quale sia l'indirizzo di rete corrispondente e l'indirizzo di broadcast.

L'utility Linux ipcalc aiuta molto nei calcoli.

Esempio: ipcalc 110.142.226.37/27

Ipcalc

Indirizzi IP non per Internet

Nonint

I primi tre range di indirizzi sono definiti dallo RFC 1918. Qualsiasi router esterno si veda arrivare un pacchetto con questi indirizzi nel campo mittente o destinatario è pregato di buttare il pacchetto. Sono indirizzi destinati al traffico Intranet.

Ci sono molti altri range di indirizzi che non sono mai stati assegnati dallo IANA - Internet Assigned Numbers Authorities. Un pacchetto con questi indirizzi nel campo mittente viene regolarmente smistato. Sono idealmente Indirizzi di Spoofing.

iproute2

Nuovi comandi per la gestione rete in Linux ( Alexey Kuznetsov - Kernel 2.6+). Disponibile ormai da 20 anni.

E' una revisione radicale degli algoritmi di routing nello spazio sys, ovvero nel kernel Linux, basata sul concetto geberico di tabella di snistamento. La tradizionale tabella di routing non è che uba delle tante tabelle gestite dal nuovo ambiente.

Iproute2, anche chiamato Netfilter, è gestito dallo spazio usr da tre comandi:

ip

  • Gestione indirizzi e routing
  • Esempi di comandi sostituiti da ip:

Ipcoms

tc

  • traffic control - gestione aspetti avanzati dell’indirizzamento
  • code, limitazione del traffico, multipath, ecc.

iptables

  • filtraggio e trasformazione pacchetti
  • base di un firewall

Documentazione completa e guida all'uso si trova in PDF al link Linux Advanced Routing & Traffic Control HOWTO