Sieci Komputerowe Wykład 3 - teoria 

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-Serwer

W 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ą:

  • niezawodnej komunikacji (przesyłanie plików)
  • niskich opóźnień (gry, telefonia, video-konferencje)
  • minimalnej przepustowości (aplikacje audio/video)





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:

GET - pobranie zasobu
HEAD - pobiera informacje o zasobie (tzw "naglowek") czyli wszystkie informacje oprócz samego zasobu,
stosowane do sprawdzania dostępności zasobu (if-modified-since)
PUT - przesłanie danych od klienta do serwera
POST - przyjęcie danych przesyłanych od klienta do serwera
(np. wysyłanie zawartości formularzy - w tym przypadku nie zobaczymy parametrów w pasku adresu przeglądarki)

Przykładowe zapytanie HTTP składa się z sekcji polecenia (pierwsza linijka), sekji nagłówków, i sekcji danych.
Sekcja polecenia zawiera metodę http, nazwę zasobu i wersję protokołu.
Sekcja nagłówków zawiera ciąg nagłówków według wzoru <nazwa_nagłówka>: <wartość>(jedna nazwa i wartość w jednej linii)
Jeżeli przesyłane są dane w sekcji nagłówków znajdują się odpowiednie wpisy (Content-type, Content-length)
umożliwiające poprawne odczytanie i zapisanie zasobu.
Sekcja danych jest oddzielona jednym 'Enterem' od sekcji nagłówków.

'Enter' w rozumieniu protokołu HTTP są to znaki CR (carriage return) i LF (line feed)
czyli '\r' i '\n' lub 15 10 lub 0X0D i 0x0A.

Przykładowe zapytanie HTTP:

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.
Zapytanie http ujawnia dużo parametrów systemu takich jak:

- nazwę i wersję przeglądarki
- wersja i rodzaj systemu operacyjnego
- ustawienia regionalne w systemie

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:
1XX - informacje
2XX - potwierdzenia
3XX - przekierowania (zasób zmienił adres url)
4XX - błędy klienta (błędy składniowe zapytania, brak zasobów, praw dostępu)
5XX - błędy serwera
6XX - błędy wewnętrzne

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ź
HTTP/1.0 304 Not Modified
W przeciwnym przypadku przesyłany jest zasób (serwer ustawia nagłówek Last-modified oraz niekiedy Etag)





Część 3: MIME - Multipurpose Internet Mail Extensions


Typy MIME pozwalają programom warstw wyższych prawidłowo rozpoznawać typ przesyłanego pliku.
korzystają z niego przeglądarki internetowe, programy pocztowe i inne programy przesyłające pliki binarne.
MIME dzielą pliki według typu głównego i podtypu.

Spis typów dostępny jest na stronie organizacji IANA:
http://www.iana.org/assignments/media-types/

Odwzorowanie typów MIME na rozszerzenia plików i odwrotnie (używane zwłaszcza przez serwery www i przeglądarki) jest dostępne na stronie organizacji W3
http://www.w3schools.com/media/media_mimeref.asp





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
Organizacją zajmującą się zarządzaniem i kontrolą nad systemem nazw w Internecie jest ICANN (The Internet Corporation for Assigned Names and Numbers). Adresy w DNS składają się z nazw mnemonicznych rozdzielonych kropkami. np. www.pjwstk.edu.pl.
System jest hierarchiczny i tworzy drzewo domen DNS.
W drzewie możemy wyróżnić kilka typów domen:

  • domeny główne (top-level) takie jak gov, org, com, mil, edu, net (a także niedawno wprowadzone aero, biz, coop, info, museum, name, pro)
  • domeny regionalne (national) takie jak pl, de, ru, us, uk, eu
  • domeny specjalnego zastosowania (special purpose) jak np. arpa

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:
zapytania (QUESTION SECTION) zawierającą nazwę domenową, której dotyczy zapytanie
odpowiedzi (ANSWER SECTION) zawierającą pola DNS odpowiadające zapytaniu
zarządcy domeny (AUTHORITY SECTION), który wskazuje serwery odpowiedzialne za tą domeną
dodatkowych informacji (ADDITIONAL SECTION) zawierającą dodatkowe informacje.

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.
Będziemy chcieli uzyskać adres serwera uczelni PJWSTK zaczynając od końca adresu (czyli od domyślnej kropki).
Pytamy o '.' (kropkę)

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".

Wybieramy jeden z nich i pytamy się o 'pl.'

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.
Wybieramy jeden z nich i pytamy się o 'edu.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:
dns.pjwstk.edu.pl. to 148.81.141.10
i jest on odpowiedzialny za domenę pjwstk.edu.pl.

Typy rekordów DNS:

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.
Przykładowo jeżeli chcemy dowiedzieć się jaka nazwa dns jest przypisana do
ipV4:148.81.141.16 pytamy o 16.141.81.148.in-addr.arpa. Wynika to z ułożenia adresów w strukturze drzewiastej.
Inne subdomeny domeny arpa "odwracają" inne typy adresów.

host - Program działający podobnie do dig. Wykonuje różnego rodzaju translacje IPv4 -> dns; IPv6 -> dns i odwrotnie.
Przykład użycia:

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
W drugim poleceniu program host automatycznie przetłumaczył nasz szukany IP na format odpowiadający "in-addr.arpa".

Poniżej okienko ze sniffera.

host_sniffing

pakiety nr 1, 3 i 5 odpowiadają kolejnym zapytaniom dns, które wywołaliśmy poleceniem pierwszym.
pakiety nr 2, 4 i 6 odpowiadają odpowiedziom na powyższe zapytania (czyli pola IPv4, IPv6, MX)

polecenie drugie powoduje wysłanie pakietu nr 11 (pytanie o typ rekordu PTR).
odpowiedź na to pytanie to pakiet nr 12 który jest zaznaczony i widoczny w obszarze środkowym sniffera.
widzimy, że podany adres ip odpowiada domenie dns.pjwstk.edu.pl.


jeżeli chcemy sprawdzić jakieś dodatkowe ip z tej podsieci możemy spróbować przetłumaczyć kolejne IP...
czy znacie te subdomeny ? :)

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





Zadania 

  1. sprawdzić poleceniem host inne zakresy ip uczelni i odkryć jak najwięcej szkolnych serwerów
  2. uruchomić skrypt podany na końcu wykładu i wykonać ponownie ćwiczenie 1.

Słownik 

ASCII -American Standard Code for Information Interchange. Podstawowy standard kodowania znaków. 7 Bitowy.

dig - (domain information groper). Narzędzie służy do odpytywania serwerów dns.

FTP - File Transfer Protocol. Protokół umożliwiający przesyłanie plików między klientem a serwerem. Używa protokołu TCP.

host - wyszukuje informacje o hostach w Internecie. Pobiera te informacje wykorzystując DNS. Standardowo przekształca on nazwy domenowe w adresy IPV4 i odwrotnie.

Root server - jeden z 13 serwerów zarządzających informacjami o domenach najwyższego poziomu.

TCP - Transmission Control Protocol - strumieniowy protokół komunikacji połączeniowej między dwoma komputerami.

UDP - User Datagram Protocol - protokół komunikacji bezpołączeniowej między dwoma komputerami.

Pliki 

Ten dział zostanie uzupełniony wkrótce...

W sieci