Tcp-backlog có kích thước bằng "hàng đợi kết nối hoàn chỉnh" (bắt tay ba bước hoàn tất, những gì được mô tả ở đây) hay "hàng đợi kết nối không đầy đủ" không?
tcp-backlog
là kích thước của hàng đợi kết nối hoàn chỉnh . Trên thực tế, Redis chuyển cấu hình này làm tham số thứ hai của listen(int s, int backlog)
gọi.
@GuangshengZuo đã có câu trả lời tốt cho câu hỏi này. Vì vậy, tôi sẽ tập trung vào cái còn lại.
Nếu nó có nghĩa là "hàng đợi kết nối hoàn chỉnh" thì tại sao tôi phải tăng tcp_max_syn_backlog để giới hạn kích thước của hàng đợi kết nối chưa hoàn chỉnh?
Trích dẫn từ tài liệu bạn đã đề cập:
Việc triển khai sử dụng hai hàng đợi, một hàng đợi SYN (hoặc hàng đợi kết nối không đầy đủ) và một hàng đợi chấp nhận (hoặc hàng đợi kết nối hoàn chỉnh). Các kết nối ở trạng thái SYN RECEIVED được thêm vào hàng đợi SYN và sau đó được chuyển đến hàng đợi chấp nhận khi trạng thái của chúng thay đổi thành ESTABLISHED, tức là khi gói ACK trong bắt tay 3 bước được nhận. Như tên của nó, cuộc gọi chấp nhận sau đó được thực hiện đơn giản để sử dụng các kết nối từ hàng đợi chấp nhận. Trong trường hợp này, đối số tồn đọng của cuộc gọi tổng đài nghe xác định kích thước của hàng đợi chấp nhận.
Chúng tôi có thể thấy rằng các mục trong complete connection queue
được di chuyển từ incomplete connection queue
.
Nếu bạn có somaxconn
lớn với một tcp_max_syn_backlog
nhỏ , thì bạn có thể KHÔNG có đủ mục để được chuyển đến complete connection queue
và complete connection queue
có thể không bao giờ đầy. Nhiều yêu cầu có thể đã bị loại bỏ từ hàng đợi đầu tiên trước khi chúng có cơ hội được chuyển sang hàng thứ hai.
Vì vậy, chỉ nâng giá trị của somaxconn
có thể KHÔNG hoạt động. Bạn phải nâng cao cả hai.