Đó là để giảm sự tranh chấp giữa connect()
và bind()
(xuất hiện trong Linux 4.2; Jessie có 3.16 và Stretch có 4.9):
cam kết 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Tác giả: Eric Dumazet
Ngày: CN 24/0549: 35 2015 -0700
tcp / dccp: cố gắng không làm cạn kiệt ip_local_port_range trong kết nối ()
Một vấn đề tồn tại lâu dài trên các máy chủ bận rộn là cổng TCP nhỏ có sẵn
phạm vi (/ Proc / sys / net / ipv4 / ip_local_port_range) và mặc định
phân bổ tuần tự các cổng nguồn trong lệnh gọi hệ thống Connect ().
Nếu một máy chủ lưu trữ có nhiều phiên TCP hoạt động, rất có thể
rất cao rằng tất cả các cổng được sử dụng bởi ít nhất một luồng,
và các lần thử liên kết tiếp theo (0) không thành công hoặc phải quét một phần lớn
không gian để tìm một khe.
Trong bản vá này, tôi đã thay đổi điểm bắt đầu trong __inet_hash_connect ()
để chúng tôi cố gắng ưu tiên các cổng chẵn [1], để lại các cổng lẻ cho liên kết ()
người dùng.
Chúng tôi vẫn thực hiện tìm kiếm tuần tự, vì vậy không có gì đảm bảo, nhưng
nếu các mục tiêu kết nối () rất khác nhau, kết quả cuối cùng là chúng ta rời đi
nhiều cổng có sẵn hơn để liên kết () và chúng tôi trải đều chúng trên phạm vi,
giảm thời gian cho cả kết nối () và liên kết () để tìm một vị trí.
Chiến lược này chỉ hoạt động tốt nếu / Proc / sys / net / ipv4 / ip_local_port_range
là chẵn, tức là nếu giá trị bắt đầu / kết thúc có tính chẵn lẻ khác nhau.
Do đó, mặc định / Proc / sys / net / ipv4 / ip_local_port_range đã được thay đổi thành
32768 - 60999 (thay vì 32768 - 61000)
Không có thay đổi về khía cạnh bảo mật ở đây, chỉ có một số băm kém
kế hoạch cuối cùng có thể bị ảnh hưởng bởi sự thay đổi này.
[1]: Thuộc tính lẻ / chẵn phụ thuộc vào giá trị ngang bằng ip_local_port_range
Bạn cũng có thể muốn xem cam kết tiếp theo 1580ab63fc9a03593072cc5656167a75c4f1d173 .