Làm thế nào để các trang web lưu lượng truy cập cao phục vụ hơn 65535 kết nối TCP?


29

Nếu có giới hạn về số lượng cổng mà một máy có thể có và một ổ cắm chỉ có thể liên kết với số cổng chưa sử dụng, làm thế nào để các máy chủ trải qua số lượng cực lớn (nhiều hơn số cổng tối đa) của yêu cầu xử lý việc này? Có phải nó chỉ được thực hiện bằng cách làm cho hệ thống được phân phối, tức là nhiều máy chủ trên nhiều máy?

Câu trả lời:


55

Bạn hiểu nhầm số cổng khá nghiêm trọng: một máy chủ chỉ nghe trên một cổng và có thể có số lượng lớn ổ cắm mở từ các máy khách kết nối với một cổng đó.

Ở cấp độ TCP, tuple (ip nguồn, cổng nguồn, ip đích, cổng đích) phải là duy nhất cho mỗi kết nối đồng thời. Điều đó có nghĩa là một khách hàng không thể mở nhiều hơn 65535 kết nối đồng thời đến một máy chủ. Nhưng một máy chủ có thể (về mặt lý thuyết) máy chủ 65535 kết nối đồng thời trên mỗi máy khách .

Vì vậy, trong thực tế, máy chủ chỉ bị giới hạn bởi số lượng CPU, bộ nhớ, v.v. nó phải phục vụ các yêu cầu, chứ không phải bởi số lượng kết nối TCP đến máy chủ.


Tôi tự hỏi làm thế nào NAT lớp tàu sân bay sẽ ảnh hưởng đến điều này
TheLQ

@TheLQ Nếu không có CGN, mỗi máy khách không thể mở hơn 65535 kết nối đến cùng một máy chủ, không có máy khách nào cần gần nhiều kết nối đến cùng một máy chủ. Với CGN, mỗi CGN không thể mở hơn 65535 kết nối đến cùng một máy chủ, những kết nối đó sẽ phải được chia sẻ giữa tất cả các máy khách sử dụng CGN đó. Liệu CGN có thể đồng thời mở 65535 kết nối đến một máy chủ hay 65535 kết nối với máy chủ khác hay không là một chi tiết triển khai, có thể khác nhau giữa các lần triển khai CGN khác nhau.
kasperd

Giới hạn có thể được tăng lên bằng cách thêm nhiều địa chỉ IP vào CGN hoặc bằng cách triển khai nhiều CGN hơn. Nhưng bạn cũng có thể chỉ cần triển khai ngăn xếp kép. Sau đó, các kết nối đến máy chủ có hỗ trợ IPv6 sẽ không thông qua CGN, vì vậy họ sẽ không tiêu thụ số cổng quý giá.
kasperd

14

Bạn đã nhầm - tính duy nhất của ổ cắm được xác định bởi bốn yếu tố:

  1. địa chỉ IP cục bộ
  2. số cổng địa phương
  3. địa chỉ IP từ xa
  4. số cổng từ xa

Khi cung cấp dịch vụ mạng, 1. và 2. thường là tĩnh (ví dụ: IP 10.0.0.1, cổng 80) nhưng trừ khi bạn mong đợi hàng ngàn kết nối từ một máy khách (hoặc một cổng NAT duy nhất), bạn sẽ không đẩy các ranh giới cho các kết hợp có thể có của 3. và 4. trước khi bạn hết tài nguyên cục bộ.

Vì vậy, mặc dù thực tế khách hàng sẽ không sử dụng một cổng đã được sử dụng cho một kết nối để mở kết nối đến một địa chỉ IP đích khác, việc cạn kiệt số cổng sẽ là vấn đề ít nhất của bạn đối với gần như bất kỳ ứng dụng nào - có thể là trên máy chủ hoặc phía khách hàng.

Vấn đề là một vấn đề rất thực tế với các cổng NAT (bộ định tuyến) phục vụ các máy khách có số lượng kết nối ra ngoài cao (ví dụ như torrents) - ở đó bạn sẽ thấy sự suy giảm số cổng sau khi nhóm cổng có sẵn cho NAT đã bị xóa. Trong trường hợp này, cổng NAT không thể tạo thêm bất kỳ hiệp hội nào, do đó có hiệu quả cắt đứt các máy khách khỏi internet.


2

Câu hỏi là làm thế nào để xử lý số lượng kết nối lớn (> 64k). Hai phương pháp phổ biến nhất là:

  • Thêm nhiều máy chủ, làm tăng số lượng địa chỉ src / dst và bộ số cổng. Có nhiều cách để chia sẻ tải trên nhiều máy chủ; Cướp vòng DNS là một; co nhung nguoi khac

  • Triển khai "NAT cấp tàu sân bay" (mà một người bạn chế giễu và chính xác theo quan điểm của tôi gọi là "NAT cấp độ crummier"). Đây thực chất là một NAT của NAT. Điều này có ý nghĩa rất xấu đối với các ứng dụng, nhưng đó là điều mà một số nhà cung cấp lớn làm khi họ hết dung lượng và / hoặc số cổng IPv4 và / hoặc họ không muốn chuyển sang IPv6.


2
Nếu bạn đọc nhiều hơn tiêu đề, bạn sẽ thấy câu hỏi này là về việc cạn kiệt cổng và OP đã nhầm về cách hoạt động của nó. Làm thế nào chính xác câu trả lời này thêm bất cứ điều gì mới có giá trị vào đó?
MDMarra

2
OP hỏi rõ ràng (và không chỉ trong tiêu đề) "làm thế nào để các máy chủ trải qua số lượng yêu cầu rất cao ...". Bỏ qua sự nhầm lẫn về cách thức hoạt động của ổ cắm, đó là một câu hỏi hợp lệ.
dùng8162

1
Công việc tuyệt vời của việc cắt bỏ câu hỏi giữa câu. Phần còn lại của câu đó nói : (more than the max port number).
MDMarra

2
Có lẽ bạn đã bỏ lỡ phần mà tôi quy định OP không hiểu cơ chế ổ cắm. Tôi cho rằng làm thế nào để vượt quá 64k cổng là một chủ đề hợp lệ để thảo luận; Tôi xin lỗi nếu bạn không đồng ý, nhưng đó là câu hỏi và đó là những gì tôi đã cung cấp một vài câu trả lời cho. Bạn hỏi làm thế nào điều này là đáp ứng; Như thế đấy.
dùng8162

3
Đó là một nửa câu hỏi. Câu hỏi hình ảnh lớn hơn - như được hỗ trợ bởi câu cuối cùng của OP - là làm thế nào để phá vỡ rào cản 64k.
dùng8162
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.