Tại sao không thể dành nhiều hơn một cổng TCP / IP cho http? Mặc dù thừa nhận là ngây thơ, nhưng bằng cách nào đó có trực quan để nghĩ rằng hiệu suất máy chủ bằng cách nào đó có thể được tăng lên?
Tại sao không thể dành nhiều hơn một cổng TCP / IP cho http? Mặc dù thừa nhận là ngây thơ, nhưng bằng cách nào đó có trực quan để nghĩ rằng hiệu suất máy chủ bằng cách nào đó có thể được tăng lên?
Câu trả lời:
Cổng 80 là một cổng nổi tiếng , có nghĩa là nó nổi tiếng là vị trí bạn thường tìm thấy các máy chủ HTTP. Bạn có thể tìm thấy nó được ghi lại trong HTTP / 1.1 RFC .
Có một mặc định là hữu ích chính xác vì bạn không phải nhập nó vào trình duyệt web bằng URI. Nếu bạn chạy một máy chủ HTTP (hoặc trên thực tế là bất kỳ dịch vụ nào) trên một cổng không chuẩn, bạn buộc khách hàng phải nhớ số 16 bit tùy ý mà bạn đã chọn và nhập nó vào.
Ngoài sự không thân thiện này, không có lợi ích về hiệu suất: một cổng chỉ là một phần của bộ (dst ip:port, src ip:port)
4 mà xác định duy nhất một kết nối TCP. Nếu hai kết nối chia sẻ một dst ip:port
, điều đó không có nghĩa là chúng chia sẻ một số tài nguyên hệ thống - chúng có thể nằm trong các luồng khác nhau hoặc các quy trình khác nhau.
Bây giờ, nếu bạn có các dịch vụ một cách logic khác nhau mà cả hai xảy ra để sử dụng HTTP, không có vấn đề với chạy chúng trên các cổng khác nhau. Nó chỉ làm cho URI xấu hơn một chút.
Máy chủ không lãng phí tài nguyên bằng cách xử lý các kết nối trong một hoặc nhiều cổng. Tài nguyên máy chủ được phân bổ để xử lý các kết nối và số cổng chỉ là một cách để kết nối một chương trình cụ thể với một kết nối cụ thể.
Ví dụ: máy chủ HTTP biết rằng anh ta sẽ lắng nghe các kết nối đến cổng 80. Và máy chủ biết rằng bất cứ khi nào anh ta nhận được một số yêu cầu trên cổng 80, anh ta sẽ xử lý nó với máy chủ http. Sau đó, máy chủ http sẽ xử lý giao tiếp và sau đó sẽ tiêu tốn tài nguyên.
Bạn dường như nghĩ về các cổng như một cái gì đó thực sự; nó chỉ là một số không dấu 16 bit (0-65535) là nhãn trong tiêu đề của gói IP. Điều này giúp với ghép kênh cấp ứng dụng. Khi một gói đến đến một card mạng, HĐH sẽ nhận được thông báo. Nó kiểm tra cổng nào gói tin đến được hướng đến, và sau đó chuyển tiếp gói đến đúng ứng dụng. Nếu bạn đang chạy máy chủ web (nginx) để nghe trên cổng 80, chỉ nginx mới nhận được các gói được gửi đến cổng 80.
Khi một máy khách (IP: 100.200.100.200) thực hiện yêu cầu HTTP đến máy chủ (55.55.55.55), họ thực hiện yêu cầu đó đến cổng 80 trên máy chủ (55.55.55.55:80), nhưng cổng nguồn được chọn ngẫu nhiên bởi Hệ điều hành cho trình duyệt web (giống như 45490). Phản hồi HTTP từ máy chủ web sau đó đến từ (55.55.55.55:80), nhưng được gửi đến đích (IP của bạn) (100.200.100.200:45490). Hệ điều hành máy tính của bạn biết rằng các gói đến trên cổng 45490 (từ 55.55.55.55:80) cần được cung cấp cho trình duyệt web đã thực hiện yêu cầu. Vì mỗi kết nối duy nhất đến một trang web từ máy khách có một cổng ngẫu nhiên duy nhất, do đó bạn có thể có nhiều trình duyệt web kết nối với cùng một trang web và khi một trang được tải lại trong một trình duyệt thì các cửa sổ khác không bị ảnh hưởng.
Mỗi gói IP có cả địa chỉ IP nguồn và đích và cổng có sẵn trong tiêu đề. Hệ điều hành và ứng dụng (trình duyệt web hoặc máy chủ web) có thể sử dụng cả hai để tìm ra hành động thích hợp về cách xử lý gói.
Cổng 80 & 443 là cổng "mặc định" cho HTTP / HTTPS
Điều này có nghĩa là bạn không phải chỉ định cổng ( http://www.example.com:80 , https://www.example.com:443 ) khi sử dụng trình duyệt web.
Nếu bạn muốn có một máy chủ web lắng nghe trên bất kỳ cổng nào khác, người dùng phải tự thêm cổng vào URL hoặc nó phải được mã hóa trong bất kỳ liên kết nào đến cổng cụ thể đó.
Ngoài ra, hầu hết các Proxy và Tường lửa sẽ không cho phép kết nối với các cổng đó trừ khi được cấu hình cụ thể để làm như vậy (Nếu không có cấu hình, các proxy ngoài sẽ không nghe các cổng không mặc định, do đó sẽ không chuyển tiếp yêu cầu tới máy chủ web, trong khi Tường lửa chỉ đơn giản là chặn các nỗ lực kết nối không phải TCP80 / 443)
Tất cả những điều này giới hạn những gì có thể được thực hiện ở cấp TCP / IP
Một cách để tăng hiệu suất là bằng cách có một thiết bị / dịch vụ cân bằng tải nghe TCP80 / 443, sau đó sẽ chuyển hướng yêu cầu đến các máy chủ trên các cổng và / hoặc ip khác nhau (Cân bằng cục bộ) hoặc thậm chí các trang web từ xa khác nhau (Cân bằng toàn cầu). Nhưng đây là một chủ đề khác hoàn toàn
Thêm các cổng bổ sung không thêm băng thông bổ sung hoặc bất cứ thứ gì tương tự, một cổng có nhiều nhãn hơn một đường ống , nó có thể "phát triển" rộng như bạn cần mà không bị chậm hơn do đường ống bị đầy.
Nếu một máy chủ nhận được quá nhiều yêu cầu, tất nhiên máy chủ sẽ chậm lại, tuy nhiên đây không phải là loại sự cố có thể được khắc phục bằng cách thêm một số cổng khác.
Nếu bạn đã sử dụng các cổng ngẫu nhiên, người dùng sẽ phải thêm số cổng chính xác mỗi lần họ truy cập trang web của bạn. tức là www.example.com:80; www.example.com:81; www.example.com:82, v.v.
Nó sẽ không tăng hiệu suất để sử dụng nhiều cổng hơn. Các cổng nguồn cho mỗi kết nối một cổng phù du và dù sao cũng khác nhau
Mỗi kết nối TCP / IP có một nguồnIP: sourcePort và DestinationIP: DestinationPort.
Khi bạn bắt đầu kết nối, bạn sẽ luôn sử dụng 80 làm cổng đích (điều này hợp lý vì Máy chủ chỉ cần nghe trên cổng 80 cho HTTP chứ không phải trên một số cổng). Thủ thuật là sourcePort là động cho mỗi kết nối.
Thí dụ:
người dùng1: 1.1.1.1:29999 đến 2.2.2.2:80
người dùng2: 1.1.1.2:45333 đến 2.2.2.2:80
Đừng nhầm một cổng khác cho kết nối vật lý khác hoặc hiệu suất xử lý máy chủ hoặc băng thông mạng cao hơn. Những gì máy chủ nhận được là các gói TCP hoặc UDP, có số cổng là một phần của địa chỉ. Họ vẫn đi qua cùng một dây, đi qua cùng một phần cứng và trình điều khiển giao diện mạng, v.v.
Nếu bạn gửi hai gói đến một máy chủ, về mặt tài nguyên, máy chủ sẽ xử lý hai gói này không thành vấn đề nếu một trong hai gói có số cổng khác nhau hoặc cùng số cổng được liên kết với chúng, việc xử lý nội bộ sẽ được gần giống hệt nhau.
Do đó, đây không phải là một phương pháp để tăng hiệu suất dưới bất kỳ hình thức nào.
Ngoại lệ duy nhất có thể xảy ra là nếu bạn liên kết hai con quỷ khác nhau (hoặc hai bản sao giống nhau) chạy cùng lúc với hai số cổng khác nhau và nếu mỗi con quỷ này sẽ tăng quy mô cực kỳ xấu với tải. Mà thường không phải là trường hợp.
Như Remi đã đề cập, Cổng 80 & 443 là cổng "mặc định" cho HTTP / HTTPS.
Hầu hết các mạng và tường lửa không chặn lưu lượng đi qua các cổng này. Vì vậy, việc sử dụng các cổng này dễ dàng hơn vì hầu hết thời gian bạn có thể không cần lo lắng về việc tường lửa chặn dịch vụ của mình, bạn có thể phải thông qua cấu hình lại các quy tắc tường lửa và nhận được sự chấp thuận từ việc tuân thủ / bảo mật.
Như mọi người khác ở đây đã nói, về cơ bản là vô nghĩa khi lưu trữ một máy chủ web trên bất kỳ cổng nào ngoài cổng 80 ... trừ khi bạn lưu trữ nó ở nhà. Nhiều ISP điều chỉnh các cổng TCP / UDP bên ngoài 80 và 443 ( IANA tương ứng là HTTP và HTTPS ), và trong trường hợp này, sử dụng các cổng đó sẽ làm giảm tốc độ tải trang web, v.v. Tuy nhiên, IANA đã gán 3 cổng HTTP-ALT cho cả TCP và UDP. Đó là: 591, 8008 và 8080. Sử dụng các cổng này cũng được chấp nhận, nhưng bạn sẽ biến cuộc sống của quản trị viên máy chủ thành địa ngục.
Nguồn số cổng: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml