Các trình duyệt web có sử dụng các cổng đi khác nhau cho các tab khác nhau không?


58

Trong trình duyệt web hỗ trợ có nhiều tab, chẳng hạn như Firefox, các tab khác nhau đi đến các tên miền trang web khác nhau có sử dụng cổng dành riêng cho mỗi tên miền không?.

Hoặc trình duyệt sử dụng một cổng duy nhất để quản lý tất cả các tab và do đó tất cả các tên miền?.


Trình duyệt sử dụng 2 cổng khi kết nối với trang web, 80 là cho kết nối http, 443 dành cho kết nối https. vi.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Moab

7
Tôi biết các cổng được sử dụng để kết nối với máy chủ, nhưng tôi đã tự hỏi về số cổng được sử dụng để kết nối từ máy khách (máy tính chủ).
yoyo_fun 20/03/2016

2
Tôi nghĩ rằng thuật ngữ "cổng đi" là không chính xác. Các cổng là hai chiều. Có lẽ bạn có thể nói. "cảng địa phương", thay vào đó. Các cổng cục bộ được sử dụng làm cổng nguồn (gửi đi) để gửi yêu cầu và cổng đích (đến) để nhận phản hồi.
Ron Maupin

6
Các cổng được chỉ định bởi HĐH và mỗi kết nối mới được gán một cổng cục bộ mới để làm cho nó khác biệt với tất cả các kết nối mở khác.
Ex Umbris

1
@ExUmbris: Đó có thể là một chiến lược hợp lý và đơn giản, nhưng các kết nối TCP được xác định bởi quad {IP cục bộ, cổng cục bộ, IP từ xa, cổng từ xa}. Cổng cục bộ không cần thiết cho tính duy nhất, đó là một điều tốt: máy chủ web hoàn toàn không thể sử dụng cổng cục bộ của nó cho tính duy nhất. Và theo quan điểm của máy chủ web, IP từ xa không phải là duy nhất vì nhiều người dùng có thể được đặt phía sau một cổng / proxy duy nhất.
MSalters

Câu trả lời:


55

Các trình duyệt có sử dụng các cổng khác nhau để kết nối với các trang web khác nhau không?

Vâng, họ làm.

Dưới đây là một ví dụ, hiển thị các kết nối Firefox hiện tại của tôi (tôi có 9 tab đang mở) trên Windows 7:

nhập mô tả hình ảnh ở đây

Ghi chú:

  • Bạn có thể thấy rằng các cổng địa phương là khác nhau.

  • Các cổng từ xa thường là 80 (HTTP), 443 (HTTPS) hoặc 8080 (HTTP Alternate).

  • Toàn bộ quá trình kết xuất một trang web được mô tả dưới đây. Xem cụ thể các bước 5, 6, 13 và 15 (được in đậm):

    • Nói chung, kết xuất một trang web sử dụng nhiều kết nối, không phải tất cả các kết nối sẽ đến cùng một địa chỉ từ xa.

    • Điều này là do các trang web thường bao gồm các tài nguyên được lưu trữ ở nơi khác (tệp javascript, v.v.).

  • Nhiều kết nối đến cùng một trang web (ví dụ stackoverflow.com) cũng có các cổng cục bộ khác nhau (vì chúng là các kết nối riêng biệt trong các tab khác nhau hiển thị các trang khác nhau).


Kết xuất một trang web - từng bước một

Ghi chú:

  • Các bước 5, 6, 13 và 15 (được in đậm) có liên quan trực tiếp đến câu hỏi.

Bạn đã bao giờ nghĩ về những gì xảy ra khi bạn lướt web? Nó không đơn giản như nó có vẻ:

  1. Bạn nhập một URL vào thanh địa chỉ trong trình duyệt ưa thích của bạn.
  2. Trình duyệt phân tích cú pháp URL để tìm giao thức, máy chủ, cổng và đường dẫn.
  3. Nó tạo thành một yêu cầu HTTP (rất có thể là giao thức)
  4. Để tiếp cận máy chủ, trước tiên cần dịch máy chủ có thể đọc được thành số IP và thực hiện điều này bằng cách thực hiện tra cứu DNS trên máy chủ
  5. Sau đó, một ổ cắm cần phải được mở từ máy tính của người dùng đến số IP đó, trên cổng được chỉ định (thường là cổng 80)
  6. Khi kết nối được mở, yêu cầu HTTP được gửi đến máy chủ
  7. Máy chủ chuyển tiếp yêu cầu đến phần mềm máy chủ (thường là Apache) được cấu hình để nghe trên cổng được chỉ định
  8. Máy chủ kiểm tra yêu cầu (thường chỉ là đường dẫn) và khởi chạy plugin máy chủ cần thiết để xử lý yêu cầu (tương ứng với ngôn ngữ máy chủ bạn sử dụng, PHP, Java, .NET, Python?)
  9. Plugin có quyền truy cập vào yêu cầu đầy đủ và bắt đầu chuẩn bị phản hồi HTTP.
  10. Để xây dựng phản hồi, cơ sở dữ liệu được truy cập (rất có thể). Tìm kiếm cơ sở dữ liệu được thực hiện, dựa trên các tham số trong đường dẫn (hoặc dữ liệu) của yêu cầu
  11. Dữ liệu từ cơ sở dữ liệu, cùng với thông tin khác mà plugin quyết định thêm, được kết hợp thành một chuỗi văn bản dài (có thể là HTML).
  12. Plugin kết hợp dữ liệu đó với một số dữ liệu meta (dưới dạng tiêu đề HTTP) và gửi phản hồi HTTP trở lại trình duyệt.
  13. Trình duyệt nhận được phản hồi và phân tích cú pháp HTML (với xác suất 95% bị hỏng) trong phản hồi
  14. Một cây DOM được xây dựng từ HTML bị hỏng
  15. Các yêu cầu mới được gửi tới máy chủ cho từng tài nguyên mới được tìm thấy trong nguồn HTML (thường là hình ảnh, biểu định kiểu và tệp JavaScript). Quay trở lại bước 3 và lặp lại cho mỗi tài nguyên.
  16. Các bảng định kiểu được phân tích cú pháp và thông tin kết xuất trong mỗi bảng được gắn vào nút phù hợp trong cây DOM
  17. Javascript được phân tích cú pháp và được thực thi và các nút DOM được di chuyển và thông tin kiểu được cập nhật tương ứng
  18. Trình duyệt hiển thị trang trên màn hình theo cây DOM và thông tin kiểu cho mỗi nút
  19. Bạn thấy trang trên màn hình
  20. Bạn cảm thấy khó chịu toàn bộ quá trình là quá chậm.

Nguồn Kết xuất một trang web - từng bước


63

Mỗi kết nối đến một trang web sử dụng một ổ cắm khác nhau với cổng TCP đích 80 mặc định cho HTTP đơn giản và 443 cho HTTPS. Để ổ cắm là duy nhất, sự kết hợp của địa chỉ IP nguồn, cổng TCP nguồn, địa chỉ IP đích và cổng TCP đích phải khác nhau.

Nếu bạn có nhiều kết nối đến cùng một trang web (giả sử trang web chỉ sử dụng 1 địa chỉ IP) từ cùng một máy tính, phải sử dụng cổng TCP nguồn khác. Bằng cách này, mỗi kết nối là duy nhất.

Tuy nhiên, cần lưu ý rằng kể từ HTTP 1.1, tất cả các kết nối đều tồn tại trong một khoảng thời gian nhất định (trừ khi được khai báo khác). Điều này có nghĩa là trình duyệt của bạn có thể sử dụng cùng một kết nối nếu nhiều tài nguyên từ cùng một trang web được yêu cầu (ví dụ: tệp css / js). Điều này cũng áp dụng nếu bạn có nhiều phiên bản của cùng một trang web trong trình duyệt của mình.

Nếu bạn đang ở trên Windows, netstat -no -p TCPlệnh sẽ hiển thị cho bạn tất cả các socket TCP đang hoạt động và ID tiến trình tương ứng của chúng, bao gồm cả các trình duyệt của bạn:

nhập mô tả hình ảnh ở đây

Nếu bạn đang dùng Unix / Linux (Debian trong trường hợp này), bạn có thể sử dụng lệnh netstat -ntphoặc ss -t:

nhập mô tả hình ảnh ở đây


4
Lưu ý rằng netstat cũng sẽ hiển thị các kết nối không phải trình duyệt, ví dụ kết nối email cho ứng dụng email, kết nối tin tức cho người đọc tin tức. Các kết nối này sẽ được trên các cổng từ xa khác nhau.
DavidPostill

Trừ khi tôi thiếu một cái gì đó, có vẻ như bạn đang đưa ra giả định rằng người hỏi đang sử dụng Windows, mặc dù anh ta đã không đề cập đến một hệ điều hành. Bạn cũng nên liệt kê những hệ điều hành mà bạn đang đề cập mỗi khi cung cấp các lệnh console.
dùng45623

9
@ user45623: Mặc dù ảnh chụp màn hình là ảnh chụp màn hình Windows, nhưng netstat -nsẽ hoạt động trong hầu hết các hệ điều hành, bao gồm cả Linux và Mac OS.
Heinzi

1
Trên Windows (có thể cả các HĐH khác nữa), bạn có thể sử dụng netstat -n -ođể xem quá trình nào được tạo kết nối nào. Hoặc bạn có thể chạy tcpview của SysIternal để xem danh sách trong GUI, với tên và biểu tượng quy trình và tất cả.
Jonathan

Bây giờ câu hỏi là, các trình duyệt web có sử dụng lại các kết nối từ các tab khác nhau nếu chúng dẫn đến cùng một máy chủ không?
John Dvorak

11

Đối với các tab đối với các trang web khác nhau, không có gì trong TCP yêu cầu cổng cục bộ phải khác nhau, miễn là bộ dữ liệu {IP cục bộ, cổng cục bộ, IP đích, cổng đích} là duy nhất. Đối với các tab vào cùng một trang web, tình hình phức tạp hơn nhiều.

Trình duyệt, giống như bất kỳ phần mềm máy khách nào khác, sử dụng một cổng cục bộ khác nhau cho mỗi kết nối gửi đến cùng một mục tiêu. Nói chung, nó sẽ hình thành nhiều kết nối đến bất kỳ trang web cụ thể nào, để tìm nạp các tài nguyên được nhúng như hình ảnh, CSS, JavaScript, v.v. Nó cũng sẽ gộp các kết nối đó để sử dụng lại.

Không thể nói liệu các tab khác nhau trên cùng một trang web, sẽ sử dụng các kết nối riêng biệt hay không , bởi vì (a) thường không có một kết nối nào cho mỗi tab và (b) tùy thuộc vào thời gian và xác thực, các kết nối có thể tái sử dụng giữa các tab; và vì không thể xác định các kết nối, do đó cũng không thể xác định các cổng cục bộ.


Cảm ơn. "Tập hợp" một kết nối có nghĩa là gì?
yoyo_fun

Thay vì đóng nó, hãy trả nó về một pool và chỉ đóng nó nếu nó ở đó trong khoảng thời gian chờ; và tìm kiếm trong nhóm trước khi tạo kết nối mới đến mục tiêu đó. Đây là cách HTTP keep-life được triển khai.
dùng207421 20/03/2016

Vì vậy, một pool là một cấu trúc dữ liệu trong bộ nhớ lưu trữ các kết nối đã mở và chưa đóng?
yoyo_fun 20/03/2016

Điều đó đúng, thường là bản đồ được khóa bởi IP đích: cổng.
dùng207421 20/03/2016

2
@EJP: Lưu ý rằng đối với HTTPS, không an toàn khi khóa bản đồ theo IP và cổng đích; bạn cũng cần phân biệt giữa các kết nối với các tên máy chủ khác nhau mặc dù chúng xảy ra để phân giải cùng một IP và cổng. Có thể cho rằng một trình duyệt cũng nên tách riêng các kết nối cho các tab khác nhau nếu có ít nhất một tab ở chế độ ẩn danh.
Henning Makholm

6

Đúng. Không chắc. Nó phụ thuộc.

Đầu tiên, một trình duyệt có thể sử dụng bất kỳ chiến lược nào trong số các chiến lược này cho các kết nối:

  1. Kết nối đơn (không có khả năng cho bất kỳ trình duyệt nào gần đây hơn năm 1995)
  2. Một kết nối trên mỗi tab (về cơ bản giống như # 1, chỉ tốt hơn một chút)
  3. Một kết nối cho mỗi tài nguyên (ngây thơ, nhưng không hoạt động quá tệ)
  4. Nhóm kết nối với các kết nối duy trì, sử dụng lại
  5. Một cái gì đó khác nhau (đọc là: những thứ kỳ lạ)

Bạn không có cách nào để biết chiến lược nào trình duyệt sẽ sử dụng, mặc dù sử dụng nhóm kết nối (và sử dụng lại kết nối) là một giả định hợp lý.

Thứ hai, cách TCP hoạt động, bạn có một cổng nguồn và một cổng đích cho mọi kết nối. Cặp địa chỉ nguồn và cổng đích xác định kết nối.
Bạn luôn [1] sử dụng một cổng nổi tiếng (chẳng hạn như 80 hoặc 443) để kết nối với máy chủ (nơi nó lắng nghe trên địa chỉ được quảng cáo của nó), nhưng cổng khác được chọn ngẫu nhiên. Do đó, tùy thuộc vào phía bạn nhìn vào một kết nối, nó có một hoặc nhiều cổng có thể.

Do đó, cùng một tab có thể (và thường sẽ) sử dụng một số cổng khác nhau ở cuối, nhưng về nguyên tắc, các tab khác nhau có thể (nếu các kết nối được gộp chung và các tài nguyên khác nhau trong các tab khác nhau được tải từ cùng một máy chủ) sử dụng cùng một cổng.

Vì câu hỏi đề cập rõ ràng đến việc gửi đi , trong trường hợp "bình thường", các số cổng sẽ giống nhau cho dù chúng ở trong tab nào, hoặc một trong hai cổng có thể (80 và 443). Mặc dù tất nhiên có thể yêu cầu rõ ràng về một cổng khác (như 8080) trong một URL. Đó là loại hiếm, mặc dù.


[1] Chà, không phải lúc nào ... nhưng chúng ta đừng phức tạp hóa nó quá nhiều.


Một yếu tố khác ... cổng phía máy khách thường được HĐH chọn, không phải trình duyệt; và cổng phía máy khách mà máy chủ nhìn thấy có thể khác với cổng trình duyệt nhìn thấy, nếu kết nối đi qua thiết bị NAT. Hầu hết các hệ điều hành phân bổ tuyến tính hoặc ngẫu nhiên trong phạm vi cổng phù du (có thể định cấu hình), nhưng trình duyệt có thể yêu cầu cùng một cổng nguồn trên nhiều kết nối đến các máy chủ khác nhau. (Và OP đang hỏi về cổng khách, không phải cổng máy chủ.)
David

@david: Thật khó để nói cái nào đúng (hoặc câu trả lời) vì Q là một câu chuyện mơ hồ, do đó chuyến đi của tôi có phần dài dòng. OP đang hỏi về cổng đi trên máy khách. "Máy khách" gợi ý rằng chúng ta đang nói về cổng nguồn (theo thuật ngữ TCP) là cổng được chọn tự do hoặc ngẫu nhiên (bằng cách triển khai), nhưng "gửi đi" cho thấy đó thực sự là cổng đích mà chúng ta đang nói đến. Được mô tả tốt hơn nhiều là "cổng trên máy chủ" trong các từ cư sĩ. Nhận xét của bạn về NAT là chính xác khi nhìn từ máy chủ, nhưng không ảnh hưởng đến máy khách.
Damon
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.