Czy ktoś mógłby wyjaśnić dość wyraźnie różnicę między portem a gniazdem. Wiem, że port służy jako wejście do sieci dla procesu aplikacji i że proces aplikacji korzysta z połączenia gniazdowego z danym numerem portu do obsługi komunikacji sieciowej, ale gdy wiele procesów nasłuchuje na jednym numerze portu, znajduję trudno jest zrozumieć różnicę między gniazdem a portem i sposób, w jaki wszystkie one do siebie pasują.
networking
sockets
networks
cobie
źródło
źródło
Odpowiedzi:
S jest programem serwerowym: powiedzmy, że jest to serwer HTTP, więc użyje dobrze znanego numeru portu dla HTTP , czyli 80. Uruchomię go na hoście z adresem IP
10.0.0.4
, więc będzie nasłuchiwał połączeń10.0.0.4:80
(ponieważ tam wszyscy będą się tego spodziewać).Wewnątrz S zamierzam utworzyć gniazdo i powiązać je z tym adresem: teraz system operacyjny wie, że połączenia przychodzące
10.0.0.4:80
powinny być kierowane do mojego procesu S przez to konkretne gniazdo.wyjście netstat po związaniu gniazda:
NB. adres lokalny jest zerowy, ponieważ S nie obchodzi, w jaki sposób docierają do niego klienci
Gdy S połączy to gniazdo, będzie akceptować połączenia - za każdym razem, gdy nowy klient się łączy,
accept
zwraca nowe gniazdo, które jest specyficzne dla tego klientawyjście netstat po zaakceptowaniu połączenia:
10.0.0.4:80
reprezentuje koniec połączenia S i jest powiązany z gniazdem zwróconym przezaccept
10.0.0.5:55715
jest końcem połączenia klienta i jest powiązany z gniazdem, które klient przekazał do połączenia . Port klienta nie jest wykorzystywany do niczego poza kierowaniem pakietów na tym połączeniu TCP do właściwego procesu: jest przydzielany losowo przez jądro klienta z efemerycznego zakresu portów.Teraz S może z radością kontynuować przyjmowanie większej liczby połączeń klienckich ... każde otrzyma własne gniazdo, każde gniazdo będzie powiązane z unikalnym połączeniem TCP, a każde połączenie będzie miało unikalny zdalny adres. S śledzi stan klienta (jeśli taki istnieje), kojarząc go z gniazdem.
Z grubsza:
accept
wywołań wraca, robi to tylko w jednym procesie, gniazdo każdego połączenia przychodzącego jest unikalne dla jednej instancji serwerasocketpair
bycie dzieckiem tego procesu i dziedziczenie jednego lub jawne przekazanie jednego z gniazd tego procesuźródło
Pomyśl o swojej maszynie jak o budynku mieszkalnym:
Port to numer mieszkania.
Gniazdo to drzwi mieszkania.
Adres IP to adres ulicy budynku.
źródło
A socket is the door of an apartment.
Ale czy nie może być otwartych wiele gniazd w jednym porcie?Port jest częścią adresu w protokołach TCP i UDP. Służy do pomocy systemowi operacyjnemu w określeniu, która aplikacja powinna otrzymać otrzymane dane. System operacyjny musi obsługiwać porty, aby obsługiwać TCP i UDP, ponieważ porty są nieodłączną częścią TCP i UDP.
Gniazdo jest częścią interfejsu, który system operacyjny przedstawia aplikacjom, aby umożliwić im wysyłanie i odbieranie danych sieciowych. Większość implementacji gniazd obsługuje wiele protokołów poza TCP i UDP, z których niektóre nie mają pojęcia portów. System operacyjny nie musi obsługiwać gniazd do obsługi TCP lub UDP; może zapewnić inny interfejs dla aplikacji. Gniazdo to po prostu jeden ze sposobów wysyłania i odbierania danych na określonym porcie.
źródło
Komputer ma adres IP, który identyfikuje go jako oddzielny byt w sieci. Dodajemy do tego dodatkowy numer, aby umożliwić nam rozróżnienie połączeń z tym komputerem. To jest numer portu. Po stronie OS połączenia potrzebujesz buforów, stanu połączenia itp. Ten obiekt logiczny to gniazdo.
źródło
Gniazdo to ścieżka komunikacyjna do portu. Gdy chcesz, aby Twój program komunikował się przez sieć, dałeś mu sposób na zaadresowanie portu i można to zrobić poprzez utworzenie gniazda i podłączenie go do portu. Zasadniczo gniazdo = IP + porty Gniazda zapewniają dostęp do portu + ip
źródło
Adres IP identyfikuje urządzenie, tj. Adres do konkretnego urządzenia, kiedy osiągnąłeś urządzenie za pomocą adresu IP, teraz określa, z którym procesem w tym urządzeniu ma się komunikować.
Tak więc do faktycznej komunikacji potrzebujesz zarówno portu + IP, który nazywa się gniazdem.
źródło