DOMANDA [Java] Routing di un pacchetto dati in un rete

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Salve sono giunto a chiedere consiglio a chi di programmazione e networking ne conosce più di me; sto programmando un progetto di java per un esame di programmazione, in particoalre sto creando la GUI di un router in linguaggio java.

Al momento mi sono arenato su un aspetto del progetto che riguarda l'aspetto logico del seguente problema:

"Smistare un pacchetto dati da un host ad un'altro host controllato da un altro router"
Mi trovo in difficoltà su questo aspetto poichè non riesco a venire a capo del problema di come il pacchetto dati debba avere delle caratteristiche univoche che lo portino alla sua destinazione e non ad una destinazione sbagliata, questa problematica nasce da una situazione limite che schematizzo nella maniera seguente:

diagramma.jpg

Suppongo che Host1 voglia mandare un pacchetto ad Host3, con la classe pacchetto che ho creato io mi crea un problema evidente:

Java:
package AUXCLASSES;

import P3_GUI_APP.COREMODULES.Tipi_pacchetto;
import P3_GUI_APP.COREMODULES.UTILITIES.CheckerMethodsForIPS;

/**
 * Classe che rappresenta il pacchetto dati
 *
 * @author Luca *****
 */
public class Packet implements CheckerMethodsForIPS {

    //VARIABILI
    /**
     * Ip della prossima destizione per raggiunger l'indirizzo del destinatario,
     * può coincidere con l'IP del destinatario
     */
    private String next_hop;
    /**
     * Variabile che rappresenta l'ip di destinazione
     */
    private final String Dest_IP;
    /**
     * Varibabile che rappresenta la tipologia di pacchetto
     * @see P3_GUI_APP.COREMODULES.Tipi_pacchetto
     */
    private final Tipi_pacchetto Packet_type;

    /**
     * Costruttore dell'oggetto pacchetto parametrizzato e con controlli sugli
     * IP
     *
     * @param next_hopString prossimo salto del pacchetto
     * @param Dest_IP destinazione finale
     * @param Packet_type tipo di dato
     * @see #Dest_IP
     * @see #Packet_type
     * @see #next_hop
     * @see P3_GUI_APP.COREMODULES.UTILITIES.CheckerMethodsForIPS
     */
    public Packet(String next_hopString, String Dest_IP, Tipi_pacchetto Packet_type) {
        checkField(Dest_IP);
        checkNumber(Dest_IP);
        checkField(next_hopString);
        checkNumber(next_hopString);
        this.Dest_IP = Dest_IP;
        this.Packet_type = Packet_type;
        this.next_hop = next_hopString;
    }

    public String getNext_hop() {
        return next_hop;
    }

    public String getDest_IP() {
        return Dest_IP;
    }

    public Tipi_pacchetto getPacket_type() {
        return Packet_type;
    }

    public void setNext_hop(String next_hop) {
        checkField(next_hop);
        checkNumber(next_hop);
        this.next_hop = next_hop;
    }

}

Mettendo come indirizzo di destinazione : 192.168.0.2 l'algoritmo di routing che mi è stato imposto di usare dalle linee guida del progetto(Dijkstra) non manderà correttamente il pacchetto ad Host3 in quanto anche Host2 possiede il medesimo indirizzo, faccio questa affermazione in quanto per come ho pensato di rappresentare la tabella di routing dei vari router presenti nello schema:
Router1
DESTINATION IP GATEWAY METRIC
192.168.0.2 192.168.0.1 un intero
10.0.0.3 10.0.0.1 "
80.9.20.30 10.0.0.1 "
Router2
DESTINATION IP GATEWAY METRIC
192.168.0.2 192.168.0.1 un intero
10.0.0.1 10.0.0.3 "
Router3
DESTINATION IP GATEWAY METRIC
192.168.0.2 192.168.0.1 un intero
10.0.0.1 80.9.20.30 "

Con queste tabelle l'algoritmo nella sua ricerca attraverso i nodi non avrebbe una destinazione univoca e potrebbe indirizzare il pacchetto verso la destinazione sbagliata per il semplice fatto che i due hanno lo stesso indirizzo locale, l'unico fattore discriminante sarebbe la metrica ( il peso degli archi ) a far propendere l'algoritmo per una strada a costo più basso anzichè la destinazione finale in se.

Questo problema nasce dalla mia totale ignoranza su come un host/router possa conoscere a "priori" in maniera univoca a chi mandare il pacchetto nella realtà; ho provato a documentarmi sul funzionamento del sistema TCP/IP , degli indirizzi e delle tabelle di routing su varie fonti come Wikipedia o siti più specializzati ma ho compreso poco o nulla.

Come posso quindi caratterizzare la mia classe pacchetto in maniera tale che una volta generato sia certo che arrivi alla destinazione anche in casi di indirizzi locali uguali su più di una rete? Come viene affrontata nella realtà questa problematica?

Spero di essere stato chiaro nell'esporre il problema, grazie a chi si prenderà la briga anche solo di leggere queste mie 4 righe.
 

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Gli host-N sono su sottoreti locali controllati dai router: tu non invii il pacchetto direttamente all'IP locale 192.168.0.2 ma al router 3 che ha indirizzo univoco
Capisco , ma rimane in sospeso il problema di quale informazione univoca scrivere nel pacchetto dati affinché il router oggetto di destinazione poi sappia a quale dei suoi controllati mandarlo.

A priori come fa a sapere una host dove si trova l'altro host di destinazione, o meglio , dietro quale sottorete locale di un router si trova?

Per come ho strutturato le tabelle di routing io ho solo indirizzi generici locali ed esterni , dovrei aggiungere vicino a questo indirizzi locali anche un identificativo univoco per ogni host.
 

rodhellas

Utente Attivo
1,482
401
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Usa l'indirizzo MAC di ogni host.
 
  • Mi piace
Reactions: BAT00cent e Luc1

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Usa l'indirizzo MAC di ogni host.
Sì non ci avevo pensato, potrei generare un stringa univoca simile al MAC per ogni nodo di rete e collegarle agli indirizzi locali ed esterni nelle tabelle di routing, ed infine aggiungerla come campo della classe pacchetto.

Almeno così l'algoritmo di ricerca saprà di certo che un dato nodo dietro un dato indirizzo è quello corretto.

Grazie.
 

pabloski

Utente Èlite
1,967
404
Hardware Utente
A priori come fa a sapere una host dove si trova l'altro host di destinazione, o meglio , dietro quale sottorete locale di un router si trova?

Per come ho strutturato le tabelle di routing io ho solo indirizzi generici locali ed esterni , dovrei aggiungere vicino a questo indirizzi locali anche un identificativo univoco per ogni host.
La maschera di rete. Le tabelle di routing contengono quest'informazione e gli serve proprio per capire a quale segmento di rete ( router ) inviare un pacchetto destinato ad un certo ip.

Tanto per fare un esempio, se ciò la rete 192.168.1.x con maschera 255.255.255.0, il router sarà 192.168.1.1 e gli host avranno tutti indirizzi del tipo 192.168.1.yyy

Altro metodo, usando dai border router in genere, è quello del flooding. Cioè inviare i pacchetti a tutti i router collegati. Ovviamente ci sono varianti di questo algoritmo, che implementano meccanismi di invio selettivo solo a determinati router.

Quanto ho scritto, ovviamente si riferisce a come funzionano le reti che seguono gli standard del modello ISO/OSI. Chiaro che puoi inventarti altri metodi se l'esercizio te ne dà la libertà.
 
  • Mi piace
Reactions: BAT00cent e Luc1

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Okay il discorso della maschera di rete mi è chiaro, quindi è un informazione che devo assolutamente aggiungere alle tabelle, la verità è che l'avevo omesse perché non riuscivo a capire come funzionano , approfondirò di nuovo l'argomento e cercherò di implementarle ed unirle assieme agli indirizzi Mac unici per i nodi.

Il progetto in se mi chiede semplicemente di creare le tabelle di routing di ogni nodo utilizzando l'algoritmo dei cammini minimi, quindi in pratica "visita" tutta la rete ed aggiorna le metriche di tabella cosicché si abbia sempre il cammino più economico in termini di peso ad ogni salto , ovviamente dipendente dalla destinazione(che non riuscivo a rendere univoca).

Il che sembra molto simile , quasi aderente, al tuo esempio sul flooding.

Grazie.
 

fabio93

Utente Attivo
438
125
Hardware Utente
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
Hard Disk
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
Alimentatore
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
Sistema Operativo
Windows 10 Pro, Fedora 31
Se più host in una rete hanno lo stesso indirizzo IP, da quello che so io (e non sono un esperto quindi scusatemi se dico una cavolata) significa che si sta utilizzando il NAT: gli host hanno indirizzi IP privati, e l'unico indirizzo IP visibile in internet è quello del router (che deve essere necessariamente univoco).
Il NAT funziona così: quando un host A invia un datagramma al router, questo sostituisce l'indirizzo IP sorgente (quello dell'host) con il proprio IP pubblico, e il numero di porta sorgente con un numero di porta arbitrario (fittizio) attualmente libero. Questa associazione viene registrata con una entry nella NAT table. L'host destinatario, ad es. B, riceverà quindi un datagramma avente come IP sorgente quello del router e come numero di porta sorgente quello scelto dal router. Pertanto, quando al router giungerà un datagramma mandato da B e diretto ad A (datagramma che quindi avrà come IP di destinazione quello del router, e come numero di porta di destinazione quello arbitrariamente scelto dal router), il router consulterà la tabella per sostituire IP e numero di porta con quelli veri dell'host A. Il MAC address non è coinvolto nel processo.
 
  • Mi piace
Reactions: Luc1

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Se più host in una rete hanno lo stesso indirizzo IP, da quello che so io (e non sono un esperto quindi scusatemi se dico una cavolata) significa che si sta utilizzando il NAT: gli host hanno indirizzi IP privati, e l'unico indirizzo IP visibile in internet è quello del router (che deve essere necessariamente univoco).
Il NAT funziona così: quando un host A invia un datagramma al router, questo sostituisce l'indirizzo IP sorgente (quello dell'host) con il proprio IP pubblico, e il numero di porta sorgente con un numero di porta arbitrario (fittizio) attualmente libero. Questa associazione viene registrata con una entry nella NAT table. L'host destinatario, ad es. B, riceverà quindi un datagramma avente come IP sorgente quello del router e come numero di porta sorgente quello scelto dal router. Pertanto, quando al router giungerà un datagramma mandato da B e diretto ad A (datagramma che quindi avrà come IP di destinazione quello del router, e come numero di porta di destinazione quello arbitrariamente scelto dal router), il router consulterà la tabella per sostituire IP e numero di porta con quelli veri dell'host A. Il MAC address non è coinvolto nel processo.
Il discorso è chiaro, e ne terrò conto quando scriverò i metodi per cambiare gli ip del mittente nel pacchetto.

A questo discorso la domanda/e che mi sorge spontanea , e che è alla base del mio topic iniziale , è la seguente:

Come fá il router che gestisce l'host A per trovare il router che gestisce l'host B? Cosa succede se i router immediatamente vicini non conoscono dove si trova questo router? Come può un router essere certo che un dato host X destinatario si trovi dietro un router Y che di trova annidato a molte sottoreti di distanza?
 

fabio93

Utente Attivo
438
125
Hardware Utente
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
Hard Disk
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
Alimentatore
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
Sistema Operativo
Windows 10 Pro, Fedora 31
Il calcolo del percorso è compito dell'algoritmo di routing. Fondamentalmente si distinguono algoritmi globali e decentralizzati.
Un algoritmo globale prevede che ciascun router abbia la conoscenza completa di tutti i nodi. Un tale algoritmo è detto anche Link State perché ciascun router deve tenere traccia dello stato dei collegamenti della rete. Un algoritmo di questo tipo (quello di Dijkstra) è implementato dal protodollo OSPF (Open Shortest Path First), che viene usato dai (pochi) router degli ISP di primo livello, ossia i provider al vertice della gerarchia della rete.
Un algoritmo decentralizzato, invece, lavora in maniera distribuita, in cui nessun nodo possiede informazioni complete sulla rete, ma riceve informazioni dai nodi adiacenti, le usa per aggiornare i costi, e ritrasmette loro a sua volta nuove informazioni. Un algoritmo di questo tipo (Bellman-Ford) è implementato, ad esempio, dal protocollo RIP (Routing Information Protocol).
 
  • Mi piace
Reactions: Luc1

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Il calcolo del percorso è compito dell'algoritmo di routing. Fondamentalmente si distinguono algoritmi globali e decentralizzati.
Un algoritmo globale prevede che ciascun router abbia la conoscenza completa di tutti i nodi. Un tale algoritmo è detto anche Link State perché ciascun router deve tenere traccia dello stato dei collegamenti della rete. Un algoritmo di questo tipo (quello di Dijkstra) è implementato dal protodollo OSPF (Open Shortest Path First), che viene usato dai (pochi) router degli ISP di primo livello, ossia i provider al vertice della gerarchia della rete.
Un algoritmo decentralizzato, invece, lavora in maniera distribuita, in cui nessun nodo possiede informazioni complete sulla rete, ma riceve informazioni dai nodi adiacenti, le usa per aggiornare i costi, e ritrasmette loro a sua volta nuove informazioni. Un algoritmo di questo tipo (Bellman-Ford) è implementato, ad esempio, dal protocollo RIP (Routing Information Protocol).
Grazie per la spiegazione, ora mi è più chiara la situazione su cui sto lavorando, cercherò di approfondire ed applicare in maniera corretta l'algoritmo di Dijkstra
 
  • Mi piace
Reactions: fabio93

pabloski

Utente Èlite
1,967
404
Hardware Utente
Come fá il router che gestisce l'host A per trovare il router che gestisce l'host B?
Dipende dalla posizione che il router occupa all'interno dell'infrastruttura di rete. Innanzitutto separerei router da switch/hub, perchè i primi operano al livello internet, i secondi al livello datalink. Cioè, i primi ragionano in termini di indirizzi ip, i secondi in termini di identificativi MAC.

Solo che i primi possono connettere più reti tra di loro, i secondi possono operare solo su una rete locale.

Per cui, se devi effettuare il routing tra due host connessi allo stesso switch, logicamente andrai ad usare il MAC. Non ha senso aggiungere altre informazioni. Fermo restando che se stai inviando pacchetti TCP/IP, ovviamente conterranno tutte quelle informazioni tipo IP, porta, ecc... Ma serviranno solo a dare allo switch la certezza che la comunicazione sta avvenendo tra due host del suo segmento di rete ( tramite le maschere di rete si capisce questa cosa ).

Poi ci sono i protocolli di routing tra router IGP, cioè router interni ad una rete di livello internet ( cioè gli host sono su segmenti di rete diversi, ognuno con una sua maschera ). Si tratta di router che fanno parte dello stesso autonomous system.

E infine ci sono i router BGP, che connettono segmenti di rete, ognuno che fa capo ad un diverso autonomous system.

La differenza sostanziale è il tipo e la quantità di informazioni disponibili. Tra queste informazioni ci sono pure delle metriche che indicano quanto distante ogni router si trova da certe reti ( espresse con i loro indirizzi di rete, tipo 192.168.1.xx per esempio ).

Riguardo 192.168.xx.yy e gli equivalenti di classe A e B, sono range di ip pensati per implementare reti interne. Cioè esistono millemila host su internet che hanno lo stesso IP 192.168.1.5. Solo che questi host non sono direttamente accessibili da internet. Infatti, se vai su un sito tipo iplocation.net, noterai che l'ip visualizzato non è quello del tuo pc, ma quello del router adsl/fibra. Cioè solo il router è un host internet a tutti gli effetti e ha un IP nei range pubblici definiti. E non esiste che due host possano avere lo stesso IP pubblico. Altrimenti si genera una collisione e i router più vicini la segnaleranno agli host interessati e ad altri router.


Come può un router essere certo che un dato host X destinatario si trovi dietro un router Y che di trova annidato a molte sottoreti di distanza?
Questo dipende, come scrivevo sopra, dal tipo di protocolli che il router implementa ( a seconda della sua posizione gerarchica e altre considerazioni che fanno i progettisti delle relative reti ). In generale i protocolli appartengono alle categorie indicate qui https://en.wikipedia.org/wiki/Routing nella sezione "Topology distribution".

I router IGP e BGP, costruiscono gigantesche tabelle di routing e ci ficcano dentro tutte le informazioni utili che hanno scovato mentre routavano i pacchetti. In questo modo riescono a sapere se un pacchetto diretto verso una certa rete, arriva più velocemente se inviato al router X invece di quello Y. Ovviamente potrebbe essere il risultato di una congestione momentanea di Y o un qualcosa di strutturale e permanente.

E per questo i router aggiornano le tabelle continuamente. Questo riguarda il routing dinamico. Il routing statico è implementato a mano.

Il flooding è una delle tecniche usate. Non l'unica e nemmeno la più efficiente, ma utile appena un router si avvia e di fatto ha tabelle di routing vuote.

Se in passato il routing era basato sulle informazioni che i sysadmin avevano riguardo le connessioni fisiche tra i vari router, oggi le metriche sono più sofisticate. Per esempio, in passato si poteva considerare la distanza tra le reti ( calcolando la distanza tra gli indirizzi delle reti ). Si capisce subito che non è detto che 210.5.10 e 210.5.11 siano due reti vicine fisicamente. Spesso lo sono, perchè gli IP vengono assegnati alle nazioni ( e da qui alle varie organizzazioni ) in blocchi contigui. Cioè le due reti di sopra sono entrambi in Cina!! E i router in America lo sanno, per cui tra tutti router a cui sono connessi, cercheranno di inviare i pacchetti diretti in Cina, a quei router che sono più vicini alla Cina ( perchè hanno un certo IP, perchè in passato hanno dimostrato di riuscire a spedire i pacchetti in Cina molto velocemente, ecc... ).

Cioè se un router sta in Groenlandia ma riesce a mandare il traffico da/verso la Cina più velocemente di uno che sta in Corea, allora il tuo router ( connesso ad entrambi ) potrebbe scegliere come preferenziale quello in Groenlandia. E si, è geograficamente più distante dell'altro, ma dal punto di vista del tempo di trasmissione è più vicino.

Per quanto riguarda tutti i protocolli usati, trovi una lista qui https://en.wikipedia.org/wiki/Routing_protocol

Ovviamente questi protocolli determinano il modo più efficiente per far camminare i pacchetti. Non si occupano del come identificare gli host. Ma quest'ultima funzionalità è implementata tramite IP ( per il livello internet ) e MAC ( per il livello datalink ). Esiste qualche altro metodo, ma parliamo di nicchie.
 
  • Mi piace
Reactions: fabio93 e Luc1

Luc1

Nuovo Utente
99
15
Hardware Utente
CPU
Ryzen 5 2600
Dissipatore
Stock
Scheda Madre
Asrock B450m pro4
Hard Disk
Samsung 970 EVO, Samsung 850 EVO, WD BLUE
RAM
Corsair vengeance kit 16 GB cl15 3000
Scheda Video
Msi GeForce 1660 TI ventus
Monitor
AOC 24G2
Alimentatore
Cooler master masterwatt 550
Case
Corsair cabride 275R
Periferiche
Corsair harpoon RGB, Corsair K55 RGB
Internet
TIM Fttc 100/20 Mbit
Sistema Operativo
Windows 10 home
Dipende dalla posizione che il router occupa all'interno dell'infrastruttura di rete. Innanzitutto separerei router da switch/hub, perchè i primi operano al livello internet, i secondi al livello datalink. Cioè, i primi ragionano in termini di indirizzi ip, i secondi in termini di identificativi MAC.

Solo che i primi possono connettere più reti tra di loro, i secondi possono operare solo su una rete locale.

Per cui, se devi effettuare il routing tra due host connessi allo stesso switch, logicamente andrai ad usare il MAC. Non ha senso aggiungere altre informazioni. Fermo restando che se stai inviando pacchetti TCP/IP, ovviamente conterranno tutte quelle informazioni tipo IP, porta, ecc... Ma serviranno solo a dare allo switch la certezza che la comunicazione sta avvenendo tra due host del suo segmento di rete ( tramite le maschere di rete si capisce questa cosa ).

Poi ci sono i protocolli di routing tra router IGP, cioè router interni ad una rete di livello internet ( cioè gli host sono su segmenti di rete diversi, ognuno con una sua maschera ). Si tratta di router che fanno parte dello stesso autonomous system.

E infine ci sono i router BGP, che connettono segmenti di rete, ognuno che fa capo ad un diverso autonomous system.

La differenza sostanziale è il tipo e la quantità di informazioni disponibili. Tra queste informazioni ci sono pure delle metriche che indicano quanto distante ogni router si trova da certe reti ( espresse con i loro indirizzi di rete, tipo 192.168.1.xx per esempio ).

Riguardo 192.168.xx.yy e gli equivalenti di classe A e B, sono range di ip pensati per implementare reti interne. Cioè esistono millemila host su internet che hanno lo stesso IP 192.168.1.5. Solo che questi host non sono direttamente accessibili da internet. Infatti, se vai su un sito tipo iplocation.net, noterai che l'ip visualizzato non è quello del tuo pc, ma quello del router adsl/fibra. Cioè solo il router è un host internet a tutti gli effetti e ha un IP nei range pubblici definiti. E non esiste che due host possano avere lo stesso IP pubblico. Altrimenti si genera una collisione e i router più vicini la segnaleranno agli host interessati e ad altri router.




Questo dipende, come scrivevo sopra, dal tipo di protocolli che il router implementa ( a seconda della sua posizione gerarchica e altre considerazioni che fanno i progettisti delle relative reti ). In generale i protocolli appartengono alle categorie indicate qui https://en.wikipedia.org/wiki/Routing nella sezione "Topology distribution".

I router IGP e BGP, costruiscono gigantesche tabelle di routing e ci ficcano dentro tutte le informazioni utili che hanno scovato mentre routavano i pacchetti. In questo modo riescono a sapere se un pacchetto diretto verso una certa rete, arriva più velocemente se inviato al router X invece di quello Y. Ovviamente potrebbe essere il risultato di una congestione momentanea di Y o un qualcosa di strutturale e permanente.

E per questo i router aggiornano le tabelle continuamente. Questo riguarda il routing dinamico. Il routing statico è implementato a mano.

Il flooding è una delle tecniche usate. Non l'unica e nemmeno la più efficiente, ma utile appena un router si avvia e di fatto ha tabelle di routing vuote.

Se in passato il routing era basato sulle informazioni che i sysadmin avevano riguardo le connessioni fisiche tra i vari router, oggi le metriche sono più sofisticate. Per esempio, in passato si poteva considerare la distanza tra le reti ( calcolando la distanza tra gli indirizzi delle reti ). Si capisce subito che non è detto che 210.5.10 e 210.5.11 siano due reti vicine fisicamente. Spesso lo sono, perchè gli IP vengono assegnati alle nazioni ( e da qui alle varie organizzazioni ) in blocchi contigui. Cioè le due reti di sopra sono entrambi in Cina!! E i router in America lo sanno, per cui tra tutti router a cui sono connessi, cercheranno di inviare i pacchetti diretti in Cina, a quei router che sono più vicini alla Cina ( perchè hanno un certo IP, perchè in passato hanno dimostrato di riuscire a spedire i pacchetti in Cina molto velocemente, ecc... ).

Cioè se un router sta in Groenlandia ma riesce a mandare il traffico da/verso la Cina più velocemente di uno che sta in Corea, allora il tuo router ( connesso ad entrambi ) potrebbe scegliere come preferenziale quello in Groenlandia. E si, è geograficamente più distante dell'altro, ma dal punto di vista del tempo di trasmissione è più vicino.

Per quanto riguarda tutti i protocolli usati, trovi una lista qui https://en.wikipedia.org/wiki/Routing_protocol

Ovviamente questi protocolli determinano il modo più efficiente per far camminare i pacchetti. Non si occupano del come identificare gli host. Ma quest'ultima funzionalità è implementata tramite IP ( per il livello internet ) e MAC ( per il livello datalink ). Esiste qualche altro metodo, ma parliamo di nicchie.

Estremamente esauriente e chiaro, grazie per la spiegazione sul funzionamento delle infrastrutture di rete mi sarà sicuramente di aiuto per creare in maniera coretta la rete di "demo" del progetto.
 
Iniziato da Discussione simile Forum Risposte Data
demda Programmazione 3
prd.m0nzzs Applicazioni 5
liven25 Programmazione 6
Cotrox Game Development 1
L Programmazione 14

Entra

oppure Accedi utilizzando