Kolejność omawiania usług będzie następująca: poczta elektroniczna, transmisja danych, usługi terminalowe, serwisy informacyjne, synchronizacja czasu, dostęp do informacji o użytkownikach. Na działanie niektórych z wymienionych usług składa się jeden lub więcej zaprojektowanych dla tego celu protokołów. W omówieniu działania tych usług, protokoły te zostaną również przedstawione.
Przedstawione poniżej protokoły ukrywają przed użytkownikiem mechanizm przesyłania poczty między serwerami oraz metody dostępu do jego skrzynek pocztowych.
Standard SMTP określa jedynie format komunikatów wymienianych przez maszynę nadającą przesyłkę i odbierającą ją. Komunikaty te są przesyłane w postaci czytelnych tekstów ASCII, co pozwala na komunikację dowolnych serwerów pocztowych bazujących na dowolnych systemach operacyjnych. Zestaw znaków ASCII jest bardzo prosty i znany większości użytkowników. Standardowa procedura wysyłania listu opiera się na utworzeniu połączenia TCP ze zdalną maszyną i oczekiwaniu aż ta przyśle komunikat: 220 <nazwa maszyny> ESMTP server ready. Dalej następuje, np.:
HELO <nazwa maszyny wysyłającej> 250 <nazwa maszyny odbierającej> Hello <nazwa maszyny wysyłającej> [<adres IP maszyny wysyłającej> ], pleased to meet you MAIL FROM: <xxx@domena.pl> 250 2.1.0 <xxx@domena.pl>... Sender ok. RCPT TO: <yyy@domena.com> 250 2.1.5 <yyy@domena.com>... Recipient ok. DATA 354 Enter mail, end with "." on a~line by itself <treść listu>
Dane zakodowane przez MIME w nagłówkach zawierają informację konieczną do ich zdekodowania. W szczególności jest w nich zawarty typ zakodowanych danych, sposób kodowania oraz wersja MIME. List zawiera również podobnego typu informacje, aby umożliwić przesyłanie danych dowolnego typu. Przykład przesyłki zawierającej załącznik przedstawiony jest na slajdzie.
Każda z nich może być zakodowana w innym formacie, co również przedstawia przykład. Standard MIME wymaga od aplikacji używania pary identyfikatorów, rozdzielonych znakiem "/" w nagłówku Content-Type. Pierwszy identyfikator, oprócz przedstawionego w przykładzie, informuje o typie danych. Możliwe są następujące typy: text - tekst, image - obrazy typu GIF, JPEG, BMP, itd; audio - dane audio, video - dane video, application - dane programu, message - list poczty elektronicznej. Drugi identyfikator natomiast definiuje dokładniej, jakiego typu są to dane. Standard MIME wymusza również, aby dany typ danych zawierał konkretne "podtypy", np. dane audio nie mogą w podtypie zawierać gif. Dla przedstawionego w przykładzie typu multipart, oprócz danych mixed IETF przewidział inne typy danych: alternative - wiele typów kodowania tych samych danych, parallel - gdy pojedyncze części powinny być oglądane wspólnie, np. audio i video, digest - gdy przesyłka zawiera zbiór innych listów, np. fragment archiwum jakiejś listy dyskusyjnej.
Serwer pocztowy gromadzi listy do wysłania w zdefiniowanych kolejkach. Po umieszczeniu przesyłki w kolejce, serwer nawiązuje połączenie z odległym serwerem pocztowym. Na podstawie informacji w nagłówkach listu, lokalny serwer wie, w jakiej domenie DNS znajduje się adresat. Dzięki temu oraz rekordom MX systemu DNS może ustalić nazwę i adres IP maszyny obsługującej pocztę elektroniczną w domenie adresata. Po ustaleniu adresu IP próbuje nawiązać połączenie TCP z odległą maszyną. Jeśli się to uda, przesyła wiadomość do tej maszyny i po potwierdzeniu jej odebrania likwiduje kopię przesyłki w lokalnej kolejce.
Zgromadzone w kolejkach przesyłki mogą przebywać w nich określony, zdefiniowany czas. Jeśli ten limit czasowy zostanie przekroczony i list nie zostanie w tym czasie wysłany do odbiorcy, serwer usuwa taką wiadomość ze swoich kolejek. Nadawca jest informowany o tym fakcie przez otrzymanie komunikatu o błędzie od serwera. Najczęstszą przyczyną powstawania tego typu sytuacji są błędne informacje w nagłówkach listów lub brak odpowiednich wpisów w rekordach systemu DNS. Drugą z możliwych przyczyn jest awaria, niedostępność odległego serwera pocztowego w tym czasie. Zgodnie ze standardami serwer powinien przechowywać listy przez 5 dni.
W tym celu, na komputerze (niekoniecznie na serwerze pocztowym), przez który użytkownicy mają mieć możliwość sięgania do swoich skrzynek pocztowych, na 110 porcie TCP uruchamiany jest proces demon oczekujący na połączenia. Program pocztowy użytkownika otwiera połączenie TCP z serwerem POP3 i oczekuje na zgłoszenie się serwisu. Następnie wydaje ciąg komend oczekując na odpowiedzi od serwera. Po ich wykonaniu następuje rozłączenie. Zbiór komend rozumianych przez serwer POP3 jest ściśle zdefiniowany. Komendy muszą być przesyłane w ASCII, argumenty oddzielone spacjami, nie mogą być dłuższe niż 40 znaków. Serwer musi odpowiadać na nieznane, nie zaimplementowane komendy informacją o błędzie -ERR lub +OK w przeciwnym wypadku.
Przed wejściem w tryb transakcyjny serwer POP3 blokuje dostęp do skrzynki, aby ochronić ją przed modyfikacją zanim serwer przejdzie do trybu odświeżania informacji o skrzynce. Po otwarciu skrzynki serwer POP3 przypisuje każdej wiadomości numer (zaczynając od 1) oraz sprawdza wielkość każdej z nich w bajtach. Gdy serwer zmienia tryb pracy na transakcyjny, jest wyświetlana informacja o liczbie wiadomości i ich łącznej wielkości. Prezentuje to przykład na slajdzie.
stat - odpowiada liczbą wiadomości oraz ich łączną wielkością w bajtach, list - podaje numer każdej wiadomości oraz jej wielkość w bajtach, retr <numer_wiadomości> - przesyła wraz z nagłówkami treść wiadomości o podanym numerze, dele <numer_wiadomości> - usuwa wiadomość o podanym numerze, noop - serwer nic nie robi, odpowiada +OK, rset - jeśli jakiekolwiek wiadomości były zaznaczone jako "usunięte" znaczniki usunięcia są cofane, top <numer_wiadomości> <liczba> - komenda może dotyczyć tylko wiadomości nie oznaczonych jako skasowane. Serwer odpowiada liczbą linii (począwszy od nagłówka) wskazanej wiadomości, uidl - <numer_wiadomości> - serwer odpowiada unikalnym numerem wiadomości. Numer ten jest zawsze stały niezależnie od sesji. Służy programom klientów do rozróżnienia, które wiadomości są nowe, a które były już wcześniej odczytane. W przypadku nie podania numeru wiadomości serwer przedstawia identyfikatory dla wszystkich wiadomości w skrzynce, quit - rozłączenie. Oprócz identyfikacji przez nazwę użytkownika i hasło niektóre serwery POP3 mają zaimplementowaną metodę, w której użytkownik jest rozpoznawany na podstawie nazwy oraz skrótu MD5 znacznika czasowego oraz podanej frazy. W ten sposób hasło użytkownika nie jest przesyłane otwartym tekstem przez sieć.
Podobnie jak POP3, protokół IMAP pozwala użytkownikom na zdalny dostęp do swoich skrzynek pocztowych na serwerach, ich modyfikowanie, przeszukiwanie, tworzenie folderów, ustawianie flag. Nie pozwala na wysyłanie wiadomości poczty elektronicznej. Klient pocztowy użytkownika, podobnie jak w poprzednim przypadku, musi nawiązać połączenie TCP z serwerem IMAP, port 143. Przed każdą komendą klient generuje dla niej identyfikator tzw. tag, np. A0001. Do serwera wysyłana jest cała komenda poprzedzona tym identyfikatorem. W przypadku wystąpienia błędu serwer odpowiada komunikatem BAD i podaje identyfikator komendy, która spowodowała błąd. W przeciwnym przypadku serwer zwraca OK. Jest jeszcze jeden rodzaj komunikatu - NO - zwracany przez serwer, gdy wystąpi błąd nie związany z formatem komendy lub protokołem. Komendy wysyłane do/lub z serwera są w postaci normalnego tekstu.
nie autentyzowany - serwer pracuje w tym stanie dopóki, użytkownik nie zostanie prawidłowo zidentyfikowany, autentyzowany - serwer przechodzi do tego trybu po podaniu przez użytkownika informacji potrzebnych do jego rozpoznania; klient musi w tym trybie wybrać skrzynkę pocztową, modyfikacje skrzynki - użytkownik może modyfikować wybraną skrzynkę, rozłączanie - zakończenie sesji. W przeciwieństwie do POP3, przy pomocy protokołu IMAPv4 użytkownik może mieć zdefiniowane na serwerze kilka katalogów ze skrzynkami pocztowymi. Dlatego też wymagane jest określenie jednej skrzynki jako głównej. Kolejne mogą być podane w dowolnej kolejności. Ponieważ to serwer wykonuje zlecone mu zadania zarządzania skrzynkami, może on w dowolnym momencie wysłać do klienta komunikat, np. o pojawieniu się w skrzynce nowej poczty czy też prośbę o potwierdzenie usunięcia wiadomości. Co więcej, serwer może przetwarzać kolejne polecenia klienta bez czekania na zakończenie poprzednich komend. Odstępstwem od tego jest sytuacja, w której wynik działania poprzednich komend może mieć wpływ na następne. Serwer sam rozpoznaje taką sytuację i wówczas czeka na zakończenie poprzednich poleceń.
CAPABILITY - serwer odpowiada listą obsługiwanych przez niego opcji, NOOP - nie robi nic, LOGOUT - rozłączenie. Są to jedyne trzy komendy, które klient może wydać serwerowi w każdym stanie. Przedstawia to przykład na slajdzie. Po otwarciu sesji TCP z serwerem klient protokołu IMAP znajduje się w pierwszym z wymienionych trybów pracy. Przebywając w nim może wydać serwerowi komendę AUTHENTICATE lub LOGIN. Komendy te mogą mieć kilka różnych argumentów, które określają sposób autoryzacji użytkownika. Jeśli serwer obsługuje wybrany sposób autoryzacji, to rozpoczyna wysyłanie serii zapytań do klienta. Każde z tych zapytań musi zaczynać się od +. Komunikaty są kodowane przy użyciu kodowania BASE64. Jeśli klient chce przerwać proces autoryzacji, to wysyła do serwera znak *. Oprócz samego procesu autoryzacji serwer może negocjować z klientem sposób zabezpieczenia tej sesji. Jeśli obie strony zgodzą się na stosowanie wybranego mechanizmu ochrony sesji, to jest on stosowany do każdego komunikatu wymienianego między serwerem a klientem. Nie ma jednak wymagań na to, które z metod autoryzacji muszą być obsługiwane przez serwer, jak również wymagań stosowania określonych sposobów zabezpieczania sesji.
SELECT - wybór skrzynki pocztowej; serwer musi odpowiedzieć ustawiając jedną z flag: <n> EXISTS - liczba wiadomości w skrzynce, <n> RECENT - liczba nowych wiadomości od czasu ostatniego jej czytania, OK [UIDVALIDITY <n>] - unikalny identyfikator skrzynki; jest on stały dla wszystkich sesji. Serwer może modyfikować tylko jedną skrzynkę na raz. Zmiana skrzynki powoduje, że poprzednia przestaje być dostępna. Jeśli wybrana skrzynka również okaże się niedostępna, to serwer nie będzie operował na żadnej skrzynce czekając znowu na komendę SELECT. Po wydaniu komendy SELECT skrzynka jest otwarta w trybie read-write. EXAMINE - działa tak samo jak SELECT, ale otwiera skrzynkę w trybie read-only, CRATE - tworzy nową skrzynkę o nazwie podanej jako argument, DELETE - usuwa skrzynkę o podanej nazwie, RENAME - zmienia nazwę podanej skrzynki na nową, SUBSCRIBE - dodaje skrzynkę do zbioru aktywnych lub inaczej zapisanych; klient IMAP4 może użytkownikowi pokazywać wiadomości, pojawiające się tylko w tych skrzynkach, do których użytkownik jest zapisany, UNSUBSCRIBE - działanie odwrotne, LIST - służy do pobierania z serwera listy elementów pasujących do wzorca, z miejsca wskazanego argumentem komendy, np.:
C: a005 list "~/Mail/" "%„ S: * LIST (\Noselect) "/" ~/Mail/foo S: * LIST () "/" ~/Mail/archive S: a005 OK LIST completed
Pierwszym argumentem zazwyczaj jest katalog ze skrzynkami pocztowymi. Drugi wyszukuje skrzynki zgodnie z maską; możliwe jest podawanie wzorców np, "%", który oznacza skrzynkę o dowolnej nazwie w katalogu podanym jako argument pierwszy, LSUB - komenda działa tak samo jak LIST z tym, że brane są pod uwagę tylko skrzynki oznaczone jako aktywne, APPEND - zapisuje do wskazanej skrzynki podany argument tesktowy (wiadomość).
CHECK - wymusza na serwerze sprawdzanie wszelkiego typu statusu lub stanów skrzynki, np. synchronizację zawartości skrzynki w pamięci serwera z zawartością zapisaną na dysku, CLOSE - usuwa wszystkie wiadomości z ustawioną flagą usunięta oraz zamyka wybraną wcześniej skrzynkę; serwer przechodzi do trybu oczekiwania wyboru skrzynki przez klienta, EXPUNGE - usuwa z aktualnej skrzynki wszystkie wiadomości z ustawioną flagę usunięta, SEARCH - przeszukuje wiadomości pod kątem zawierania wskazanego kryterium; dopuszczalne są logiczne wyrażenia: OR, AND i NOT; serwer zwraca identyfikator wiadomości spełniającej podane warunki przeszukiwania, FETCH - pozwala na pobranie z serwera danych związanych z daną wiadomością, między innymi przez komendy (są to tylko przykłady większej liczby komend tego typu): ALL - cała wiadomość, BODY - treść wiadomości, BODY[<section>] - treść ze wskazanej sekcji (przydatne przy wiadomościach typu multipart/mixed PARTIAL - pozwala na pobranie z serwera konkretnej liczby bajtów, od wskazanej pozycji wybranej wiadomości, ALTER - zapisuje zmiany wprowadzone w wiadomości w skrzynce, COPY - zapisuje wskazaną wiadomość do wskazanej skrzynki.
Inną zaletą korzystania z serwerów IMAP jest możliwość rozsyłania wiadomości w grupie użytkowników bez potrzeby obciążania serwera pocztowego. Wystarczy, że zapisze on wiadomość w podanej skrzynce, którą będą mogli wybrać użytkownicy tej grupy w konfiguracji swoich klientów IMAP. W przypadku serwera POP3 konieczne w takim wypadku jest rozesłanie wiadomości do wszystkich użytkowników. W konfiguracji klienta POP3 można też stworzyć dodatkowe konto u każdego klienta w grupie, a klientom kazać odbierać pocztę również z tych dodatkowych kont. Jest to jednak rozwiązanie bardziej złożone niż w protokole IMAP.
Protokoły do tego używane zapewniają dostęp do plików na innych komputerach dwiema drogami: albo przez kopiowanie (FTP, SCP) albo jako dostęp zintegrowany z systemem operacyjnym, gdzie operacje dostępu do zdalnych plików są dla użytkownika niewidoczne (NFS, CIFS). W obu jednak przypadkach protokoły muszą uwzględniać prawa dostępu do pliku (nie zawsze zapisywane w ten sam sposób jak w systemie lokalnym), różnice w nazwach plików, różnice w reprezentacjach binarnych (choć czasami konwersja formatów powodowałaby utratę danych i jest niemożliwa).
Serwer i klient FTP używają odrębnego połączenia do przesyłania danych sterujących oraz odrębnych połączeń do transmisji każdego z czytanych lub zapisywanych plików z osobna. Połączenie sterujące jest otwarte tak długo jak trwa sesja FTP. Wszystkie komendy wysyłane do serwera oraz jego odpowiedzi są przesyłane w kodzie ASCII (tak samo jak w przypadku SMTP, POP3, IMAP). Do transmisji danych wykorzystywany jest protokół UDP. Klient lokalnie używa dowolnego, numeru portu niezajętego przez inną aplikację. Wysyła do serwera jego numer i czeka, aż serwer wybierze swój port. Następnie klient otwiera połączenie ze wskazanym portem i transmituje dane. Jest to tzw. tryb active pracy klienta. Serwer może również do tego celu użyć zastrzeżonego numeru portu TCP - 20. Alternatywą trybu active jest passive. W trybie tym to serwer pracuje tylko i wyłącznie na porcie 20. W trakcie pracy z serwerem użytkownik może specyfikować format zapisywanych lub odczytywanych danych (dane binarne, w kodzie ASCII). Oprócz tego może wydawać serwerowi cały szereg dodatkowych komend. Ich listę można uzyskać przez uruchomienie klienta ftp i wydaniu komendy help. Oprócz protokołu FTP istnieje TFTP (ang. Trivial FTP). W odróżnieniu od FTP protokół ten nie ma wbudowanych mechanizmów autoryzacji i nie ma możliwości pracy w trybie interakcyjnym z użytkownikiem. Dzięki temu pliki binarne klienta TFTP oraz serwera zajmują niewiele miejsca w pamięci. Korzystają z tego producenci urządzeń sieciowych, którzy na kliencie TFTP opierają możliwości instalowania nowszych wersji oprogramowania, bezdyskowe stacje robocze, które przy pomocy TFTP pobierają z serwera pliki z obrazem jądra.
Klient może wysyłać do serwera polecenia otwarcia, zapisania, odczytania pliku. Serwer sprawdza czy użytkownik, który wysyła te polecenia ma prawo do wykonania tych operacji. Informacje o tym są pobierane przez serwer na podstawie identyfikatora użytkownika, który albo istnieje w lokalnych dla serwera plikach konfiguracyjnych (np. /etc/passwd i musi być identyczny na stacji użytkownika i serwerze w systemach UNIX) albo są dostępne przez serwisy takie jak NIS lub NIS+ (ang. Network Information Service). Oprócz tego serwer określa z jakimi prawami udostępniane są wskazane w konfiguracji zasoby. W szczególności może zabronić wykonywania programów z ustawionym bitem SUID [*]. Projektanci NFS oparli ten protokół o dwa wcześniej opracowane protokoły: RPC (ang. Remote Procedure Call) oraz XDR (ang. eXternal Data Representation). Mechanizm RPC daje możliwość podzielenia kodu aplikacji na kod serwera i klienta. Programista może wydzielić wybrane funkcje jako odległe i wskazać to kompilatorowi. Kompilator wówczas dołącza odpowiednie kody procedur RPC w trakcie kompilacji programu. RPC ukrywa przed programistą wszelkie szczegóły protokołów. Dzięki temu jest chętnie wykorzystywany do budowy systemów rozproszonych. Program klient wywołując zdalną procedurę sam tworzy odpowiedni rodzaj komunikatu i wysyła go do serwera. Nawiązanie połączenia jest zupełnie niewidoczne dla użytkownika. Drugi z protokołów, XDR, daje możliwość przekazywania danych w środowisku heterogenicznym bez konieczności ich konwersji do odpowiednich typów standardów sprzętowych. Jego główną zaletą jest automatyczna konwersja formatów danych między klientami a serwerami systemu NFS.
W swoim działaniu, z dotychczas wymienionych usług, SCP najbardziej przypomina FTP. Oferuje mechanizm autoryzacji użytkownika przed wykonaniem operacji odczytu lub zapisu plików. W przeciwieństwie jednak do FTP, SCP nie używa dwóch odrębnych kanałów do komunikacji i transferu danych. Poza tym nie pracuje w trybie interaktywnym z użytkownikiem, choć niektóre programy np. WinSCP pozwalają na to. To, co wyróżnia SCP, to stosowanie mechanizmów kryptograficznych przy wymianie danych między serwerem a klientem. Najczęściej są to te same mechanizmy, które oferuje SSH, gdyż to właśnie ta usługa jest wykorzystywana do zestawiania sesji, wymiany kluczy między serwerem a klientem, ustalaniu parametrów transmisji (kompresja przesyłanych danych lub jej brak, częstotliwość wymiany klucza).
Po nawiązaniu sesji TCP klient przesyła do serwera informacje o wszystkich naciśniętych klawiszach. Zwrotnie przyjmuje znaki, które przysłał serwer i wyświetla je na terminalu użytkownika. Ponieważ serwer TELNET musi obsługiwać wiele sesji jednocześnie, zazwyczaj jeden proces serwera oczekuje na nowe połączenia na porcie 23 TCP. Dalej przekazuje on obsługę połączenia tworzonemu w tym celu procesowi podrzędnemu. Dla użytkownika, po nawiązaniu sesji przy pomocy TELNET, praca z odległym systemem przebiega w sposób przypominający pracę na lokalnej konsoli.
W celu rozwiązania problemu TELNET definiuje tzw. sieciowy terminal wirtualny (ang. Network Virtual Terminal - NVT). Dzięki niemu klient i serwer posługują się tym samym interfejsem w komunikacji między sobą. Poza tym protokół umożliwia negocjowanie opcji (oprócz zbioru opcji standardowych) oraz nie wymaga, aby dane wejściowe klienta pochodziły z klawiatury, a dane wyjściowe były wyświetlane na ekranie. Sieciowy terminal wirtualny wykorzystuje mechanizm tzw. pseudoterminali w systemach operacyjnych. Oferują one działającym programom dostęp do systemu przekazując znaki przesyłane przez klienta tak jakby pochodziły z klawiatury. Bez tego mechanizmu budowa serwerów TELNET byłaby niemożliwa. To, czy wiersze tekstu powinny się kończyć znakiem CR, LF, czy też CR-LF, który z klawiszy (lub ich sekwencji) daje możliwość przerwania programu, zależy od systemu operacyjnego. Dlatego też polecenia użytkownika są tłumaczone na format NVT i wysyłane do serwera. Wirtualny terminal po stronie serwera tłumaczy je na format swojego systemu operacyjnego. Podobnie dzieje się przy przesyłaniu odpowiedzi serwera do klienta. Umożliwienie przerywania działających programów jest bardzo istotne. Dzięki temu program, działający bez kontroli, wywołany przez użytkownika, może zostać zatrzymany bez zbędnego obciążania serwera. NVT do tego celu używa funkcji sterujących pokazanych na slajdzie.
Aby zapanować nad programem, który nie działa prawidłowo na odległej maszynie, to jednak czasami nie wystarczające. W przypadku, gdy program użytkownika wykonuje nieskończone pętle, nie czytając danych z wejścia i nie generując danych na wyjściu, w pewnym momencie bufory systemu operacyjnego mogą się zapełnić. Serwer nie będzie mógł wówczas zapisać większej ilości danych w buforze pseudoterminalu. Musi więc zaprzestać czytania danych z połączenia TCP, co spowoduje zapełnienie buforów połączenia. To z kolei zmusi serwer do proponowania zerowej wielkości okna, czyli zaprzestania przepływu danych. Przy opisanych dotychczas możliwościach nie ma metody wysłania programowi polecenia IP. Dlatego też TELNET przesyła sygnały poza kolejką normalnych danych. W przypadku wysyłania funkcji kontrolnej protokół wysyła dodatkowo funkcję SYNCH i dodaje zarezerwowany bajt DMARK (ang. Data Mark). W nagłówku TCP ustawia flagę URG. Dzięki temu sygnał dociera natychmiast do serwera. Bajt DMARK oznacza, że część SYNCH zawiera strumień danych (zawsze pilnych). Najbardziej złożoną częścią protokołu TELNET jest możliwość negocjacji opcji. Dzięki nim połączenie może być rekonfigurowane np. z trybu half-duplex do trybu full-duplex lub też określony zostaje rodzaj terminalu użytkownika. Najczęściej używane opcje zawiera tabela na slajdzie. Opcje są negocjowane na zasadzie zgłaszania próśb. Strona odbierająca prośbę (komunikat WILL X) o użycie danej opcji albo ją akceptuje (komunikat DO X) albo odrzuca (komunikat DON'T X). Mechanizm ten pozwala na negocjację opcji bez jakichkolwiek informacji o drugiej stronie. Dzięki temu jest możliwa współpraca starszych i nowszych wersji klientów i serwerów. Niewątpliwą zaletą TELNET jest jego popularność oraz w miarę prosta implementacja, z czego korzysta wielu producentów urządzeń sieciowych do zdalnego zarządzania swoimi produktami. Wadą jest przesyłanie znak po znaku tego co wpisuje użytkownik (jeśli nie zostaną wynegocjowane odpowiednie opcje) oraz zupełny brak zabezpieczeń przed podsłuchiwaniem treści przesyłanych między serwerem a klientem.
Program klienta w celu połączenia z serwerem musi zestawić sesję TCP z maszyną serwera. Standardowo proces serwera oczekuje na połączenia na porcie 22 TCP. Po takim połączeniu przekazuje obsługę do procesu potomnego, sam czekając dalej na nowe połączenia. Po zestawieniu połączenia TCP klient i serwer SSH ustalają między sobą między innymi rodzaj algorytmu szyfrującego, zasady kompresji przesyłanych danych, możliwość przesyłania informacji generowanych przez aplikacje działające w środowiskach graficznych. Odbywa się to na zasadzie wysłania informacji o obsługiwanych algorytmach i opcjach przez klienta do serwera. Następnie klient otrzymuje listy obsługiwanych algorytmów i opcji od serwera. Wówczas klient wybiera (jeśli użytkownik wyraźnie tego nie określił) rodzaj stosowanego algorytmu. Zanim jednak klient wyśle do serwera dalsze informacje, przy pomocy algorytmu Diffiego-Hellmana ustalany jest wspólny symetryczny klucz w niezabezpieczonym kanale. Klucz ten służy do zabezpieczania przesyłanych danych w dalszej komunikacji. Klucz ten posiada każda ze stron, ale nie jest on nigdy przesyłany między nimi. Przykład możliwych do wyboru opcji przedstawia rys. 7.4.
W przypadku, gdy klucze publiczny i prywatny nie zostały wygenerowane, serwer SSH wyśle klientowi zapytanie o nazwę użytkownika i jego hasło. W obu przypadkach informacje te będą przesyłane w postaci zaszyfrowanej wybranym algorytmem szyfrującym. Dodatkowo serwer może tworzyć tzw. skróty (ang. Message Digest) wysyłanych wiadomości. Skrót to nic innego jak skompresowana informacja o treści wiadomości. Jeżeli coś zostanie w treści zmienione, skrót ulegnie również zmianie. Do tego celu SSH używa dwóch algorytmów: MD-5 lub SHA-1. Bardziej bezpieczne i zalecane w używaniu SSH jest stosowanie szyfrowania asymetrycznego, czyli kluczy. Wprawdzie wymagają one od użytkownika poświęcenia kilku minut na poprawne skonfigurowanie, lecz w dłuższym używaniu są wygodniejsze. W celu ułatwienia ich stosowania, autorzy SSH umożliwiają uruchomienie programu ssh-agent, który może za nas przeprowadzać proces podawania wyrażenia przejściowego do odczytania klucza. Oprócz wymienionych dotychczas zalet wynikających ze stosowania SSH jest jeszcze jedna bardzo istotna. Mianowicie przy pomocy tego protokołu można przekierowywać lokalne numery portów na inne na zdalnej maszynie.
Protokół RDP nie wprowadza dużego dodatkowego obciążenia dla lokalnego komputera. W zasadzie zadaniem lokalnej maszyny jest tylko i wyłącznie obsługa aplikacji wyświetlającej wyniki działania programów uruchomionych na serwerze. Ta cecha sprawia, że: RDP idealnie nadaje się do centralnego zarządzania instalowanym oprogramowaniem, daje możliwość wprowadzania oszczędności w firmach na sprzęcie, gdyż użytkownicy mniej wydajnych maszyn mogą uruchamiać duże aplikacje na serwerze, aplikacja, zainstalowana na serwerze Windows NT Terminal Server lub następnych wersjach systemu Windows, może być wykorzystywana przez dowolnego użytkownika, który ma aplikację klienta Terminal Services. Nie ma w związku z tym konieczności przeprowadzania uaktualnień dużej liczby systemów do najnowszych wersji, administrator musi dbać o uaktualnienia oprogramowania tylko na jednym komputerze.
rdesktop - pozwala klientom UNIX na łączenie się z serwerami Windows Terminal, SAMBA - pozwalająca udostępniać w zasoby systemów UNIX dla systemów Windows, Citrix - komercyjne rozwiązania firmy Citrix identyczne z Windows Terminal Services, choć wykorzystują one własny protokół ICA. Przy ich wykorzystaniu każdy użytkownik może logować się do zdalnego systemu Windows, tak jakby to robił lokalnie. Serwer dla każdego połączenia tworzy oddzielną sesję, a sesjami takimi zarządza niezależnie. Użytkownik może sesję przerwać wylogowując się z serwera lub tylko od sesji się odłączyć. Druga możliwość pozwala na późniejszy do niej powrót. W międzyczasie wygląd pulpitu użytkownika nie ulega zmianie.
Najważniejszą cechą rodziny protokołów T.120 jest możliwość przesyłu danych w kilku wirtualnych kanałach (do wykorzystania jest 64000 kanałów w jednym połączeniu). Dane są w nich transmitowane równolegle, a przy tym niezależnie. Dzięki temu dane warstwy prezentacji są niezależne od informacji pochodzących z portów szeregowych, klawiatury, myszy. W wersji usług terminalowych udostępnionych wraz z Windows NT4.0 Server wszystkie sesje były typu "punkt-punkt". RDP jednak, jako rozszerzenie T.Share pozwala na sesje typu multicast. RDP został zaprojektowany w sposób pozwalający mu wykorzystywać protokoły takie jak TCP/IP, NetBios, IPX do komunikacji. Czyni go to niezależnym od użytej technologii sieciowej i pozwala na używanie w różnorodnych środowiskach. Dane pochodzące z aplikacji, przesyłane przy pomocy RDP, są obsługiwane niemal identycznie jak inne programy nie korzystające z RDP. Jedynym dodatkiem jest stos tego protokołu. W stosie tym następuje podział danych na fragmenty, przekierowanie do odpowiedniego kanału, szyfrowanie, podział danych na ramki i przesłanie do protokołów warstw niższych. Odbiór danych odbywa się w przeciwnym kierunku. W systemach Windows złożoność tego procesu ukryto przed programistami udostępniając im odpowiedniego typu API (ang. Application Programming Interace).
MCSMUX - (ang. Multipoint Communication Service), GCC - (ang. Generic Conference Control). Oba elementy są częścią rodziny standardów ITU-T T.120. MCS składa się z dwóch takich standardów: T.122 - definiuje serwisy, T.125 - specyfikuje rodzaj protokołu transmisji danych. MCSMUX kontroluje przypisania kanałów wirtualnych, ustawienia poziomu priorytetów, wielkość wysyłanych segmentów danych. W zasadzie tworzy on abstrakcyjną warstwę, która wiele stosów RDP prezentuje jako jedną całość z perspektywy GCC. GCC jest odpowiedzialne za zarządzanie kanałami. Pozwala na otwieranie nowych, kasowanie starych sesji oraz kontroluje zasoby dostarczane przez MCS.
Czasami jednak rozsyłanie tych samych plików do setek użytkowników lub opisywanie pewnych rzeczy jest znacznie trudniejsze niż np. po prostu narysowanie ich. Oczywiście rysunek trzeba zaprezentować innym użytkownikom sieci. Tu z pomocą przychodzi protokół HTTP (ang. Hypertext Transfer Protocol) oraz znana dobrze wszystkim usługa WWW (ang. World Wide Web). Dzięki nim oraz językowi służącemu do tworzenia stron WWW - HTML (ang. Hypertext Markup Language) użytkownicy mogą łatwo przedstawiać wyniki swoich prac, poglądy, firmy przedstawiać produkty itd. W zasadzie można powiedzieć, że rozwój sieci Internet w ostatnich latach był motywowany przez rosnącą popularność serwisów WWW oraz wykorzystywanie protokołu HTTP do przesyłania danych przez inne aplikacje niż tylko przeglądarki stron WWW. Oprócz HTTP, nieco wcześniej powstał inny protokół NNTP (ang. Network News Transfer Protocol). Dzięki niemu użytkownicy mogą wymieniać poglądy i opinie przy pomocy tekstowych wiadomości. Podobnie jak w przypadku WWW są one umieszczane na serwerach i czytane przy pomocy programów-klientów.
Historię rozwoju protokołu przedstawia tabela na slajdzie. Z tabeli tej widać, że protokół ma stosunkowo krótką historię rozwoju. Mimo to we współczesnych sieciach odgrywa on kluczową rolę.
używanie URI do identyfikacji zasobów w sieci, stosowanie mechanizmu "zapytanie-odpowiedź" przy wymianie danych, brak nawiązywania sesji między klientem a serwerem, zawieranie informacji o zasobach, które mogą być użyte na różne sposoby. Oczywiście za tymi czterema punktami kryje się nieco bardziej skomplikowany mechanizm. URI pozwala na umieszczenie zasobu (pliku) gdziekolwiek w sieci Internet. Separuje jednocześnie nazwę od rodzaju zasobu, który się pod nią kryje. W zasadzie, zasób może mieć nazwę przydzieloną na zawsze, co nie oznacza, że jego zawartość i sposób reprezentacji nie może w tym czasie ulec zmianie. Z punktu widzenia protokołu URI jest sformatowanym ciągiem znaków. Można powiedzieć, że URI wskazuje na zasób, niezależnie jakiego typu i niezależnie w jakim miejscu w sieci się znajduje. W tym sensie URI jest kombinacją URL (ang. Uniform Resource Locator) i URN (ang. Uniform Resource Name). Bardziej znanym jest URL. Powiązanie między tymi trzema mechanizmami lokalizacji zasobów jest następujące: jeśli zasób X został umieszczony pod adresem www.foo.com/X i adresem www.companyx.com/pub/X to są to dwa adresy URL. Każdy z nich jest URI zasobu X. URL w związku z tym wskazuje na położenie kopii zasobu. Jeżeli zasobem X jest książka o nadanym numerze ISBN (ang. International Society of Book Numbers) to jej URN jest właśnie ten numer.
Każdy z protokołów ma inną składnię i mechanizm nazywania zasobów. Poprzez oddzielenie protokołu i ciągu znaków lokalizującego zasób, mechanizm nazywania w WWW pozwala na pobieranie tego samego pliku przy pomocy różnych protokołów. Mechanizm ten był bardzo potrzebny i często wykorzystywany w początkowych czasach funkcjonowania WWW. Dzięki temu również WWW stało się tak uniwersalnym interfejsem do pobierania zasobów, które zazwyczaj są tylko dostępne przez np. FTP. Przykładem wykorzystania tego jest rtsp://clips.foo.com/audio/X lub telnet://ox.mycompany.com.pl. Kiedy przeglądarka spotyka się z takim odwołaniem do zasobu, interpretuje rodzaj protokołu do pierwszego wystąpienia znaku ":" a następnie uruchamia połączenie przy jego pomocy - RTSP (ang. Real Time Streaming Protocol) lub TELNET.
Protokół HTTP specyfikuje kilka metod, których może użyć klient do pobierania, modyfikacji, tworzenia i usuwania zasobu. Są to: Metody zdefiniowane w HTTP/1.0 GET - najpopularniejsza metoda pobierania zasobów z serwera HEAD - metoda służy do pobierania metadanych o zasobie POST - w przeciwieństwie do GET i HEAD, ta metoda służy do uaktualniania zawartości zasobu Metody implementowane w niektórych wersjach HTTP/1.0 PUT - metoda działa podobnie jak POST w sensie modyfikowania zasobów wyspecyfikowanych w URI DELETE - metoda służy do usuwania zasobu LINK i UNLINK - metody pozwalają na tworzenie lub usuwanie powiązań między wskazanym w URI zasobem a innymi zasobami.
numeru kodu odpowiedzi, mówiącego o sukcesie lub błędzie, przyczyny powstania takiej odpowiedzi, opcjonalnych nagłówków, opcjonalnej zawartości żądanego zasobu. W zaprezentowanym przykładzie oprócz wymaganych informacji zostały dodane jeszcze pola dodatkowe informujące o dacie ostatniej modyfikacji zasobu oraz jego wielkości. Pola te nie zawsze mają charakter tylko informacyjny. Klient może, oprócz przedstawionego zapytania, w opcjonalnych nagłówkach podać metodę, która ma być zastosowana do zasobu przy spełnieniu określonych warunków. Na przykład, klient może nie chcieć odpowiedzi od serwera, jeżeli żądany dokument nie był modyfikowany od ostatniego czasu, kiedy był przez niego pobrany. Serwer traktuje zasoby trochę jak "czarne skrzynki". Najczęściej taką skrzynką jest plik ze swoją zawartością, którą serwer czyta i wysyła w odpowiedzi klientowi. Dzięki takiemu podejściu - nie interpretowaniu treści zasobu, a tylko sprawdzaniu treści zapytania - serwer może dla tego samego zasobu udzielać różnych odpowiedzi w zależności od rodzaju zapytania, czasu w którym serwer je otrzymał, zmian jakie wprowadzono do zasobu. W praktyce rola serwera i klienta jest bardzo często wymienna. W sieci funkcjonuje całe mnóstwo serwisów i urządzeń zdolnych obsługiwać zapytania kierowane przez programy użytkowników. Obecność w sieci serwerów proxy, różnego rodzaju bram, tuneli nie wpływa na podstawowy sposób, w jaki HTTP wymienia informację między serwerem a klientem. Serwery proxy pozwalają na łatwe dotarcie do informacji przez użytkownika bez generowania nadmiernego ruchu w sieci Internet i obciążaniu serwerów źródłowych. Natomiast, użytkownikowi końcowemu zapewnia to większy komfort pracy.
Powód, dla którego postanowiono tak zrobić, jest bardzo prosty. W czasach powstawania WWW tworzono jeszcze kilka innych, konkurencyjnych systemów. Wszystkie one miały zapewnić dostęp do dużych zasobów w Internecie. Gdyby dodać do protokołu przechowywanie informacji o każdej sesji, to mogłoby się okazać, że serwery muszą przechowywać duże zbiory danych o swoich użytkownikach. WWW tym samym stałby się rozwiązaniem słabo skalowalnym . Nie znaczy to, że serwery, przeglądarki klientów lub inne aplikacje korzystające z HTTP do wymiany danych nie zarządzają sesjami. Serwer WWW może zapamiętywać adresy IP klientów, którzy pobierali z niego dane, jak również inne informacje, które klient wysyła w nagłówkach. Dzieje się to jednak na poziomie oprogramowania serwera i klienta. Problem utrzymywania sesji zaczął być bardzo odczuwalny, gdy serwis WWW musiał przechowywać jakieś informacje o wcześniejszych odwołaniach, np. sklepy internetowe, banki elektroniczne, itd. Rozwiązaniem najczęściej stosowanym są ciasteczka (ang. cookies). Przy każdym wysyłaniu zapytania do serwera, aplikacja użytkownika dołącza ciasteczko z informacjami o nim.
Najnowsza specyfikacja HTTP/1.1 pozwala na utrzymywanie "sesji HTTP" między przeglądarką a serwerem. Niektóre implementacje HTTP/1.0 pozwalały na używanie nagłówka Keep-Alive. W HTTP/1.1 zostało to przekształcone do tzw. stałego połączenia (ang. persistent connection). Mechanizm ten pozwala klientowi na poinformowaniu serwera, że jest zainteresowany utrzymaniem stałego połączenia z nim, poza pojedynczą wymianę wiadomości. Należy pamiętać, że ta wymiana może składać się z kilkunastu ramek TCP. W przypadku HTTP/1.0 mimo to istnieje problem określenia, jak długo połączenie ma być utrzymywane, gdy serwer odsyła dynamicznie generowaną odpowiedź np. przez skrypt. Nie zawiera ona wówczas nagłówka podającego jej wielkość. Klient może jedynie stwierdzić, że otrzymał całość, gdy serwer zamyka połączenie. Na szczęście poprzez rozszerzenia nagłówka HTTP, serwer może określać jak długo połączenie będzie utrzymywane po otrzymaniu ostatniego zapytania. Może również określić maksymalną liczbę zapytań, które klient może wysłać w danym połączeniu.
Najczęściej wykorzystywanymi informacjami są: rodzaj kodowania, dane mówiące, jak duży jest zasób pobierany przez klienta. Dzięki temu może się on łatwo zorientować, kiedy otrzymał całą odpowiedź, czas ostatniej modyfikacji żądanego zasobu. Informacja ta jest bardzo ważna dla serwerów cache jak i przeglądarek WWW. Posiadając ją są w stanie stwierdzić, czy kopia którą ewentualnie już mają jest aktualna, czy też należy pobrać zasób jeszcze raz.
Usługa news służy do wymiany wiadomości między użytkownikami, podobnie jak poczta elektroniczna. Jednak między tymi dwoma serwisami istnieją zasadnicze różnice. Poczta elektroniczna służy do wymiany listów e-mail między dwoma osobami lub w kręgu niedużej grupy ludzi. Przykładem może być firma, która może utworzyć listę e-mailową związaną z danym tematem. Użytkownicy zainteresowani otrzymywaniem wiadomości z tej listy mogą się na nią zapisać. Pierwsza niedogodność płynąca z tego rozwiązania to wysyłanie oddzielnej kopii tego samego listu do każdej z zapisanych osób. Zwiększa to niepotrzebnie obciążenie serwera i sieci. Druga, ważniejsza, to sposób zarządzania listą. Jeśli nie jest automatyczny, to administrator listy musi ręcznie dodawać lub usuwać użytkowników. Oczywiście listą może zarządzać program, który odbiera listy kierowane na specjalny adres. Nie likwiduje to jednak problemu do końca, zwłaszcza gdy użytkownik zapomni zmienić swój adres e-mail na liście zanim zmieni go w rzeczywistości. Wówczas serwer będzie próbował wysyłać listy pod nieistniejące adresy, a lista zapisanych osób będzie rosła. Opisane problemy stają się ogromne w dużej skali. Dlatego też w 1979 został opracowany system USENET. W 1983 powstał standard, który dokładnie go określa. Kluczowe dla systemu jest założenie o utrzymywaniu centralnej bazy danych wiadomości zamiast oddzielnych kopii dla każdego zapisanego do systemu użytkownika. Baza składa się ze zbioru tzw. grup wiadomości (ang. newsgroups). Każda z nich jest związana z zapisaną dla niej listą wiadomości. Nazwa grupy jest związana z hierarchią, w której została założona (system podobny do DNS), np. comp.unix.databases. System bazy artykułów oferuje do nich dostęp, indeksowanie, usuwanie przestarzałych wiadomości, śledzenie powiązań między artykułami. Administrator serwera news może ustalić politykę określającą maksymalny "wiek" artykułu. Po jego osiągnięciu system usuwa go.
adres e-mail autora, temat wiadomości, czas utworzenia, liczbę linii tekstu, identyfikator, nazwy innych grup news, do których został wysłany. Jeden centralny serwer news mógłby wprawdzie teoretycznie obsługiwać wszystkie grupy wiadomości na całym świecie oraz wszystkich użytkowników korzystających z tej usługi. Jednak nietrudno się domyśleć jaka byłaby jej jakość. Dlatego też artykuły są replikowane między serwerami news. Uczelnia może mieć swój serwer, który będzie udostępniał artykuły z popularnych grup dla studentów. Nie ma konieczności pobierania artykułów ze wszystkich grup dostępnych w USENET-cie. Oprócz tego mogą tam być grupy tylko i wyłącznie dla studentów tej uczelni. Serwer nie będzie ich wysyłał do innych serwerów news. Użytkownicy czytają i wysyłają artykuły przez programy, które komunikują się z lokalnym serwerem. Udostępnia on im interfejs do tworzenia i czytania wiadomości, pokazuje niezbędne nagłówki, listy dostępnych artykułów w danej grupie. Poza tym większość takich programów zapamiętuje w lokalnych plikach, jakie wiadomości zostały już przeczytane oraz które grupy news są przez użytkownika odwiedzane. Grupy news są identyfikowane w sieci Internet przez nazwę, tak samo jak serwisy WWW. Większość przeglądarek internetowych pozwala na ich czytanie.
Aplikacja, służąca do odczytywania artykułów z serwera news, otwiera połączenie TCP z serwerem na porcie 119. Podobnie jak FTP i SMTP serwer zwraca trzycyfrowy kod, z opcjonalną wiadomością tekstową do komend wydawanych przez klienta. W zależności od rodzaju odpowiedzi może ona mieć jeszcze dodatkowe parametry. Numer i typ dodatkowych parametrów jest dołączany przez serwer do każdej odpowiedzi, co ułatwia klientowi ich interpretację. Podczas przetwarzania komend serwer pamięta nazwę bieżącej grupy news oraz numer artykułu pobranego przez klienta.
lista obsługiwanych przez serwer poleceń, lista dostępnych grup wraz z informacją o pierwszym i ostatnim artykule w każdej z nich oraz informacją o tym, czy użytkownicy mogą wysyłać artykuły na daną grupę, lista grup utworzonych od danej daty/czasu, lista artykułów wysłanych w danej grupie od danej daty/czasu. Dostarczanie informacji o zmianach w czasie pozwala aplikacjom użytkowników na odświeżanie dostępnych dla nich list artykułów bez potrzeby przechowywania ich na serwerze. Inne zbiory komend służą do przemieszczania się między grupami (identyfikowane są przez nazwy), między artykułami, przejście od aktualnego do poprzedniego lub następnego artykułu. Oprócz tego są też komendy zwracające tylko nagłówki artykułu albo jego całość. Za każdym razem artykuł jest identyfikowany przez numer wiadomości albo numer w danej grupie news. Oczywiście NNTP dostarcza również komend do tworzenia nowych artykułów. Użytkownik może wysłać prośbę o wysłanie wiadomości. Jeżeli serwer odpowie pozytywnie, klient wysyła jego treść podobnie jak w przypadku SMTP. Artykuł kończy się pojedynczym znakiem "." w ostatniej linii. W tym czasie serwer generuje unikalny identyfikator dla wiadomości i dodaje ją do listy artykułów danej grupy. NNTP jest wyposażone w komendę służącą do kopiowania wiadomości między serwerami. Jest to chyba jedna z bardziej istotnych komend w NNTP. Dzięki niej artykuły są wymieniane między serwerami, a użytkownicy korzystający z różnych serwerów mogą je czytać. Serwery nie udostępniają swojej bazy artykułów komukolwiek, a tylko wyznaczonym w konfiguracji innym serwerom news (administratorzy usługi news często nazywają to rozwiązanie feed-em). Serwery wymieniające między sobą feed-a sprawdzają, przed skopiowaniem wiadomości o danym identyfikatorze, czy nie mają jej już w bazie. Jeżeli tak, to nie kopiują jej ponownie. Poza tym, serwery w ramach feed-u mogą sobie udostępniać tylko artykuły pojawiające się na określonych w konfiguracji grupach. Dzięki temu małe firmowe serwery mogą utrzymywać grupy news interesujące ich pracowników bez potrzeby kopiowania dziennie kilku terabajtów danych grup typu alt.binaries. Szybkość kopiowania artykułów między serwerami jest bardzo różna. Czasami może się zdarzyć, że serwer otrzyma daną wiadomość po kilkudziesięciu godzinach. Zależy to od obciążenia łącza do tego serwera jak i jego samego. Należy również pamiętać, że każda grupa wiadomości rządzi się swoimi, często różnymi, prawami. Większość z nich posiada swoje archiwum lub stronę WWW, gdzie jest publikowany regulamin pisania artykułów do danej grupy. Regulaminu tego powinni przestrzegać autorzy artykułów tej grupy.