TCP IP ARP


PROTOKOAY Rodziny
TCP/IP
Protokół ARPRFC826 i
RARPRFC894
Typ sprzętu Typ protokołu
HLEN PLEN Działanie
Adres sprzętowy nadawcy (0-3)
Adres sprzętowy nadawcy (4-5) IP nadawcy (0-1)
IP nadawcy (2-4) Adres sprzętowy odbiorcy (0-1)
Adres sprzętowy odbiorcy (2-5)
IP odbiorcy (0-3)
" Typ sprzętu (Ethernet=1)
" Typ protokołu wyższego rzędu, który wysłał żądanie (IP = 0x0800)
" HLEN  długość adresu sprzętowego
" PLEN - długość adresu protokołu, który wysłał żądanie
Protokół ARP i RARP
" Działanie - określa protokół (ARP/RARP) oraz kierunek
(żądanie/odpowiedz)
 1  żądanie ARP
 2  odpowiedz ARP
 3  żądanie RARP
 4  odpowiedz RARP
Protokół IPRFC791
VER IHL Typ usługi Długość całkowita
Identyfikacja Flagi Przesunięcie fragm.
TTL Protokół Suma kontr. nagłówka
Adres zródłowy
Adres przeznaczenia
Opcje Wypełnienie
" VER 4b
 Wersja protokołu  4
" IHL 4b
 Długość nagłówka mierzona w 32b słowach
" Długość całkowita 4b
 Długość nagłówka i danych w oktetach (576 - 65535)
Protokół IP
" Identyfikator 8b
 Identyfikator unikalny pakietu
" Flagi 3b
 SterujÄ… fragmentacjÄ…
" Przesunięcia fragmentu
 Mierzony w jednostkach 64b  określa położenie fragmentu
" TTL
 Mierzony w hopach lub sekundach czas życia pakietu
" Protokół
 Wskazuje rodzaj protokołu warstwy wyższej TCP/IP np:
" 1  ICMP 6  TCP 17 - UDP
" 2  IGMP 8  EGP
Protokół IP
" Suma kontrolna nagłówka
 Przeliczana na każdym routerze
" Opcje
 Pozwalają zawrzeć dodatkowe informacje np. o trasie routowania
" Wypełnienie
 Uzupełnia nagłówek do długości równej wielokrotności słowa 32b
Protokół ICMPRFC792
Typ Kod Suma kontrolna
" Typ 8b
 Identyfikacja typu komunikatu
" 0  Echo Reply 4  Source Quench
" 3  Destination Unreachable 5  Redirect
" 8  Echo Request 11  Time Exceeded
" Kod
 Pole zawiera dodatkowe informacje o typie komunikatu
" 0  sieć nieosiągalna 3  Nieosiągalny port
" 1  host nieosiÄ…galny 4  konieczna fragm. ale brak zezw.
" 2  protokół nieosiągalny 5  informacje o trasie niepoprawne
Wykorzystanie ICMP
" ping (Packet InterNet Group Utility)
 Wysyła pakiet ICMP z kodem Echo Request  8  żądanie echa
 Odbiera pakiet z kodem 0  Echo Replay  odpowiedz echa
 Wyświetla statystki czasów odpowiedzi i ew. Kody odpowiedzi np.
" Host nieosiągalny, sieć nieosiągalna ...
" traceroute (tracert w MS Windows)
 Wykorzystuje pakiet z typ 11 do rozpoznania trasy
 Następnie wysyła pakiety typ 8 (opcja -I) z TTL od 1 w górę lub
pakiety UDP
 Wyświetla statystki czasów odpowiedzi i ew. kody odpowiedzi np. od
poszczególnych routerów
Protokół UDPRFC768
Port zródłowy Port docelowy
Długość komunikatu UDP Suma kontrolna UDP
Dane ....
" Protokół bezpołączeniowy
 Nie trzeba nawiązywać połączenia
" krótszy czas
 Nie obsługuje stanów połączenia
" prostsza implementacja
" mniej zasobów serwera
" Można obsłużyć więcej klientów
 Mniejsze rozmiary nagłówka
" Wydajniej wykorzystuje sieć
" Niektóre aplikacje używają domyślnie protokołu UDP (DNS, RIP...)
Protokół TCPRFC793
Port zródłowy Port docelowy
Numer sekwencji
Numer potwierdzenia
Długość nagłówka NW Flagi Rozmiar okna odbioru
Suma kontrolna warstwy internetowej Wskaznik do pilnych danych
Opcje (0, 1, 2)
Wypełnienie do x32b
" Numer sekwencji
 Pozwala kontrolować przesyłanie dużych porcji danych w
segmentach
" Numer potwierdzenia
 Oznacza następny oczekiwany bajt
" Długość nagłówka
 Długość nagłówka mierzona w 32b słowach
Protokół TCP
" Flagi 6b
 Bity znacznikowe
" URG  pilne dane
" ACK  oznacza konieczność potwierdzenia
" PSH  natychmiast przesłać dane do warstwy wyższej
" RST  zerowanie połączenia
" SYN  nawiązywanie połączenia
" FIN  zamykanie połączenia
" Rozmiar okna odbioru
 Sterowanie przepływem umożliwia zwalnianie lub przyspieszanie
transmisji w zależności od wielkości i zapełnienia okna bufora u obu
stron
" Wskaznik pilnych danych
 Położenie ostatniego bajta pilnych danych (jeżeli ustawiono flagę URG)
Protokół TCP
 nawiązywanie połączenia
" Three Way Handshaking (trójstronne potwierdzenie)
S
Y
N
N
Y
S
+
K
C
A
A
C
K
Protokół TCP
 stany połączenia
CLOSED
CLOSED
TIME_WAIT
LAST_ACK
SYN_SENT
LISTEN
ESTABLISHED
FIN_WAIT2 SYN_RCVD
CLOSE_WAIT
FINE_WAIT1
ESTABLISHED
" Klient Serwer
RozwiÄ…zywanie nazw
struct hostent *gethostbyname(char *hostname);
struct hostent {
char* h_name; /* nazwa hosta */
char** h_aliases; /* alias */
int h_addrtype; /* type adresu hosta */
int h_length; /* długość adresu */
char** h_addr_list; /* lista adresów z DNS */
#define h_addr h_addr_list[0]
/* adres, kompatybilność wsteczna */
};
Indianie są wśród nas
" htons() - short integer host byte order -> network byte
order.
" ntohs() - short integer network byte order -> host byte order.
" htonl() - long integer host byte order -> network byte order.
" ntohl() - long integer network byte order -> host byte order.
"
short host_port = 1234;
net_port = htons(host_port);
Tworzenie Adresu
/usr/include/netinet/in.h
struct sockaddr_in {
short int sin_family; /* Rodzina adresów */
unsigned short sin_port; /* Numer portu */
struct in_addr sin_addr; /* Adres internetowy */
/* Wypełnienie do rozmiaru `struct sockaddr'. */
/* Wypełnienie */
};
Tworzenie adresu
char* hostname; /* nazwa hosta */
short host_port; /* port */
struct hostent* hen; /* Serwer DNS*/
struct sockaddr_in sa; /* Struktura adresowa */
/* Zbieranie informacji od mechanizmu rozwi
zywania nazw
(hosts/DSN/NIS)*/
hen = gethostbyname(hostname_ser);
if (!hen) {
zlokalizowaŹ
perror("Nie mog
}
Tworzenie adresu
/* Tworzenie struktury adresowej maszyny */
/* wyczyszczenie struktury */
memset(&sa, 0, sizeof(sa));
/* U¨
sa.sin_family = AF_INET;
/* Uzgodnienie Indian dla portu*/
sa.sin_port = htons(host_port);
/* Skopiowanie adresu IP do struktury */
memcpy(&sa.sin_addr.s_addr, hen->h_addr_list[0],
hen->h_length);
gniazdka
" Wywodzi się z systemów UNIX (BSD 4.3)
 Pozwala na komunikację między aplikacją i
sieciÄ… (zapis i odczyt)
 Rodzaje
" Stream - SOCK_STREAM
" Datagram (krótkiego zasięgu -UDP) -
SOCK_DGRAM
" Raw (niskopoziomowe dostęp do protokołu IP lub
warstwy 2 i 1 OSI)
gniazdka
int socket(int address_family, int socket_type,
int proto_family);
// implementacja
int s; /* descriptor gniazdka */
/* Internetowy , Stream socket */
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0) {
perror("socket: b
}
połączenie
" Skojarzenie gniazdka z połączeniem
 Podłączenie do lokalnego lub zdalnego adresu
int bind(int socket, struct sockaddr *address, int addrlen);
int connect(int socket, struct sockaddr *address, int addrlen);
 4 możliwe scenariusze
" Określony port i adres
" Określony adres IP, port wybierany przez system
" Określony port wszystkie lokalne adresy
sockaddr_in = INADDR_ANY
" Adres i port wybierany przez system
bind()
Wysyłanie i odbieranie danych
int read(int socket, char *buffer, int buflen);
" socket  deskryptor gniazdka
" buffer  bufor do zapisu danych
" buflen  wielkość bufora w bajtach
 Wyniki
" 0  połączenie zamknięte przez zdalny host
" -1  wywołanie zostało przerwane
" n  ilość bajtów odczytanych
Wysyłanie i odbieranie danych
int write(int socket, char *buffer, int buflen);
" socket  deskryptor gniazdka
" buffer  bufor do zapisu danych
" buflen  wielkość bufora w bajtach
 Wyniki
" 0  połączenie zamknięte przez zdalny host
" -1  wywołanie zostało przerwane
" n  ilość bajtów wysłanych
Zamykanie połączenia
int close( int socket );
"
Prosty klient
#include /* funkcje we/wy */
#include /* standardowe systemowe typy danych */
#include /* Stuktury adresowe IP */
#include /* funkcje obs ugi gniazdek */
#include /* rozwi zywanie adresów hostów */
#define HOSTNAMELEN 40 /* maks. d */
nazwy
hosta
#define BUFLEN 1024 /* maks. wielko
#define PORT 13 /* port serwera daytime */
int main(int argc, char *argv[])
{
int rc; /* zwracana warto */
int s; /* deskryptor gniazdka */
char buf[BUFLEN+1]; /* bufor odpowiedzi */
char* pc; /* wska
struct sockaddr_in sa; /* Internet adres strukt*/
struct hostent* hen;/* strukt. T
na adres IP */
/* Address resolution stage */
hen = gethostbyname("tempus");
if (!hen) {
perror("Nie mog rozwi
}
/* inicjacja struktury internetowej maszyny */
/* zerowanie pami ci */
memset(&sa, 0, sizeof(sa));
/* U¨
sa.sin_family = AF_INET;
/* Indianie */
sa.sin_port = htons(PORT);
/* kopiujemy adres IP do struktury */
memcpy(&sa.sin_addr.s_addr, hen->h_addr_list[0],
hen->h_length);
/* allokacja wolnego gniazdka */
/* Adres internetowy, gniazdo typu stream socket */
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0) {
perror("socket: b
}
rc = connect(s, (struct sockaddr *)&sa, sizeof(sa));
pc = buf;
while (rc = read(s, pc, BUFLEN - (pc-buf))) pc += rc;
close(s); *pc=''; print ( %s , buf); return 0; }


Wyszukiwarka

Podobne podstrony:
DNS Konfiguracja w sieci TCP IP
TCP IP a model OSI
,sieci komputerowe,Zestaw protokołów TCP IP (2)
TCP IP Księga eksperta
Protokół TCP IP R01 5
Bezpieczeństwo w sieciach TCP IP
IP ARP
Resetujemy protokół TCP IP
Using LabVIEW with TCP IP and UDP
Protokół TCP IP R11 5
TCP IP i mikrokontrolery, cz 1

więcej podobnych podstron