Appendix A. Loopback Suppression and Duplicate Address Detection (Soppressione del loopback e rilevamento di indirizzi duplicati)
Determinare se una sollecitazione multicast ricevuta è tornata al mittente o proviene effettivamente da un altro nodo dipende dall'implementazione. Una situazione problematica si verifica quando due interfacce connesse allo stesso link hanno casualmente lo stesso identificatore e lo stesso indirizzo di livello collegamento, e entrambe inviano pacchetti di contenuto identico approssimativamente nello stesso momento (ad esempio, sollecitazioni di vicino inviate a un indirizzo provvisorio come parte di messaggi di rilevamento di indirizzi duplicati). Sebbene il ricevente riceverà due pacchetti, non può determinare quale pacchetto è tornato in loopback e quale proviene da un altro nodo semplicemente confrontando il contenuto dei pacchetti (cioè, il contenuto è identico). In questo caso particolare, non è necessario sapere esattamente quale pacchetto è tornato in loopback e quale è stato inviato da un altro nodo; se vengono ricevute più sollecitazioni di quelle inviate, l'indirizzo provvisorio è duplicato. Tuttavia, la situazione potrebbe non essere sempre così semplice.
La specifica multicast IPv4 [RFC1112] raccomanda che l'interfaccia di servizio fornisca un modo per i protocolli di livello superiore di sopprimere la consegna locale dei pacchetti inviati ai gruppi multicast di cui l'host mittente è membro. Alcune applicazioni sanno che non ci saranno altri membri del gruppo sullo stesso host, e la soppressione del loopback può impedire loro di dover ricevere (e scartare) pacchetti che hanno inviato loro stessi. Un modo semplice per implementare questa funzionalità è disabilitare il loopback a livello hardware (se l'hardware lo supporta) e fare il looping dei pacchetti via software (se richiesto). Su interfacce in cui l'hardware stesso sopprime il loopback, un nodo che esegue il rilevamento di indirizzi duplicati conta semplicemente il numero di sollecitazioni di vicino ricevute per l'indirizzo provvisorio e le confronta con il numero atteso. Se c'è una discrepanza, l'indirizzo provvisorio è duplicato.
Tuttavia, nei casi in cui l'hardware non può sopprimere il loopback, un'euristica software possibile per filtrare i loopback indesiderati è scartare qualsiasi pacchetto ricevuto il cui indirizzo sorgente di livello collegamento è lo stesso di quello dell'interfaccia ricevente. Esiste persino una specifica di livello collegamento che richiede di scartare qualsiasi pacchetto di questo tipo [IEEE802.11]. Sfortunatamente, l'utilizzo di quel criterio comporterebbe anche lo scarto di tutti i pacchetti inviati da un altro nodo che utilizza lo stesso indirizzo di livello collegamento. Il rilevamento di indirizzi duplicati fallirà su interfacce che filtrano i pacchetti ricevuti in questo modo:
-
Se il nodo che esegue il rilevamento di indirizzi duplicati scarta i pacchetti ricevuti aventi un indirizzo sorgente di livello collegamento identico a quello dell'interfaccia ricevente, scarterà anche i pacchetti provenienti da altri nodi che utilizzano anch'essi lo stesso indirizzo di livello collegamento, inclusi i messaggi di annuncio di vicino e sollecitazione di vicino necessari per il corretto funzionamento del rilevamento di indirizzi duplicati. Se la soppressione può essere disabilitata, questo problema particolare può essere evitato disabilitando temporaneamente la soppressione software del loopback mentre il nodo esegue il rilevamento di indirizzi duplicati.
-
Se il nodo che sta già utilizzando un particolare indirizzo IP scarta i pacchetti ricevuti aventi un indirizzo sorgente di livello collegamento identico a quello dell'interfaccia, scarterà anche i messaggi di sollecitazione di vicino relativi al rilevamento di indirizzi duplicati inviati da un altro nodo che utilizza anch'esso lo stesso indirizzo di livello collegamento. Pertanto, il rilevamento di indirizzi duplicati fallirà e l'altro nodo configurerà un indirizzo non univoco. Poiché è generalmente impossibile sapere quando un altro nodo sta eseguendo il rilevamento di indirizzi duplicati, questa situazione può essere evitata solo se la soppressione software del loopback è disabilitata permanentemente.
Pertanto, per eseguire correttamente il rilevamento di indirizzi duplicati nei casi in cui due interfacce utilizzano lo stesso indirizzo di livello collegamento, le implementazioni devono (MUST) avere una buona comprensione della semantica del loopback multicast dell'interfaccia, e l'interfaccia non deve (MUST NOT) scartare i pacchetti ricevuti semplicemente perché l'indirizzo sorgente di livello collegamento è lo stesso di quello dell'interfaccia. Si deve anche notare che le specifiche di livello collegamento possono entrare in conflitto con le condizioni necessarie affinché il rilevamento di indirizzi duplicati funzioni.