2010-06-02 16 views
51

Nếu tôi hiểu đúng, các ứng dụng đôi khi sử dụng HTTP để gửi tin nhắn, vì việc sử dụng các cổng khác có thể gây ra sự cố tường lửa. Nhưng làm thế nào mà làm việc mà không xung đột với các ứng dụng khác như trình duyệt web? Trong thực tế, làm thế nào để nhiều trình duyệt chạy cùng một lúc không xung đột? Tất cả họ đều theo dõi cổng và được thông báo ... bạn có thể chia sẻ một cổng theo cách này không?làm thế nào một ứng dụng có thể sử dụng cổng 80/HTTP mà không xung đột với các trình duyệt?

Tôi có cảm giác đây là một câu hỏi ngớ ngẩn, nhưng không phải thứ tôi từng nghĩ đến trước đây, và trong một số trường hợp khác, tôi đã gặp sự cố khi 2 ứng dụng được định cấu hình để sử dụng cùng một cổng.

Trả lời

65

Có 2 cổng: một cổng nguồn (trình duyệt) và một cổng đích (server).Trình duyệt yêu cầu hệ điều hành cho một cổng nguồn có sẵn (giả sử nó nhận được) sau đó thực hiện kết nối ổ cắm tới cổng đích (thường là 80/HTTP, 443/HTTPS).

Khi máy chủ web nhận được câu trả lời, nó sẽ gửi một phản hồi có 80 là cổng nguồn và 33123 làm cổng đích.

Vì vậy, nếu bạn có 2 trình duyệt đồng thời truy cập vào stackoverflow.com, bạn muốn có một cái gì đó như thế này:

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80) 
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80) 
+0

Đối với các kết nối đồng thời, bạn dường như đang giải thích điều này từ góc nhìn ** của trình duyệt **. Thế còn quan điểm ** của ứng dụng ** thì sao? –

+6

Trình duyệt là một ứng dụng. Bạn có thể giải thích về câu hỏi của bạn không? –

+1

Mọi tab trên trình duyệt cũng có một cổng riêng biệt như vậy không? – huync

17

Yêu cầu HTTP gửi đi không xảy ra trên cổng 80. Khi ứng dụng yêu cầu ổ cắm, nó thường nhận được một yêu cầu ngẫu nhiên. Đây là cổng nguồn.

Cổng 80 để phục vụ nội dung HTTP (bởi máy chủ, không phải máy khách). Đây là cổng đích.

Mỗi trình duyệt sử dụng Nguồn khác nhau để tạo yêu cầu. Bằng cách đó, các gói tin sẽ đưa nó trở lại đúng ứng dụng.

+0

Nhưng nếu client/server của tôi giao tiếp trên 80 ... nếu khách hàng nhận được một tin nhắn trên cổng 80 (tại sao) sẽ không trình duyệt chặn nó dưới dạng nội dung HTTP? –

+1

Máy khách sẽ KẾT NỐI với cổng 80 trên máy chủ, nhưng sẽ sử dụng một cổng khác. Hãy tự thử: tải xuống tệp từ máy chủ (ví dụ: video trên youtube), mở lời nhắc và nhập "netstat". Máy của riêng bạn sẽ sử dụng một cổng ngẫu nhiên (như 62123) để kết nối với máy chủ trên cổng 80. – Konerak

+5

@John, no. Máy chủ web * mở cổng 80, nhưng trình duyệt * có cổng khác, được gán ngẫu nhiên. Nếu ứng dụng của bạn giao tiếp trên cổng 80 thì bạn ngăn ứng dụng của mình không được sử dụng trên cùng một máy với máy chủ web, nhưng bạn không can thiệp gì cả với duyệt web. –

1

Trình duyệt là ứng dụng khách mà bạn sử dụng để xem nội dung trên máy chủ web thường là trên một máy khác. Máy chủ web là máy chủ nghe trên cổng 80, không phải trình duyệt trên máy khách.

+1

Tôi không hiểu tại sao điều này lại bị giảm giá . Nó có thể không phải là câu trả lời toàn diện nhất nhưng không có gì sai với nó. –

2

Cổng 80 bạn đang nói đến ở đây là cổng từ xa trên máy chủ, trình duyệt cục bộ mở cổng cao cho mỗi kết nối được thiết lập.

Mỗi kết nối có số cổng trên cả hai kết thúc là, một cổng được gọi là cổng cục bộ, cổng từ xa khác.

Tường lửa sẽ cho phép lưu lượng truy cập đến cổng cao cho trình duyệt, vì nó biết rằng kết nối đã được thiết lập từ máy tính của bạn.

+0

"trình duyệt cục bộ mở cổng cao cho mỗi kết nối được thiết lập" ... làm thế nào điều này có được thông qua một bức tường lửa sau đó? Tường lửa có để lại một dải cổng cụ thể mở theo mặc định không? –

+1

@John: nói chung, tường lửa sẽ phát hiện các cổng và địa chỉ liên quan khi kết nối được thiết lập đầu tiên bởi máy khách và sẽ cho phép lưu lượng truy cập trả về từ máy chủ thông qua tự động miễn là kết nối "còn sống". –

+0

Tường lửa cho phép các kết nối đi trên bất kỳ cổng nào. Chúng thường chặn các kết nối đến trên hầu hết các cổng trừ khi bạn mở chúng một cách rõ ràng. –

3

Bạn cần phải cẩn thận trong việc phân biệt giữa "nghe trên cổng 80" và "kết nối với cổng 80".

Khi bạn nói "các ứng dụng đôi khi sử dụng HTTP để gửi tin nhắn, vì việc sử dụng các cổng khác có thể gây ra sự cố tường lửa", bạn thực sự có nghĩa là "các ứng dụng đôi khi gửi tin nhắn đến cổng 80".

Máy chủ đang nghe trên cổng 80 và có thể chấp nhận nhiều kết nối trên cổng đó.

6

Đây là 5 bộ (giao thức IP, địa chỉ IP cục bộ, cổng cục bộ, địa chỉ IP từ xa, cổng từ xa) xác định kết nối. Nhiều trình duyệt (hoặc trên thực tế một trình duyệt tải nhiều trang cùng một lúc) mỗi cổng sẽ sử dụng cổng đích 80, nhưng cổng cục bộ (được cấp bởi O/S) là khác nhau trong mỗi trường hợp. Do đó không có xung đột.

+0

Vì vậy, trong nội bộ, máy chủ sẽ gửi phản hồi lại cho máy khách ? –

+0

Phải, trong phản hồi máy chủ chuyển đổi cổng cục bộ và từ xa và địa chỉ IP cục bộ và từ xa, do đó phản hồi có cổng cục bộ = 80 và cổng từ xa = cổng cục bộ của khách hàng>. – jchl

4

Khách hàng thường chọn cổng từ 1024 đến 65535. Điều đó phụ thuộc vào hệ điều hành cách xử lý việc này. Tôi nghĩ rằng Windows Clients tăng giá trị cho mỗi kết nối mới, Unix Clients chọn một cổng ngẫu nhiên không.

Một số dịch vụ dựa trên một cổng client tĩnh như NTP (123 UDP)

+0

1024 và * 65535 * (không 65536) – exoddus

+0

@exoddus cố định, cảm ơn. –

Các vấn đề liên quan