Thuật toán Nagle cho giao tiếp mạng TCP

Thuật toán Nagle , được đặt tên theo kỹ sư John Nagle, được thiết kế để giảm nghẽn mạng do "các vấn đề 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 của 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.

Thuật toán Nagle hoạt động như thế nào

Thuật toán của Nagle xử lý dữ liệu ở phía gửi của các ứng dụng TCP bằng một phương thức gọi là nagling . Nó phát hiện các tin nhắn có kích thước nhỏ và tích lũy chúng thành các gói TCP lớn hơn trước khi gửi dữ liệu qua dây, do đó tránh việc tạo ra một lượng lớn các gói nhỏ không cần thiết. Các đặc tả kỹ thuật cho thuật toán Nagle đã được xuất bản vào năm 1984 như RFC 896. Các quyết định cho nhiều dữ liệu để tích lũy và thời gian chờ đợi 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ó.

Nagling có thể sử dụng hiệu quả băng thông của kết nối mạng hơn với chi phí thêm độ trễ ( độ trễ ). Một ví dụ được mô tả trong RFC 896 minh họa các lợi ích băng thông tiềm năng và lý do tạo ra nó:

Các ứng dụng kiểm soát việc sử dụng thuật toán Nagle của chúng với tùy chọn lập trình socket TCP_NODELAY. Các hệ điều hành Windows, Linux và Java thường cho phép Nagle theo mặc định, vì vậy các ứng dụng được viết cho những môi trường đó cần phải chỉ định TCP_NODELAY khi muốn tắt thuật toán.

Hạn chế

Thuật toán của Nagle chỉ có thể sử dụng với TCP. Các giao thức khác bao gồm UDP không hỗ trợ nó.

Các ứng dụng TCP cần phản hồi mạng nhanh, như gọi điện thoại qua Internet hoặc trò chơi bắn súng góc nhìn thứ nhất, 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 khối dữ liệu nhỏ hơn với nhau có thể kích hoạt độ trễ đáng chú ý trực quan trên màn hình hoặc trong luồng âm thanh kỹ thuật số. Các ứng dụng này thường tắt Nagle.

Thuật toán này ban đầu được phát triển vào thời điểm mạng máy tính hỗ trợ băng thông ít hơn nhiều 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 sự cân bằng dai dẳng trên mạng đường dài, tải nặng của họ có ý nghĩa tốt. Có ngày càng í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 ta ngày nay.