Cổng tcp Debian Stretch là * luôn * thậm chí


9

Trong khi gỡ lỗi một số hành vi lạ với bộ cân bằng tải Azure, tôi nhận thấy rằng ngăn xếp TCP Stretch TCP cục bộ của tôi chỉ thiết lập các kết nối TCP với một cổng được đánh số chẵn. Tôi không bắt đầu một cái bắt tay TCP duy nhất với một cổng nguồn lẻ. Đó có phải là dự định?

Câu trả lời:


12

Đó là để giảm sự tranh chấp giữa connect()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 .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.