Tại sao chỉ có cổng 80 cho các dịch vụ web?


54

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?


17
Bạn hoàn toàn chính xác. Tôi đã thay đổi cổng mặc định của máy chủ web từ 80 thành 90,91,92 & 93. Tải trên máy chủ đã giảm đáng kể.
David Houde

17
... Có lẽ bởi vì không có khách hàng nào có thể tìm thấy máy chủ nữa?
Marcos Gonzalez

5
80 chỉ là cổng được sử dụng cho http. Khi bạn nói "cái gì đó.com"; (hoặc thậm chí "Something.com") trình duyệt hoàn thành nó là một yêu cầu tới "Something.com:80"; (trên cổng 80, vì đây là cổng http nổi tiếng mặc định). Tương tự cho https trên 443. Nếu bạn quyết định thay đổi nó, bạn sẽ phải nói nó trong URL: "myserver.com:1280"; nếu không trình duyệt sẽ thử trên cổng 80 và sẽ không tìm thấy. Một danh sách có thể được nhìn thấy trên wikipedia
Olivier Dulac

6
Xin lỗi Marcos, đó là một nỗ lực kém trong sự hài hước. Tôi chưa bao giờ giỏi về nó.
David Houde

3
@DavidHoude, thời gian để ôn lại biểu tượng cảm xúc cho bạn. :-) cs.cmu.edu/~sef/sefSmiley.htmlm
generalnetworkerror

Câu trả lời:


70

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.


7
Đó là nó! Cổng 80 không phải là tài nguyên! Nó chỉ là một phần của một tuple! Cảm ơn bạn đã đặt nó rất rõ ràng.
Marcos Gonzalez

2
Điều này cũng không có giá trị gì, ngay cả đối với các dịch vụ khác nhau, kết nối HTTP thực tế thường được nhận trên cổng 80 bởi trình điều khiển toàn hệ thống thực hiện phân tích giao thức ban đầu và sau đó chuyển sang dịch vụ chính xác, do đó cho phép các dịch vụ hoàn toàn khác nhau trong các quy trình khác nhau chia sẻ cùng một cổng.
Monstieur

1
Câu trả lời hữu ích của Vô dụng
Deckard

26

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.


8
Tôi sẽ thêm vào câu trả lời này rằng cổng 80 không được sử dụng bởi người dùng gửi yêu cầu của họ tới nó. Đây là lý do tại sao chỉ sử dụng cổng 80 (hoặc bất kỳ cổng nổi tiếng nào cho giao thức đến mà bạn đang xem) không phải là nút cổ chai cho khả năng mở rộng.
Craig Sirkin

1
Đó chính xác là những gì tôi đã không hiểu rõ. Thậm chí 100.000 người dùng kết nối đồng thời với www.example.com:80 sẽ không sử dụng cổng 80. Cảm ơn bạn đã làm rõ. Tôi thấy thông tin @Usless 'bên dưới cũng rất khai sáng.
Marcos Gonzalez

Một số phần mềm máy chủ web có Giới hạn cho mỗi phiên bản và / hoặc quy trình. Đôi khi, có thể là một ý tưởng tốt để chạy nhiều phiên bản, nhưng làm như vậy trên cùng một máy đòi hỏi một cổng nghe khác, đầu tiên (TCP80 / 443) là chuyển tiếp kết nối đến phiên bản đầu tiên.
Remi Letourneau

22

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.


2
+2 phiếu nếu tôi có thể.
generalnetworkerror

13

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


Cảm ơn bạn đã giới thiệu cho tôi khái niệm "cân bằng tải".
Marcos Gonzalez

1
Nếu bạn muốn có một số thực hành "giả" và ý tưởng về một số khái niệm cân bằng tải, F5 có một số khóa đào tạo trực tuyến miễn phí tại University.f5.com Đăng ký là miễn phí và nó cho phép bạn truy cập vào LTM (Trình quản lý lưu lượng cục bộ - bộ cân bằng cục bộ của họ ) đào tạo, nơi bạn có thể thấy nó trông như thế nào và tìm hiểu một số khái niệm cân bằng tải (ví dụ: Real IP, Virtual IP, Pools, kiểm tra sức khỏe, v.v.)
Remi Letourneau

Lời khuyên tốt đẹp!
Marcos Gonzalez

9

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.


s / nhãn sau đó / nhãn hơn / - Tôi sẽ chỉnh sửa, nhưng dường như chỉ có một ký tự không phải là chỉnh sửa chấp nhận được.
Paul Gear

7

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


7

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


2

Đừ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.


1

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.


1
Amen, các trang web sử dụng cổng không chuẩn là nguyên nhân tồn tại của bất kỳ quản trị viên bảo mật nào, một người dùng trên nedwork của bạn cần sử dụng một trang web có cổng lạ = thay đổi proxy, thay đổi FW, đánh giá bảo mật, v.v.
wintermute000

0

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à HTTPHTTPS ), 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

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.