Πίσω στο blog

English  ·  Ελληνικά

Cisco / IOS  ·  Tutorial  ·  Ιουλιος 2026

Cisco IOS
Spanning Tree & EtherChannel

Τα εφεδρικά links είναι ένας βρόχος που περιμένει να συμβεί — οπότε το spanning tree κλείνει το ένα, και η μισή σου bandwidth κοιμάται. Κατάλαβε την εκλογή, διάλεξε το root bridge σου σκόπιμα, πέρνα σε Rapid PVST+, και μετά συνένωσε αυτά τα εφεδρικά links σε ένα EtherChannel που τα χρησιμοποιεί όλα.

Cisco IOS STP Rapid PVST+ Root Bridge EtherChannel LACP CCNA

SPANNING TREE — κλεισε τον βροχο CORE (root) SW-A SW-B ✕ blocking — βρόχος αποτράπηκε, link αδρανές ETHERCHANNEL — συνενωσε, μην κλεινεις SW-A SW-B Port-channel1 Το STP βλέπει ΕΝΑ λογικό link — όλα τα μέλη προωθούν, τίποτα δεν κλείνει

Σύνδεσε δύο switch μεταξύ τους δύο φορές — για εφεδρεία — και χωρίς προστασία έχτισες ένα bridging loop: τα ethernet frames δεν έχουν TTL, οπότε ένα broadcast κυκλοφορεί για πάντα, πολλαπλασιαζόμενο μέχρι και τα δύο switch να λιώσουν στο 100% CPU. Αυτό είναι broadcast storm, και ρίχνει δίκτυα σε δευτερόλεπτα. Το spanning tree (STP) είναι το ανοσοποιητικό σύστημα: τα switch εκλέγουν ένα root bridge, υπολογίζουν το συντομότερο δέντρο χωρίς βρόχους, και σκόπιμα κλείνουν κάθε εφεδρική διαδρομή. Βρόχοι αποτρέπονται — αλλά τα κλειστά links δεν κουβαλάνε τίποτα.

Αυτό είναι το trade-off που λύνει αυτό το post. Πρώτα, κατάλαβε και έλεγξε το STP: αν δεν διαλέξεις εσύ το root bridge, το διαλέγει το δίκτυο για σένα — συνήθως το παλιότερο, πιο αργό switch στο κτίριο. Μετά διεκδίκησε πίσω τη χαμένη bandwidth: το EtherChannel συνενώνει παράλληλα links σε ένα λογικό interface που το STP αντιμετωπίζει σαν μονοπάτι, οπότε όλα τα μέλη προωθούν ταυτόχρονα. Εφεδρεία και ρυθμαπόδοση — έτσι πρέπει να χτίζονται τα uplinks switch.

Προαπαιτουμενα

01

Η Εκλογη — Ποιος Γινεται Root

Τα πάντα στο spanning tree πηγάζουν από μία επιλογή: το root bridge. Κάθε switch μετράει την απόστασή του από το root, κρατάει την καλύτερή του διαδρομή, και κλείνει τις υπόλοιπες. Η εκλογή κερδίζεται από το χαμηλότερο bridge ID — πρώτα priority, μετά διεύθυνση MAC.

IOS — δες το τρεχον δεντρο (ασφαλες)
SW1# show spanning-tree vlan 10
VLAN0010
  Spanning tree enabled protocol rstp
  Root ID    Priority    24586
             Address     0cd0.f894.1a00
             Cost        4
             Port        24 (GigabitEthernet0/24)   ← ο δρόμος μου προς το root
  Bridge ID  Priority    32778  (priority 32768 sys-id-ext 10)
             Address     70b3.d5aa.2c00              ← το δικό αυτού του switch ID

Interface        Role Sts Cost      Prio.Nbr Type
Gi0/1            Desg FWD 4         128.1    P2p Edge
Gi0/23           Altn BLK 4         128.23   P2p        ← η κλειστή εφεδρεία
Gi0/24           Root FWD 4         128.24   P2p

Διάβασέ το από πάνω προς τα κάτω: το block Root ID ονομάζει το εκλεγμένο root και το κόστος μου για να το φτάσω· το block Bridge ID είμαι εγώ. Αν τα δύο block δείχνουν την ίδια διεύθυνση, αυτό το switch είναι το root. Παρακάτω, κάθε θύρα έχει έναν ρόλο: Root (η καλύτερή μου διαδρομή προς το root), Desg (designated — προωθεί για το τμήμα της), Altn BLK (ο σπαστής βρόχων, παρκαρισμένος σε blocking). Μία κλειστή θύρα ανά εφεδρικό βρόχο είναι το spanning tree να δουλεύει ακριβώς όπως σχεδιάστηκε.

⚠ Παγιδα — Οι Default Priorities Σημαινουν οτι Κερδιζει το Παλιοτερο Switch

Κάθε switch έχει default priority 32768, οπότε η εκλογή λύνεται με ισοπαλία στη χαμηλότερη διεύθυνση MAC — που συνήθως ανήκει στο παλιότερο switch στο κτίριο. Αποτέλεσμα: ένα δεκάχρονο access switch κάτω από ένα γραφείο γίνεται root, και όλη η inter-VLAN κίνηση περνάει hairpin μέσα από αυτό. Αν δεν έχεις ορίσει ποτέ priority, αυτή είναι η τοπολογία σου αυτή τη στιγμή. Έλεγξε με show spanning-tree root — αν το root δεν είναι το core σου, διόρθωσέ το στην ενότητα 02.

02

Διαλεξε το Root Σκοπιμα

Το root bridge πρέπει να είναι το core switch σου — η συσκευή στη μέση των μοτίβων κίνησης. Μία εντολή ανά VLAN το καρφώνει, και μία δεύτερη ονομάζει το backup.

IOS (core switch) — καρφωσε το root και το standby του
# Ο ευανάγνωστος τρόπος: το "primary" βάζει priority αρκετά χαμηλό για να κερδίσει (24576 ή χαμηλότερα)
CORE(config)# spanning-tree vlan 10,20,99 root primary

# Στο δεύτερο καλύτερο switch — το designated backup root:
DIST(config)# spanning-tree vlan 10,20,99 root secondary

# Ή όρισε τον αριθμό ρητά (πρέπει να είναι πολλαπλάσιο του 4096):
CORE(config)# spanning-tree vlan 10 priority 24576

# Επαλήθευσε ότι το core τώρα κερδίζει:
CORE# show spanning-tree vlan 10 | include This bridge is the root
             This bridge is the root
💡 Γιατι Per-VLAN — και η Ιδιοτροπια sys-id-ext

Η Cisco τρέχει ένα instance spanning-tree ανά VLAN (PVST+/Rapid PVST+), γι' αυτό κάθε εντολή παίρνει λίστα VLAN — και γι' αυτό ένα priority εμφανίζεται ως 32778 για το VLAN 10: το VLAN ID προστίθεται στο base priority (32768 + 10) ως το "sys-id-ext". Τα δέντρα ανά VLAN σημαίνουν επίσης ότι μπορείς να κάνεις ένα switch root για τα VLAN 10–20 και ένα άλλο για τα 30–40, μοιράζοντας το φορτίο σε δύο uplinks που αλλιώς θα κάθονταν μισο-κλειστά. Αυτό είναι δωρεάν βελτιστοποίηση σε κάθε σχεδιασμό dual-core.

03

Rapid PVST+ — Δευτερολεπτα, Οχι Μισο Λεπτο

Το κλασικό STP παίρνει 30–50 δευτερόλεπτα για να συγκλίνει μετά από αστοχία. Το Rapid PVST+ το κάνει σε περίπου ένα δευτερόλεπτο, με τις ίδιες εντολές που ήδη ξέρεις. Στα σύγχρονα Catalyst είναι συνήθως το default — αλλά επαλήθευσε, μην το υποθέτεις.

IOS — ενεργοποιηση και επιβεβαιωση Rapid PVST+
# Μία global εντολή, σε ΚΑΘΕ switch:
SW1(config)# spanning-tree mode rapid-pvst
SW1(config)# end

# Επιβεβαίωσε — "protocol rstp" στην κεφαλίδα σημαίνει ότι το rapid είναι ενεργό:
SW1# show spanning-tree summary | include mode
Switch is in rapid-pvst mode

# Και τα default PortFast/BPDU-guard από το post Ασφάλεια Switch:
SW1(config)# spanning-tree portfast bpduguard default

Το Rapid PVST+ συνεργάζεται με το παλιό STP — ένα legacy switch στο δίκτυο σέρνει σιωπηλά αυτό το τμήμα πίσω σε αργά timers. Κάνε migrate τα πάντα, μετά επαλήθευσε ανά switch. Και το ζευγάρι PortFast + BPDU guard από το post Ασφάλεια Switch τώρα βγάζει πλήρες νόημα: το PortFast λέει στο STP «αυτή είναι θύρα host, παράλειψε την αναμονή listening/learning», και το BPDU guard επιβάλλει αυτή την υπόσχεση σκοτώνοντας τη θύρα αν εμφανιστεί ποτέ ένα switch εκεί.

04

EtherChannel — Συνενωσε Αντι να Κλεισεις

Δύο ή τέσσερα παράλληλα links ανάμεσα στο ίδιο ζευγάρι switch, ένα λογικό interface. Το STP βλέπει ένα μοναδικό link οπότε τίποτα δεν κλείνει· η κίνηση κάνει hash σε όλα τα μέλη· ο θάνατος ενός μέλους είναι αόρατος στην τοπολογία.

IOS — δεμα LACP, και τα δυο switch (καθρεφτισμενο config)
# Διάλεξε τις θύρες-μέλη — πρέπει να είναι ΤΑΥΤΟΣΗΜΕΣ (speed, duplex, mode, VLAN)
SW-A(config)# interface range GigabitEthernet0/23 - 24
SW-A(config-if-range)# channel-group 1 mode active     # active = ξεκίνα LACP
Creating a port-channel interface Port-channel 1
SW-A(config-if-range)# exit

# Ρύθμισε το BUNDLE, όχι τα μέλη — οι ρυθμίσεις trunk πάνε εδώ:
SW-A(config)# interface Port-channel1
SW-A(config-if)# switchport mode trunk
SW-A(config-if)# switchport trunk native vlan 99
SW-A(config-if)# switchport trunk allowed vlan 10,20,99
SW-A(config-if)# end

# SW-B: ακριβώς το ίδιο block. Το "active" και στις δύο πλευρές είναι το καθαρό pattern.
# (mode on = static bundle, χωρίς πρωτόκολλο — μόνο αν μια συσκευή δεν μιλάει LACP.)

SW-A# show etherchannel summary
Flags:  P - bundled in port-channel   S - Layer2   U - in use
Group  Port-channel  Protocol    Ports
------+-------------+-----------+----------------------------
1      Po1(SU)         LACP      Gi0/23(P)  Gi0/24(P)
# (SU) και κάθε μέλος (P) = υγιές. Μέλη (SD) ή (s) = δες την παγίδα.
⚠ Παγιδα — Τα Μελη που δεν Ταιριαζουν Κανουν Suspend, και ΜΗΝ Αναμειγνυεις on/active

Κάθε θύρα-μέλος πρέπει να ταιριάζει ακριβώς — speed, duplex, switchport mode, allowed VLAN, native VLAN. Μία ασυμφωνία και αυτό το μέλος δείχνει (s) suspended στο show etherchannel summary ενώ τα υπόλοιπα συνεχίζουν: πλήρωσες σιωπηλά για τέσσερα links και τρέχεις σε τρία. Χειρότερο: το mode on (static) στη μια πλευρά με LACP στην άλλη φτιάχνει ένα bundle που φαίνεται up αλλά μπορεί να κάνει loop ή blackhole, γιατί η μία πλευρά δεν ελέγχει τίποτα. Κανόνας: active/active με LACP, ρύθμισε μέσω του interface Port-channel, και διάβασε τα flags μετά από κάθε αλλαγή.

💡 Ελεγχος Πραγματικοτητας — Μια Ροη Δεν Θα Παει Πιο Γρηγορα

Το EtherChannel κάνει load-balance με hashing (src/dst MAC ή IP), οπότε κάθε ροή κολλάει σε ένα μέλος-link. Ένα bundle 4×1G σου δίνει 4 Gbps συνολικής χωρητικότητας, όχι έναν σωλήνα 4 Gbps για μία μεμονωμένη δουλειά backup — μία ροή ακόμα κορυφώνει στο 1G. Αυτό είναι το σωστό trade-off για uplinks switch που κουβαλάνε κίνηση πολλών χρηστών, αλλά αν μια μεμονωμένη μεταφορά server-προς-server χρειάζεται περισσότερο από ένα link-μέλος, χρειάζεσαι ένα πιο γρήγορο link, όχι ένα πιο φαρδύ bundle. Έλεγξε το hash με show etherchannel load-balance· το src-dst-ip απλώνει καλύτερα στα περισσότερα δίκτυα.

05

Ελεγχος & Troubleshooting Ασφαλες να το Τρεξεις

Τα επαναλαμβανόμενα ερωτήματα: ποιος είναι root, γιατί αυτή η θύρα είναι blocking, γιατί άλλαξε μόλις η τοπολογία, και είναι υγιές το bundle.

ΕντοληΑπανταει
show spanning-tree rootRoot bridge, το priority του, και το κόστος/θύρα μου προς αυτό — ανά VLAN.
show spanning-tree vlan 10Ολόκληρο το δέντρο για ένα VLAN: ρόλοι, καταστάσεις, ποιος κλείνει.
show spanning-tree summaryMode (rapid-pvst), default PortFast/BPDU-guard, μετρητές κλειστών θυρών.
show spanning-tree detail | include ieee|occurrΠότε και από πού ήρθε η τελευταία αλλαγή τοπολογίας — ο ανιχνευτής flapping-port.
show etherchannel summaryΥγεία του bundle με μια ματιά — (SU) καλά, (SD)/(s) χαλασμένα.
show etherchannel load-balanceΗ μέθοδος hashing σε χρήση.
show lacp neighborΕπιβεβαιώνει ότι η άλλη πλευρά όντως μιλάει LACP.
IOS — κυνηγωντας μια καταιγιδα αλλαγων τοπολογιας
# Οι χρήστες αναφέρουν τυχαία παγώματα 1 δευτερολέπτου. Υποψιάζεσαι αλλαγές τοπολογίας STP:
CORE# show spanning-tree vlan 10 detail | include occurr
  Number of topology changes 4817 last change occurred 00:00:41 ago
          from GigabitEthernet0/14
# 4817 αλλαγές και ανεβαίνουν, όλες από το Gi0/14 — ένα flapping link ή μια θύρα
# host χωρίς PortFast που πηγαινοέρχεται. Διόρθωση: portfast στις θύρες host (οι edge θύρες
# δεν παράγουν αλλαγές τοπολογίας), και έλεγξε την καλωδίωση του Gi0/14.

06

MikroTik ↔ Cisco — Ιδιο Δεντρο, Αλλος Φλοιος

Τα bridge του RouterOS τρέχουν κι αυτά (R)STP, και το bonding είναι το EtherChannel του. Οι έννοιες περνάνε κατευθείαν.

MikroTik / RouterOSCisco IOS
bridge protocol-mode=rstpspanning-tree mode rapid-pvst
bridge priority=0x6000spanning-tree vlan X priority 24576
Ένα δέντρο ανά bridgeΈνα δέντρο ανά VLAN (PVST+) — πιο λεπτός έλεγχος, περισσότερα να ελέγξεις
bridge port edge=yesspanning-tree portfast
bridge port bpdu-guard=yesspanning-tree bpduguard enable
/interface bonding mode=802.3adEtherChannel channel-group N mode active (LACP)
transmit-hash-policy=layer-2-and-3port-channel load-balance src-dst-ip

Συμπερασματα

  1. Οι βρόχοι είναι θανάσιμοι επειδή το ethernet δεν έχει TTL. Ένα εφεδρικό patch cable χωρίς STP είναι broadcast storm. Το spanning tree αγοράζει ασφάλεια κλείνοντας την εφεδρεία — αυτή η κλειστή θύρα στο show spanning-tree είναι χαρακτηριστικό.
  2. Εκλέξε το root σου σκόπιμα. Οι default priorities δίνουν το στέμμα στο χαμηλότερο MAC — το παλιότερο switch που έχεις. spanning-tree vlan X root primary στο core, secondary στο backup του, επαλήθευσε με show spanning-tree root.
  3. Τρέξε Rapid PVST+ παντού. Σύγκλιση κάτω από δευτερόλεπτο αντί για 30–50 δευτ., ίδιες εντολές — και ένα legacy-STP switch σέρνει το τμήμα του πίσω σε αργά timers, οπότε κάνε migrate όλα.
  4. PortFast στις θύρες host, BPDU guard ως σωματοφύλακάς του. Οι hosts παραλείπουν την αναμονή STP και σταματούν να παράγουν αλλαγές τοπολογίας· κάθε BPDU σε edge θύρα σκοτώνει τη θύρα. Αυτή είναι η ιστορία του πρωτοκόλλου πίσω από το post Ασφάλεια Switch.
  5. Το EtherChannel μετατρέπει την κλειστή εφεδρεία σε χρησιμοποιούμενη χωρητικότητα. Το STP βλέπει ένα λογικό link, όλα τα μέλη προωθούν, και μια αστοχία μέλους δεν κυματίζει στην τοπολογία. LACP active και στις δύο πλευρές, πάντα.
  6. Τα μέλη πρέπει να ταιριάζουν ακριβώς, και τα bundle ισορροπούν ροές, όχι πακέτα. Ένα μέλος που δεν ταιριάζει κάνει suspend σιωπηλά· μία μεμονωμένη ροή δεν ξεπερνάει ποτέ την ταχύτητα ενός μέλους. Διάβασε τα flags του show etherchannel summary μετά από κάθε αλλαγή.
  7. Οι μετρητές αλλαγής τοπολογίας είναι η forensics των διακοπών σου. Χιλιάδες αλλαγές από μία θύρα = ένα flapping link ή ένα PortFast που λείπει. Ο μετρητής ονομάζει τη θύρα· η διόρθωση είναι συνήθως μία εντολή ή ένα καλώδιο.

Χτιζεις εφεδρεια για γραφειο, ξενοδοχειο ή SMB στην Κρητη;

Το root bridge πρέπει να είναι απόφαση, όχι ό,τι έτυχε να εκλέξει το STP. Σχεδιάζω τοπολογίες switch όπου αυτό διαλέγεται σκόπιμα, τα uplinks είναι σωστά συνενωμένα, και το failover δοκιμάζεται τραβώντας ένα καλώδιο — όχι υποτίθεται από ένα διάγραμμα.

Κλεισε μια Discovery Call →