Efter att vi har lärt oss grunderna om MAC-adresser är det dags att analysera hur en switch lär sig dessa adresser och hur de används för vidarebefordran. En switch på lager 2 fungerar inte bara som en enkel koppling mellan portar, utan bygger steg för steg upp en MAC-tabell (CAM-tabell) för att veta exakt på vilken port varje enhet finns. På så sätt kan kommunikationen i nätverket göras mer effektiv.
Från början är tabellen helt tom, men den fylls snabbt på i takt med att trafik flödar genom switchen. Detta illustreras med bilden nedan:

Notera att MAC-adresserna i bilden är förenklade i undervisningssyfte. I verkligheten är en MAC-adress 48 bitar lång och skrivs oftast i hexadecimal form, till exempel 00:0A:95:9D:68:16. Här används kortformen (00-0A, 00-0B osv.) endast för att tydliggöra principen.
När en Ethernet-ram tas emot på en port läser switchen alltid de två första fälten i ramens header: destinationsadressen (DA) och source-adressen (SA). Preamble fältet används endas för att synkronisera kommunikationen mellan avsändare och mottagaren.

Dessa avlästa adresser användes på olika sätt:
- SA används för att uppdatera eller lägga till en post i MAC-tabellen.
- DA används för att avgöra om det redan finns en match i tabellen som talar om vilken port ramen ska vidarebefordras till.
Hur switchen lär sig adresser (inlärning)
Switchens inlärning bygger på att den alltid analyserar source MAC-adressen i varje Ethernet-ram som kommer in.
- Om adressen inte finns i tabellen: en ny post skapas med MAC-adressen och den port där ramen kom in.
- Om adressen redan finns i tabellen: posten uppdateras, och timern förlängs så att adressen fortsätter vara giltig. Om adressen finns men på en annan port: switchen antar att enheten har flyttat och skriver över den gamla posten med det nya portnumret.
Som standard sparar de flesta switchar en MAC-adress i tabellen i 5 minuter (300 sekunder). Om ingen ny trafik från den adressen tas emot under den tiden tas posten bort. Denna så kallade aging time gör att tabellen hålls aktuell.
Hur switchen vidarebefordrar ramar
När switchen har lärt sig adresser och registrerat dem i MAC-tabellen använder den destinationsadressen (Destination MAC Address, DA) för att bestämma vart en ram ska skickas.
- Om DA finns i tabellen: ramen skickas direkt till rätt port. Detta kallas filtrering eftersom onödig trafik undviks.
- Om DA inte finns i tabellen: ramen skickas ut på alla portar utom den inkommande. Detta kallas flooding eller unknown unicast flooding.
- Om DA är broadcast: ramen skickas alltid till alla portar (förutom den inkommande).
- Om DA är multicast: ramen floodas också till alla portar, om inte switchen har extra funktioner (t.ex. IGMP snooping) som kan styra detta mer effektivt.
Exempel i praktiken
I exemplet nedan switch S1 har två slutenheter anslutna medan S2 har bara en, dessutom är switchen S2 ansluten via port 4 till en router:

När PC-A skickar en första ram till PC-B händer följande:
- Ramen anländer på port 1 på S1.
- S1 läser Source Address (SA) och registrerar att MAC 00-0A (PC-A) finns på port 1. Posten läggs till i MAC-tabellen.
- Switchen läser Destination Address (DA) = 00-0B. Eftersom tabellen är tom för denna adress finns ingen match.
- S1 floodar ramen vidare ut på alla övriga portar (i detta fall port 3 och port 4).

När ramen floodas är det endast PC-B som känner igen sin egen adress (00-0B) och tar emot den. Övriga enheter jämför DA med sina egna MAC-adresser och kasserar ramen.
- PC-B svarar sedan tillbaka till PC-A via port 3.
- S1 läser Source Address (SA) och registrerar att MAC 00-0B (PC-B) finns på port 3. MAC-tabellen uppdateras.
Eftersom PC-A redan finns inlagd i tabellen (på port 1) skickas ramen nu direkt till port 1, utan flooding.
Flera adresser på samma port
En enskild switchport kan lära sig flera MAC-adresser samtidigt. Detta sker till exempel när porten är kopplad till en annan switch eller till en accesspunkt, där flera enheter delar samma fysiska anslutning. Varje enhet får då en egen post i MAC-tabellen, men samtliga poster pekar mot samma port.
I exemplet nedan är två datorer (PC-A och PC-B) anslutna direkt till SW1, medan två andra datorer (PC-C och PC-D) är anslutna till SW2. Switcharna är i sin tur sammankopplade via en uplink-port.
Detta gör att uplink-porten på båda switcharna får flera MAC-adresser registrerade, eftersom trafiken från flera datorer passerar samma fysiska port. För att tydliggöra kan vi jämföra de båda switcharnas MAC-tabeller.

När datorerna kommunicerar börjar switcharna bygga sina MAC-tabeller. Resultatet blir följande:
SW1 – MAC adresstabell
SW1# show mac address-table dynamic Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 000A.0000.0001 DYNAMIC Gi0/1 (PC-A) 1 000A.0000.0002 DYNAMIC Gi0/2 (PC-B) 1 000A.0000.0003 DYNAMIC Gi0/0 (PC-C via SW2) 1 000A.0000.0004 DYNAMIC Gi0/0 (PC-D via SW2) Total Mac Addresses for this criterion: 4
Här ser vi att PC-A och PC-B har egna poster på sina portar (G0/1 och G0/2). Samtidigt finns både PC-C och PC-D registrerade på G0/0, eftersom de når SW1 via länken till SW2.
SW2 – MAC adresstabell
SW2# show mac address-table dynamic Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 000A.0000.0003 DYNAMIC Gi0/1 (PC-C) 1 000A.0000.0004 DYNAMIC Gi0/2 (PC-D) 1 000A.0000.0001 DYNAMIC Gi0/0 (PC-A via SW1) 1 000A.0000.0002 DYNAMIC Gi0/0 (PC-B via SW1) Total Mac Addresses for this criterion: 4
Här är det tvärtom: PC-C och PC-D ligger på sina egna portar (G0/1 och G0/2), medan PC-A och PC-B är inlärda på G0/0, eftersom de passerar länken från SW1.
Kommunikation med andra nät (Default Gateway)
När en dator vill nå en enhet på ett annat nätverk fungerar det annorlunda. Vi analyserar vad som händer när PC-A vill nå en resurs på Internet.
Eftersom slutdestinationen ligger på ett annat nätverk skickas ramarna inte direkt dit, utan istället till default gateway, alltså routerns MAC-adress (00-0D).
Steg för steg:

- PC-A skickar en ram till routerns MAC-adress (00-0D).
- Switch S1 tar emot ramen på port 1.
- Den läser SA = 00-0A (finns redan i tabellen) och förlänger timern.
- Den läser DA = 00-0D (routern), men adressen finns ännu inte i tabellen.
- S1 floodar ramen ut på övriga portar (port 3 och port 4).
- PC-B ignorerar ramen eftersom DA inte matchar dess egen MAC-adress.
- S2 tar emot ramen på port 1.
- Switch S2 behandlar ramen.
- Den ser SA = 00-0A och registrerar PC-A på port 1.
- Den letar efter DA = 00-0D i sin tabell, men den finns inte.
- Därför floodar S2 ramen vidare på sina övriga portar (port 2 och port 4), men inte port 1, eftersom det är den port där ramen kom in.

- Routern tar emot ramen på sin port 1.
- PC-C läser av DA och bekräftar att det är inte sin MAC-adress därför ignorerar ramen.
- Routern känner igen att DA = 00-0D är dess egen MAC-adress.
- Ramen accepteras och IP-paketet packas upp.
- Routern skickar ett svar tillbaka till PC-A.
- Ramen får SA = 00-0D (routern) och DA = 00-0A (PC-A).
- Den skickas ut via port 1 mot S2.
- S2 tar emot svaret på port 4.
- Den registrerar nu SA = 00-0D (routern) på port 4.
- Den slår upp DA = 00-0A i tabellen och hittar PC-A på samma port (4 → S1).
- Ramen skickas vidare till S1.
- S1 tar emot ramen på port 4.
- Den registrerar SA = 00-0D (routern) på port 4.
- Den hittar DA = 00-0A i tabellen (port 1) och skickar ramen direkt till PC-A.

Resultatet blir att båda switcharna nu känner till både PC-A och routern i sina tabeller. Nästa gång PC-A skickar trafik till Internet kan ramarna gå direkt via rätt portar, utan flooding.
Sammanfattning
- Inlärning sker med source-dresser (SA). Nya adresser läggs in, befintliga uppdateras, och adresser som flyttar byter port.
- Vidarebefordran styrs av destinationsadresser (DA). Om adressen finns i tabellen skickas ramen direkt, annars floodas den.
- Standardinställning: en MAC-adress sparas i ca 5 minuter om ingen ny trafik kommer.
- Default gateway: används för trafik som ska lämna det lokala nätverket.
- På så sätt utvecklas en switch från att initialt flooda mycket trafik till att snabbt bli effektiv och selektiv när den lärt sig alla adresser i nätverket.