Định Tuyến: Router, Gateway và Bảng Định Tuyến

K
Kai··5 min read

Bài 3 cho thấy trong một LAN, các máy nói chuyện trực tiếp qua MAC. Nhưng khi đích ở mạng khác — một máy chủ trên Internet — gói tin phải vượt ra khỏi LAN và đi qua nhiều mạng. Việc đó gọi là định tuyến (routing), và bài này giải thích nó hoạt động ra sao.

Router: thiết bị nối các mạng

Một router là thiết bị tầng 3 (mạng) nối các mạng khác nhau lại với nhau và chuyển gói tin giữa chúng. Khác switch (tầng 2, chuyển frame trong một LAN dựa trên MAC), router nhìn địa chỉ IP đích và quyết định gói tin đi tiếp về hướng nào.

Internet thực chất là một mạng khổng lồ của vô số mạng nhỏ, nối với nhau qua router. Gói tin của bạn không tới thẳng đích — nó được chuyền tay qua một chuỗi router.

Default gateway: cửa ra khỏi mạng nội bộ

Máy bạn biết cách giao trực tiếp cho các máy cùng LAN (qua ARP/MAC). Nhưng với mọi địa chỉ ngoài LAN, nó cần một "cửa ra" — đó là default gateway, thường là router của mạng.

Xem trên máy bạn:

netstat -rn | grep default      # macOS
# (trên Linux: ip route | grep default)
default   192.168.71.1   ...   en0

192.168.71.1 là gateway — router của mạng nhà. Quy tắc của máy bạn rất đơn giản: "Đích cùng LAN? Gửi thẳng. Đích ở đâu đó khác? Đẩy cho gateway, để nó lo." (Và để gửi cho gateway, máy bạn dùng MAC của nó — chính dòng ARP 192.168.71.1 ta thấy ở Bài 3.)

Bảng định tuyến: quyết định gửi đi đâu

Mỗi máy (và mỗi router) có một bảng định tuyến (routing table) — danh sách quy tắc "đích thuộc dải này thì đi qua đường này". Xem bảng trên máy bạn:

netstat -rn       # macOS
Destination     Gateway          Netif
default         192.168.71.1     en0      ← mọi thứ khác → gateway
10.50/16        utun6            utun6    ← dải 10.50.x.x → qua VPN
192.168.71/24   link#... (local) en0      ← cùng LAN → gửi thẳng

Cách máy đọc bảng: với mỗi gói, nó tìm dòng khớp cụ thể nhất với IP đích.

  • Đích 192.168.71.50? Khớp dòng 192.168.71/24 → cùng LAN, gửi thẳng.
  • Đích 10.50.x.x? Khớp dòng VPN → đi qua tunnel (ví dụ trên là máy có VPN).
  • Đích 1.1.1.1? Không khớp dòng cụ thể nào → rơi vào default → đẩy cho gateway 192.168.71.1.

Dòng default (còn viết 0.0.0.0/0) là "bắt tất cả" — mọi đích không khớp gì khác đều đi qua đây. Đây là lý do "không có default route" thì máy không ra được Internet (nhớ Bài 13 series Linux).

Hop: gói tin nhảy qua từng chặng

Router không biết toàn bộ đường tới đích — nó chỉ biết chặng kế tiếp (next hop). Mỗi router trên đường đi nhận gói, nhìn IP đích, tra bảng định tuyến của nó, rồi đẩy sang router kế. Cứ thế tới đích. Mỗi lần qua một router gọi là một hop.

   Máy bạn          router nhà       router ISP        ...        máy chủ đích
   192.168.71.168 ─► 192.168.71.1 ─► 113.22.0.116 ─► ... ─►  (IP công khai)
        │             hop 1            hop 3
        └─ IP nguồn/đích GIỮ NGUYÊN suốt hành trình
           MAC thì VIẾT LẠI ở mỗi hop (cho chặng nội bộ kế tiếp — Bài 3)

Điểm tinh tế (nối Bài 3): IP nguồn và đích không đổi suốt hành trình (chúng định danh hai đầu cuối), nhưng MAC đổi ở mỗi hop (mỗi chặng là một "LAN" giữa hai router, cần MAC của chặng đó).

Quan sát thật: traceroute

traceroute cho bạn nhìn thấy các hop tới một đích, bằng một mẹo khéo với trường TTL (Time To Live) trong header IP — mỗi router giảm TTL đi 1, và khi TTL về 0 thì router đó báo lỗi về, lộ ra danh tính của mình.

traceroute 1.1.1.1
 1  192.168.71.1               120 ms     ← router nhà (gateway)
 2  192.168.1.1                 27 ms     ← modem/router lớp 2
 3  113.22.0.116                 5 ms     ← vào mạng nhà cung cấp (ISP)
 4  42.114.245.145               4 ms
 5  *                                     ← hop không trả lời (bình thường)
 6  118.68.199.231              14 ms     ← đi sâu vào hạ tầng ISP
 ...

Đọc được rất nhiều: hop 1 là gateway nhà, các hop sau dần ra ISP rồi Internet. Cột thời gian (ms) cho biết độ trễ tới từng chặng. Dấu * là hop không trả lời (nhiều router bỏ qua, bình thường). traceroute là công cụ vàng khi gỡ lỗi "mạng chậm" hoặc "không tới được đích" — bạn thấy gói tin tắc ở chặng nào.

Trên Windows lệnh là tracert. macOS/Linux là traceroute. Cùng nguyên lý TTL.

Định tuyến ở quy mô Internet (biết để khỏi bỡ ngỡ)

Trong nhà bạn, định tuyến đơn giản: cái gì không nội bộ thì đẩy ra gateway. Nhưng giữa các nhà mạng lớn, router cần biết đường tới hàng trăm nghìn mạng. Chúng trao đổi thông tin định tuyến bằng giao thức BGP (Border Gateway Protocol) — "bản đồ đường đi" của Internet. Bạn không cấu hình BGP trừ khi làm hạ tầng mạng lớn, nhưng biết rằng các bảng định tuyến khổng lồ này được duy trì tự động qua BGP là đủ.

Tổng kết

Router nối các mạng và chuyển gói tin dựa trên IP đích. Máy bạn gửi mọi thứ ngoài LAN tới default gateway, dựa trên bảng định tuyến (netstat -rn / ip route) — chọn dòng khớp cụ thể nhất, rơi về default nếu không khớp gì. Gói tin đi qua nhiều hop, mỗi router chỉ biết chặng kế; IP đầu-cuối giữ nguyên còn MAC viết lại mỗi hop. traceroute cho bạn thấy đường đi thật qua từng chặng.

Trong traceroute, máy bạn xuất hiện với IP riêng 192.168.71.168, nhưng tới máy chủ đích nó lại thấy IP công khai của bạn. Phép biến đổi đó là NAT — chủ đề Bài 5.