Ethernet, MAC & ARP — mạng LAN hoạt động thế nào
Trong một mạng LAN, máy tìm và nói chuyện với nhau bằng địa chỉ MAC chứ không phải IP. Bài này giải thích Ethernet frame, địa chỉ MAC, cách switch học port, và ARP — cầu nối 'IP nào ↔ MAC nào'. Đây là tầng thấp nhất, nền cho mọi mạng cục bộ.
TL;DR: Hai máy trong cùng một mạng LAN không nói chuyện bằng IP — chúng dùng địa chỉ MAC (48-bit, gắn cứng vào card mạng) ở tầng Link, đóng dữ liệu vào Ethernet frame. Một switch học xem MAC nào ở cổng nào để chuyển frame đúng chỗ. Nhưng app chỉ biết IP đích, không biết MAC — nên cần ARP: máy gửi broadcast "ai có IP 192.168.1.5?", máy đó trả lời "tôi, MAC bb:bb:..". MAC chỉ có nghĩa trong một LAN; ra khỏi LAN phải nhờ router. Hiểu tầng này là hiểu nền móng của mọi mạng cục bộ — cách "IP gặp phần cứng".
Hai chiếc laptop nối cùng một Wi-Fi ở nhà. Bạn AirDrop / gửi file từ máy này sang máy kia. Dữ liệu không đi ra Internet rồi vòng về — nó đi thẳng giữa hai máy trong phòng. Nhưng làm sao máy A "tìm" được máy B giữa nhiều thiết bị cùng mạng, khi cả hai chỉ vừa nối Wi-Fi và chưa biết gì về nhau?
Câu trả lời nằm ở tầng thấp nhất — tầng Link — với ba mảnh ghép: Ethernet frame, địa chỉ MAC, và giao thức ARP. Bài này giải thích cả ba, và vì sao chúng là nền tảng cho mọi mạng cục bộ.
1. Analogy — Gọi tên trong phòng họp
Bạn vào một phòng họp đông người, cần đưa tài liệu cho "anh Minh" nhưng không biết anh ngồi đâu. Bạn hô to cả phòng: "Anh Minh ngồi đâu ạ?". Mọi người đều nghe, nhưng chỉ anh Minh giơ tay: "Tôi đây, bàn số 3". Giờ bạn biết chính xác chỗ và đưa tài liệu thẳng cho anh, không hô nữa.
Đó chính xác là ARP trong một LAN:
| Phòng họp | Mạng LAN |
|---|---|
| "Anh Minh ngồi đâu?" (hô cả phòng) | ARP request (broadcast tới mọi máy) |
| Chỉ anh Minh giơ tay | ARP reply (chỉ máy đúng IP trả lời) |
| "Bàn số 3" | Địa chỉ MAC của máy đó |
| Đưa thẳng tài liệu cho anh | Gửi frame trực tiếp tới MAC đó |
| Tên "anh Minh" | Địa chỉ IP (cái bạn biết trước) |
Trong LAN: bạn biết IP (tên), nhưng để gửi được phải có MAC (vị trí vật lý). ARP là bước "hỏi cả phòng để biết ai ở đâu". Hỏi một lần rồi nhớ (cache), khỏi hỏi lại.
2. Ethernet frame & địa chỉ MAC
Ở tầng Link, dữ liệu được đóng vào Ethernet frame — đơn vị truyền trong LAN. Một frame (giản lược) gồm:
Trường cuối FCS (Frame Check Sequence) là một checksum để máy nhận phát hiện frame có bị lỗi bit trên đường truyền không — sai thì loại bỏ frame.
Địa chỉ MAC (Media Access Control) là số 48-bit, viết dạng 6 cặp hex (hệ thập lục phân, mỗi chữ số biểu diễn 4 bit, dùng 0–9 và a–f), ví dụ a4:83:e7:1b:9c:0d. Nó được gắn cứng vào card mạng (NIC) từ nhà sản xuất — 24 bit đầu là OUI (Organizationally Unique Identifier — mã định danh hãng sản xuất do IEEE cấp), 24 bit sau là số seri của thiết bị. Xem MAC máy bạn:
ip link # Linux: dong "link/ether a4:83:e7:..."
# macOS: ifconfig en0 | grep ether
Khác với IP (gán theo mạng, đổi được), MAC gắn với thiết bị. Trong frame, Dst MAC và Src MAC cho biết frame đi từ card nào tới card nào — trong phạm vi một LAN.
3. Switch học port mapping thế nào
Nhiều máy trong LAN cắm vào một switch. Switch không phát frame ra mọi cổng (đó là hub đời cũ) — nó học xem MAC nào nằm ở cổng nào, rồi chuyển frame đúng cổng.
Bảng MAC switch học được
Cơ chế: mỗi frame đi vào, switch nhìn Src MAC để học "MAC này ở cổng này". Khi cần chuyển frame có Dst MAC đã biết, nó gửi đúng một cổng. Nếu Dst MAC chưa biết, nó flood (gửi ra mọi cổng) một lần để học.
4. ARP — cầu nối IP sang MAC
Vấn đề mấu chốt: tầng trên (Internet) làm việc với IP, nhưng frame ở tầng Link cần MAC đích. Khi máy A muốn gửi cho IP 192.168.1.5 trong cùng LAN mà chưa biết MAC của nó, A chạy ARP (Address Resolution Protocol):
sequenceDiagram
participant A as May A (192.168.1.10)
participant LAN as Broadcast toan LAN
participant B as May B (192.168.1.5)
A->>LAN: ARP request — "Ai co IP 192.168.1.5?"
LAN-->>B: Moi may deu nhan, chi B dung IP
B->>A: ARP reply — "192.168.1.5 o MAC bb:bb:.." (unicast)
Note over A: Luu (IP -> MAC) vao ARP cache,<br/>roi gui frame thang toi bb:bb- ARP request gửi tới địa chỉ broadcast
ff:ff:ff:ff:ff:ff(broadcast = gửi một lần tới mọi máy trong LAN) — nên mọi máy đều nhận. - Chỉ máy đúng IP reply dạng unicast (unicast = gửi riêng tới một đích duy nhất) kèm MAC của mình.
- Máy A lưu cặp
(IP → MAC)vào ARP cache để lần sau khỏi hỏi lại.
Xem ARP cache máy bạn:
arp -a # liet ke cap IP <-> MAC da hoc
# hoac: ip neigh (Linux)
5. Broadcast domain — vì sao MAC chỉ trong LAN
ARP dựa trên broadcast — và broadcast chỉ lan trong một broadcast domain (một mạng LAN). Bạn không thể ARP một máy ở Internet: hô "ai có IP 142.250.x.x?" trong LAN nhà mình thì không ai trả lời, vì máy đó ở mạng khác.
Đó là lý do MAC không định tuyến được ra ngoài LAN. Khi đích ở mạng khác, máy bạn không ARP đích — nó gửi frame tới MAC của router (default gateway), và để router lo chặng tiếp theo. "Cùng mạng thì gửi thẳng, khác mạng thì đưa cho gateway" — ranh giới "cùng/khác mạng" do subnet quyết định (bài kế).
Nhớ quy tắc ở bài mô hình 4 tầng: IP đích giữ nguyên, MAC đổi mỗi chặng. Giờ bạn thấy vì sao: mỗi chặng là một LAN riêng, và trong mỗi LAN, frame phải mang MAC của trạm kế tiếp — học được qua ARP.
6. Pitfall — hiểu nhầm thường gặp
❌ Nhầm 1: "Máy nói chuyện với nhau bằng IP." ✅ Trong cùng LAN, frame được gửi tới MAC, không phải IP. IP chỉ là thứ ARP dùng để tra ra MAC. App nghĩ theo IP; dây mạng chạy theo MAC.
❌ Nhầm 2: "Có IP của máy ở mạng khác là ping/ARP được nó." ✅ ARP chỉ hoạt động trong LAN (broadcast domain). Máy ở mạng khác phải đi qua router; bạn không bao giờ thấy MAC của một máy ngoài Internet trong ARP cache của mình.
❌ Nhầm 3: "ARP cache luôn đúng."
✅ Cache có thời hạn và có thể lỗi thời (máy đổi card, đổi IP). Tệ hơn, kẻ tấn công trong LAN có thể trả lời ARP giả mạo (ARP spoofing) để chen vào giữa — một lý do mạng nội bộ vẫn cần cảnh giác. ip neigh cho thấy trạng thái cache (REACHABLE/STALE).
7. 📚 Deep Dive — tài liệu gốc
Đọc khi muốn tới gốc tầng Link:
- RFC 826 — Address Resolution Protocol — định nghĩa gốc của ARP (request/reply, broadcast).
- IEEE 802.3 — chuẩn Ethernet (frame format, MAC).
- RFC 7042 — cách phân bổ địa chỉ MAC (OUI) và Ethernet type.
Ghi chú: ARP cũ nhưng vẫn chạy khắp mọi LAN IPv4 hôm nay (IPv6 thay bằng Neighbor Discovery). Hiểu ARP là hiểu cách "IP gặp phần cứng".
8. Tóm tắt
- Trong một LAN, máy nói chuyện bằng địa chỉ MAC (48-bit, gắn cứng vào NIC), đóng dữ liệu trong Ethernet frame (Dst MAC, Src MAC, Type, Payload, FCS).
- Switch học
Src MAC ↔ cổngđể chuyển frame đúng cổng; chưa biết thì flood ra mọi cổng một lần. - ARP phân giải
IP → MACtrong LAN: broadcast request "ai có IP này?", máy đúng reply unicast kèm MAC; kết quả lưu vào ARP cache. - ARP chỉ chạy trong một broadcast domain (một LAN) — nên MAC không định tuyến ra ngoài; khác mạng thì gửi tới MAC của gateway.
- Quy tắc Module 1 sáng tỏ: IP đích cố định, MAC đổi mỗi chặng vì mỗi chặng là một LAN với ARP riêng.
9. Tự kiểm tra
Q1Hai máy trong cùng Wi-Fi gửi file cho nhau. Vì sao nói chúng dùng MAC chứ không phải IP để gửi, dù app chỉ định IP đích?▸
Q2Mô tả các bước ARP khi máy A (192.168.1.10) muốn gửi cho 192.168.1.5 trong cùng LAN mà chưa biết MAC của nó.▸
- A gửi ARP request dạng broadcast (tới
ff:ff:ff:ff:ff:ff): "ai có IP 192.168.1.5?". Mọi máy trong LAN đều nhận. - Chỉ máy đúng IP reply (unicast): "192.168.1.5 ở MAC bb:bb:..".
- A lưu cặp
(IP → MAC)vào ARP cache, rồi gửi frame thẳng tới MAC đó. Lần sau khỏi hỏi lại.
Q3Vì sao bạn không bao giờ thấy MAC của google.com trong ARP cache máy mình?▸
Q4Switch khác hub ở điểm gì, và 'học port' nghĩa là gì?▸
Q5Vì sao ARP request phải gửi dạng broadcast, còn ARP reply lại gửi dạng unicast?▸
ff:ff:ff:ff:ff:ff) cho mọi máy trong LAN cùng nghe, để máy đúng IP tự nhận ra. Khi reply, máy đích đã đọc được Src MAC của bên hỏi trong frame request, nên nó biết chính xác gửi về đâu và dùng unicast — gửi riêng, đỡ làm phiền cả LAN. Nguyên tắc: broadcast khi chưa biết đích, unicast khi đã biết.Q6Địa chỉ MAC và địa chỉ IP khác nhau căn bản ở chỗ nào về 'gắn với cái gì'?▸
Bài tiếp theo: Địa chỉ IP — IPv4, IPv6 và dải private
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên