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ó:
- Một ứng dụng TCP chặn các tổ hợp phím trên bàn phím và muốn truyền đạt từng ký tự được nhập vào máy thu, có thể tạo ra một chuỗi các thông điệp chứa mỗi byte 1 dữ liệu.
- Trước khi các tin nhắn này có thể được gửi qua mạng, mỗi thông điệp phải được đóng gói cùng 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ó vấn đề gì, ứng dụng ví dụ này sẽ tạo ra các thông điệp mạng bao gồm 95% hoặc nhiều thông tin tiêu đề (ít nhất 20 trong số 21 byte) và 5% hoặc ít hơn dữ liệu thực tế từ bàn phím của người gửi. Sử dụng thuật toán Nagle, cùng một dữ liệu có thể được chuyển bằng cách sử dụng ít tin nhắn hơn và có 95% nội dung là thông tin bàn phím - tiết kiệm băng thông rất lớ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.