Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tại sao Router hiện đại không còn phụ thuộc CPU ?

    Router Cisco đời mới xử lý được hàng triệu gói tin mỗi giây không phải vì CPU của nó mạnh hơn hẳn đời cũ, mà vì nó gần như không dùng CPU để xử lý từng gói nữa. Đây là bước nhảy quan trọng nhất trong cách router hoạt động, nhưng ít người để ý vì bên ngoài, mọi thứ vẫn chỉ là "gói tin đi vào, gói tin đi ra".

    Trước khi nói đến chuyện tối ưu, cần hình dung một gói IP thực sự trải qua những gì khi đi qua router. Đầu tiên router nhận Ethernet frame, kiểm tra mã lỗi FCS ở cuối frame - sai là hủy ngay không cần xử lý tiếp. Qua được cửa đó, router đọc trường Ethernet Type để biết bên trong là IPv4 hay gì khác, rồi bóc bỏ toàn bộ phần đóng gói Layer 2, chỉ giữ lại gói IP thuần. Đến bước quan trọng nhất, router tra bảng chuyển tiếp theo đúng một nguyên tắc duy nhất: Longest Prefix Match, tìm tuyến có tiền tố dài nhất và cụ thể nhất khớp với IP đích. Việc so đo độ tin cậy nguồn (AD) hay chi phí đường đi (metric) không xảy ra ở bước này - đó là việc của control plane, đã diễn ra từ trước để chọn ra tuyến thắng cuộc (hoặc các tuyến ngang chi phí nếu chạy ECMP) cho mỗi prefix rồi nạp xuống bảng chuyển tiếp; khi gói tin thực sự đi qua, router chỉ còn việc tra đúng bảng đã chốt sẵn đó. Không khớp tuyến cụ thể nào thì rơi về default route, không có default route thì gói tin bị loại bỏ thẳng kèm một bản tin ICMP Destination Unreachable gửi ngược về nguồn. Trước khi gói tin rời khỏi router, TTL bị trừ đi một, tính lại checksum, rồi toàn bộ được đóng gói lại thành frame mới với địa chỉ MAC của next-hop - địa chỉ này thường phải tra qua ARP nếu router chưa biết sẵn.

    Trong quy trình tra bảng đó còn một chi tiết dễ bị bỏ qua: chuyện router hành xử ra sao khi không khớp được subnet nào bên trong một mạng lớn nó đã biết. Kiểu classful cũ, kích hoạt bằng lệnh no ip classless, sẽ hủy gói tin ngay lập tức mà không thèm xét đến default route, dù default route đó vẫn tồn tại trong bảng - một hành vi khá phản trực giác nếu ai chỉ quen làm việc trên thiết bị hiện đại. Kiểu classless mới là mặc định trên hầu hết thiết bị bây giờ, không khớp subnet nào thì vẫn kiên nhẫn thử tiếp default route trước khi bỏ cuộc.

    Toàn bộ quy trình vừa mô tả, nếu chạy đúng nghĩa đen từng bước cho từng gói tin, chính là process switching - cách làm nguyên thủy nhất, đẩy mọi thứ lên CPU xử lý tuần tự, kể cả việc gửi yêu cầu ARP. Rất chắc chắn nhưng cực chậm, CPU quá tải ngay khi lưu lượng tăng lên.

    Fast switching cải thiện bằng một mẹo đơn giản: gói đầu tiên của một luồng vẫn phải đi qua CPU như bình thường, nhưng kết quả tra cứu được lưu lại vào một cache. Các gói tiếp theo cùng đích cứ thế dùng lại kết quả có sẵn mà không cần tính toán lại. Nhanh hơn hẳn process switching, nhưng cache dễ phình to và không linh hoạt khi cần cân bằng tải qua nhiều đường cùng lúc.

    CEF - Cisco Express Forwarding - mới là thứ giải thích cho câu chuyện ở đầu bài. Thay vì đợi gói đầu tiên đi qua rồi mới học, CEF dựng sẵn hai bảng đồng bộ liên tục với bảng định tuyến: FIB, một cấu trúc cây tra cứu địa chỉ IP cực nhanh, và Adjacency Table, lưu sẵn toàn bộ thông tin đóng gói Layer 2 - MAC của từng next-hop - từ trước khi có bất kỳ gói tin nào đi qua. Trên các dòng switch Layer 3 và router doanh nghiệp, hai bảng này thường được biên dịch thẳng vào chip TCAM hoặc ASIC/NPU chuyên dụng, cho phép tra cứu gần như trong đúng một chu kỳ xung nhịp bất kể bảng định tuyến có hàng trăm nghìn tuyến - đây mới là lý do cốt lõi giúp CEF đạt tốc độ đường truyền. Vì dữ liệu đã có sẵn hoàn toàn ở phần cứng, CEF không cần đợi "học" từ gói đầu tiên như fast switching, và vẫn cân bằng tải linh hoạt qua nhiều đường. CEF là cơ chế mặc định gần như duy nhất trên router doanh nghiệp hiện nay, đến mức nhiều dòng máy như ASR hay Catalyst 6k/9k không còn cho phép tắt đi.

    Nhìn xuyên suốt cả ba cơ chế sẽ thấy đúng một quy luật: mỗi lần hiệu năng router chững lại vì CPU không theo kịp, ngành mạng lại tìm cách chuyển bớt việc từ phần mềm sang cấu trúc dữ liệu dựng sẵn ở phần cứng - cùng một mô-típ đã từng thấy ở việc Switch thay thế Bridge trước đây.

    Fast switching thực ra đã bị Cisco khai tử khỏi IOS từ hơn mười lăm năm trước, nên câu hỏi thực chiến hơn bây giờ không còn là "có dùng CEF chưa" mà là: router chỗ bạn có đang bị đẩy ngược gói tin lên CPU (punt to CPU) không - ví dụ do gói mang IP Options, gói hết TTL cần trả traceroute, ARP miss, hay dính log của ACL? Đây mới là kiểu sự cố khiến CPU tăng vọt bất thường mà kỹ sư vận hành hay gặp nhất. Bạn từng gặp trường hợp nào như vậy chưa?
    Click image for larger version

Name:	router.jpg
Views:	0
Size:	279.6 KB
ID:	444704
Working...
X