Як здійснюється кілька підключень клієнтів до одного веб-сервера?


16

Насправді я навчаюсь комп'ютерних мереж, і, перебуваючи в ньому, я розгублений у тому, як веб-сервер підтримує безліч з'єднань?

Просто кажучи, я дізнався через деякий googling те, що розетки обробляють кожен запит клієнта.

Отже, скажімо, що існує веб-сервер, і давайте скажемо, що 2 клієнта з IP-адресами

Client A: 5.5.5.5
Client B: 10.10.10.10 

Вони обидва намагаються підключитися до сервера через порт 80.

Тепер, з googling, що я отримав, сервер слухає порт 80 для вхідних запитів. Потім скажемо, що клієнт A намагається підключитися до сервера (встановити TCP / IP-з'єднання). Під час якого між цими двома створюється розетка. Потім він виконується як окремий потік для його подальшого зв'язку, змушуючи сервер знову слухати інші запити клієнтів у цьому конкретному порту. І Клієнт Б підключається таким же чином.

Тепер моє перше питання:

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

Зараз практично не лише 2 клієнти, але тисячі і мільйони користувачів можуть підключитися до сервера.

Тоді наступне моє запитання:

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?

І нарешті, моє третє питання:

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.

Це мої основні питання, які я не отримую. Будь ласка, виправте мене, якщо я все зрозумію неправильно. Ви можете запропонувати мені прочитати кілька книжок / pdfs, якщо відповіді деталізовані чи не окремо орієнтовані на конкретну частину. Спасибі


Чи допомогла вам якась відповідь? Якщо так, то слід прийняти відповідь, щоб питання не з’являлося вічно, шукаючи відповідь. Крім того, ви можете надати та прийняти власну відповідь.
Рон Моупін

Відповіді:


6

Тепер, з googling, що я отримав, сервер слухає порт 80 для вхідних запитів.

Дійсно, більш конкретно існує спеціальний тип розетки, який називається "прослуховуючим" сокетом.

Зазвичай сокет асоціюється з комбінацією локального IP, локального порту, віддаленого IP та віддаленого порту.

Розетка для прослуховування відрізняється. Він не пов'язаний з будь-яким конкретним віддаленим IP-адресом та портом. Він пов'язаний з певним локальним портом. Він може або не може бути пов'язаний з певним локальним IP-адресою.

Зазвичай ваш веб-сервер матиме розетку для прослуховування з локальним портом 80

Потім скажемо, що клієнт A намагається підключитися до сервера (встановити TCP / IP-з'єднання). Під час якого між цими двома створюється розетка.

Пара розеток насправді одна на клієнті, одна на сервері.

Клієнтська програма створює сокет і просить клієнтську ОС підключити його до сервера.

Клієнтська ОС виділяє випадковий локальний порт, вибирає локальний IP (як правило, виходячи з того, на який інтерфейс буде надсилатися пакет) та заповнює віддалений IP та порт, запитуваний клієнтською програмою. Потім він запускає процес підключення до сервера.

ОС сервера повідомляє власника прослуховувального сокета про те, що надходить нове з'єднання. Серверна програма приймає з'єднання і для його обробки створюється новий сокет.

Кілька потоків або навіть процесів можуть контролювати один і той же сокет переліку. ОС забезпечить, що саме одна з них отримає прийняття даного з'єднання.

Потім він виконується як окрема нитка для подальшого його спілкування

Це залежить від виконавця серверної програми. Вони можуть скористатися декількома потоками, або вони можуть скористатися API, таким як "select" або "опитування", що дозволяє одному потоку контролювати кілька розеток для активності.

  1. Як сервер спілкується з цими двома клієнтами одночасно
    після встановлення з'єднання?

ОС сервера буде співставляти пакети з сокетами, поєднуючи вихідний IP, вихідний порт, IP-адресу призначення та порт призначення та доставляючи їх у відповідний сокет.

  1. Тепер, як ці тисячі клієнтів підключаються до одного сервера?

    Якщо припустити, що кожен клієнт підключений до сервера за допомогою дроту, практично неможливо підтримувати стільки розеток на апаратному забезпеченні для з'єднання. Як здійснюються та обробляються ці тисячі з'єднань?

"Socket" в цьому контексті не стосується фізичного сокета, а лише структури даних в операційній системі.

Ще є обмеження, тисячі легко виконати на сучасному сервері, мільйони стає важким.

Хіба це не так, поки студент задає питання вчителю, інші не можуть задавати одночасно, оскільки той конкретний студент зайнятий або займає вчителя в даний момент, тому інші повинні чекати, що ми порівнюємо, ніж клієнт B повинен чекати коли клієнт А спілкується.

Комп'ютери набагато краще розділяють свою увагу, ніж люди. Очевидно, що якщо на сервері є лише одне ядро ​​процесора, він може робити лише одну справу за один раз, але якщо він може перемикатися між речами досить швидко, клієнти цього не помітять.

І, звичайно, сьогодні багато серверів мають декілька ядер процесора.


Створюється нове з'єднання, а не сокет. Я думаю, ви поширюєте плутанину ОП щодо того, що таке розетка.

Здається, проблема полягає в тому, що rfc відрізняється від фактичної практики тим, що він визначає socket.

Я просто зайшов і подивився документацію на "прийняти" для трьох основних операційних систем, усі вони говорять про прийняття створення нового сокета.

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/library/windows/desktop/ms737526%28v=vs.85%29.aspx


Для відповіді 1. Я знаю про унікальність розетки. Я хотів запитати, чи є два унікальних сокета і сервер знає, що вони різні. Тоді сервер надає кожному сокету часовий відрізок для запуску, обробляючи запит одночасно? Як, якщо я підключаюся до google і обробляє свій запит, це ще не означає, що запит на мільйон користувачів ще очікує?
Sagaryal

Також 2. Я мав на увазі порти, як фактичний фізичний, коли ви хочете підключитися до мережі, наприклад, в локальній мережі. Можливо, тут неправильно трактують слова. Скажемо, я знову підключаюся до google. І як мільйони інших людей підключаються до цього єдиного сервера google. Я підключаюсь до google бездротово від свого дому, а також тих мільйонів людей. Як обробляє ці з'єднання сервер. Як для мого комп’ютера, щоб використовувати Інтернет, мені потрібно підключитися до порту на моєму маршрутизаторі або бездротово. Чи є у них мільйони таких портів фізично? Тепер я думаю, це не про сервер, а про бездротове підключення?
Sagaryal

" Зазвичай сокет асоціюється з комбінацією локального IP, локального порту, віддаленого IP та віддаленого порту. " Сокет за визначенням RFC - це локальна IP-адреса та порт TCP, і він не має нічого спільного з віддаленими адресами . З'єднання є комбінацією локальних і віддалених розеток, так що локальний IP - адреса, локальний порт TCP, IP - адреса віддаленого і віддалений порт TCP. Ви сплутали проблему.
Рон Моупін

2
" Серверна ОС повідомляє власника прослуховувального сокета про те, що надходить нове з'єднання. Серверна програма приймає з'єднання і для його обробки створюється новий сокет. " Створюється нове з'єднання , а не сокет . Я думаю, ви поширюєте плутанину ОП щодо того, що таке розетка.
Рон Моупін

" Серверна ОС відповідає пакетам проти сокетів за допомогою комбінації джерела IP, вихідного порту, IP-адреси призначення та порту призначення та доставить їх у відповідний сокет. " Знову ви плутаєте сокет із з'єднанням .
Рон Моупін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.