Część 1: Modele usług w Internecie Wszystkie programy używające sieci Internet w celu komunikacji należą do jednego z dwóch modeli usług: Klient-Server lub Peer-to-Peer. Oba modele znajdują zastosowanie w Internecie. Wybór modelu jest ustalany przez projektanta i zależy od przeznaczenia aplikacji. Klient-SerwerW modelu tym możemy wydzielić moduł serwera, oraz klienta. Serwer jest stroną udostępniającą klientom określoną usługę (np. serwowanie stron www). Jest to strona pasywna. Nie inicjuje komunikacji z klientem. Każda aplikacja serwera ma przydzielony określony numer w systemie operacyjnym (tak zwany numer portu). Numer ten jest unikalny w obrębie jednej maszyny i zostaje zarezerwowany dla danego procesu po wykonaniu funkcji bind(). Nie da się uruchomić dwóch serwerów na tym samym numerze portu (system operacyjny zaalarmuje, że dany numer portu jest już zajęty przez inny proces). Serwer może jednocześnie obsługiwać kilku klientów. Serwery najczęściej posiadają dużą moc obliczeniową i są dostępne cały czas. Klient, jest aktywną częścią aplikacji, która korzysta z usług serwera. Najczęściej nie ma dużej mocy obliczeniowej. Klient rozpoczyna komunikację z serwerem wysyłając żądanie o określoną usługę. Nie jest konieczne aby aplikacja klienta pochodziła od tego samego producenta (np. serwery www i przeglądarki internetowe). Jedyny warunek, jaki program kliencki musi spełnić, to poprawna obsługa protokołu komunikacyjnego. W architekturze klient-serwer działają następujące usługi: DNS, HTTP (strony www), Poczta elektroniczna, FTP, Radia internetowe. Partnerski (Peer-to-Peer)Jest to model, w którym każdy komputer pełni równorzędną rolę. W porównaniu do architektury omawianej powyżej można powiedzieć, że komputer jest zarówno serwerem jak i klientem. Sieci peer-to-peer mogą posiadać strukturę (pierścień, siatka) lub nie (dowolne połączenia). W tym modelu realizowane są bardzo często aplikacje do wymiany plików, rozmów głosowych i video-konferencji. Wymagania warstwy aplikacji do warstw niższych. Z uwagi na różne zastosowania aplikacji wymagają one spełnienia określonych minimalnych wymagań od sieci Internet. Niezależnie od modelu, w którym działają podstawowe wymagania dotyczą:
Część 2: HTTP - Hypertext Transfer Protocol
rotokół przesyłania hipertekstu. Jest to protokół bezstanowy. Umożliwia komunikację w architekturze klient-serwer. Protokołem tym możemy przesyłać między hostami pliki dowolnego typu. HTTP jest kodowany w ASCII, ponadto nie używa szyfrowania, więc zarówno zapytanie jak i odpowiedź może być podsłuchana przez wszystkie hosty na drodze od klienta do serwera. Domyślny port HTTP to 80.
Podstawowe polecenia HTTP:
Przykładowe zapytanie HTTP składa się z sekcji polecenia (pierwsza linijka), sekji nagłówków, i sekcji danych. GET /rfc/rfc822.txt HTTP/1.1 Host: www.rfc-editor.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.2) Gecko/20061023 SUSE/2.0.0.2-1.1 Firefox/2.0.0.2 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: pl,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive ...brak sekcji danych...
Protokół jest bardzo czytelny dla człowieka. Odpowiedź http składa się z sekcji odpowiedzi (pierwsza linijka), sekcji nagłówków, i sekcji danych. Sekcje nagłówków i danych są zbudowane identycznie jak w zapytaniu HTTP. Sekcja pierwsza zawiera wersję protokołu, kod odpowiedzi i opis kodu.
Kody odpowiedzi HTTP są podzielone na grupy rozpoczynające się od: HTTP/1.1 200 OK Server: Netscape-Enterprise/3.6 SP3 Date: Wed, 04 Apr 2007 00:41:03 GMT Content-type: text/plain Etag: "131c-19f3b-28fdcca5" Last-modified: Thu, 17 Oct 1991 17:47:17 GMT Content-length: 106299 Accept-ranges: bytes Connection: keep-alive ...tutaj żądany zasób... Ze względu na dużą ilość zasobów przesyłanych między klientem a serwerem możliwe jest ustalenia połączenia trwałego HTTP, które pozwala na przesłanie większej ilości żądań w jednym połączeniu. Służy do tego nagłówek Connection: keep-alive, który powoduje, że serwer nie kończy połączenia po pierwszej odpowiedzi. W połączeniach nietrwałych HTTP serwer zamyka połączenie po przesłaniu odpowiedzi (niezależnie, czy żądanie zostało zakończone sukcesem, czy nie).
Warunkowy GET
Jeżeli klient ma aktualną kopię zasobu w schowku przeglądarki nie ma potrzeby ponownego przesyłania jej przez serwer. Aby ustalić, czy kopia jest aktualna, klient ustawia w zapytaniu nagłówek If-modified-since zawieający datę modyfikacji oraz niekiedy także If-None-Match
zawierający wynik funkcji haszującej (skrót z treści pliku). Jeżeli sewer stwierdzi, że klient posiada aktualną wersję pliku przesyła odpowiedź
Część 3: MIME - Multipurpose Internet Mail Extensions
Typy MIME pozwalają programom warstw wyższych prawidłowo rozpoznawać typ przesyłanego pliku. Część 4: DNS - Domain Name System
Protokół tłumaczący nazwy na adresy IP. Najczęściej usługa korzysta z portu numer 53 i protokołu UDP (jest możliwe użycie TCP) System nazw jest tworzony przez globalną sieć kilkudziesięciu serwerów rdzenia DNS (tzw Root servers) oraz wiele serwerów nadzorujących określone obszary w przestrzeni nazw. Lokalizacje serwerów głównych dns: http://en.wikipedia.org/wiki/Root_nameserver
DNS jest wielką rozproszoną bazą danych. Rozproszenie takie posiada następujące cechy: rozproszenie fizyczne serwerów: brak pojedynczego punktu awarii, szybkość propagacji sygnału do komputera odbiorcy z każdego miejsca na Ziemi. Dodatkowo rozproszenie serwerów zmniejsza możliwość przeciążenia zapytaniami. rozproszenie danych: każdy obszar administracyjny przechowuje informację o ograniczonej liczbie domen. Dodatkowo obszar taki posiada co najmniej 2 jednocześnie pracujące serwery nazw w celu zwiększenia bezpieczeństwa informacji oraz możliwości awarii. rozproszenie zarządzania: brak potrzeby centralnego zarządzania gigantyczną bazą danych (każda organizacja ma obowiązek zarządzania tylko jej obszarem administracyjnym)
Każdy komunikat w protokole DNS składa się z nagłówka oraz 4 sekcji informacji:
Działanie systemu można najlepiej zbadać używając programu dig (domain information groper). Narzędzie służy do odpytywania serwerów dns. Zuerst:~ # dig ; <<>> DiG 9.3.2 <<>> ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53127 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 457328 IN NS J.ROOT-SERVERS.NET. . 457328 IN NS K.ROOT-SERVERS.NET. . 457328 IN NS L.ROOT-SERVERS.NET. . 457328 IN NS M.ROOT-SERVERS.NET. . 457328 IN NS A.ROOT-SERVERS.NET. . 457328 IN NS B.ROOT-SERVERS.NET. . 457328 IN NS C.ROOT-SERVERS.NET. . 457328 IN NS D.ROOT-SERVERS.NET. . 457328 IN NS E.ROOT-SERVERS.NET. . 457328 IN NS F.ROOT-SERVERS.NET. . 457328 IN NS G.ROOT-SERVERS.NET. . 457328 IN NS H.ROOT-SERVERS.NET. . 457328 IN NS I.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: A.ROOT-SERVERS.NET. 24527 IN A 198.41.0.4 B.ROOT-SERVERS.NET. 32998 IN A 192.228.79.201 C.ROOT-SERVERS.NET. 29309 IN A 192.33.4.12 D.ROOT-SERVERS.NET. 29308 IN A 128.8.10.90 E.ROOT-SERVERS.NET. 32997 IN A 192.203.230.10 F.ROOT-SERVERS.NET. 32997 IN A 192.5.5.241 G.ROOT-SERVERS.NET. 32997 IN A 192.112.36.4 H.ROOT-SERVERS.NET. 32997 IN A 128.63.2.53 I.ROOT-SERVERS.NET. 32998 IN A 192.36.148.17 J.ROOT-SERVERS.NET. 24527 IN A 192.58.128.30 K.ROOT-SERVERS.NET. 32998 IN A 193.0.14.129 L.ROOT-SERVERS.NET. 32998 IN A 198.32.64.12 M.ROOT-SERVERS.NET. 32998 IN A 202.12.27.33 ;; Query time: 14 msec ;; SERVER: 213.241.79.37#53(213.241.79.37) ;; WHEN: Tue Apr 10 01:37:46 2007 ;; MSG SIZE rcvd: 436 Odpowiedziały nam serwery główne tzw "root-serwery". Zuerst:~ # dig -t ns pl @a.root-servers.net ; <<>> DiG 9.3.2 <<>> -t ns pl @a.root-servers.net ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40739 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 9 ;; QUESTION SECTION: ;pl. IN NS ;; AUTHORITY SECTION: pl. 172800 IN NS B-DNS.pl. pl. 172800 IN NS C-DNS.pl. pl. 172800 IN NS D-DNS.pl. pl. 172800 IN NS E-DNS.pl. pl. 172800 IN NS F-DNS.pl. pl. 172800 IN NS G-DNS.pl. pl. 172800 IN NS A-DNS.pl. ;; ADDITIONAL SECTION: A-DNS.pl. 172800 IN A 195.187.245.44 B-DNS.pl. 172800 IN A 80.50.50.10 C-DNS.pl. 172800 IN A 193.171.255.47 D-DNS.pl. 172800 IN A 213.172.174.70 E-DNS.pl. 172800 IN A 213.218.118.26 F-DNS.pl. 172800 IN A 217.17.46.189 F-DNS.pl. 172800 IN AAAA 2001:1a68:0:10::189 G-DNS.pl. 172800 IN A 149.156.1.6 G-DNS.pl. 172800 IN AAAA 2001:6d8:0:1::a:6 ;; Query time: 145 msec ;; SERVER: 198.41.0.4#53(198.41.0.4) ;; WHEN: Tue Apr 10 01:40:50 2007 ;; MSG SIZE rcvd: 328 Odpowiedziały nam serwery odpowiedzialne za domenę pl. Zuerst:~ # dig -t ns edu.pl @c-dns.pl. ; <<>> DiG 9.3.2 <<>> -t ns edu.pl @c-dns.pl. ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43580 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 8 ;; QUESTION SECTION: ;edu.pl. IN NS ;; AUTHORITY SECTION: edu.pl. 86400 IN NS a-dns.pl. edu.pl. 86400 IN NS b-dns.pl. edu.pl. 86400 IN NS d-dns.pl. edu.pl. 86400 IN NS e-dns.pl. edu.pl. 86400 IN NS f-dns.pl. edu.pl. 86400 IN NS g-dns.pl. ;; ADDITIONAL SECTION: a-dns.pl. 86400 IN A 195.187.245.44 b-dns.pl. 86400 IN A 80.50.50.10 d-dns.pl. 86400 IN A 213.172.174.70 e-dns.pl. 86400 IN A 213.218.118.26 f-dns.pl. 86400 IN A 217.17.46.189 f-dns.pl. 86400 IN AAAA 2001:1a68:0:10::189 g-dns.pl. 86400 IN A 149.156.1.6 g-dns.pl. 86400 IN AAAA 2001:6d8:0:1::a:6 ;; Query time: 43 msec ;; SERVER: 193.171.255.47#53(193.171.255.47) ;; WHEN: Tue Apr 10 01:43:54 2007 ;; MSG SIZE rcvd: 296 i tak dalej... Zuerst:~ # dig -t ns pjwstk.edu.pl @80.50.50.10 ; <<>> DiG 9.3.2 <<>> -t ns pjwstk.edu.pl @80.50.50.10 ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32935 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;pjwstk.edu.pl. IN NS ;; AUTHORITY SECTION: pjwstk.edu.pl. 86400 IN NS dns.pjwstk.edu.pl. pjwstk.edu.pl. 86400 IN NS pjb.pjwstk.edu.pl. ;; ADDITIONAL SECTION: dns.pjwstk.edu.pl. 86400 IN A 148.81.141.10 pjb.pjwstk.edu.pl. 86400 IN A 80.53.134.186 ;; Query time: 19 msec ;; SERVER: 80.50.50.10#53(80.50.50.10) ;; WHEN: Tue Apr 10 01:46:56 2007 ;; MSG SIZE rcvd: 99
z rekordu typu A w sekcji dodatkowej widzimy, że: A adres hosta (ipV4) AAAA adres hosta (ipV6) NS autorytatywny serwer nazw (serwer, który trzyma informację o domenie) CNAME alias (mapowanie nazwy na nazwe) SOA początek odpowiedzialności za domenę (informacja o komputerze obsługującym domenę) PTR wskaźnik odwracający adres IP na nazwę hosta (odwrotny DNS - reverse DNS lookup) HINFO informacja o hoście MX nazwa serwera poczty dla tej domeny Część 5: DOMENA in-addr.arpa i zdobywanie nazw z IPv4
"arpa" jest domeną specjalną służąca do "odwracania" adresów IP (domyślnie IPv4) na nazwy domen.
host - Program działający podobnie do tomek@Zuerst:~/tmp> host dns.pjwstk.edu.pl dns.pjwstk.edu.pl has address 148.81.141.10 dns.pjwstk.edu.pl has IPv6 address 2001:808:102::a1a tomek@Zuerst:~/tmp> host 148.81.141.10 10.141.81.148.in-addr.arpa domain name pointer dns.pjwstk.edu.pl. jak widzimy z pierwszego polecenia program zdobył adresy IP V4 oraz V6; z drugiego otrzymaliśmy pointer na dns.pjwstk.edu.pl
pakiety nr 1, 3 i 5 odpowiadają kolejnym zapytaniom dns, które wywołaliśmy poleceniem pierwszym. jeżeli chcemy sprawdzić jakieś dodatkowe ip z tej podsieci możemy spróbować przetłumaczyć kolejne IP... tomek@Zuerst:~/tmp> host 148.81.141.11 11.141.81.148.in-addr.arpa domain name pointer exch.pjwstk.edu.pl. tomek@Zuerst:~/tmp> host 148.81.141.12 12.141.81.148.in-addr.arpa domain name pointer jlab.pjwstk.edu.pl. tomek@Zuerst:~/tmp> host 148.81.141.13 13.141.81.148.in-addr.arpa domain name pointer nano.pjwstk.edu.pl. tomek@Zuerst:~/tmp> host 148.81.141.14 14.141.81.148.in-addr.arpa domain name pointer ufo.pjwstk.edu.pl.
Poniższy skrypt tłumaczy ip z podanego zakresu i wyciąga wartość TTL z ping'a (rozpoznawanie Sys.Op. według wartości TTL) #!/bin/bash liczba=1 while [ $liczba -lt 120 ] do host 148.81.141.$liczba ping -c 1 148.81.141.$liczba | grep ttl | cut -d" " -f 6 liczba=`expr $liczba + 1` done |
host
inne zakresy ip uczelni i odkryć jak najwięcej szkolnych serwerów