Loading...

Bài 16: Ethernet Frame & Switching cơ bản — Cấu trúc Frame, ARP và bảng MAC Address

💡 Liên hệ thực tế

Anh Nam VNExperts mới vào làm bưu tá cho một khu phố lạ — ngày đầu tiên, anh chưa biết nhà nào ở đâu, nên khi có thư gửi đến, anh phải đi rao khắp khu phố hỏi "ai là chủ nhà này". Nhưng mỗi lần giao thư thành công, anh ghi chú lại: "Nhà số 5 — ông Ba, cạnh quán cà phê". Sau vài ngày, anh đã thuộc lòng gần hết khu phố, không cần rao hỏi nữa, cứ thấy tên là đi thẳng đến đúng nhà.

🔌 Switch Cisco hoạt động chính xác theo cách đó — nó "học" dần địa chỉ MAC của từng thiết bị qua từng cổng, ghi vào một cuốn sổ gọi là bảng MAC address table, rồi dùng bảng đó để quyết định gửi dữ liệu đi đâu cho nhanh và chính xác.

📬 Nhưng trước cả bước "ghi chú", với toà nhà chung cư mới — thư chỉ ghi "căn hộ 512, toà A" (giống địa chỉ IP), nhưng anh Nam chưa biết căn đó nằm ở tầng bao nhiêu, phòng số mấy (giống MAC — vị trí vật lý). Anh phải hỏi thăm trước khi đi giao. Đây chính là ARP — PC A biết IP của PC B nhưng chưa biết MAC, nên phải "hỏi cả xóm mạng" trước.


📘 Kiến thức cốt lõi

🧱 Cấu trúc Ethernet Frame — "phong bì" chứa dữ liệu ở Layer 2

Trước khi nói Switch đọc bảng MAC ra sao, cần biết Switch thực chất đang đọc cái gì trong 1 Frame. Một Ethernet Frame gồm 6 phần chính:

Cấu trúc Ethernet Frame Sơ đồ minh họa 6 trường của một Ethernet Frame theo đúng thứ tự: Preamble 8 byte, Destination MAC 6 byte, Source MAC 6 byte, EtherType 2 byte, Payload 46-1500 byte, FCS 4 byte. Trường Source MAC được Switch dùng để Learn, trường Destination MAC được Switch dùng để Forward hoặc Flood. Cấu trúc Ethernet Frame 6 trường theo đúng thứ tự truyền đi trên đường dây Preamble Dest MAC Src MAC EtherType Payload FCS IP / ARP / ... 8 byte 6 byte 6 byte 2 byte 46–1500 byte 4 byte (vd: 0x0800=IPv4, 0x0806=ARP) Switch dùng để Forward / Flood Switch dùng để Learn Đây chính là các trường bạn sẽ thấy trong mục "Ethernet II" khi bắt gói bằng Wireshark

TrườngKích thướcVai trò
Preamble 8 byte Chuỗi bit đồng bộ, báo hiệu "Frame sắp bắt đầu" cho thiết bị nhận
Destination MAC 6 byte Địa chỉ MAC đích — đây chính là trường Switch tra bảng MAC để Forward/Flood
Source MAC 6 byte Địa chỉ MAC nguồn — đây chính là trường Switch đọc để Learn
EtherType 2 byte Cho biết Payload bên trong thuộc giao thức nào (ví dụ 0x0800 = IPv4, 0x0806 = ARP, 0x86DD = IPv6)
Payload 46-1500 byte Dữ liệu thực sự — ví dụ gói IP chứa segment TCP/UDP bên trong
FCS (Frame Check Sequence) 4 byte Mã kiểm tra lỗi (CRC), giúp thiết bị nhận phát hiện Frame có bị hỏng trên đường truyền không

📎 Nhìn vào bảng trên, dễ thấy vì sao Switch chỉ cần quan tâm 2 trường Source MAC (để Learn) và Destination MAC (để Forward/Flood) — các trường còn lại (Preamble, EtherType, FCS) phục vụ mục đích khác, không ảnh hưởng đến quyết định chuyển tiếp của Switch. Sau này khi dùng Wireshark bắt gói tin, đây chính là các trường bạn sẽ thấy ngay trong phần "Ethernet II" của mỗi Frame.

📖 Bảng MAC Address Table là gì? Là một bảng ghi nhớ mà Switch tự động xây dựng, lưu thông tin: địa chỉ MAC nào được nhìn thấy ở cổng nào. Xem bằng lệnh show mac address-table trên switch Cisco.

Mac Address Table
-------------------------------------------
Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    aaaa.bbbb.cccc     DYNAMIC     Fa0/1
   1    dddd.eeee.ffff     DYNAMIC     Fa0/2

⚙️ 4 quyết định xử lý Frame của Switch

Khi một Ethernet Frame đi vào Switch, Switch sẽ xử lý theo trình tự sau:

Hành viKhi nào xảy raMô tả
1️⃣ Learn (Học) Khi nhận Frame từ 1 cổng Ghi lại địa chỉ MAC nguồn + cổng vào bảng MAC
2️⃣ Flood (Phát tràn) Khi Frame là Broadcast hoặc Switch chưa biết cổng (interface) chứa MAC đích trong bảng MAC (Unknown Unicast) Gửi Frame ra tất cả các cổng khác trong cùng VLAN (ngoại trừ cổng vừa nhận).
3️⃣ Forward (Chuyển tiếp) Khi đã biết MAC đích Chỉ gửi Frame ra đúng cổng tương ứng trong MAC Address Table.
4️⃣ Filter (Lọc bỏ) Khi MAC đích nằm trên chính cổng vừa nhận Frame
Không chuyển tiếp Frame vì cả thiết bị nguồn và thiết bị đích đều nằm trên cùng một cổng Switch, nên việc gửi ra ngoài là không cần thiết.

📎 Đến đây có một câu hỏi rất quan trọng: Switch chỉ có thể quyết định Forward, Flood hay Filter khi trong Ethernet Frame đã có địa chỉ MAC đích. Nhưng khi PC A muốn gửi dữ liệu cho PC B lần đầu tiên, nó thường chỉ biết địa chỉ IP của PC B, chứ chưa biết địa chỉ MAC. Vậy PC A lấy địa chỉ MAC đích ở đâu để tạo Ethernet Frame gửi vào Switch?

👉 Câu trả lời chính là ARP (Address Resolution Protocol).

🔗 ARP (Address Resolution Protocol) — bước diễn ra trước khi Switch vào cuộc

Trước khi PC A có thể gửi dữ liệu đến PC B trong cùng một mạng LAN, nó cần biết địa chỉ MAC của PC B. Tuy nhiên, ứng dụng hoặc DNS thường chỉ cung cấp địa chỉ IP của thiết bị đích. Khi đó, PC A sử dụng ARP (Address Resolution Protocol) để "phiên dịch" địa chỉ IP thành địa chỉ MAC tương ứng.

Quy trình ARP diễn ra theo 2 bước:

BướcTên gọiMô tả
1 ARP Request PC A gửi 1 gói broadcast (đến FF:FF:FF:FF:FF:FF) hỏi cả mạng: "Thiết bị nào đang sử dụng địa chỉ IP này? Hãy cho tôi biết địa chỉ MAC của bạn."
2 ARP Reply Chỉ PC B (đúng chủ của địa chỉ IP được hỏi) phản hồi bằng Ethernet Frame unicast, gửi lại địa chỉ MAC của mình cho PC A.

Sau khi nhận được ARP Reply, PC A lưu cặp IP–MAC vào ARP cache (ARP table) trong một khoảng thời gian nhất định để không phải gửi ARP Request cho mỗi lần truyền dữ liệu.

Lúc này, PC A mới có đủ thông tin để đóng gói Frame Ethernet chứa dữ liệu thực tế (ví dụ ICMP, HTTP hoặc SSH) với MAC đích là MAC của PC B. Frame này được gửi vào Switch, và Switch sẽ thực hiện các cơ chế Learn, Flood, Forward hoặc Filter để chuyển tiếp đến đúng cổng đích.

📎 Vì ARP Request luôn gửi dưới dạng broadcast, ARP chỉ hoạt động được trong phạm vi cùng 1 mạng LAN (cùng broadcast domain) — muốn gửi dữ liệu sang mạng khác, thiết bị phải hỏi ARP để lấy MAC của default gateway (router), rồi gửi gói tin đến gateway đó để được định tuyến tiếp.

📋 Ví dụ bảng ARP (ARP table) thực tế

Ngay trên chính PC A trong ví dụ ở trên, có thể xem ARP cache bằng lệnh arp -a (Windows/macOS/Linux đều hỗ trợ lệnh này). Sau khi PC A đã từng ARP Request/Reply với PC B và với gateway của mạng, ARP cache trên PC A có thể trông như sau:

C:\> arp -a

Interface: 192.168.1.10 --- 0x4
  Internet Address      Physical Address      Type
  192.168.1.1            00-60-5c-32-7e-01     dynamic
  192.168.1.20           aa-aa-aa-bb-bb-bb     dynamic

Giải thích từng cột:

  • Interface: 192.168.1.10: chính là địa chỉ IP của PC A — cho biết đây là ARP cache thuộc về interface mạng nào trên máy PC A.
  • Internet Address: địa chỉ IP đã được ánh xạ — 192.168.1.1 là default gateway (router), 192.168.1.20 chính là PC B trong ví dụ ở trên.
  • Physical Address: địa chỉ MAC tương ứng — aa-aa-aa-bb-bb-bb chính là MAC BBBB của PC B mà PC A đã học được qua ARP Reply.
  • Type: dynamic nghĩa là entry được học tự động qua ARP (khác với static — entry được khai báo tay).

📎 Đây chính là ARP table, khác với MAC address table đã học ở trên: ARP table ánh xạ IP → MAC (do host/router xây dựng), còn MAC address table ánh xạ MAC → cổng vật lý (do switch xây dựng). Hai bảng phối hợp liên tiếp nhau trong cùng một lần gửi dữ liệu — ARP diễn ra trước để có MAC đích, rồi switch mới Learn/Flood/Forward dựa trên MAC đó.

⚠️ Lưu ý: Khi nhận được ARP Reply, thiết bị sẽ tin và cập nhật ngay vào ARP cache, chứ không có cách kiểm tra người trả lời có đúng là chủ của địa chỉ IP đó hay không. Kẻ tấn công có thể lợi dụng điểm này để gửi ARP Reply giả — dùng một địa chỉ MAC giả (thường là MAC của chính kẻ tấn công) — nhằm đánh lừa các thiết bị khác (gọi là ARP Spoofing). Đó cũng là lý do sau này chúng ta có Dynamic ARP Inspection (DAI) để kiểm tra và chặn các ARP Reply giả mạo.

📎 Mở rộng: Ngoài ARP Request/Reply thông thường, còn có Gratuitous ARP (thiết bị tự "thông báo" MAC của chính mình cho cả mạng, dùng để phát hiện trùng IP hoặc cập nhật ARP cache khi Router dự phòng chuyển đổi vai trò — sẽ gặp lại ở Bài 17 khi học FHRP) và Proxy ARP (Router trả lời hộ ARP Request cho thiết bị ở mạng khác — mặc định từng bật trên Cisco IOS, nay thường bị tắt vì lý do bảo mật).

🎯 Ví dụ minh họa toàn bộ quy trình — PC A gửi dữ liệu cho PC B lần đầu tiên:

Trong thực tế, Switch không đợi đến khi có Frame dữ liệu ứng dụng (ICMP, HTTP, SSH...) mới bắt đầu thực hiện cơ chế Learn/Flood/Forward. Ngay trong quá trình ARP Request/Reply, Switch đã bắt đầu học địa chỉ MAC của các thiết bị, vì ARP cũng được đóng gói trong Ethernet Frame và đi qua Switch giống như mọi loại lưu lượng Layer 2 khác.

Quy trình diễn ra như sau:

  1. PC A gửi ARP Request (Broadcast) để hỏi địa chỉ MAC của PC B. Frame này đi vào Switch qua cổng Fa0/1.
  2. Switch Learn: Khi nhận Frame, Switch ghi nhận địa chỉ MAC nguồn AAAA nằm trên cổng Fa0/1 và cập nhật vào MAC Address Table.
  3. MAC đích của ARP Request là địa chỉ Broadcast (FF:FF:FF:FF:FF:FF), Switch sẽ chuyển Frame này ra tất cả các cổng còn lại trong cùng VLAN (ngoại trừ cổng đã nhận). Đây là hành vi xử lý Broadcast Frame, không phải Unknown Unicast Flood.
  4. PC B nhận được ARP Request, xác định địa chỉ IP được hỏi là của mình và gửi ARP Reply (Unicast) về địa chỉ MAC AAAA.
  5. Khi ARP Reply đi vào Switch qua cổng Fa0/2, Switch tiếp tục Learn địa chỉ MAC BBBB trên cổng Fa0/2. Do Switch đã biết MAC AAAA từ bước trước, Frame ARP Reply được Forward trực tiếp đến cổng Fa0/1, không cần Flood.

Đến đây, bảng MAC của Switch đã có đầy đủ thông tin:

Địa chỉ MACCổng
AAAA Fa0/1
BBBB Fa0/2

Khi PC A gửi Frame dữ liệu thực sự (ví dụ ICMP, HTTP hoặc SSH) đến PC B, Switch đã biết chính xác vị trí của cả hai địa chỉ MAC nên sẽ Forward trực tiếp đến cổng Fa0/2 ngay từ Frame đầu tiên, không cần thực hiện Unknown Unicast Flood.

💡 Lưu ý: Unknown Unicast Flood chỉ xảy ra khi Switch chưa có địa chỉ MAC đích trong MAC Address Table. Trong điều kiện hoạt động bình thường, quá trình ARP Request/Reply thường đã giúp Switch học được địa chỉ MAC của cả hai thiết bị trước khi dữ liệu ứng dụng được truyền. Unknown Unicast Flood thường xuất hiện trong các tình huống như:

  • Switch vừa khởi động lại và bảng MAC còn trống.
  • Một mục trong MAC Address Table đã bị xóa sau khi hết Aging Time.
  • Lưu lượng đi bất đối xứng (Asymmetric Routing), khiến Switch nhận được Frame có địa chỉ MAC đích mà nó chưa từng học trên bất kỳ cổng nào.

ARP Request/Reply & Cơ chế Learn / Flood / Forward Switch đã học đủ 2 MAC ngay trong quá trình ARP, trước khi có Frame dữ liệu thật 1. ARP Request (Broadcast) PC A hỏi MAC của PC B Learn: Fa0/1 ➔ MAC AAAA 🔀 Switch (Flood) PC A Fa0/1 PC B Fa0/2 PC C Fa0/3 🔊 Flood ra Fa0/2 & Fa0/3 2. ARP Reply (Unicast) PC B trả lời thẳng PC A Learn: Fa0/2 ➔ MAC BBBB 🔀 Switch (Forward) PC A Fa0/1 PC B Fa0/2 PC C Fa0/3 ⚡ Forward thẳng Fa0/2 ➔ Fa0/1 3. Frame dữ liệu thực ICMP / HTTP / SSH... Đã có đủ: Fa0/1 & Fa0/2 🔀 Switch (Forward) PC A Fa0/1 PC B Fa0/2 PC C Fa0/3 ⚡ Forward ngay từ đầu (No Flood) 💡 Unknown Unicast Flood chỉ xảy ra khi bảng MAC trống (khởi động lại, hết Aging Time, hoặc traffic bất đối xứng) — không phải với Frame dữ liệu ứng dụng đầu tiên như ở Bước 3.

Bảng MAC không lưu vĩnh viễn — có thời gian hết hạn (Aging Time): Theo mặc định, Switch Cisco sử dụng Aging Time = 300 giây. Nếu trong khoảng thời gian này Switch tiếp tục nhận được Frame từ cùng địa chỉ MAC, bộ đếm sẽ được làm mới và mục đó tiếp tục được giữ lại trong bảng MAC. Chỉ khi không còn lưu lượng trong suốt 300 giây, Switch mới xóa mục này. Điều này giúp bảng MAC luôn cập nhật đúng thực tế — nếu bạn rút dây mạng của PC A và cắm vào cổng khác, Switch sẽ tự học lại vị trí mới sau khi bảng cũ hết hạn.


💬 Hỏi & Đáp nhanh

❓ Nếu Switch chưa học được MAC đích, nó có gửi luôn cho tất cả các máy trong mạng đọc được nội dung không?

✅ Có gửi ra tất cả các cổng (Flood), nhưng chỉ có thiết bị đúng địa chỉ MAC đích mới xử lý và giữ lại Frame đó, các thiết bị khác nhận được nhưng sẽ tự động bỏ qua vì không phải MAC của chúng — không phải "ai cũng đọc được nội dung" theo nghĩa can thiệp được.

❓ Vì sao bảng MAC cần có thời gian hết hạn (aging time), sao không giữ mãi mãi cho tiện?

✅ Vì thiết bị mạng có thể di chuyển — ví dụ rút laptop cắm sang cổng khác, hoặc thay hẳn thiết bị mới ở cùng vị trí cũ. Nếu giữ bảng MAC mãi mãi, Switch sẽ gửi nhầm dữ liệu đến cổng cũ đã không còn đúng thiết bị. Aging time đảm bảo bảng MAC luôn phản ánh đúng thực tế hiện tại.

❓ Filter khác Forward ở điểm nào, vì cả hai đều là Switch "đã biết vị trí MAC"?

✅ Khác biệt nằm ở vị trí MAC nguồn và đích có trùng cổng hay không. Forward là khi 2 MAC ở 2 cổng khác nhau — cần chuyển Frame sang cổng khác. Filter là khi MAC đích đã ở cùng cổng với MAC nguồn (2 thiết bị nối chung 1 Hub cắm vào cùng 1 cổng switch chẳng hạn) — Switch nhận ra không cần chuyển đi đâu cả, tự loại bỏ Frame đó.

❓ Vì sao ARP Request phải gửi broadcast, không gửi thẳng cho PC B luôn cho nhanh?

✅ Vì PC A chưa biết địa chỉ MAC của PC B — mà để gửi Unicast, bắt buộc phải có MAC đích trước. Đây chính là "con gà quả trứng" của ARP: PC A không có MAC để gửi riêng, nên đành hỏi cả mạng bằng broadcast, và chỉ chủ nhân đúng địa chỉ IP đó (PC B) mới trả lời lại.

❓ ARP Spoofing nguy hiểm ở chỗ nào, và Dynamic ARP Inspection (DAI) chặn bằng cách nào?

✅ Vì thiết bị nhận ARP Reply luôn tin tưởng vô điều kiện, kẻ tấn công có thể giả làm gateway hoặc PC B để "đánh cắp" lưu lượng (Man-in-the-Middle) hoặc gây gián đoạn kết nối. DAI chặn kiểu tấn công này bằng cách đối chiếu từng gói ARP Reply đi qua switch với 1 danh sách IP–MAC hợp lệ (thường lấy từ DHCP Snooping binding table) — nếu ARP Reply có cặp IP–MAC không khớp danh sách, switch sẽ loại bỏ gói đó ngay, không cho cập nhật vào ARP cache của các máy khác.


📝 Bài tập đánh giá

Câu 1: Switch thực hiện hành động "Flood" trong trường hợp nào?

  • A. Khi đã biết chính xác MAC đích ở cổng nào
  • B. Khi chưa biết MAC đích nằm ở cổng nào trong bảng MAC
  • C. Khi MAC nguồn và đích ở cùng 1 cổng
  • D. Khi switch mới khởi động lần đầu, chưa cắm dây nào

Câu 2: Mặc định, sau bao lâu Switch Cisco sẽ xóa một mục trong bảng MAC nếu không có Frame nào từ địa chỉ MAC đó?

  • A. 30 giây
  • B. 60 giây
  • C. 300 giây
  • D. Không bao giờ xóa

Câu 3: Trường nào trong Ethernet Frame cho Switch biết Payload bên trong thuộc giao thức gì (ví dụ IPv4 hay ARP)?

  • A. Preamble
  • B. FCS
  • C. EtherType
  • D. Destination MAC

Câu 4: PC A gửi ARP Request để hỏi MAC của PC B. Gói ARP Reply mà PC B gửi lại thuộc loại Frame nào?

  • A. Broadcast, gửi cho tất cả thiết bị trong mạng
  • B. Unicast, gửi thẳng về đúng MAC của PC A
  • C. Multicast, gửi cho 1 nhóm thiết bị
  • D. Không cần đóng gói thành Ethernet Frame

👉 Đáp án:

Câu 1: B — Flood xảy ra khi Switch chưa học được vị trí cổng của MAC đích, buộc phải gửi ra tất cả các cổng còn lại để đảm bảo Frame đến đúng nơi.

Câu 2: C — Thời gian hết hạn mặc định (aging time) của bảng MAC trên switch Cisco là 300 giây (5 phút).

Câu 3: C — EtherType là trường 2 byte cho biết Payload thuộc giao thức nào, ví dụ 0x0800 là IPv4, 0x0806 là ARP.

Câu 4: B — ARP Reply luôn được gửi dưới dạng Unicast, vì PC B đã biết chính xác địa chỉ MAC của PC A (lấy từ trường Source MAC trong gói ARP Request vừa nhận), nên không cần broadcast lại cho cả mạng.


📚 Bài viết thuộc khóa học CCNA của VNExperts.

🧭 Điều hướng

⬅️ Bài trước🏠 Mục lục khóa họcBài kế tiếp ➡️
Bài 15: Ảo hóa mạng Mục lục khóa học CCNA Bài 17: Cân bằng tải & dự phòng — FHRP tổng quan