Mạng LAN là gì? Vì sao Ethernet cần địa chỉ MAC?
Nhiều máy chung một đường truyền, sao mỗi máy biết dữ liệu nào của mình?
Hai máy muốn trao đổi dữ liệu, nối một sợi dây giữa chúng là đủ.
Nhưng nếu 10 máy đều cần nối trực tiếp với nhau, ta cần:

10 máy cần 10 × 9 ÷ 2 = 45 đường nối. Chia cho 2 vì đường từ A tới B và từ B tới A là cùng một đường.
Với 100 máy, con số thành 4.950.
Cách nối từng cặp rõ ràng không thể đi xa.
Đầu những năm 1970, Xerox PARC thử một ý tưởng khác: thay vì cho mỗi cặp máy một đường riêng, cho tất cả dùng chung một đường truyền.
Đó là Ethernet.
Nhưng cách này tạo ra ngay một câu hỏi:
Nhiều máy chung một đường truyền, sao mỗi máy biết dữ liệu nào của mình?
Cả toà nhà dùng chung một sợi cáp
Xerox PARC khi đó đang phát triển Alto, một trong những máy tính cá nhân đầu tiên có màn hình, bàn phím và chuột.
Các máy Alto cần dùng chung máy in laser, máy chủ lưu file và kết nối ra những mạng khác.
Ngày 22/5/1973, Bob Metcalfe viết bản ghi nhớ đề xuất mạng sau này trở thành Ethernet. Ông chịu ảnh hưởng từ ALOHAnet ở Đại học Hawaii, nơi nhiều trạm cùng chia sẻ một kênh vô tuyến.
Ethernet đem ý tưởng đó vào một sợi cáp đồng trục chạy qua toà nhà.
Mỗi máy nối vào cùng sợi cáp.
Nếu A phát tín hiệu:
A ───── B ───── C ───── D
tín hiệu chạy dọc đường truyền. B, C và D đều có thể thấy nó.
Nếu A chỉ muốn gửi cho C, dữ liệu cần mang theo một thông tin nữa:
Khung này dành cho C.
Mỗi giao diện mạng cần một địa chỉ
Ethernet chia dữ liệu thành từng khung (frame).
Ở đầu mỗi khung có địa chỉ của máy gửi và máy nhận:
┌────────────────────┐
│ MAC đích │
├────────────────────┤
│ MAC nguồn │
├────────────────────┤
│ Loại dữ liệu │
├────────────────────┤
│ Dữ liệu │
├────────────────────┤
│ Kiểm tra lỗi │
└────────────────────┘
Địa chỉ đó gọi là địa chỉ MAC (MAC address).
Địa chỉ Ethernet thông thường dài 48 bit, thường được viết thành sáu nhóm số hệ mười sáu (hexadecimal):
a4:83:e7:2f:19:c0
Giả sử A gửi một khung có MAC đích là địa chỉ của C.
Tín hiệu vẫn chạy trên sợi cáp chung, nên B, C và D đều thấy khung đó.
Nhưng mỗi card mạng nhìn vào MAC đích:
MAC đích = C
↓
A ───────── B ───────── C ───────── D
bỏ nhận bỏ
C thấy địa chỉ trùng với mình nên nhận khung.
B và D thấy địa chỉ khác nên bỏ qua.
Đó là vai trò quan trọng nhất của địa chỉ MAC ở đây: cho các giao diện trên cùng mạng Ethernet biết khung nào dành cho mình.
Ngày nay địa chỉ MAC còn có nhiều chi tiết hơn, chẳng hạn hệ điều hành có thể tạo địa chỉ cục bộ hoặc thay đổi địa chỉ trên Wi-Fi. Nhưng với cơ chế Ethernet đang xét, ta chỉ cần giữ ý trên.
Vậy là giải quyết được chuyện ai nhận.
Nhưng vẫn còn một vấn đề khác.
Hai máy cùng phát thì sao?
Giả sử A đang gửi.
Đúng lúc đó D cũng bắt đầu phát:
A ───────── B ───────── C ───────── D
───────> <───────
Hai tín hiệu cùng tồn tại trên một sợi cáp và chồng lên nhau.
Khung không còn đọc được.
Đó là va chạm (collision).
Ethernet cáp chung xử lý chuyện này bằng cơ chế đa truy cập nghe sóng mang, có phát hiện va chạm (CSMA/CD). Tên đầy đủ khá dài, nhưng nguyên tắc chỉ có ba bước.
Nghe trước khi phát
Trước khi gửi, máy kiểm tra đường truyền.
Nếu cáp đang bận, nó chờ.
Nếu cáp đang yên, nó bắt đầu phát.
Nhưng vẫn có trường hợp A và D ở xa nhau, cùng kiểm tra gần như một lúc. Cả hai đều thấy cáp đang yên rồi cùng phát.
Vừa phát vừa nghe
Tín hiệu cần thời gian để đi từ đầu này sang đầu kia.
Vì vậy trong lúc phát, máy vẫn tiếp tục theo dõi đường truyền.
Nếu phát hiện tín hiệu bị chồng lên nhau, nó biết đã xảy ra va chạm và dừng khung hiện tại.
Chờ rồi thử lại
Nếu A và D cùng phát lại ngay lập tức, chúng có thể va chạm lần nữa.
Vì vậy mỗi máy chờ một khoảng ngẫu nhiên rồi mới thử lại.
Nếu tiếp tục va chạm, khoảng thời gian có thể chọn sẽ lớn dần. Cơ chế này gọi là lùi thời gian theo cấp số nhân (binary exponential backoff).
Thử hai tình huống dưới đây để xem chuyện gì xảy ra trên một sợi cáp chung.
Tất cả máy đều thấy khung. Chỉ máy có MAC CC nhận nó.
Hai tín hiệu chồng lên nhau nên khung bị hỏng. A và D phải thử lại.
Va chạm không phải một sự cố bất thường của Ethernet kiểu cũ. Nó là thứ thiết kế này đã tính tới từ đầu.
Vì sao khung Ethernet không được quá ngắn?
Có một hệ quả khá thú vị của va chạm.
Giả sử A và D nằm ở hai đầu xa nhất của mạng.
A bắt đầu phát.
Trước khi tín hiệu của A kịp tới D, D cũng bắt đầu phát.
Va chạm xảy ra gần phía D, rồi tín hiệu của va chạm phải mất thêm thời gian để quay trở lại A.
Nếu khung của A quá ngắn, có thể xảy ra chuyện:
A phát xong
↓
A tưởng đã gửi thành công
↓
tín hiệu va chạm mới quay về tới A
A sẽ không biết khung vừa bị hỏng.
Vì vậy Ethernet cổ điển quy định khung phải dài ít nhất 64 byte.
Trong giới hạn kích thước mạng cho phép, khoảng thời gian phát một khung tối thiểu phải đủ lâu để máy gửi vẫn còn đang phát khi một va chạm ở xa có thể quay trở lại.
Đây là lý do tốc độ Ethernet, chiều dài mạng và kích thước khung không hoàn toàn độc lập với nhau.
Một sợi cáp, tất cả phải chia nhau
Ethernet đời đầu giải được một bài toán lớn: không còn phải kéo dây giữa từng cặp máy.
Nhưng cái giá là tất cả cùng chia sẻ một đường truyền.
Khi A đang phát, những máy khác phải chờ.
Nếu hai máy cùng phát, chúng có thể va chạm.
Càng nhiều máy, càng nhiều thiết bị phải tranh nhau cùng một sợi cáp.
Đến năm 1980, DEC, Intel và Xerox công bố đặc tả Ethernet 10 Mbps. Ethernet sau đó trở thành công nghệ chủ đạo để xây mạng có dây trong nhà, văn phòng và toà nhà.
Những mạng trong phạm vi nhỏ như vậy thường được gọi là mạng cục bộ (LAN, Local Area Network).
Nhưng mô hình cáp chung vẫn còn một giới hạn rất rõ:
nhiều máy
↓
cùng dùng một đường truyền
↓
phải chờ nhau
↓
có thể va chạm
Muốn mạng nhanh hơn, ta cần bỏ việc bắt tất cả máy cùng chia sẻ một đường truyền.
Làm sao để A nói với C mà B và D không phải nghe?
Nguồn bài viết (6)
- May 22: Xerox Researcher Proposes "Ethernet" · Computer History Museum
- IEEE Milestone: Ethernet Local Area Network (LAN), 1973-1985 · IEEE History Center (ETHW)
- IEEE Milestone: Demonstration of the ALOHA Packet Radio Data Network, 1971 · IEEE History Center (ETHW)
- An Introduction to Computer Networks — 2 Ethernet (Peter L. Dordal) · Loyola University Chicago
- Guidelines for Use of Extended Unique Identifier (EUI), OUI · IEEE Registration Authority
- Brief History of the Internet · Internet Society