Làm thế nào nhiều kết nối máy khách được thực hiện cho một máy chủ web?


16

Trên thực tế tôi đang học Mạng máy tính và trong khi ở đó, tôi bối rối về cách một máy chủ web duy trì nhiều kết nối?

Nói một cách đơn giản, tôi đã học được một số điều khó hiểu là các socket xử lý từng yêu cầu của khách hàng.

Vì vậy, giả sử có một máy chủ web và cho phép nói 2 khách hàng có IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Cả hai đều cố gắng kết nối với máy chủ tại cổng 80.

Bây giờ, từ việc tìm hiểu những gì tôi nhận được, máy chủ lắng nghe ở cổng 80 cho các yêu cầu đến. Sau đó, giả sử khách hàng A cố gắng kết nối với máy chủ (tạo kết nối TCP / IP). Trong đó một ổ cắm được tạo ra giữa hai. Sau đó, nó được thực thi như một luồng riêng cho giao tiếp tiếp theo của nó làm cho máy chủ nghe lại các yêu cầu máy khách khác tại cổng cụ thể đó. Và khách hàng B kết nối theo cùng một cách.

Bây giờ câu hỏi đầu tiên của tôi là:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

Bây giờ thực tế không chỉ có 2 khách hàng mà hàng ngàn và hàng triệu người dùng có thể kết nối với một máy chủ.

Sau đó, câu hỏi tiếp theo của tôi là:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

Cuối cùng, câu hỏi thứ 3 của tôi là:

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

Đây là những câu hỏi cơ bản của tôi mà tôi không nhận được. Xin hãy sửa tôi nếu tôi hiểu sai tất cả. Bạn có thể gợi ý cho tôi một số sách / pdf để đọc nếu câu trả lời chi tiết hoặc không tập trung vào một phần cụ thể. Cảm ơn


Có câu trả lời nào giúp bạn không? Nếu vậy, bạn nên chấp nhận câu trả lời để câu hỏi không xuất hiện mãi mãi, tìm kiếm câu trả lời. Ngoài ra, bạn có thể cung cấp và chấp nhận câu trả lời của riêng bạn.
Ron Maupin

Câu trả lời:


6

Bây giờ, từ việc tìm hiểu những gì tôi nhận được, máy chủ lắng nghe ở cổng 80 cho các yêu cầu đến.

Thật vậy, cụ thể hơn có một loại ổ cắm đặc biệt gọi là ổ cắm "nghe".

Thông thường một ổ cắm được liên kết với sự kết hợp của IP cục bộ, cổng cục bộ, IP từ xa và cổng từ xa.

Một ổ cắm nghe là khác nhau. Nó không được liên kết với bất kỳ IP và cổng từ xa cụ thể. Nó được liên kết với một cổng địa phương cụ thể. Nó có thể hoặc không thể được liên kết với một IP cục bộ cụ thể.

Thông thường máy chủ web của bạn sẽ có ổ cắm nghe với cổng cục bộ là 80

Sau đó, giả sử khách hàng A cố gắng kết nối với máy chủ (tạo kết nối TCP / IP). Trong đó một ổ cắm được tạo ra giữa hai.

Một cặp ổ cắm thực sự một trên máy khách, một trên máy chủ.

Ứng dụng khách tạo một ổ cắm và yêu cầu HĐH máy khách kết nối nó với máy chủ.

HĐH máy khách phân bổ một cổng cục bộ ngẫu nhiên, chọn một IP cục bộ (thông thường dựa trên giao diện mà gói tin sẽ được gửi đi) và điền vào IP từ xa và cổng do ứng dụng khách yêu cầu. Sau đó, nó bắt đầu quá trình kết nối với máy chủ.

Hệ điều hành máy chủ thông báo cho người giữ ổ cắm nghe rằng có kết nối mới. Ứng dụng máy chủ chấp nhận kết nối và ổ cắm mới được tạo để xử lý nó.

Nhiều luồng hoặc thậm chí các quá trình có thể giám sát cùng một ổ cắm danh sách. HĐH sẽ đảm bảo rằng chính xác một trong số họ chấp nhận một kết nối nhất định.

Sau đó, nó được thực hiện như một luồng riêng biệt để liên lạc thêm

Đó là tùy thuộc vào người thực hiện ứng dụng máy chủ. Họ có thể chọn sử dụng nhiều luồng hoặc họ có thể chọn sử dụng API như "select" hoặc "poll" cho phép một luồng duy nhất giám sát nhiều ổ cắm cho hoạt động.

  1. Làm thế nào để máy chủ liên lạc với hai khách hàng này đồng thời
    sau khi kết nối được thiết lập?

Hệ điều hành máy chủ sẽ khớp các gói với ổ cắm bằng cách kết hợp IP nguồn, cổng nguồn, IP đích và cổng đích và đưa chúng đến ổ cắm thích hợp.

  1. Bây giờ, làm thế nào để hàng ngàn khách hàng đó được kết nối với một máy chủ?

    Nếu chúng tôi giả sử mọi máy khách được kết nối với máy chủ thông qua dây, thì thực tế không thể duy trì nhiều ổ cắm trên phần cứng để kết nối. Làm thế nào hàng ngàn kết nối được thực hiện và xử lý?

"Ổ cắm" trong ngữ cảnh này không đề cập đến ổ cắm vật lý, chỉ liên quan đến cấu trúc dữ liệu trong hệ điều hành.

Vẫn có những giới hạn, hàng ngàn có thể thực hiện được trên một máy chủ hiện đại, hàng triệu người gặp khó khăn.

Không giống như trong khi một học sinh đang đặt câu hỏi cho giáo viên, người khác không thể hỏi cùng một lúc vì học sinh đó đang bận hoặc chiếm giáo viên vào lúc này để những người khác nên chờ đợi, mà chúng ta so sánh với khách hàng B nên chờ đợi khi khách hàng A đang giao tiếp.

Máy tính tốt hơn nhiều trong việc phân chia sự chú ý của họ so với con người. Rõ ràng nếu máy chủ chỉ có một lõi bộ xử lý thì nó chỉ có thể thực hiện một việc tại một thời điểm nhưng nếu nó có thể chuyển đổi giữa các thứ đủ nhanh thì khách hàng sẽ không nhận thấy điều đó.

Và tất nhiên nhiều máy chủ hiện nay có nhiều lõi xử lý.


Một kết nối mới, không phải ổ cắm, được tạo. Tôi nghĩ rằng bạn đang mở rộng sự nhầm lẫn của OP về ổ cắm là gì.

Có vẻ như vấn đề là rfc khác với thực tế trong định nghĩa về ổ cắm.

Tôi vừa đi vừa tra cứu tài liệu "chấp nhận" cho ba hệ điều hành chính, tất cả chúng đều nói về việc chấp nhận tạo ra một ổ cắm mới.

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/l Library / windows / desktop / ms737526% 28v = vs85% 29.aspx


Đối với câu trả lời của 1. Tôi biết về tính duy nhất của ổ cắm. Điều tôi muốn hỏi là nếu có 2 ổ cắm duy nhất và máy chủ biết chúng khác nhau. Sau đó, máy chủ cung cấp cho mỗi ổ cắm một lát thời gian để chạy bằng cách xử lý yêu cầu cùng một lúc? Giống như nếu tôi kết nối với google và đang xử lý yêu cầu của tôi, điều đó không có nghĩa là yêu cầu hàng triệu người dùng khác đang chờ xử lý?
Sagaryal

Ngoài ra 2. Tôi có nghĩa là các cổng như cổng vật lý thực tế khi bạn muốn kết nối với mạng, như trong mạng LAN. Tôi có thể hiểu sai các từ ở đây. Hãy nói rằng tôi kết nối với google một lần nữa. Và giống như hàng triệu người khác đang kết nối với máy chủ google duy nhất đó. Tôi kết nối với google không dây từ nhà của tôi và tương tự những triệu người đó. Làm thế nào là những kết nối được xử lý bởi máy chủ. Giống như để máy tính của tôi sử dụng internet, tôi cần kết nối với một cổng trên bộ định tuyến hoặc không dây. Họ có hàng triệu cổng như vậy về thể chất? Bây giờ tôi nghĩ rằng nó không phải là về máy chủ nhưng kết nối không dây là nó?
Sagaryal

" Thông thường một ổ cắm được liên kết với sự kết hợp của IP cục bộ, cổng cục bộ, IP từ xa và cổng từ xa. " Một ổ cắm , theo định nghĩa của RFC là địa chỉ IP cục bộ và cổng TCP, và nó không liên quan gì đến các địa chỉ từ xa . Một kết nối là sự kết hợp của các ổ cắm địa phương và từ xa, do đó địa chỉ cục bộ chỉ IP, cổng TCP địa phương, địa chỉ IP từ xa, và cổng TCP từ xa. Bạn đã nhầm lẫn vấn đề.
Ron Maupin

2
" Hệ điều hành máy chủ thông báo cho người giữ ổ cắm nghe rằng có kết nối mới. Ứng dụng máy chủ chấp nhận kết nối và ổ cắm mới được tạo để xử lý nó. " Một kết nối mới , không phải ổ cắm , được tạo. Tôi nghĩ rằng bạn đang mở rộng sự nhầm lẫn của OP về ổ cắm là gì.
Ron Maupin

" Hệ điều hành máy chủ sẽ khớp các gói với ổ cắm bằng cách kết hợp IP nguồn, cổng nguồn, IP đích và cổng đích và đưa chúng đến ổ cắm thích hợp. " Một lần nữa, bạn nhầm lẫn ổ cắmkết nối .
Ron Maupin
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.