Der Message Age Wert in einem BPDU ist egal

Ich habe schon die lustigsten Erklärungen für dieses Feld im BPDU gehört. Alle endeten mit 'ist aber nicht so wichtig'. Natürlich stimmt das nicht, denn wäre der Message Age tatsächlich 'nicht so wichtig', gäbe es das Feld wohl nicht.

Was ist also die Funktion des Message Age?

Wie der Name schon sagt, gibt der Message Age das Alter des BPDU an. Das Alter wird von der Root Bridge anfänglich auf einen Default Wert von 0x0000 gesetzt und von jeder Bridge die das BPDU weiterleitet um einen bestimmten Wert (Message Age Increment) erhöht.

 if (root_bridge())
 {
  config_bpdu[port_no].message_age = Zero; /* (8.6.1.3.2(e))*/
 }
 else
 {
  config_bpdu[port_no].message_age
   = message_age_timer[bridge_info.root_port].value
     + Message_age_increment; /* (8.6.1.3.2(f))*/
 }

Nach dem Alter fragt man nicht

Die Frage ist nun, um welchen Wert eine Designated Bridge den Message Age erhöht. Ich habe fast graue Haare bekommen bei der Suche nach einer Antwort. Der erste Summand ist im Normalfall Null da der Message Age Timer beim Empfang eines Configuration BPDU zurückgesetzt wird. Relevant wird er wenn die Bridge ein Inferior BPDU empfängt und darauf mit einem 'außerplanmäßigen' BPDU reagiert. Der obige Code bezeichnet als zweiten Summanden das message_age_increment, mit einem Verweis auf IEEE Std 802.1D-1998, 8.6.1.3.2(f). Dort liest man:

"the value of the Message Age shall be set such that the transmitted Configuration BPDU does not convey an underestimate of the age of the Protocol Message received on the Root Port; i.e.,the value transmitted shall be no less than that recorded by the Message Age Timer for that Port, shall be greater than the value received, and will incorporate any transmission delay. The value of the parameter shall not exceed its true value by more than the maximum Message Age increment overestimate as specified in 8.10.2."

Alles klar?

Dieser Satz ist an Klarheit kaum zu übertreffen, nicht? Soweit ich das jedoch beurteilen kann, addieren die Bridges der Einfachheit halber zum empfangenen Message Age Wert einfach 1 Sekunde hinzu - das entspricht dem empfohlenen Message Age Increment Overestimate. Auf seinem Weg durch das Netz erhöht sich also der Wert des Message Age Felds in der Regel um eine Sekunde pro durchlaufener Bridge.

Und wozu?

Was folgt ist ziemlich logisch. Sagen wir, ein Switch empfängt ein Configuration BPDU mit den Angaben Max Age = 20 Sekunden und Message Age = 4 Sekunden an einem Port. Dann setzt er den Wert des Port Message Age Timers auf 4 Sekunden. Somit würden die Informationen in diesem Configuration BPDU nicht 20 Sekunden, sondern schon 16 Sekunden nach Empfang, ungültig. Das ganze erinnert stark an einen Lebenszeit-Mechanismus (TTL) für BPDUs.

Aber Vorsicht

Nichts ist leichter als den Message Age Wert mit dem Message Age Timer Wert zu verwechseln. Der Erste wird in den Configuration BPDUs übertragen; Der Zweite ist ein Parameter eines Switchports.

Ebenfalls mit Vorsicht zu genießen ist auch die Erklärung in 'Interconnection', 2. Auflage, Seite 65. Dort wird lediglich der erste Summand erörtert. Der zweite, das Message_age_increment bleibt unerwähnt.

Links zum Thema