L'utente fisicamente mobile presenta una serie di sfide a livello di rete a seconda di come si sposta tra i punti di accesso alla rete.
A un'estremità dello spettro l'utente potrebbe spostare un notebook, con una scheda wireless, all'interno di uno stesso edificio, pur rimanendo connesso alla stessa sotto-rete. Come abbiamo visto questo utente dal punto di vista IP non è mobile. Inoltre se l'utente rimane associato allo stesso AP, non è mobile neppure dal punto di vista del livello di collegamento. All'altro capo dello spettro, abbiamo un utente che sfreccia a 150 km/h su un auto, il cui dispositivo (magari l'auto stessa) passa attraverso una serie di reti, mantenendo le sue connessioni TCP con una certa applicazione remota. Questo utente è considerato mobile. Al centro vi è l'utente che sposta il suo dispositivo, da una sotto rete ad un'altra (per esempio da quella dell'ufficio a quella di un bar), anche tale utente è mobile, tuttavia questo utente non pretende che le sue connessioni TCP rimangano valide mentre si sposta tra i due punti di connessione.
Con un telefono mobile, il numero di telefono di un utente (indirizzo a livello di rete telefonica) rimane invariato quando ci si sposta da una rete telefonica all'altra. L'indirizzo IP di un dispositivo mobile, dovrebbe avere la stessa caratteristica? In tal modo, spostandosi da una cella ad un'altra il dispositivo avrebbe lo stesso IP, rendendo trasparente lo spostamento di tale dispositivo agli occhi dell'app/server con cui comunica.
Ricordiamo che la connessione tra due dispositivi è data da un indirizzo IP e da un numero di porta. Vedremo come IP mobile riesce a realizzare questa trasparenza.
Per illustrare i problemi relativi alla mobilità di IP facciamo un'analogia: immaginiamo un ventenne che si sposta di continuo tra diversi ostelli, cambiando indirizzo di domicilio spesso. Come dovrebbe fare un amico per inviargli dei messaggi? Dovrebbe conoscere ogni volta il suo nuovo indirizzo. Supponiamo che tale ragazzo comunichi il suo nuovo indirizzo, ogni volta ai suoi familiari. A questo punto l'amico potrebbe contattarlo tramite i genitori. Oppure, dopo aver ottenuto dai parenti il nuovo indirizzo, l'amico potrebbe contattarlo direttamente a quell'indirizzo.
Il luogo permanente (l'indirizzo della famiglia) in cui un nodo mobile risiede è detto rete di appartenenza (home network) e le entità che gestiscono la mobilità per conto del nodo mobile all'interno della rete sono detti agenti domestici (home agent).
La rete in cui il nodo mobile viene a trovarsi occasionalmente è detta rete ospitante (foreign network o visited network), mentre l'entità al suo interno che si occupa della mobilità è detto agente ospitante (foreign agent).
Il corrispondente che vediamo in figura è l'entità che desidera comunicare con il nodo mobile.
Nella figura si vede che gli agenti ospitanti sono localizzati presso i router, ma potrebbero trovarsi in altri host della rete.
Vogliamo che il nodo mobile conservi il proprio indirizzo mentre si sposta da una rete ad un'altra. Questo vuol dire che quando un nodo è ospitato in una qualsiasi rete, tutto il traffico diretto all'indirizzo permanente deve essere instradato verso la rete corrente del nodo mobile.
Un possibile soluzione è che la rete ospitante comunichi a tutte le altre che il nodo mobile si trova sotto la sua rete. Questo può essere fatto con lo scambio di informazioni intra e inter dominio e richiederebbe pochi cambiamenti all'infrastruttura già esistente.
Un'altra soluzione è che la rete avverte i propri vicini che possiede dei percorsi specifici per l'indirizzo permanente del nodo mobile. A loro volta i vicini propagano queste informazioni attraverso la rete, come fosse una normale procedura per l'aggiornamento delle informazioni di instradamento e delle tabelle di inoltro. Quando il nodo mobile esce dalla sua rete, tale rete dovrà cancellare questa informazione di instradamento, relativa al nodo mobile uscito, e la rete in cui si aggiunge il nodo mobile invece deve aggiungere tali informazioni e condividerle ai suoi vicini.
Un significativo rovescio della medaglia, riguarda la scalabilità.
Potenzialmente sono milioni i nodi mobili, per cui i router dovrebbero avere tabelle di inoltro molto grosse, e in aggiunta, dovrebbero aggiornarle tempestivamente, quando nuovi nodi entrano/escono nella/dalla rete.
Un approccio alternativo (applicato nella pratica) è di portare le funzionalità di mobilità dal nucleo della rete, alla sua periferia. Un approccio intuitivo sfrutta la rete di appartenenza del nodo mobile: gli agenti nella rete di appartenenza dovrebbero tracciare gli spostamenti del nodo mobile.
In questo senso, risulta necessario un protocollo tra il nodo mobile e la rete di appartenenza. E in particolare tra il nodo mobile e l'agente domestico.
Consideriamo in dettaglio l'agente ospitante.
L'approccio più semplice è porre l'agente ospitante nei router estremi della rete che il nodo mobile visita. Un compito di questo agente è la definizione di un indirizzo di mediazione COA (care-of-address) per il nodo mobile.
Come si vede nella figura, l'indirizzo del nodo mobile a questo punto saranno due: il COA (indirizzo della rete in cui effettivamente si trova il nodo mobile) e l'indirizzo permanente.
Un altro ruolo dell'agente ospitante è quello di comunicare all'agente domestico il fatto che il nodo mobile si trova all'interno della sua rete e che la rete ospitante è a conoscenza del suo COA.
Sebbene abbiamo separato nodo mobile e agente ospitante, potrebbe anche succedere che il nodo mobile ottenga un indirizzo della sotto-rete tramite DHCP e che sia lui stesso, indossando il cappello da agente ospitante, a comunicare il suo COA all'agente domestico.
Abbiamo visto come un nodo ottiene il COA e come viene comunicato all'agente domestico, ma come avviene l'instradamento verso il nodo mobile?
Notiamo che soltanto l'agente domestico conosce il COA corrente del nodo mobile e non il ruoter dell'intera rete. Ci sono due modi: l'instradamento indiretto e diretto.
Consideriamo il caso del corrispondente che voglia inviare il datagramma ad un nodo mobile.
Con l'instradamento indiretto, il corrispondente indirizza il datagramma all'indirizzo permanente del nodo e lo invia nella rete, inconsapevole dell'effettiva posizione del nodo mobile.
Focalizziamoci ora sull'agente domestico che, oltre a monitorare i COA del nodo mobile, ha un'altra funzione molto importante: il controllo dei datagrammi in entrata indirizzati ai nodi che fanno parte della rete di appartenenza, ma che si trovano al momento in una rete esterna. L'agente inoltra questi datagrammi (al nodo mobile) in due passi. Il datagramma è innanzitutto inviato usando il COA del nodo mobile e poi viene inoltrato al nodo mobile stesso.
Concentriamoci su questa fase di re-instradamento. L'agente domestico avrà bisogno di indirizzare il datagramma usando il COA del nodo mobile, in modo che il livello di rete possa instradare il datagramma alla rete esterna. D'altra parte è auspicabile mantenere il datagramma del corrispondente in tatto, poiché il ricevente potrebbe essere ignaro del fatto che esso sia stato spedito attraverso l'agente domestico. Entrambi gli obiettivi sono raggiungibili attraverso l'incapsulamento, da parte dell'agente domestico, dell'intero datagramma originale, in uno nuovo più grande. Quest'ultimo è indirizzato e inviato al COA del nodo mobile. L'agente ospitante, che conosce il COA, riceverà e aprirà il datagramma più grande per recuperare quello incapsulato che sarà inviato al nodo mobile. Il datagramma incapsulato è quello originale, inviato dal corrispondente, come si nota questa procedura è molto simile al tunneling dell'IPv6.
Consideriamo ora il caso del nodo mobile che invia un datagramma al corrispondente.
L'operazione è relativamente semplice, in quanto, il nodo mobile, può indirizzare il datagramma direttamente al destinatario, utilizzando il proprio indirizzo permanente come indirizzo sorgente e l'indirizzo del corrispondente come destinazione. Si noti che in questa circostanza non serve passare per l'agente domestico.
Per vedere come funziona il tutto affinché il nodo mobile possa mantenere attive le sue sessioni TCP. Supponiamo che vi sia un nodo mobile collegato ad una rete ospitante A e che abbia registrato il suo COA (in A) presso il suo agente domestico e che stia ricevendo dati dal suo agente domestico. Ad un certo punto il nodo si sposta in una rete ospitante B, viene comunicato il nuovo COA (in B) all'agente domestico, da questo momento in poi l'agente domestico instraderà datagrammi verso il nuovo COA. Per l'agente domestico, non vi è discontinuità, i datagrammi vengono inviati prima verso A e poi verso B.
No, il nodo mobile sperimenterà delle perdite per un periodo di tempo molto breve, che è il tempo che intercorre quando si passa da una rete ospitante ad un'altra. Tuttavia, come abbiamo visto questo non è un problema, poiché se è necessaria una connessione priva di perdite verranno usati protocolli a livello di trasporto adeguati (TCP).
Lo standard IP mobile utilizza questo metodo di consegna indiretta.
Il tipo di instradamento descritto comporta un'inefficienza nota come problema dell'instradamento triangolare (triangle routing problem), poiché i datagrammi devono passare dall'agente domestico per raggiungere il nodo mobile.
L'instradamento diretto supera questa inefficienza. In questo approccio un agente corrispondente, nella rete del corrispondente, ottiene innanzitutto il COA del nodo mobile. Questo può essere fatto con una richiesta all'agente domestico, assumendo che il nodo mobile disponga di un valore aggiornato del suo COA e che questo sia noto al suo agente domestico. Il corrispondente stesso può svolgere azione di agente corrispondente e chiedere da sé il COA del nodo mobile all'agente domestico. L'agente corrispondente, poi invia tramite un tunnel i datagrammi direttamente al COA del nodo mobile, in modo analogo a come faceva l'agente domestico.
L'instradamento diretto risolve il problema dell'instradamento triangolare, ma al contempo, introduce dei problemi fondamentali: