Switch là gì, và vì sao mạng cần switch?
Làm sao để A nói với C mà B và D không phải nghe?
Ở Ethernet dùng chung, tất cả máy cùng nối vào một đường truyền.
A gửi một khung thì B, C, D đều nhìn thấy nó. Nếu hai máy cùng phát một lúc, tín hiệu va vào nhau và cả hai phải thử lại.
Cách này hoạt động khi mạng còn nhỏ. Nhưng càng thêm máy, mọi người càng phải chia nhau cùng một đường truyền.
Làm sao để A nói với C mà không ảnh hưởng tới B và D?
Ngày nay việc đó do bộ chuyển mạch (switch) làm. Nhưng trước switch, Ethernet đã trải qua một bước trung gian đơn giản hơn nhiều: hub.
Hub làm dây gọn hơn, nhưng chưa tách được các máy
Ethernet đời đầu thường dùng cáp đồng trục chạy dọc qua nhiều máy. Với 10BASE5, một đoạn cáp có thể dài tới 500 m.
Cách đi dây này khá bất tiện trong một toà nhà. Thêm, bớt hoặc di chuyển một máy đều phải đụng tới đường cáp chung.
Ethernet trên dây xoắn đôi đổi cách bố trí đó.
Mỗi máy kéo một sợi dây riêng về một điểm ở giữa. Ở đó đặt một hub.
Nhìn bên ngoài, hub khá giống switch: một cái hộp có nhiều cổng mạng.
Nhưng hub không hiểu khung Ethernet.
Khi tín hiệu đi vào một cổng, hub chỉ lặp lại tín hiệu đó ra tất cả các cổng còn lại.
Nếu A gửi dữ liệu cho C:
A ──┐
B ──┤
C ──┼── HUB
D ──┘
thì tín hiệu vẫn đi tới B, C và D.
C nhận vì địa chỉ trên khung là của mình. B và D bỏ qua.
Nếu A và B cùng phát, tín hiệu vẫn có thể va chạm. Hub chỉ lặp lại những gì nó nhận được, kể cả tín hiệu đang va chạm.
Vì vậy cách đi dây đã thay đổi, nhưng về mặt truyền dữ liệu, các máy vẫn đang chia sẻ cùng một miền va chạm (collision domain).
Thử hai tình huống dưới đây với một hub.
Hub không đọc khung, chỉ lặp tín hiệu.
Muốn tách chúng ra, thiết bị ở giữa phải làm được nhiều hơn việc lặp tín hiệu.
Nó phải nhìn vào khung Ethernet.
Switch nhìn địa chỉ MAC trước khi chuyển khung
Một switch Ethernet có nhiều cổng giống hub, nhưng cách hoạt động khác hẳn.
Khi một khung đi vào, switch nhìn phần đầu của khung để biết địa chỉ MAC đích.
Sau đó nó quyết định khung cần đi ra cổng nào.
Ví dụ:
A ── cổng 1
B ── cổng 2
C ── cổng 3
D ── cổng 4
SWITCH
Nếu switch biết C nằm ở cổng 3, khung:
A → C
chỉ cần đi:
cổng 1 → switch → cổng 3
B và D không nhận khung đó.
Đây là khác biệt lớn nhất giữa hub và switch.
Hub nhận tín hiệu rồi phát lại gần như khắp nơi.
Switch nhìn địa chỉ rồi chuyển khung tới nơi cần thiết.
Vì sao switch làm mạng nhanh hơn?
Giả sử có bốn máy:
A ↔ C
B ↔ D
Với hub, hai cuộc trao đổi này vẫn dùng chung một môi trường truyền. A và B không thể cứ thế phát đồng thời mà không có nguy cơ va chạm.
Với switch, đường A–C và B–D độc lập với nhau.
A có thể gửi cho C trong lúc B gửi cho D.
Mỗi cổng switch tạo thành một liên kết riêng thay vì tất cả các máy cùng nằm trên một đường truyền vật lý chung.
Khi một máy được nối trực tiếp với một cổng switch, hai đầu còn có thể chạy song công toàn phần (full-duplex): gửi và nhận cùng lúc.
Trên một liên kết song công toàn phần như vậy không còn va chạm Ethernet, nên cơ chế CSMA/CD dùng để tranh quyền phát trên cáp chung cũng không còn cần thiết.
Vì thế switch không chỉ làm dây gọn hơn. Nó thay đổi cách các máy chia sẻ đường truyền.
Một switch Ethernet về bản chất là một cầu nối (bridge) nhiều cổng. Các cầu nối Ethernet ban đầu làm cùng công việc cơ bản: quan sát địa chỉ MAC và chỉ chuyển khung sang phần mạng cần thiết. Khi số cổng tăng và phần cứng xử lý nhanh hơn, dạng thiết bị này trở thành switch Ethernet quen thuộc ngày nay.
Đầu thập niên 1990, switch Ethernet thương mại bắt đầu phổ biến. Kalpana là một trong những công ty tiên phong trong lĩnh vực này và được Cisco mua lại năm 1994.
Nhưng ở đây xuất hiện một câu hỏi mới.
Switch nhìn thấy địa chỉ MAC đích, nhưng làm sao nó biết địa chỉ đó nằm ở cổng nào?
Switch tự học máy nào nằm ở đâu
Khi vừa bật lên, switch chưa biết gì về các máy đang nối vào nó.
Không cần ai cấu hình bảng địa chỉ bằng tay.
Switch học từ chính những khung đi qua nó.
Giả sử A có địa chỉ MAC AA và gửi một khung vào cổng 1.
Trong khung có cả địa chỉ nguồn và địa chỉ đích:
Nguồn: AA
Đích: CC
Switch nhìn địa chỉ nguồn và suy ra:
AA → cổng 1
Vì khung mang địa chỉ AA vừa đi vào từ cổng 1, nên muốn gửi dữ liệu ngược lại cho AA, đó chính là cổng cần dùng.
Switch ghi thông tin này vào bảng MAC của nó.
Ví dụ sau một lúc:
| MAC | Cổng |
|---|---|
| AA | 1 |
| BB | 2 |
| CC | 3 |
| DD | 4 |
Từ đó, nếu một khung có địa chỉ đích CC, switch biết chỉ cần gửi nó ra cổng 3.
Nhưng lúc mới bật lên, bảng còn trống.
Nếu A gửi cho C mà switch chưa biết CC nằm ở đâu thì sao?
Chưa biết đích thì switch gửi đi tìm
Switch không thể đoán cổng của C.
Nó cũng không thể bỏ khung đi.
Vì vậy, với một địa chỉ đích chưa có trong bảng, switch gửi khung ra tất cả các cổng còn lại trong cùng mạng Ethernet, trừ cổng mà khung vừa đi vào.
Việc này gọi là gửi tràn (flooding).
C sẽ nhận khung vì địa chỉ đích là của nó. Những máy khác nhìn thấy địa chỉ không phải của mình thì bỏ qua.
Khi C trả lời, khung từ C đi vào switch.
Switch nhìn địa chỉ nguồn:
CC → cổng 3
và học được vị trí của C.
Từ lần sau, khung gửi tới CC không cần gửi tràn nữa. Switch có thể đưa thẳng ra cổng 3.
Thử cho A gửi tới C hai lần và xem bảng MAC thay đổi như thế nào:
Switch chưa biết C ở đâu.
Bảng MAC
| MAC | Cổng |
|---|---|
| — | — |
Switch thật còn xử lý khung gửi cho mọi máy (broadcast), khung gửi cho một nhóm máy (multicast), mạng LAN ảo (VLAN) và nhiều trường hợp khác. Các mục trong bảng MAC cũng không tồn tại mãi: nếu một địa chỉ không xuất hiện trong một khoảng thời gian, switch sẽ quên nó để bảng có thể thích nghi khi thiết bị được chuyển sang cổng khác.
Nhưng cơ chế cốt lõi chỉ cần hai việc:
nhìn địa chỉ MAC nguồn để học vị trí, rồi dùng địa chỉ MAC đích để quyết định chuyển khung đi đâu.
Nhờ vậy, một mạng trong văn phòng có thể chứa hàng chục hoặc hàng trăm máy mà không còn bắt tất cả chia sẻ cùng một sợi cáp như Ethernet ban đầu.
Nhưng bảng MAC chỉ trả lời một câu hỏi rất cục bộ:
Địa chỉ MAC này nằm ở cổng nào của switch?
Nó không cho biết máy đó đang ở tầng nào, thành phố nào hay mạng nào trên Internet.
Switch có thể đưa khung tới đúng máy trong mạng của nó.
Còn nếu máy đích nằm ở một mạng khác thì cần một loại địa chỉ khác.
Internet có hàng triệu mạng riêng biệt.
Gửi dữ liệu sang mạng khác, máy tính phải ghi địa chỉ gì?
Nguồn bài viết (3)
- An Introduction to Computer Networks — 2 Ethernet (Peter L. Dordal) · Loyola University Chicago
- Cisco to Acquire Kalpana, Leading Ethernet Switching Company · Cisco
- IEEE Milestone: Ethernet Local Area Network (LAN), 1973-1985 · IEEE History Center (ETHW)