Warstwowy model architektury internetowej Andrzej Sopala
5. Warstwa zastosowań Warstwę zastosowań stanowią najczęściej programy użytkownika i programy użytkowe systemu operacyjnego. Korzystają one z warstwy transportowej poprzez interfejs gniazdek. Programy te po obu stronach porozumiewają się ze sobą przy pomocy protokołu warstwy zastosowań. Istnieje wiele standardowych protokołów realizujących różne usługi (HTTP, SMTP, FTP i wiele innych) - wszystkie standardowe protokoły opisane są w dokumentach RFC (Request for Comments), dostępych na większych i poważniejszych serwerach FTP, zwłaszcza na serwerach instytucji akademickich. Programy mogą korzystać również z niestandardowych protokołów, tworzonych do konkretnych zastosowań i konkretnych programów. Wszystkie te protokoły (standardowe i niestandardowe) definiują sposób komunikacji między programami przy zastosowaniu niezawodnego połączenia strumieniowego (TCP) lub zawodnego przesyłania datagramów. W książce opisaliśmy cztery popularne protokoły warstwy zastosowań (POP3, SMTP, HTTP oraz FTP) oraz zdefiniowaliśmy na własny użytek protokół rozmów internetowych NaszChat, który posłużył jako podstawa do konstruowania dużej części przykładów. Artykuł jest fragmentem z książki Pisanie programów internetowych publikowanym za uprzejmą zgodą autora i Wydawnictwa MIKOM. Księgarnia internetowaWydawnictwa MIKOM Zamów książkę przez Internet Nazwy domenowe, usługa DNS Dla pełnego obrazu podstaw funkcjonowania Internetu pozostało nam omówienie ważnej usługi tłumaczenia nazw hostów na adres IP. Każdemu hostowi w Internecie przypisać można nazwę domenową (dziedzinową). Ma ona postać oddzielonych od siebie kropkami nazw poszczególnych domen. Od najbardziej ogólnej, umieszczonej na końcu, aż po nazwę komputera umieszczoną na początku. Ostatni człon najczęściej określa kraj, gdzie umieszczony jest host (nie dotyczy to USA). Przedostatni (a ostatni w USA) najczęściej dotyczy ogólnej dziedziny życia, gospodarki, którą zajmuje się organizacja, do której należy host (np. edu - edukacja; com - komercyjny; org - organizacje). Kolejne od końca człony są już nazwami własnymi organizacji. Przykładem nazw hostów są: www.yahoo.com polbox.com ftp.pg.gda.pl qwerty.ds2.pg.gda.pl www.uj.edu.pl
Szczególną nazwą hosta jest "localhost", która zawsze oznacza komputer lokalny - podobnie jak adres IP postaci "127.0.0.1" (patrz Adresy IP). Użytkownik Internetu najczęściej określa host przy pomocy nazwy domenowej. Stosowanie adresów IP - choć również poprawne - nie jest wygodne. Z kolei interfejs gniazdek może obsługiwać jedynie adresy IP. Aplikacja internetowa staje więc przed problemem tłumaczenia nazwy domenowej na adres IP. Korzysta przy tym z usługi DNS (Domain Name Service) - umiejscowiona jest ona w warstwie zastosowań. Usługa DNS oparta jest na sieci serwerów DNS, które stanowią rozproszoną bazę nazw domenowych wszystkich hostów w Internecie. Aplikacja, która chce przetłumaczyć nazwę hosta na jego adres IP kontaktuje się z najbliższym serwerem DNS, wysyłając zapytanie. Ten jeśli zna odpowiedź od razu odpowiada; jeśli nie zna - zadaje pytanie innemu serwerowi DNS, lub odsyła do niego. Protokół i sieć serwerów DNS jest w ten sposób zaprojektowana, że żadne pytanie nie zostanie bez odpowiedzi - system w skończonym czasie znajdzie dany host, oczywiście jeśli dana nazwa istnieje. Na szczęście programista nie musi znać szczegółów usługi DNS. Interfejs gniazdek udostępnia funkcje, dzięki którym zamiana nazwy hosta na adres IP i odwrotnie jest trywialna. Służą do tego funkcje gethostbyname (zamiana nazwy na adres) i gethostbyaddr (odwrotnie). Więcej o tych funkcjach napiszemy przy omawianiu konkretnych interfejsów gniazdek. Podsumowanie Ten krótki opis funkcjonowania Internetu i oprogramowania składającego się na niego, powinien przygotować Czytelnika do lektury książki. Nie wszystkim jednak się w niej zajeliśmy. Spośród opisywanych tu kwestii, w książce zajmowaliśmy się jedynie stykiem warstwy transportowej i zastosowań oraz samą warstwą zastosowań. W każdej części książki poświęconej konkretnemu systemowi omówiliśmy usługi oferowane przez warstwę transportową - gniazdka, struktury i typy danych, funkcje na nich operujące itp. Przygotowaliśmy przykładowe programy, które z racji swych funkcji umieścić można w warstwie zastosowań (aplikacji).