Tôi đã thực hiện nhiều nghiên cứu nhất có thể về vấn đề này mà không cần đào ngay nguồn nhân. Dường như có một lượng lớn thông tin sai lệch / thông tin không chính xác về chủ đề này, vì vậy tôi hy vọng điều này sẽ trả lời câu hỏi cho tôi và những người khác một lần và mãi mãi.
Nói đúng với IPv4, việc cạn kiệt cổng có thực sự khả thi? Hãy để tôi giải thích:
- Dường như có 65535 cổng có sẵn để sử dụng. 0 không có sẵn.
- Tôi đã đọc rằng sự cạn kiệt cổng yêu cầu tuple (src ip, src port, dst ip, dst port) là duy nhất.
- Để rõ ràng và giả sử tôi có thể sử dụng 100% các cổng phù du thông qua cài đặt sysctl net.ipv4.ip_local_port_range
Và đây là câu hỏi: Đây có phải là cách nó hoạt động?
- Tôi có thể có 65k kết nối từ 127.0.0.1:(x) đến 127.0.0.1:80
- Tôi có thể có 65k kết nối từ 127.0.0.1:(x) đến 127.0.0.1:555
- Về cơ bản một lần nữa, câu hỏi là (srcip, srcport, dstip, dstport) phải là duy nhất, đúng không?
- Tôi không thể mở hơn 65k kết nối từ ip "A" đến IP "B", Cổng "N"
- Tương tự, một IP duy nhất không thể mở hơn 65 nghìn kết nối đến máy chủ web của tôi tại xxxx: 80, tuy nhiên tôi có thể hỗ trợ nhiều hơn 65 nghìn tổng thể miễn là chúng đến từ các IP nguồn khác nhau ?
Cuối cùng, tôi hơi bối rối về các cổng phù du (gửi đi) và các cổng đến đang lắng nghe. Tôi nhận ra rằng một khi kết nối được thiết lập, mỗi bên của kết nối là ngang hàng và bằng nhau, nhưng trước khi điều đó xảy ra:
Ví dụ: nếu thực sự bộ tuple (srcip, srcport, dstip, dstport) phải là duy nhất, thì tại sao tôi lại bật nó
net.ipv4.ip_local_port_range = 1024 65535
Cho phép sử dụng các cổng phù du từ 1024-65535, nếu tôi có các dịch vụ liên kết trên cổng 3306 (ví dụ myQuery), đôi khi chúng sẽ không khởi động được vì cổng đang được sử dụng.
Điều này có liên quan đến thực tế rằng: (Và đây là một tuyên bố tôi đang yêu cầu được xác nhận):
- (srcip, srcport, dstip, dstport) là duy nhất cho mỗi kết nối với phạm vi cổng 1-65535 (không chú ý đến việc sử dụng cổng phù du của HĐH)
- Tuy nhiên, để một ổ cắm liên kết, nó có thể được xem là (srcip, srcport, *, *). Hoặc một cách khác để đặt điều này, là IP không được sử dụng cổng đó vì bất kỳ lý do nào để liên kết?
Tôi có thể xác minh hành vi trên, tức là tôi sử dụng dòng sysctl chính xác ở trên và vì nó tôi đã chuyển myQuery sang một cổng thấp hơn 1024 vì đôi khi nó sẽ rất thất bại khi khởi động lại vì cho rằng HĐH đang sử dụng cổng đó (3306) cho một cổng phù du.