Đến nội dung chính
Thư viện GKNơi khơi nguồn tò mò
Tiếng Việt

Nghiêm ngặt khi gửi, khoan dung khi nhận: Định luật Postel (Postel's Law)

Khi các chương trình do những công ty khác nhau phát triển gặp nhau trên Internet, kết nối rất dễ bị gián đoạn ngay khi chúng hiểu tài liệu đặc tả khác nhau dù chỉ một ký tự. Thế nhưng, Internet thời kỳ đầu vẫn bằng cách nào đó duy trì được kết nối giữa những khác biệt nhỏ như vậy. Một nguyên tắc thường được nhắc đến như bí quyết cho điều đó chính là “Định luật Postel (Postel's Law)”.

Nói đơn giản, định luật Postel là nguyên tắc thiết kế truyền thông: “Khi gửi, hãy tuân thủ nghiêm ngặt đặc tả; khi nhận, hãy khoan dung trong phạm vi có thể diễn giải được”. Trong các tài liệu chính thức, nguyên tắc này còn được gọi là “Nguyên tắc vững chắc (Robustness Principle)”.

Trong tài liệu này, chúng ta sẽ lần lượt tìm hiểu định luật Postel xuất phát từ đâu, vì sao Internet cần đến nó, nó thể hiện như thế nào trong đời sống và thực tiễn phát triển phần mềm, cũng như vì sao ngày nay nó bị phê phán.

Sơ đồ phân biệt định luật Postel với cách áp dụng ngày nay. Bên gửi tạo dữ liệu chính xác theo đặc tả, còn bên nhận được thiết kế để chịu được những khác biệt trong cách diễn giải và các lỗi. Sơ đồ đề xuất những cách áp dụng ngày nay gồm xác định phạm vi chấp nhận bằng đặc tả và kiểm thử, xử lý lỗi theo đặc tả tương ứng, duy trì kiểm tra bảo mật, ghi lại vấn đề và cải tiến đặc tả cùng cách triển khai. Sơ đồ nhấn mạnh rằng khoan dung khi nhận không có nghĩa là chấp nhận mọi lỗi hoặc dữ liệu đầu vào nguy hiểm.
Mục đích ban đầu của định luật Postel và cách áp dụng ngày nay. Dù bên nhận có khoan dung, vẫn cần xử lý lỗi theo đặc tả và kiểm tra bảo mật; các vấn đề được phát hiện phải dẫn đến việc cải tiến đặc tả và cách triển khai. Nguồn: RFC 760 §3.2, RFC 1122 §1.2.2, RFC 9413 §§2–6. Bản gốc: RFC 760 · RFC 1122 · RFC 9413.

Tìm hiểu định luật Postel

Định luật Postel bắt nguồn từ đâu?

Một kỹ sư xem xét tài liệu giao thức dày trong phòng máy tính đại học sáng sủa vào thập niên 1980

Tên gọi của định luật này bắt nguồn từ nhà khoa học máy tính người Mỹ Jonathan B. Postel (1943–1998). Ông làm việc tại Viện Khoa học Thông tin thuộc Đại học Nam California (USC ISI), phụ trách biên tập loạt tài liệu tiêu chuẩn Internet RFC từ năm 1969 cho đến khi qua đời, đồng thời giữ vai trò nòng cốt tại IANA, tổ chức quản lý địa chỉ và số hiệu.

Tháng 1 năm 1980, nguyên tắc vững chắc được đưa vào các đặc tả Internet do Postel biên soạn là RFC 760 (Giao thức Internet) và RFC 761 (Giao thức điều khiển truyền vận). Một câu tương tự đã xuất hiện trong bản dự thảo RFC 760, còn nguyên văn câu “Hãy thận trọng khi gửi, khoan dung khi nhận (be conservative in what you do, be liberal in what you accept from others)” được đăng trong RFC 761. Câu nói này tiếp tục xuất hiện trong RFC 793, tiêu chuẩn TCP năm 1981, rồi được biết đến rộng rãi dưới tên gọi “định luật Postel”.

Postel cho rằng dù đặc tả được viết chi tiết đến đâu, mỗi người vẫn có thể diễn giải khác nhau. Vì vậy, ông khuyên bên gửi tạo dữ liệu chuẩn chỉnh, tuân thủ tiêu chuẩn, còn bên nhận không nên bắt bẻ cả những lỗi định dạng nhỏ nếu ý nghĩa đã rõ ràng.


Vì sao cần nghiêm ngặt khi gửi và khoan dung khi nhận?

Hai người trao đổi những lá thư được niêm phong cẩn thận và những lá thư hơi nhàu trong một văn phòng sáng sủa

Internet không phải là mạng khép kín chỉ sử dụng thiết bị do một công ty sản xuất. Các hệ điều hành, ngôn ngữ và phiên bản chương trình khác nhau phải giao tiếp theo cùng một giao thức. Nếu cả hai bên đều “từ chối chỉ vì khác biệt đôi chút”, kết nối sẽ bị gián đoạn chỉ vì một khác biệt nhỏ trong cách diễn giải.

(1) Sự nghiêm ngặt của bên gửi
Khi định dạng, độ dài và các mục bắt buộc đều được điền chính xác theo đặc tả, bên kia sẽ dễ hiểu hơn bất kể sử dụng cách triển khai nào. Nếu tự ý mở rộng đặc tả cho thuận tiện, bên kia sẽ phải chấp nhận tất cả những biến thể đó.

(2) Sự khoan dung của bên nhận
Nếu ý nghĩa của dữ liệu đã rõ ràng, bên nhận sẽ không loại bỏ toàn bộ chỉ vì một vấn đề nhỏ về định dạng. Nhờ vậy, các cách triển khai khác nhau mới có thể cùng tồn tại trong một thời gian.

(3) Ưu tiên khả năng tương tác
Đây là thái độ đặt việc “trước hết cứ giao tiếp được với nhau” lên trên sự khớp nhau hoàn hảo. Trong môi trường có nhiều cách triển khai khác nhau như thời kỳ đầu, sự khoan dung này đã trở thành chất bôi trơn giúp mạng lưới phát triển.

(4) Thừa nhận sự không hoàn thiện của đặc tả
Nguyên tắc này lấy việc tài liệu có thể có thiếu sót hoặc cách diễn đạt mơ hồ làm tiền đề. Vì vậy, điểm cốt lõi là sự cân bằng: cho bên nhận một khoảng linh hoạt, nhưng khuyên bên gửi phải cẩn thận hơn thay vì dựa dẫm vào khoảng linh hoạt đó.


Định luật Postel trong đời sống và phát triển phần mềm

Một chiếc máy tính xách tay và cuốn sổ có các mũi tên luồng được vẽ tay đặt trên bàn sáng sủa

Nguyên tắc này không chỉ tồn tại trong mạng máy tính. Việc trình duyệt web vẫn hiển thị HTML có đôi chút sai sót hay chương trình email cố gắng mở những bức thư sai định dạng cũng gần với tinh thần đó.

Những lựa chọn tương tự cũng lặp lại trong các giao diện phần mềm.

  • Giao diện công khai (Public API): Các yêu cầu và phản hồi gửi ra ngoài chỉ sử dụng định dạng được ghi trong tài liệu, không âm thầm chèn thêm các trường thử nghiệm.
  • Kiểm tra dữ liệu đầu vào (Input Validation): Kiểm tra nghiêm ngặt các giá trị bắt buộc và giá trị nguy hiểm, đồng thời thống nhất trước quy tắc của nhóm về việc có chấp nhận những khác biệt nhỏ trong cách biểu diễn nhưng cùng ý nghĩa hay không.
  • Tương thích ngược (Backward Compatibility): Khi cho phép phiên bản mới đọc được dữ liệu cũ, hệ thống sẽ không cần được thay thế toàn bộ cùng một lúc.
  • Nhật ký và thông báo lỗi (Clear Errors): Dù tiếp nhận một cách khoan dung, vẫn phải ghi lại những điểm sai lệch để có thể sửa đặc tả về sau.

Nói đơn giản, đây là việc đưa thái độ “khi mình nói thì nói rõ ràng, khi nghe người khác thì cố hiểu ý” vào cuộc giao tiếp giữa các máy.


Vì sao ngày nay cần xem xét lại định luật này?

Một kỹ sư bảo mật cầm danh sách kiểm tra, kiểm tra tủ thiết bị mạng qua cửa kính trong văn phòng sáng sủa

Định luật Postel đã giúp Internet phát triển mạnh mẽ, nhưng theo thời gian, những tác dụng phụ cũng bộc lộ. Nếu bên nhận quá khoan dung, những cách diễn giải mơ hồ sẽ tích tụ và dễ xuất hiện các cuộc tấn công lợi dụng những kẽ hở đó. Ngoài ra, nếu âm thầm chấp nhận định dạng sai, bản thân đặc tả có thể tồn tại rất lâu mà không được sửa đổi.

Trong các cuộc thảo luận gần đây về tiêu chuẩn Internet, đã xuất hiện ý kiến phê phán rằng “chỉ sự khoan dung không thể bảo đảm khả năng tương tác lâu dài”. Martin Thomson và những người khác chỉ ra rằng nếu chỉ nhấn mạnh sự khoan dung trong khi giả định đặc tả là cố định, sự mơ hồ có thể ngược lại trở nên ăn sâu như một tiêu chuẩn.

Vì vậy, thực tiễn ngày nay thiên về điều chỉnh sự cân bằng hơn là từ bỏ nguyên tắc này.

  • Nghiêm ngặt khi gửi (Strict Send): Bảo đảm dữ liệu gửi ra ngoài tuân thủ đặc tả và vượt qua công cụ kiểm tra.
  • Thận trọng khi chấp nhận (Careful Accept): Xác định rõ phạm vi các biến thể được chấp nhận bằng tài liệu và kiểm thử, đồng thời từ chối những gì nằm ngoài phạm vi đó.
  • Cập nhật đặc tả (Evolve Specs): Với những khác biệt thường gặp trong thực tế, hãy tiếp tục sửa đặc tả và ví dụ thay vì âm thầm bỏ qua.
  • Ưu tiên bảo mật (Security First): Trước tiên, xem xét liệu sự khoan dung có mở rộng bề mặt tấn công hay không.

Định luật Postel là kinh nghiệm sáng suốt từ thời kỳ đầu của Internet, khi người ta ưu tiên suy nghĩ về “cách để những cách triển khai khác nhau cùng tồn tại” hơn là “một đặc tả hoàn hảo”. Đồng thời, nó cũng là lời cảnh báo rằng sự khoan dung có thể làm gia tăng tính mơ hồ và rủi ro.

Gửi đi rõ ràng hơn, khi nhận thì xem xét ý nghĩa nhưng xác định rõ giới hạn — đó là bước đầu tiên để xây dựng những hệ thống kết nối với nhau.