Bỏ qua tới nội dung
MẠNG MÁY TÍNHGIẢI THÍCH

Vì sao gói tin đi một đường mà quay về bằng đường khác?

Gói tin từ Hà Nội sang Singapore qua Hồng Kông nhưng về qua Tokyo. Giải thích định tuyến từng chặng, BGP, khoai tây nóng, ECMP và lúc nào đường đi bất đối xứng gây lỗi.

BBeernary03/11/2026 · 11 PHÚT ĐỌC
COVER.BMP
Vì sao gói tin đi một đường mà quay về bằng đường khác?
▲ Chiều đi và chiều về của gói tin trên Internet thường đi qua những nút giao khác nhau

Bạn ngồi ở Hà Nội, mở một trang web đặt máy chủ ở Singapore. Chạy thử traceroute thì thấy gói tin ghé Hồng Kông rồi mới tới nơi. Nhưng nếu có người đứng ở Singapore chạy lệnh ngược về máy bạn, họ có thể thấy gói trả lời vòng qua Tokyo. Cùng một cuộc trò chuyện mà chiều đi và chiều về đi hai con đường khác hẳn nhau.

Nghe như lỗi, nhưng thật ra Internet được thiết kế để vận hành đúng như vậy. Bài này giải thích vì sao chuyện đó xảy ra, nó có hại gì không, và khi nào nó thực sự gây rắc rối cho bạn.

Gói tin chỉ biết "đi đâu", không biết "đi đường nào"

Khi bạn tải một trang web, dữ liệu bị cắt thành rất nhiều packet (gói tin) nhỏ, thường mỗi gói không quá khoảng 1.500 byte trên đường Ethernet. Mỗi gói có phần đầu (header) ghi địa chỉ IP nguồn và địa chỉ IP đích, cùng vài thông tin khác như giao thức và số cổng.

Điều quan trọng là header không chứa lộ trình. Nó giống một phong thư ghi rõ người nhận nhưng không ghi "đi qua bưu cục A, rồi B, rồi C". Bưu điện mỗi chặng tự quyết chuyển thư đi tiếp đâu.

Dây chuyền phân loại thư tự động trong trung tâm bưu chính, mỗi ngăn là một hướng chuyển tiếp

Có cách "ghi sẵn đường" không?

IP từng có tuỳ chọn source routing cho phép người gửi chỉ định lộ trình, nhưng nó bị lợi dụng để vượt tường lửa và giả mạo, nên gần như mọi nhà mạng đều chặn. Trên Internet công cộng ngày nay, bạn không chọn được đường đi cho gói tin của mình.

Định tuyến từng chặng: mỗi router chỉ nhìn một bước

Cơ chế cốt lõi gọi là hop-by-hop routing (định tuyến từng chặng). Mỗi router nhận gói, đọc địa chỉ đích, tra bảng định tuyến (routing table) để tìm mục khớp dài nhất (longest prefix match), rồi đẩy gói sang router kế tiếp. Xong việc. Router đó không nhớ gói vừa qua, không biết gói sẽ đi tiếp những đâu.

Ví von cho dễ hình dung: bạn lái xe qua một loạt nút giao cao tốc, ở mỗi nút chỉ có tấm biển "Singapore: rẽ phải". Không ai đưa bạn bản đồ toàn tuyến. Chiều về, bạn đọc biển "Hà Nội" ở những nút giao khác, do những người khác cắm.

Và đây là mấu chốt: gói trả lời là một gói hoàn toàn mới. Máy chủ ở Singapore tạo ra nó với đích là IP của bạn. Các router phía Singapore tra bảng của riêng họ cho đích "Hà Nội", không hề biết gói đi đã qua lối nào. Hai chiều là hai bài toán tra bảng độc lập, nên chẳng có lý do gì để kết quả trùng nhau.

Internet là hàng chục nghìn mạng không ai ra lệnh cho ai

Internet không phải một mạng, mà là hơn 70.000 hệ tự trị (Autonomous System, viết tắt AS) nối với nhau. Mỗi AS là một mạng do một tổ chức quản lý, có mã số ASN riêng: các nhà mạng như Viettel, VNPT, FPT, hay các công ty lớn như Google, Cloudflare.

Bản đồ trực quan hoá các tuyến kết nối trên Internet, mỗi nhánh màu là một vùng mạng

Giữa các AS, đường đi được chọn bằng BGP (Border Gateway Protocol). BGP không tìm đường ngắn nhất theo cây số hay độ trễ. Nó chọn theo chính sách, mà chính sách thì xoay quanh tiền:

Loại quan hệ Ai trả tiền Mức ưu tiên thường gặp
Customer (khách hàng) Khách trả tiền cho mình Cao nhất, đi đường này là có thu
Peer (ngang hàng) Hai bên trao đổi miễn phí Ở giữa, không mất tiền
Provider (nhà cung cấp cấp trên) Mình trả tiền cho họ Thấp nhất, đi đường này là tốn tiền

Mỗi AS tự đặt quy tắc ưu tiên của mình (qua thuộc tính như LOCAL_PREF), và không ai bắt AS khác phải theo. Nhà mạng ở Việt Nam chọn đường ra Singapore theo hợp đồng của họ; nhà mạng ở Singapore chọn đường về Việt Nam theo hợp đồng của họ. Hai bên có thể trả tiền cho những đối tác khác nhau, nên hai chiều lệch nhau là chuyện tự nhiên.

Tủ thiết bị chuyển mạch tại một điểm trao đổi Internet, nơi nhiều nhà mạng kết nối ngang hàng với nhau

Quy tắc "khoai tây nóng": tống gói tin ra càng sớm càng tốt

Ngay cả khi hai nhà mạng nối với nhau ở nhiều điểm, cách họ dùng các điểm đó cũng tạo ra bất đối xứng. Phần lớn nhà mạng áp dụng hot-potato routing (định tuyến khoai tây nóng): gói tin đi tới một mạng khác thì đẩy ra khỏi mạng mình ở cửa ra gần nhất, để đỡ tốn băng thông đường trục nội bộ. Giống cầm củ khoai vừa luộc, bạn chỉ muốn chuyền nó đi thật nhanh.

Ghép lại với ví dụ đầu bài:

  • Chiều đi: nhà mạng của bạn có cửa sang mạng đối tác ở Hồng Kông và Tokyo. Hồng Kông gần họ hơn, nên gói bị "ném" sang ở Hồng Kông, rồi đối tác tự chở tiếp tới Singapore.
  • Chiều về: nhà mạng phía Singapore cũng làm y hệt, nhưng tính từ vị trí của họ. Nếu với họ cửa Tokyo là lối ra rẻ nhất, gói trả lời sẽ ra ở Tokyo rồi mới về Việt Nam.

Mỗi bên đều tối ưu cho mình, và kết quả là một vòng lệch. Ngược lại với khoai tây nóng là cold-potato routing: giữ gói trong mạng mình càng lâu càng tốt để kiểm soát chất lượng, thường thấy ở các mạng nội dung lớn có đường trục riêng.

Trạm cập bờ cáp quang biển, một trong những cửa ra quốc tế của các nhà mạng

Ngay trong một mạng, router còn chia tải

Bất đối xứng không chỉ đến từ chính sách giữa các nhà mạng. Bên trong một mạng lớn, giữa hai router thường có nhiều đường song song chi phí bằng nhau, có khi 4, 8 hoặc 16 đường. Router dùng ECMP (Equal-Cost Multi-Path, đa đường chi phí bằng nhau) để rải lưu lượng ra các đường này.

Để các gói của cùng một kết nối không bị xáo trộn thứ tự, router không chia ngẫu nhiên từng gói mà băm (hash) một bộ thông tin của gói, thường là 5 thành phần: IP nguồn, IP đích, cổng nguồn, cổng đích và giao thức. Kết quả băm quyết định gói đi đường số mấy.

Chiều về thì IP nguồn và IP đích đổi chỗ, cổng cũng đổi chỗ. Trừ khi router được cấu hình băm đối xứng, kết quả băm hai chiều thường khác nhau, nên chiều về rơi vào một đường vật lý khác.

Hàng cổng mạng dày đặc trên thiết bị chuyển mạch, nơi lưu lượng được rải ra nhiều đường song song

Hai nhà mạng cùng lúc: bất đối xứng ngay tại văn phòng bạn

Nhiều công ty dùng song song hai đường Internet (multihoming), ví dụ một đường Viettel và một đường VNPT. Router của công ty có thể đẩy gói ra qua Viettel. Nhưng thế giới bên ngoài nhìn thấy dải IP của công ty qua cả hai nhà mạng, và theo chính sách BGP của họ, đường qua VNPT tốt hơn. Thế là gói trả lời đổ về qua VNPT. Nếu không cấu hình cẩn thận, đây là nguồn lỗi rất khó dò.

Có hại không? Thường là không, trừ với tường lửa

Bất đối xứng là trạng thái bình thường của Internet chứ không phải ngoại lệ. Ngay từ giữa thập niên 1990, các đo đạc của nhà nghiên cứu Vern Paxson đã ghi nhận khoảng một nửa số cặp đường đi được đo là bất đối xứng, và Internet ngày nay còn phức tạp hơn nhiều. Bạn không nhận ra vì giao thức TCP đánh số thứ tự từng byte: gói đến từ đâu, đến lệch nhau bao nhiêu thì máy nhận vẫn ghép lại đúng thứ tự.

Rắc rối nằm ở stateful firewall (tường lửa có trạng thái). Loại tường lửa này theo dõi từng kết nối: thấy gói SYN đi ra thì ghi nhớ, rồi chỉ cho phép gói SYN-ACK tương ứng đi vào. Nếu mạng có hai tường lửa, mỗi cái đứng trên một đường, thì:

  1. Tường lửa A thấy gói đi ra nhưng không bao giờ thấy gói trả lời.
  2. Tường lửa B thấy gói trả lời đi vào mà không có kết nối nào được ghi nhớ trước đó.
  3. B coi đó là gói lạ và chặn. Kết nối treo, người dùng thấy web "lúc được lúc không".

Thiết bị tường lửa hai cổng WAN, loại thường dùng khi văn phòng có hai đường Internet

Lỗi kinh điển khi thêm đường mạng dự phòng

Gắn thêm đường Internet thứ hai hoặc tường lửa thứ hai mà không đồng bộ trạng thái là cách nhanh nhất để tạo ra lỗi "chập chờn" khó hiểu. Các giải pháp thường gặp: dùng cặp tường lửa có đồng bộ phiên (state sync), ép lưu lượng đi và về cùng một cửa bằng policy-based routing, hoặc dùng NAT để gói trả lời buộc phải quay về đúng thiết bị đã gửi đi.

Trên Linux cũng có một "bẫy" tương tự: tính năng reverse path filter (rp_filter) ở chế độ nghiêm ngặt sẽ bỏ gói đến từ một card mạng nếu đường về nguồn đó không đi ra chính card ấy. Máy chủ có hai đường mạng mà bật chế độ này thì gói hợp lệ cũng có thể bị loại.

bash
# Xem chế độ reverse path filter (0 = tắt, 1 = nghiêm ngặt, 2 = nới lỏng)
sysctl net.ipv4.conf.all.rp_filter

Traceroute chỉ kể một nửa câu chuyện

Lệnh traceroute (Windows: tracert) gửi các gói có TTL tăng dần để mỗi router trên đường lần lượt báo lại. Nó chỉ cho bạn thấy chiều đi từ máy bạn tới đích. Các gói báo lỗi từ từng router quay về máy bạn theo đường nào thì lệnh không hiển thị.

Bản đồ minh hoạ một lộ trình traceroute vẽ qua nhiều châu lục

bash
# Linux/macOS: chiều đi từ máy bạn tới đích
traceroute example.com

# Windows
tracert example.com

# mtr: chạy liên tục, thống kê mất gói và độ trễ từng chặng
mtr -rwc 100 example.com

Muốn biết chiều về, bạn cần chạy traceroute từ phía bên kia: dùng một máy chủ ở đầu đối diện, các trang "looking glass" mà nhà mạng công bố, hoặc nền tảng đo như RIPE Atlas.

Mạng chậm, đừng vội kết luận

Traceroute thấy độ trễ tăng vọt ở một chặng chưa chắc chặng đó có lỗi. Có thể chiều về của gói báo lỗi từ router đó mới đi vòng xa. Hãy đo cả hai chiều trước khi gọi tổng đài hay mở ticket cho nhà mạng.

Checklist khi nghi ngờ đường đi bất đối xứng gây lỗi:

  • [ ]Chạy traceroute hoặc mtr từ cả hai phía và so sánh
  • [ ]Kiểm tra mạng có nhiều đường ra (hai ISP, hai tường lửa) không
  • [ ]Xem log tường lửa có gói trả lời bị chặn vì "không có phiên" không
  • [ ]Kiểm tra rp_filter trên máy chủ nhiều card mạng

Internet không có một con đường cố định. Mỗi chiều là một hành trình riêng, do từng router và từng nhà mạng tự quyết.

Tóm tắt nhanh

  • Gói tin chỉ mang địa chỉ đích, không mang lộ trình; mỗi router tự quyết chặng tiếp theo.
  • Gói trả lời là gói mới, được định tuyến độc lập nên dễ đi đường khác.
  • BGP chọn đường theo hợp đồng và chi phí, cộng thêm quy tắc khoai tây nóng, khiến hai chiều lệch nhau.
  • ECMP và việc dùng nhiều nhà mạng cũng tạo bất đối xứng ngay trong một mạng.
  • Bất đối xứng là bình thường; chỉ gây hại với tường lửa có trạng thái và cấu hình lọc nghiêm ngặt.

Câu hỏi thường gặp

Đường đi bất đối xứng có làm mạng chậm hơn không?

Không nhất thiết. Mỗi chiều được chọn theo tiêu chí của nhà mạng phụ trách chiều đó, nên một chiều có thể vòng xa hơn chiều kia. Độ trễ khứ hồi là tổng hai chiều, vì vậy nếu chiều về đi vòng thì bạn vẫn cảm nhận được.

Tôi có ép được gói tin đi và về cùng một đường không?

Trên Internet công cộng thì không, vì chiều về do nhà mạng phía bên kia quyết. Trong mạng của chính bạn thì có thể ép bằng policy-based routing, NAT hoặc chỉ dùng một cửa ra duy nhất.

Vì sao traceroute hiện dấu sao (*) ở vài chặng?

Thường do router đó không trả lời gói báo lỗi hoặc giới hạn tốc độ trả lời, không hẳn là đứt mạng. Nếu các chặng sau vẫn hiện bình thường thì đường vẫn thông.

Bất đối xứng có ảnh hưởng tới bảo mật không?

Có ở mặt vận hành: tường lửa và hệ thống phát hiện xâm nhập chỉ thấy một chiều sẽ phân tích sai hoặc chặn nhầm. Vì vậy các thiết kế mạng doanh nghiệp thường cố đảm bảo lưu lượng đi và về cùng đi qua một cụm thiết bị bảo mật.

BVIẾT BỞIBeernary

ĐỌC TIẾP_

BÌNH LUẬN (0)

LOGIN.EXE
> ĐĂNG NHẬP ĐỂ BÌNH LUẬNDùng tài khoản Google, không cần tạo mật khẩu. Tên và ảnh đại diện Google sẽ hiện cạnh bình luận.

> CHƯA CÓ BÌNH LUẬN. HÃY LÀ NGƯỜI ĐẦU TIÊN_