Ethernet, MAC & ARP — mạng LAN hoạt động thế nào
Trong LAN máy tìm nhau bằng MAC chứ không phải IP: Ethernet frame, địa chỉ MAC, switch học port, và ARP nối IP nào với MAC nào ở tầng Link.
TL;DR: Hai máy trong cùng một mạng LAN không nói chuyện bằng IP mà 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. Tầng này là 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ề, mà đ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 Link, tầng thấp nhất, với ba mảnh ghép: Ethernet frame, địa chỉ MAC, và giao thức ARP. Bài này đi qua cả ba, rồi trả lời vì sao MAC không bao giờ vượt ra khỏi LAN.
Ôn lại kiến thức nền tảng từ bài mo hinh tcp ip 4 tang trước khi đi sâu vào nội dung bài học này.
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.
ARP trong một LAN chạy đúng như vậy:
| 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. Nhà sản xuất ghi cứng nó vào card mạng (NIC): 24 bit đầu là OUI (Organizationally Unique Identifier, mã định danh hãng 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.
Thử ngẫmbạn đổi Wi-Fi từ nhà sang quán cà phê, MAC card mạng giữ nguyên nhưng IP đổi. Vì sao kết nối TCP đang mở tới server lại rớt, dù thứ "định danh thiết bị" không hề thay đổi?
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 như 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.
Switch lo phần chuyển frame khi frame đã có MAC đích. Còn máy gửi lấy MAC đích ở đâu ra, khi app chỉ đưa cho nó một IP?
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):

- 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)
Thử ngẫmtrong một văn phòng 200 máy dùng chung switch, mỗi ARP request là một broadcast mà MỌI máy phải nhận và xử lý. Nếu ARP cache không tồn tại, mạng đó chịu thêm gánh nặng gì mỗi khi có gói tin mới?
5. Broadcast domain — vì sao MAC chỉ có nghĩa 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.
Vì vậy 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 mà gửi frame tới MAC của router (default gateway), để router lo chặng tiếp theo. Cùng mạng thì gửi thẳng, khác mạng thì đưa cho gateway; còn ranh giới "cùng/khác mạng" do subnet quyết định, chuyện của 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ó.
- 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?
- 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?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Module 2 — Địa chỉ & Định tuyến: tổng quan
Bài tiếpĐịa chỉ IP — IPv4, IPv6 và dải private
Thảo luận & góp ý
Hỏi đáp về bài này