Czy ktoś mógłby mi wyjaśnić, co to jest gniazdo? Widzę to w wielu akronimach w kontekście SSL itp.
Ponadto, dlaczego nazywa się to gniazdem? Czy to tylko dlatego, że wymyślili to imię? A może to imię, które wymyślili?
networking
history
terminology
socket
chrisjlee
źródło
źródło
Odpowiedzi:
Gniazdo jest tylko logicznym punktem końcowym komunikacji. Istnieją na warstwie transportowej. Możesz wysyłać i odbierać rzeczy na gnieździe, możesz powiązać i słuchać gniazda. Gniazdo jest specyficzne dla protokołu, maszyny i portu i jako takie jest zaadresowane w nagłówku pakietu.
Przewodniki Beej dotyczące programowania sieci i komunikacji między procesami zawierają dobre informacje na temat korzystania z gniazd, a nawet odpowiadają na to dokładne pytanie .
źródło
Mówiąc najprościej, gniazdo jest pseudoplikiem reprezentującym połączenie sieciowe. Po utworzeniu gniazda (przy użyciu odpowiednich prymitywów i odpowiednich parametrów do identyfikacji drugiego hosta) zapisy do gniazda są przekształcane w pakiety sieciowe, które są wysyłane, a dane otrzymywane z sieci mogą być odczytywane z gniazda.
Pod jednym względem gniazda są bardzo podobne do potoków: wyglądają jak pliki programów, które ich używają, ale nie powodują odczytu ani zapisu na dysku; pozwalają raczej komunikować się z innym programem (lokalnym w przypadku potoków i ewentualnie zdalnym w przypadku gniazd). Oferują one również, jak wspomniałeś, dwukierunkową komunikację (podobnie jak para prawidłowo podłączonych rur).
Wreszcie programy na jednym komputerze często komunikują się przy użyciu standardowych protokołów sieciowych, takich jak TCP; marnotrawstwem byłoby pójść do sprzętu sieciowego (jeśli istnieje!), obliczania sum kontrolnych itp., aby wrócić do tego samego hosta: tam właśnie wkraczają gniazda domen uniksowych. Są one podobne do zwykłych gniazd, z wyjątkiem łączą procesy na tym samym hoście, a nie procesy zdalne, i nie próbują w ogóle używać żadnych zasobów sieciowych. W ten sposób są one środkiem komunikacji między procesami.
Jak wspomniano trzyosobowy, w trakcie historii BSD rury wprowadzono wcześniej niż gniazda i ponownie wprowadzono za pomocą gniazd, gdy już istniały. To samo odniesienie, Projekt i implementacja systemu operacyjnego FreeBSD , wspomina, że rury zostały następnie przywrócone do implementacji innej niż podstawowa ze względu na wydajność: to z pewnością podkreśla fakt, że potoki mają podobieństwa.
źródło
Gniazdo abstrakcja. Zapewnia interfejs dla aplikacji do korzystania z zasobu systemowego (w tym przypadku połączenia sieciowego) w sposób, który pozwala systemowi operacyjnemu pośredniczyć i organizować użycie ograniczonego zasobu przez dowolną liczbę aplikacji.
Jeśli dane przesyłane przez gniazdo można uznać za koperty pocztowe, wówczas gniazdem będzie Twoja skrzynka pocztowa. Dołączasz skrzynkę pocztową (gniazdo) do domu (programu) i umieszczasz w niej pocztę wychodzącą (dane). O ustalonej godzinie pojawia się listonosz (system operacyjny), odbiera pocztę wychodzącą i wysyła pocztę przychodzącą do tej samej skrzynki pocztowej. Twoja poczta wychodząca jest przekazywana w Twoim imieniu do odbiorcy za pośrednictwem ciężarówki listonosza (połączenie sieciowe) wraz z pocztą wszystkich sąsiadów. Dzięki temu możesz korespondować z ludźmi daleko, bez konieczności poświęcania pieniędzy, czasu, trudności itp. Na samodzielne dostarczenie listu.
Jeśli chodzi o powód, dla którego nazywane są one „gniazdami”, pomysł, że wynalazcy mogą nazywać to, co chcą, prawdopodobnie odgrywa tutaj dużą rolę. Choć moim zdaniem nie jest to złe imię :)
źródło
Co to jest?
Gniazdo lub „gniazdo” może składać się z kilku rzeczy:
Przede wszystkim jest to model myślowy i interfejs programowania aplikacji (API) . Oznacza to, że masz zestaw zasad, których musisz przestrzegać, oraz zestaw funkcji, których możesz używać do pisania programów, które coś robią, zgodnie z ściśle określoną umową. W tym konkretnym przypadku coś oznacza wymianę danych z innym programem.
Interfejs API gniazd ogólnie abstrahuje szczegóły „komunikacji” w ogóle. Zawiera informacje o tym, z kim rozmawiasz i w jaki sposób, za pośrednictwem jednego (prawie) spójnego i identycznego formularza do usuwania plików cookie.
Możesz tworzyć gniazda w różnych „domenach” (takich jak np. „Gniazdo unixowe” lub „gniazdo internetowe”) i różnych rodzajów komunikacji (np. Gniazdo „datagramowe” lub „strumieniowe”) i rozmawiać z różnymi odbiorcami i wszystko działa dokładnie tak samo (cóż, 99%, są oczywiście drobne różnice, które należy uwzględnić).
Nie musisz wiedzieć (a nawet nie chcesz wiedzieć!), Czy rozmawiasz z innym programem na tym samym komputerze lub na innym komputerze, czy między tymi komputerami znajduje się sieć IPv4 lub IPv6, a może jakiś inny protokół, o którym nigdy nie słyszałeś.
socket
jest także nazwą funkcji bibliotecznej (lub syscall), która tworzy „gniazdo ”, które jest specjalnym rodzajem pliku (wszystko w Uniksie jest plikiem).Jak to się ma do ...
Potok jest sposobem jednokierunkowej komunikacji między czytnikiem a pisarzem (oba są programami) na tym samym komputerze. Symuluje strumień danych (tak jak np. TCP).
Oznacza to, że z punktu widzenia potoku nie istnieją pojedyncze „wiadomości” ani „bloki danych”. Możesz skopiować dowolną ilość danych na „jeden koniec”, a ktoś inny może odczytać dowolną ilość danych (niekoniecznie to samo i niekoniecznie za jednym razem) na „drugim końcu” w tej samej kolejności bajtów, co Ty wepchnął to.
Nazwie rura jest, dobrze, po prostu rura , która jest właścicielem nazwy w systemie plików . Oznacza to, że jest to coś, co wygląda i zachowuje się jak plik, pojawia się na liście katalogów i można go otworzyć, zapisać do niego itp. Należy pamiętać, że można również tworzyć specjalne pliki z gniazdami (byłoby to nazwane gniazdo) .
Z drugiej strony, gniazdo jest środkiem komunikacji dwukierunkowej („dupleks”), co oznacza, że możesz pisać i czytać z tego samego gniazda i nie potrzebujesz dwóch oddzielnych gniazd do komunikacji dwukierunkowej.
Ponadto gniazdo może działać jako strumień (identyczny z potokiem) lub może wysyłać dyskretne, niewiarygodne wiadomości lub może wysyłać dyskretne, uporządkowane wiadomości (pierwsze dwa działają w dowolnej domenie, ostatnie tylko w „domenie unix” ). Może wysyłać wiadomości (lub symulować strumień) do kogoś na zupełnie innym komputerze. W pewnych warunkach gniazdo może nawet mieć formę komunikacji jeden do wielu (multiemisja).
Mając to na uwadze, jasne jest, że gniazda robią coś o wiele bardziej skomplikowanego i generalnie mają większy narzut niż rury (które są w zasadzie nie więcej niż proste
memcpy
do i z bufora!), Ale jeśli tworzysz lokalne gniazda (tj. Na tym samym komputer), system operacyjny zwykle stosuje mocno zoptymalizowaną szybką ścieżkę, więc naprawdę nie ma dużej różnicy.Tak, gniazda są jednym z możliwych sposobów komunikacji między procesami (pamięć wspólna i potoki są przykładami alternatyw). Jednocześnie są one wykorzystywane do „tworzenia sieci”, jak wyjaśniono powyżej.
źródło
W przypadku udp lub tcp przez IP,
Adres gniazda jest kombinacją adresu IP i numeru portu.
Adres IP to adres maszyny w Internecie, np
unix.stackexchange.com has address 198.252.206.140
Jednak każdy komputer musi być w stanie świadczyć więcej niż jedną usługę, więc większość komputerów będzie zapewniać http (strony internetowe) na porcie 80 i ssh na porcie 22 itd.
Tak
unix.stackexchange.com:80
Port80
ofunix.stackexchange.com
(gniazdo) jest punkt dostępowy z tej strony internetowej.Istnieją jednak inne typy gniazd, patrz komentarze poniżej.
źródło
AF_INET
gniazdami IP ( ).Myślę, że zapytałeś o sieci. Tak więc usługi TCP używają gniazd jako punktu komunikacji i składają się z adresu IP, protokołu i numeru portu.
źródło