Sommario

Introduzione

Premesse

Come viene elaborato un pacchetto da uno switch

Spaziatura interna modificata con VLAN con tag quando il traffico attraversa N9K

Soluzione

Introduzione

In questo documento viene descritto come risolvere i problemi relativi al pacchetto ethernet danneggiato in Cisco Nexus 9000 quando le informazioni di spaziatura interna sono danneggiate o in formato non corretto.

Premesse

La dimensione minima di un frame Ethernet è di 64 byte, a prescindere dal tag VLAN presente o meno.

Le dimensioni minime del payload Ethernet sono:

- 46 byte se il tag VLAN è assente.

- 42 byte se il tag VLAN è presente.

È possibile verificare questo fatto:

- Su Wikipedia, la sezione Payload: https://en.wikipedia.org/wiki/Ethernet_frame

- Nello standard IEEE 802.3 (http://people.ee.duke.edu/~mbrooke/EE164.02/Spring_2004/group_2/index_files/8023.pdf), dove il formato del frame MAC (senza VLAN) è definito nella sezione 3.1.1, pagina 39, e gli elementi di un frame MAC con tag sono definiti a pagina 43, sezione 3.5.

Le dimensioni minime di un pacchetto Ethernet sono di 64 byte, indipendentemente dalla presenza dell'intestazione VLAN. Il server può inviare un pacchetto da 64 byte contenente una VLAN che deve essere accettato ed elaborato correttamente.

Nota: Questo comportamento viene gestito correttamente da un Catalyst 4500x e non da Nexus 9k.

Come viene elaborato un pacchetto da uno switch

Passaggio 1. Ricevere un frame Ethernet da 64 byte VALIDO.

Passaggio 2. Rimuovere la sequenza Frame Check (FCS), in modo che il pacchetto diventi lungo 60 byte.

Passaggio 3. Rimuovere il tag VLAN, in modo che il pacchetto diventi lungo 56 byte.

Passaggio 4. Aggiungere il padding per rendere il pacchetto lungo 60 byte.

Passaggio 5. Aggiunge il file FCS, rendendo il pacchetto lungo 64 byte.

Il padding non deve essere modificato quando un pacchetto passa attraverso lo switch cut-through.

Spaziatura interna modificata con VLAN con tag quando il traffico attraversa N9K

Invece di riempire con zeri, il pacchetto viene riempito con caratteri garbage, nella maggior parte dei casi non ha alcun impatto perché i checksum non vengono modificati e quindi nessuno usa questi dati. Tuttavia, se i clienti hanno un utilizzo speciale e devono ricalcolare i checksum, questi dati di garbage portano al danneggiamento dei checksum alla fine (altri accessori, come NAT/load-balancers potrebbero vedere il problema anche).

Il dispositivo è un N9K 93120TX (inizialmente rilevato su un 9372TX sebbene), la versione è la più recente NXOS 7.0(3)I2(2a).

Utilizzare host Linux con hardware connesso direttamente a N9K (nessuna virtualizzazione di alcun tipo) qui (collegamenti 1000base-T).

Utilizzare questa configurazione:

interface Ethernet1/59

switchport mode trunk

!

interface Ethernet1/60

switchport mode trunk

linux configurations:

inet 10.2.1.1/24 brd 10.2.1.255 scope global eth1  <= native vlan

inet 10.1.1.1/24 brd 10.1.1.255 scope global eth1.100 <= taggued vlan 100

o

È sufficiente connettere l'host Windows e inviare i frame con tag, in modo che il problema venga attivato. Verificare inoltre che la scheda di interfaccia di rete (NIC) sia in grado di etichettare il pacchetto.

L'opzione Switch aggiunge la spaziatura interna diversa da zero ai fotogrammi attraversati.

Ad esempio: Host — [Trunk] N9K [Trunk] — Host

È possibile utilizzare netcat per inviare e ricevere i pacchetti.

Come mostrato nell'immagine, invia un segnale laterale (VLAN 100 con tag), porta e1/59 sullo switch.

Riceve una porta laterale (VLAN 100 con tag), la porta e1/60 sullo switch, come mostrato nell'immagine:

Come mostrato nell'immagine, il pacchetto viene trasmesso.

Il pacchetto viene ricevuto, come mostrato nell'immagine:

Come mostrato nell'immagine, viene evidenziata la spaziatura interna errata.

Questa condizione viene visualizzata anche con un analizzatore di pacchetti (in un altro pacchetto i dati sono diversi dalle schermate precedenti, ma il test e il bug sono identici),

Soluzione

La soluzione è disabilitare l'aumento del buffer sull'interfaccia a cui è connesso il server.

C9396PX-1(config)# int et 1/7

C9396PX-1(config-if)# no buffer-boost

Difetto correlato:

CSCva46849 60 Byte Frame con dot1q Header L2 attivato su N9k