Co to jest gniazdo?
Gniazda umożliwiają komunikację między dwoma różnymi procesami na tej samej lub różnych maszynach. Mówiąc dokładniej, jest to sposób na rozmowę z innymi komputerami przy użyciu standardowych deskryptorów plików Uniksa. W systemie Unix każda akcja we / wy jest wykonywana poprzez zapisanie lub odczytanie deskryptora pliku. Deskryptor pliku to po prostu liczba całkowita powiązana z otwartym plikiem i może to być połączenie sieciowe, plik tekstowy, terminal lub coś innego.
Dla programisty gniazdo wygląda i zachowuje się podobnie jak deskryptor pliku niskiego poziomu. Dzieje się tak, ponieważ polecenia takie jak read () i write () działają z gniazdami w taki sam sposób, jak w przypadku plików i potoków.
Gniazda zostały po raz pierwszy wprowadzone w 2.1BSD, a następnie poprawione do ich obecnej postaci w 4.2BSD. Funkcja gniazd jest teraz dostępna w większości aktualnych wersji systemu UNIX.
Gdzie jest używane gniazdo?
Gniazdo Unix jest używane w ramach aplikacji klient-serwer. Serwer to proces, który wykonuje pewne funkcje na żądanie klienta. Większość protokołów na poziomie aplikacji, takich jak FTP, SMTP i POP3, wykorzystuje gniazda do ustanowienia połączenia między klientem a serwerem, a następnie do wymiany danych.
Rodzaje gniazd
Do dyspozycji użytkowników są cztery rodzaje gniazd. Pierwsze dwa są najczęściej używane, a ostatnie dwa rzadko.
Zakłada się, że procesy komunikują się tylko między gniazdami tego samego typu, ale nie ma ograniczeń uniemożliwiających komunikację między gniazdami różnych typów.
Stream Sockets- Gwarantowana dostawa w środowisku sieciowym. Jeśli wyślesz przez gniazdo strumieniowe trzy elementy „A, B, C”, dotrą one w tej samej kolejności - „A, B, C”. Te gniazda używają protokołu TCP (Transmission Control Protocol) do transmisji danych. Jeśli doręczenie nie jest możliwe, nadawca otrzymuje informację o błędzie. Rekordy danych nie mają żadnych granic.
Datagram Sockets- Dostawa w środowisku sieciowym nie jest gwarantowana. Są bezpołączeniowe, ponieważ nie musisz mieć otwartego połączenia, jak w przypadku Stream Sockets - tworzysz pakiet z informacjami o miejscu docelowym i wysyłasz go. Używają UDP (User Datagram Protocol).
Raw Sockets- Zapewniają one użytkownikom dostęp do podstawowych protokołów komunikacyjnych, które obsługują abstrakcje gniazd. Gniazda te są zwykle zorientowane na datagram, chociaż ich dokładna charakterystyka zależy od interfejsu zapewnianego przez protokół. Surowe gniazda nie są przeznaczone dla zwykłego użytkownika; zostały one przeznaczone głównie dla osób zainteresowanych opracowaniem nowych protokołów komunikacyjnych lub uzyskaniem dostępu do niektórych z bardziej tajemniczych funkcji istniejącego protokołu.
Sequenced Packet Sockets- Są podobne do gniazda strumieniowego, z tym wyjątkiem, że granice rekordów są zachowywane. Ten interfejs jest dostarczany tylko jako część abstrakcji gniazd Network Systems (NS) i jest bardzo ważny w większości poważnych aplikacji NS. Gniazda pakietów sekwencyjnych pozwalają użytkownikowi manipulować nagłówkami Sequence Packet Protocol (SPP) lub Internet Datagram Protocol (IDP) w pakiecie lub grupie pakietów, albo przez napisanie nagłówka prototypu wraz z danymi, które mają być wysłane, lub przez określenie domyślnego nagłówka, który ma być używany ze wszystkimi wychodzącymi danymi i umożliwia użytkownikowi odbieranie nagłówków w przychodzących pakietach.
Co jest następne?
Następnych kilka rozdziałów ma na celu wzmocnienie twoich podstaw i przygotowanie podstaw przed pisaniem programów serwera i klienta przy użyciu gniazda . Jeśli chcesz bezpośrednio przejść i zobaczyć, jak napisać program klienta i serwera, możesz to zrobić, ale nie jest to zalecane. Zdecydowanie zaleca się, aby przejść krok po kroku i ukończyć te kilka początkowych rozdziałów, aby stworzyć bazę przed przejściem do programowania.