TCP dba o identyfikacji klienta
Jak ja powiedziałem, TCP dba o identyfikację klienta, a serwer widzi tylko "gniazdo" na klienta.
Powiedzmy, że serwer o numerze 10.10.100.100 nasłuchuje portu 80 dla przychodzących połączeń TCP (HTTP jest budowany przez TCP). Przeglądarka klienta (w 10.9.8.7) łączy się z serwerem za pomocą portu klienta 27143. Serwer widzi: "klient 10.9.8.7:27143 chce się połączyć, czy akceptujesz?". Aplikacja serwera akceptuje i otrzymuje "uchwyt" (gniazdo) do zarządzania całą komunikacją z tym klientem, a uchwyt zawsze wysyła pakiety do 10.9.8.7:27143 z odpowiednimi nagłówkami TCP.
Pakiety nie są jednoczesne
Teraz, fizycznie nie jest na ogół tylko jeden (lub dwa) połączenia łączące serwer do internetu, więc pakiety mogą przyjechać tylko w kolejności. Powstaje pytanie: jaka jest maksymalna przepustowość przez światłowód i ile odpowiedzi serwer może obliczyć i wysłać w zamian. Poza czasem pracy procesora lub wąskimi gardłami pamięci podczas odpowiadania na żądania serwer musi także utrzymywać przy życiu niektóre zasoby (co najmniej 1 aktywne gniazdo na klienta) do czasu zakończenia komunikacji, a zatem zużywać pamięć RAM. Przepustowość osiąga się poprzez pewne optymalizacje (nie wykluczające się wzajemnie): nie blokujące gniazda (w celu uniknięcia opóźnień potokowych/gniazdowych), wielowątkowość (w celu wykorzystania większej liczby rdzeni procesorów/wątków).
Poprawa żądania przepustowości dalej: równoważenie
i ostatni serwer na „front-side” stron internetowych z reguły nie wykonać całą pracę samodzielnie (szczególnie bardziej skomplikowane rzeczy, jak zapytań bazy obciążenie, obliczenia itp.) i odraczać zadania, a nawet przekazywać żądania HTTP do rozproszonych serwerów, podczas gdy oni nadal obsługują trywialnie (np. przekazywanie) jak najwięcej żądań na sekundę, jak tylko mogą. Dystrybucja pracy na kilku serwerach nosi nazwę load-balancing.
Niska jakość, całkowicie pomieszana między gniazdami i gniazdami. Połączenia są identyfikowane za pomocą adresu IP i * portów, * nie przez gniazda. – EJP