• Nie Znaleziono Wyników

PROTOKOŁY Rodziny TCP/IP

N/A
N/A
Protected

Academic year: 2021

Share "PROTOKOŁY Rodziny TCP/IP"

Copied!
29
0
0

Pełen tekst

(1)

PROTOKOŁY Rodziny

TCP/IP

(2)

Protokół ARP RFC826 i RARP RFC894

• 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

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)

(3)

Protokół ARP i RARP

• Działanie - określa protokół (ARP/RARP) oraz kierunek (żądanie/

odpowiedź)

1 – żądanie ARP

2 – odpowiedź ARP

3 – żądanie RARP

4 – odpowiedź RARP

(4)

Protokół IP RFC791

• 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)

VER IHL Typ usługi

Flagi Protokół

Długość całkowita

Przesunięcie fragm.

Identyfikacja

TTL Suma kontr. nagłówka

Adres źródłowy Adres przeznaczenia

Wypełnienie Opcje

(5)

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

(6)

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

(7)

Protokół ICMP RFC792

• 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

Typ Kod Suma kontrolna

(8)

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 „odpowiedź 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

(9)

Protokół UDP RFC768

• 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...)

Port źródłowy Port docelowy

Długość komunikatu UDP Suma kontrolna UDP Dane ....

(10)

Protokół TCP RFC793

• 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

Port źródłowy

NW

Port docelowy Numer sekwencji

Długość nagłówka Rozmiar okna odbioru

Numer potwierdzenia

Opcje (0, 1, 2)

Wskaźnik do pilnych danych Suma kontrolna warstwy internetowej

Flagi

Wypełnienie do x32b

(11)

Protokół TCP

• Flagi 6b

Bity znacznikowe

• URG – pilne dane

• ACK – oznacza potwierdzenie

• 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

• Wskaźnik pilnych danych

Położenie ostatniego bajta pilnych danych (jeżeli ustawiono flagę URG)

(12)

Protokół TCP

– nawiązywanie połączenia

• Three Way Handshaking (trójstronne potwierdzenie)

SYN

ACK+SYN

ACK

(13)

Protokół TCP

– stany połączenia

CLOSED

SYN_SENT

ESTABLISHED

FINE_WAIT1 TIME_WAIT

FIN_WAIT2

CLOSED

LISTEN

SYN_RCVD

ESTABLISHED

LAST_ACK

CLOSE_WAIT

• Klient Serwer

(14)
(15)

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 */

  };

(16)

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);

(17)

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 */

};

(18)

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) {

perror("Nie mog zlokalizowa hosta");ę ć }

(19)

Tworzenie adresu

/* Tworzenie struktury adresowej maszyny */

/* wyczyszczenie struktury */

memset(&sa, 0, sizeof(sa));

/* U ycie Internetowej rodziny adresów */ż 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);

(20)

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)

(21)

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ł ąd alokacji");

}

(22)

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()

(23)

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

(24)

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

(25)

Zamykanie połączenia

int close( int socket );

• Zamyka połączenie określonego gniazdka

(26)

Prosty klient

#include <stdio.h> /* funkcje we/wy */

#include <sys/types.h> /* standardowe systemowe typy danych */

#include <netinet/in.h> /* Stuktury adresowe IP */

#include <sys/socket.h> /* funkcje obs ugi gniazdek ł */

#include <netdb.h> /* rozwi zywanie adresów hostów ą */

#define HOSTNAMELEN 40 /* maks. d ugoł ść nazwy hosta */

#define BUFLEN 1024 /* maks. wielkość odpowiedzi */

#define PORT 13 /* port serwera daytime */

(27)

int main(int argc, char *argv[]) {

int rc; /* zwracana wartość odpowiedzi */

int s; /* deskryptor gniazdka */

char buf[BUFLEN+1]; /* bufor odpowiedzi */

char* pc; /* wska nik danych w buf. */ź struct sockaddr_in sa; /* Internet adres strukt*/

struct hostent* hen;/* strukt. T umaczenia nazwy ł na adres IP */

(28)

/* Address resolution stage */

hen = gethostbyname("tempus");

if (!hen) {

perror("Nie mog rozwi za nazwy");ę ą ć }

/* inicjacja struktury internetowej maszyny */

/* zerowanie pami ci */ę memset(&sa, 0, sizeof(sa));

/* U ywamy rodziny adresów internetowych */ż sa.sin_family = AF_INET;

/* Indianie */

sa.sin_port = htons(PORT);

(29)

/* 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ł ąd tworzenia gniazda");

}

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; }

Cytaty

Powiązane dokumenty

Put the sentences in the correct order... Put the sentences in the

When the pre-theoretical notion that is to be formalized is that of logical consequence, incompleteness alone cannot serve as an argument to disqualify a system as a proper logic,

Zlecenie wykonania dokumentacji GMP/GHP lub HACCP 10.. Zakup

Multipleksowanie Porty TCP, porty UDP Porty i aplikacje Gniazdo Internetowe Gniazdo Internetowe Narzędzie: netstat Narzędzie: ftp Narzędzie: telnet Dobrze znane porty... Protokoły

The proposed model is based on a Feller semigroup one, the derivative with respect to time is expressed by the non-integer order Caputo operator, and the derivative with respect

To validate and compare integer and non-integer order models of the synchronous generator in the time domain, an Elmor GCh114a/4 3-phase, 4-pole, 125 kVA (0.8 pf), 400 V (Y

To address this problem in TCP/IP networks, the Internet Engineering Task Force (IETF), which develops and promotes Internet standards, in particular those that comprise the

Agata Bielik-Robson (Instytut Filozofii i Socjologii PAN/Uniwersytet w Nottingham, Anglia), Mirela Boncea (West University of  Timisoara, Rumunia), Grażyna Borkowska (Instytut