In questo documento viene illustrato il funzionamento del comando traceroute in un ambiente Multiprotocol Label Switching (MPLS).
Cisco raccomanda la conoscenza dei seguenti argomenti:
Conoscenze base di MPLS
Per ulteriori informazioni, fare riferimento alle domande frequenti su MPLS per principianti.
Il documento può essere consultato per tutte le versioni software o hardware.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
In questa sezione viene descritto il funzionamento di un comando traceroute tradizionale. Il diagramma mostra una configurazione del provider di servizi in cui i router 1 (R1) e 4 (R4) sono router Edge (PE) del provider e i router 2 (R2) e 3 (R3) sono router Provider (P).
In questo esempio viene eseguito un traceroute per il loopback R4 14 da R1. R1 utilizza un datagramma UDP (User Datagram Protocol) con un valore di porta di destinazione arbitrario maggiore di 32000. Se si seleziona questo valore per il numero di porta, la porta non esisterà sul destinatario previsto. Il datagramma viene inserito in un pacchetto IP.
Nota: in questo documento, quando si parla di un pacchetto IP, si tratta di un pacchetto IP che contiene il datagramma UDP.
Questa è una sequenza di eventi per un normale comando traceroute:
R1 invia il pacchetto IP con un indirizzo di destinazione di 14 e un valore TTL (Time to Live) di 1 tramite l'interfaccia eth1.
R2 riceve il pacchetto e nota che non è il destinatario previsto e il valore TTL del pacchetto è 1. Elimina il pacchetto e invia un messaggio ICMP (Internet Control Message Protocol) scaduto da TTL a R1. L'indirizzo di origine del messaggio ICMP è l'indirizzo IP di R2 eth0 (l'indirizzo dell'interfaccia che ha ricevuto il pacchetto originale).
Al ricevimento del messaggio ICMP, R1 invia un altro pacchetto IP destinato al 14 con un TTL di 2 tramite l'interfaccia eth1.
R2 riceve il pacchetto e nota che non è il destinatario previsto e che il destinatario previsto può essere raggiunto tramite R3. Diminuisce il valore TTL (da 2 a 1) e inoltra il pacchetto a R3. R3 riceve il pacchetto e verifica che non è il destinatario previsto. Il valore TTL è 1. Elimina il pacchetto e invia un messaggio ICMP TTL scaduto a R1 con il suo indirizzo eth0 come indirizzo di origine.
R1 riceve il messaggio ICMP e invia un altro pacchetto IP a 14 tramite l'interfaccia eth1 con un valore TTL di 3. Durante il viaggio, R2 e R3 diminuiscono il valore TTL e lo passano a R4. R4 riceve il pacchetto, verifica che sia il destinatario corretto e cerca di connettersi al valore della porta nel datagramma UDP. R4 rileva che questa porta non esiste e invia un messaggio di errore porta ICMP non raggiungibile a R1.
Come in precedenza, l'indirizzo di origine del messaggio ICMP è eth0 di R4. Il programma traceroute ora ha tutti i messaggi di errore ICMP con gli indirizzi di origine corrispondenti e il percorso completo verso la destinazione.
Considerare lo stesso scenario descritto nella sezione Comando traceroute normale, con la differenza che tutti i router, da R1 a R4, ora eseguono la commutazione di etichetta anziché l'inoltro IP. La configurazione del banco di prova è illustrata in questo diagramma. Tutte le interfacce mostrate nel banco di prova si trovano nella rete 10.13.0.0.
Ai fini del presente documento, si presume che:
R1 utilizza un'etichetta di 47 per raggiungere R4 e inoltrare i pacchetti a R2.
R2 utilizza un'etichetta di 45 per raggiungere R4 e inoltrare i pacchetti a R3.
R3 apre l'etichetta e inoltra il pacchetto a R4.
R4 utilizza un'etichetta di 28 per raggiungere R1 e inoltrare i pacchetti a R3.
R3 utilizza un'etichetta di 26 per raggiungere R1 e inoltrare i pacchetti a R2.
R2 apre l'etichetta e inoltra il pacchetto a R1.
In questa procedura viene mostrata la sequenza di eventi con cui eseguire un traceroute da R1 a R4 loopback 10.13.1.51.
R1 invia un pacchetto a commutazione di etichetta con un'etichetta di 47 e un valore TTL da 1 a R2. Il campo TTL del pacchetto IP viene copiato sul campo TTL dell'intestazione dell'etichetta.
R2 riconosce di non essere il destinatario designato, il valore TTL è 1. Elimina il pacchetto e crea un messaggio ICMP "TTL-scaduto", come farebbe per un normale pacchetto IP. In questo caso, il pacchetto di messaggi ICMP viene generato per estensione ICMP per MPLS.
R2 aggiunge l'etichetta 47 (l'etichetta in ingresso scaduta) al messaggio ICMP. Non invia il pacchetto direttamente alla R1. Al contrario, consulta il suo Label Forwarding Information Base (LFIB) e scopre che deve usare un'etichetta di 45 per i pacchetti ricevuti con un'etichetta di 47. Inserisce un'etichetta di 45 sul pacchetto e invia il messaggio ICMP TTL-scaduto a R3.
R3 apre l'etichetta e la invia a R4. R4 rileva che la destinazione è R1, assegna un'etichetta di 28 al messaggio e la invia tramite R3 e R2 a R1.
Il messaggio di errore ICMP arriva fino all'altra estremità prima di essere inviato nuovamente a R1. Nell'esempio seguente viene illustrato:
I pacchetti sniffati sull'interfaccia Ethernet in R4 confermano i passaggi 1-5. Nell'output dello sniffer, il frame 1 è il pacchetto in entrata e il frame 2 è il pacchetto in uscita da R4. L'output è formattato in modo da riflettere questa discussione e i punti da notare sono in grassetto.
Frame 1 (182 on wire, 182 captured) Ethernet II Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Time to live: 254 Protocol: ICMP (0x01) Header checksum: 0x1b8e (correct) Source: 10.13.2.33 (10.13.2.33) Destination: 10.13.2.34 (10.13.2.34) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) Checksum: 0x0c88 (correct) Data (140 bytes) 04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..." 100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7.... 200000 0000 0000 0000 0000 0000 0000 0000................ 300000 0000 0000 0000 0000 0000 0000 0000................ 400000 0000 0000 0000 0000 0000 0000 0000................ 500000 0000 0000 0000 0000 0000 0000 0000................ 600000 0000 0000 0000 0000 0000 0000 0000................ 700000 0000 0000 0000 0000 0000 0000 0000................ 802000 edf2 0008 0101 0002 f101........... Frame 2 (186 on wire, 186 captured) Ethernet II Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Type: MPLS label switched packet (0x8847) MultiProtocol Label Switching Header MPLS Label: Unknown (28) MPLS Experimental Bits: 6 MPLS Bottom Of Label Stack: 1 MPLS TTL: 253 Internet Protocol Version: 4 Header length: 20 bytes Time to live: 253 Protocol: ICMP (0x01) Header checksum: 0x1c8e (correct) Source: 10.13.2.33 (10.13.2.33) Destination: 10.13.2.34 (10.13.2.34) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) Checksum: 0x0c88 (correct) Data (140 bytes) 04500 001c 9e19 0000 0111 044a 0a0d 0222E..........J..." 100a0d 0133 989d 829a 0008 cd37 0000 0000...3.......7.... 200000 0000 0000 0000 0000 0000 0000 0000................ 300000 0000 0000 0000 0000 0000 0000 0000................ 400000 0000 0000 0000 0000 0000 0000 0000................ 500000 0000 0000 0000 0000 0000 0000 0000................ 600000 0000 0000 0000 0000 0000 0000 0000................ 700000 0000 0000 0000 0000 0000 0000 0000................ 802000 edf2 0008 0101 0002 f101...........
Nel frame 1 dell'output, il primo pacchetto ricevuto da R4 è il messaggio ICMP "TTL-scaduto" da R2 (10.13.2.33, l'interfaccia su cui il pacchetto originale è stato ricevuto) a R1 (10.13.2.34). Nella parte dati del messaggio ICMP, ai byte 0x89 e al primo nibble di 0x8A, l'etichetta MPLS (20 byte) è scaduta e il suo valore è 0x02F, o 47. Questa è l'etichetta in arrivo del pacchetto con un valore TTL di 1. R2 aggiunge questa etichetta nel messaggio di errore ICMP.
Nel frame 2 dell'output, il tipo viene mostrato come pacchetto MPLS label switched, ossia è un pacchetto MPLS. R4 inserisce un'etichetta di 28 nel fotogramma 1 e la inoltra a R1 tramite il percorso di commutazione dell'etichetta. L'intestazione MPLS nel frame è in grassetto. Inoltre, se si fa riferimento alla parte TTL del pacchetto, nel frame 1 il valore è 254 e nel frame 2 è 253. R4 lo ha diminuito di 1.
R1 riceve il messaggio ICMP e invia un altro pacchetto con un'etichetta di 47 e un valore TTL di 2 a R2. R2 scambia etichette, diminuisce il valore TTL (da 2 a 1) e lo inoltra a R3. Come al passo 2, R3 invia un messaggio ICMP TTL-scaduto con l'etichetta in arrivo scaduta a R4, quindi R4 lo invia a R1.
L'output dello sniffer in R4, mostrato di seguito, conferma il Passaggio 6:
Frame 3 (182 on wire, 182 captured) Ethernet II Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Type: IP (0x0800) Internet Protocol Version: 4 Header length: 20 bytes Time to live: 255 Protocol: ICMP (0x01) Header checksum: 0x146f (correct) Source: 10.13.3.134 (10.13.3.134) Destination: 10.13.2.34 (10.13.2.34) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) Checksum: 0x0c88 (correct) Data (140 bytes) 04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..." 100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A.... 200000 0000 0000 0000 0000 0000 0000 0000................ 300000 0000 0000 0000 0000 0000 0000 0000................ 400000 0000 0000 0000 0000 0000 0000 0000................ 500000 0000 0000 0000 0000 0000 0000 0000................ 600000 0000 0000 0000 0000 0000 0000 0000................ 700000 0000 0000 0000 0000 0000 0000 0000................ 802000 0df3 0008 0101 0002 d101........... Frame 4 (186 on wire, 186 captured) Ethernet II Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Type: MPLS label switched packet (0x8847) MultiProtocol Label Switching Header MPLS Label: Unknown (28) MPLS Experimental Bits: 6 MPLS Bottom Of Label Stack: 1 MPLS TTL: 254 Internet Protocol Version: 4 Header length: 20 bytes Time to live: 254 Protocol: ICMP (0x01) Header checksum: 0x156f (correct) Source: 10.13.3.134 (10.13.3.134) Destination: 10.13.2.34 (10.13.2.34) Internet Control Message Protocol Type: 11 (Time-to-live exceeded) Code: 0 (TTL equals 0 during transit) Checksum: 0x0c88 (correct) Data (140 bytes) 04500 001c 9e1b 0000 0211 0348 0a0d 0222E..........H..." 100a0d 0133 9292 829b 0008 d341 0000 0000...3.......A.... 200000 0000 0000 0000 0000 0000 0000 0000................ 300000 0000 0000 0000 0000 0000 0000 0000................ 400000 0000 0000 0000 0000 0000 0000 0000................ 500000 0000 0000 0000 0000 0000 0000 0000................ 600000 0000 0000 0000 0000 0000 0000 0000................ 700000 0000 0000 0000 0000 0000 0000 0000................ 802000 0df3 0008 0101 0002 d101...........
Dall'output del frame 3, è possibile determinare che il frame 3 è il pacchetto ICMP da R3 a R1. L'indirizzo di origine (10.13.3.134) è l'indirizzo su cui viene ricevuto il pacchetto originale. Il messaggio di errore ICMP contiene le informazioni sull'etichetta scaduta alla fine della parte dati. Il valore è 0x02d, pari a 45. Il frame 4 è il pacchetto MPLS inviato da R4 a R1.
Al ricevimento del messaggio ICMP, R1 invia un altro pacchetto con un'etichetta di 47 e un valore TTL di 3. Lungo la strada, R2 e R3 diminuiscono il valore TTL e inoltrano il pacchetto a R4. R4 rileva di essere il destinatario designato e trova la porta del datagramma UDP irraggiungibile. Invia un messaggio ICMP port unreachable a R1 tramite R3 e R2.
In questo output dello sniffer, i punti importanti da notare sono in grassetto:
Frame 5 (60 on wire, 60 captured) Ethernet II Destination: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Source: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Type: IP (0x0800) Trailer: 00000000000000000000000000000000... Internet Protocol Version: 4 Header length: 20 bytes Time to live: 1 Protocol: UDP (0x11) Header checksum: 0x0446 (correct) Source: 10.13.2.34 (10.13.2.34) Destination: 10.13.1.51 (10.13.1.51) User Datagram Protocol Source port: 37647 (37647) Destination port: 33436 (33436) Length: 8 Checksum: 0xd2c3 (correct) Frame 6 (74 on wire, 74 captured) Ethernet II Destination: 00:03:fd:1c:86:84 (Cisco_1c:86:84) Source: 00:04:4e:7a:74:00 (Cisco_7a:74:00) Type: MPLS label switched packet (0x8847) MultiProtocol Label Switching Header MPLS Label: Unknown (28) MPLS Experimental Bits: 6 MPLS Bottom Of Label Stack: 1 MPLS TTL: 255 Internet Protocol Version: 4 Header length: 20 bytes Time to live: 255 Protocol: ICMP (0x01) Header checksum: 0x5694 (correct) Source: 10.13.5.10 (10.13.5.10) Destination: 10.13.2.34 (10.13.2.34) Internet Control Message Protocol Type: 3 (Destination unreachable) Code: 3 (Port unreachable) Checksum: 0x1485 (correct) Data (28 bytes) 04500 001c 9e1d 0000 0111 0446 0a0d 0222E..........F..." 100a0d 0133 930f 829c 0008 d2c3...3........
Il frame 5 mostra che il datagramma UDP viene inviato da R1 a R4. Il valore della porta di destinazione nel datagramma UDP è 33436 (maggiore di 32000), come indicato nella sezione Comando traceroute normale.
Nel fotogramma 6 R4 invia un tipo ICMP destinazione irraggiungibile e un codice porta irraggiungibile a R1. Per tutti i messaggi ICMP precedenti di R2 e R3, il campo tipo era impostato su tempo reale scaduto. Di seguito è riportato l'output del comando traceroute esteso:
R1#traceroute Protocol [ip]: Target IP address: 10.13.1.51 Source address: 10.13.2.34 Numeric display [n]: Timeout in seconds [3]: Probe count [3]: 1 Minimum Time to Live [1]: Maximum Time to Live [30]: Port Number [33434]: Loose, Strict, Record, Timestamp, Verbose[none]: Type escape sequence to abort. Tracing the route to 10.13.1.51 1 10.13.2.33 [MPLS: Label 47 Exp 0] 0 msec 2 10.13.3.134 [MPLS: Label 45 Exp 0] 0 msec 3 10.13.5.10 4 msec R1#
Per impostazione predefinita, il comando traceroute utilizza tre sonde per ciascun valore TTL. Invia tre pacchetti con un TTL di 1, tre pacchetti con un TTL di 2 e così via. Questo comando traceroute è stato emesso con una singola sonda, che semplifica le operazioni di traccia e debug. Come mostrato nell'output, il comando traceroute restituisce anche il valore dell'etichetta scaduto.
Quando si configura MPLS, un'etichetta viene imposta dal router (LSR) dello switch di etichette quando un pacchetto IP viene inoltrato al dominio MPLS. L'etichetta deve contenere un valore nel campo TTL. Per impostazione predefinita, l'LSR legge il campo TTL nell'intestazione IP del pacchetto in arrivo, lo riduce di 1 e copia il resto nel campo TTL dell'intestazione MPLS. I moduli LSR di base hanno solo l'etichetta superiore. Se il valore TTL non raggiunge 0, il pacchetto viene inoltrato. Il LSR del bordo in uscita che apre l'etichetta copia ciò che rimane nel campo TTL dell'etichetta nel campo TTL dell'intestazione IP e quindi inoltra il pacchetto IP all'esterno del dominio MPLS.
Per modificare questo comportamento, usare il comando di configurazione no mpls ip propagate-ttl. L'LSR del bordo in entrata utilizza il valore di 255 come valore TTL nell'etichetta quando lo impone. L'LSR del bordo in uscita non copia il valore TTL dell'etichetta nell'intestazione IP quando viene aperto l'etichetta. Di conseguenza, il valore TTL dell'intestazione IP non riflette gli hop rilevati nel core MPLS; quindi, quando i clienti eseguono un traceroute da un lato della rete all'altro, i router della rete principale MPLS non vengono visualizzati nelle informazioni del traceroute. È importante disabilitare la propagazione TTL nei LSR in entrata e in uscita. In caso contrario, l'intestazione IP potrebbe avere un valore maggiore quando esce dal dominio MPLS rispetto a quando è entrata.
Di seguito è riportato un esempio:
C1 esegue un traceroute su C2. Con l'operazione di propagazione TTL IP predefinita, il traceroute in C1 ha questo aspetto:
C1#traceroute C2.cust.com Tracing the route to C2.cust.com 1 A.provider.net 44 msec 36 msec 32 msec 2 B provider.net 164 msec 132 msec 128 msec 3 C.provider.net 148 msec 156 msec 152 msec 4 C2.cust.com 180 msec * 181 msec
Questo output mostra il comportamento tipico di traceroute in una rete MPLS. Poiché l'intestazione dell'etichetta di un pacchetto etichettato porta il valore TTL del pacchetto IP originale, i percorsi nel percorso rilasciano i pacchetti per i quali il valore TTL viene superato. Pertanto, traceroute mostra tutti i router del percorso. Il comportamento è il seguente:
Il primo pacchetto è un pacchetto IP il cui valore TTL è 1. Il router A diminuisce il valore TTL e scarta il pacchetto perché raggiunge il valore 0. Viene inviato un messaggio ICMP "TTL-exceeded" (TTL-superato) all'origine.
Il secondo pacchetto inviato è un pacchetto IP il cui valore TTL è 2. Il router A riduce il valore TTL, etichetta il pacchetto e inoltra il pacchetto al router B.
Il router B diminuisce il valore TTL nell'intestazione MPLS, scarta il pacchetto e invia un messaggio ICMP "TTL-exceeded" (TTL superato) all'origine. Poiché si tratta di un pacchetto MPLS che è stato scartato, l'indirizzo restituito per il messaggio ICMP deve essere derivato dall'indirizzo di origine nell'intestazione IP all'interno del pacchetto MPLS. Tuttavia, poiché l'indirizzo IP in realtà potrebbe non essere noto al router B, il router B inoltra i messaggi ICMP sulla stessa etichetta sul percorso a commutazione (LSP) su cui viaggiava il pacchetto scartato (in direzione del router C). Alla fine dell'LSP, l'etichetta viene rimossa e i messaggi ICMP vengono inoltrati in base all'indirizzo di destinazione nell'intestazione IP (verso il router C1).
Il terzo pacchetto (TTL è 3) ha un'elaborazione simile a quella dei pacchetti precedenti, con la differenza che ora è il router C a scartare il pacchetto, in base al valore TTL nell'intestazione IP. Il router B, a causa di un penultimo hop pop, in precedenza ha rimosso l'etichetta e il TTL è stato copiato nell'intestazione IP.
Il quarto pacchetto (TTL è 4) raggiunge la destinazione finale dove viene esaminato il TTL dell'intestazione IP.
Se la propagazione TTL IP è disabilitata con il comando no mpls ip propagate-ttl in modalità di configurazione globale, il valore TTL non viene copiato nell'intestazione IP e il comando traceroute in C1-C2 ha il seguente aspetto:
C1#traceroute C2.cust.com Tracing the route to C2.cust.com 1 A.provider.net 44 msec 36 msec 32 msec 2 C2.cust.com 180 msec * 181 msec
Quando si usa il comando traceroute in questa situazione, le risposte ICMP vengono ricevute solo dai router che vedono il valore TTL reale archiviato nell'intestazione IP. In questa situazione, il router C1 sta eseguendo un comando traceroute (come mostrato), ma i router principali non copiano il valore TTL su e dall'etichetta. Il risultato è il seguente:
Il primo pacchetto è un pacchetto IP con TTL uguale a 1. Il router A diminuisce il valore TTL, scarta il pacchetto e invia un messaggio ICMP "TTL-exceeded" (TTL-superato) all'origine.
Il secondo pacchetto è un pacchetto IP con TTL uguale a 2. Il router A riduce il valore TTL, etichetta il pacchetto e imposta il valore TTL nell'intestazione MPLS a 255.
Il router B riduce il valore TTL dell'intestazione MPLS a 254, rimuove l'etichetta MPLS e copia il valore TTL dell'intestazione MPLS nel campo TTL dell'intestazione IP.
Il router C diminuisce il valore IP TTL e invia il pacchetto al router C2 dell'hop successivo. Il pacchetto ha raggiunto la destinazione finale.