Thuật toán Nagle, được đặt theo tên của kỹ sư John Nagle, được thiết kế để giảm tắc nghẽn mạng do các sự cố gói nhỏ với các ứng dụng TCP. Việc triển khai UNIX bắt đầu sử dụng thuật toán Nagle vào những năm 1980 và nó vẫn là một tính năng tiêu chuẩn của TCP ngày nay.
Cách hoạt động của thuật toán Nagle
Thuật toán Nagle xử lý dữ liệu ở phía gửi của các ứng dụng TCP bằng một phương pháp gọi là nagling. Nó phát hiện các thông điệp có kích thước nhỏ và tích lũy các thông điệp đó thành các gói TCP lớn hơn trước khi gửi dữ liệu qua dây. Quá trình này tránh tạo ra một số lượng lớn các gói nhỏ một cách không cần thiết.
Đặc tả kỹ thuật cho thuật toán Nagle được xuất bản vào năm 1984 với tên gọi RFC 896. Các quyết định về lượng dữ liệu cần tích lũy và thời gian chờ giữa các lần gửi là rất quan trọng đối với hiệu suất tổng thể của nó.
Lợi ích của Nagling
Nagling có thể sử dụng hiệu quả băng thông của kết nối mạng với chi phí tăng thêm độ trễ hoặc độ trễ. Một ví dụ được mô tả trong RFC 896 minh họa lợi ích băng thông tiềm năng và lý do tạo ra nó:
- Nếu một ứng dụng TCP chặn các thao tác gõ phím trên bàn phím muốn giao tiếp từng ký tự đang được nhập với bộ nhận, ứng dụng đó có thể tạo ra một loạt thông báo, mỗi thông báo chứa 1 byte dữ liệu.
- Trước khi các thư này có thể được gửi qua mạng, mỗi thư phải được đóng gói với thông tin tiêu đề TCP theo yêu cầu của TCP / IP. Mỗi tiêu đề có kích thước từ 20 đến 60 byte.
- Không có gì khó hiểu, ứng dụng mẫu này sẽ tạo ra các thông báo mạng bao gồm 95 phần trăm thông tin tiêu đề trở lên (ít nhất 20 trong số 21 byte) và 5 phần trăm dữ liệu thực tế trở xuống từ bàn phím của người gửi. Bằng cách sử dụng thuật toán Nagle, cùng một dữ liệu có thể được phân phối bằng cách sử dụng ít tin nhắn hơn, dẫn đến tiết kiệm băng thông lớn.
Các ứng dụng kiểm soát việc sử dụng thuật toán Nagle bằng tùy chọn lập trình ổ cắm TCP_NODELA. Các hệ thống Windows, Linux và Java thường kích hoạt Nagle theo mặc định. Do đó, các ứng dụng được viết cho những môi trường đó cần phải chỉ định TCP_NODELAY để tắt thuật toán.
Hạn chế
Các ứng dụng yêu cầu phản hồi mạng nhanh, như cuộc gọi điện video và chơi trò chơi trực tuyến, có thể không hoạt động tốt khi Nagle được bật. Sự chậm trễ gây ra trong khi thuật toán mất thêm thời gian để tập hợp các phần dữ liệu nhỏ hơn có thể gây ra độ trễ đáng chú ý trên màn hình hoặc trong luồng âm thanh kỹ thuật số. Các ứng dụng như vậy thường vô hiệu hóa Nagle.
Thuật toán này ban đầu được phát triển vào thời điểm mà các mạng máy tính hỗ trợ băng thông ít hơn so với ngày nay. Ví dụ được mô tả ở trên dựa trên kinh nghiệm của John Nagle tại Ford Aerospace vào đầu những năm 1980, nơi mà việc cố gắng cân bằng hệ thống mạng đường dài chậm chạp, tải nặng nề của Ford có ý nghĩa tốt. Ngày nay, ngày càng có ít tình huống mà các ứng dụng mạng có thể hưởng lợi từ thuật toán của anh ấy.
Thuật toán Nagle chỉ có thể sử dụng được với TCP. Các giao thức khác, chẳng hạn như UDP, không hỗ trợ nó.