background image

2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej 
PŁ.

Programowanie sieciowe 

Wykład III a

Protokoły warstwy 

Transportowej

background image

Połączeniowość protokołu 

TCP

3-etapowe nawiązanie połączenia

Wymiana pakietów danych za potwierdzeniem

4-etapowe zamknięcie połączenia

background image

Format segmentów TCP

Port Odbiorcy

 

Port Nadawcy

 

Numer porządkowy pakietu

 

Numer potwierdzenia

 

Dl. Ng.

Zarezer..

BK

Okno

 

Wskaźnik danych 

pilnych

 

Suma kontrolna

 

Uzupełnien

ie

 

Opcje

 

Dane

 

......

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

10

16

31

0

0 (URG)
1 ( ACK )
2 ( PSH )
3 ( RST )
4 ( SYN )
5 ( FIN )

background image

Nawiązanie połączenia

Klient

Serwer

connect

accept

SYN J

SYN K, ACK J+1

ACK K+1

Accept zwraca 

wynik

connect zwraca 

wynik

background image

Zamknięcie połączenia

Klient

Serwer

close/closesocke

t

FIN M

read =0

 ACK M+1

Koniec funkcji close

 FIN N

close/closesocke

t

ACK N+1

Koniec funkcji close

background image

Przesyłanie danych

Klient

Serwer

write

Segment danych 

M

 ACK M

 ACK M+1

Segment danych 

M+1

Segment danych 

M+2

 Segment 

danych + ACK 

M+2

background image

Okno TCP

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

.

 

Okno wysyłania

background image

Okna i kontrola przepływu 

i przeciążenia

Zmienny rozmiar okna

Okno o zerowej wielkości wstrzymuje transmisję  

background image

Przekroczenia czasu

Zagubiony segment

Segment opóźniony 

RTT=(x*Stare_RTT)+((1-x)*Nowa_Próbka_Czasu

background image

2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej 
PŁ.

Programowanie sieciowe 

Wykład III b

Serwer echo - przykład prostego 

serwera sieciowego

background image

Typologia serwerów  

serwer jednowątkowy

serwer wielowątkowy

serwer pozornie - wielowątkowy

Utworzenie nowego 

procesu

Oczekiwanie

background image

serwer wielowątkowy

Utworzenie nowego 

procesu

Oczekiwanie

Wątek główny

Typologia serwerów  

Obsługa 

klienta

Koniec

Począte

k

Wątek 

potomny

Obsługa 

klienta

Koniec

Począte

k

Wątek 

potomny

background image

serwer pozornie wielowątkowy

Typologia serwerów  

E.O.  klienta 1

Sprawdzenie 

E.O.  klienta 2

....

E.O.  klienta n

Dołączenie nowego 

klienta

background image

Typologia serwerów  

serwery przechowujące stan interakcji  ( stanowe 
)

serwer nie przechowujący stanu interakcji (bez-
stanowy)

background image

Szkielet programu 

sieciowego  

Poinformuj 

użytkownika 

o błędzie

Send

recv

closesocket

•Start

•Stop

WSAStartup

WSACleanup

socket

bind

listen

closesocket

accept

background image

Zestawienie funkcji  

interfejsu gniazd Berkeley 

Opis funkcji

Typ funkcji

Nazwa

funkcji

Opis funkcji

Przydzielanie zasobów

socket

Tworzy gniazdo komunikacyjne i zwraca jego

deskryptor

closesocket

Zamyka połączenie i likwiduje gniazdo komunikacyjne

Zwalnianie zasobów i

zamykanie połączenia

shutdown

Zamyka połączenie w jednym lub obydwu kierunkach

connect

Inicjuje połączenie

bind

Związuje gniazdo z określonym portem i numerem IP

listen

Wprowadza lokalny port w bierny tryb pracy

Nawiązywanie

połączenia

accept

przyjmuje zgłoszone połączenie

send

wysyła datagram

sendto

wysyła datagram pod wskazany adres docelowy

sendmsg

wysyła datagram

Wysyłanie danych

write

wysyła dane przez połączenie

read

odczytuje dane z połączenia

recv

pobiera kolejny datagram

recvfrom

odbiera datagram i zapamiętuje adres adawcy

Odbieranie danych

recvmsg

pobiera kolejny datagram

getpeername

podaje adres komputera zdalnego z którym nawiązano

połączenie

getsockopt

Funkcje informacyjne i

konfiguracyjne

setsockopt

Pobranie i ustawienie opcji gniazda

bind

 

listen

 

accept

 

background image

Funkcja 

bind 

Definic

ja

 

int bind ( SOCKET s, const struct sockaddr FAR*name,  int namelen 
);

s  

- deskryptor gniazda 

name 

- struktura adresowa zawierająca adres  i 

numer portu 
namelen  

- długość struktury adresowej.

Paramet

ry

 

Funkcji bind używamy przed użyciem funkcji connect lub listen , by 
powiązać dane gniazdo z numerem portu lub/i adresem sieciowym. Adres  
sieciowy równy  stałej ADDR_ANY  powoduje wybranie adresu interfejsu 
sieciowego przez niższe warstwy protokołu.
 Numer portu 0 powoduje przydzielenie portu z zakresu 1024  5000 przez 

system operacyjny

Opis

 

Zero  w przypadku sukcesu , inaczej wartość INVALID_SOCKET 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

connect, getsockname, listen, 

setsockopt, socket,

 WSACancelBlockingCall

 

Patrz także

 

Informacja 

skrótowa

 

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

16

struct in_addr {
  union {
     struct { u_char s_b1,s_b2;
              u_char s_b3,s_b4; 
            } S_un_b;
     struct { u_short s_w1,s_w2; 
            } S_un_w;
     u_long S_addr;
  } S_un;
}

background image

Funkcja 

listen 

Definic

ja

 

int listen ( SOCKET s, int backlog );

- deskryptor gniazda 

backlog  - maksymalny rozmiar kolejki zawierającej zgłoszone 
połączenia

Paramet

ry

 

Funkcja stawia podane gniazdo w tryb pasywny, w którym oczekuje ono na 
nadchodzące połączenia. Zgłoszone połączenia zestawiane są w wewnętrznej 
kolejce. Jeśli ilość zgłoszonych, lecz nie nawiązanych połączeń przekroczy 
głębokość kolejki. Kolejne połączenia będą odrzucane

Opis

 

Zero  w przypadku sukcesu , inaczej wartość INVALID_SOCKET 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

accept, connect, socket

 

Patrz także

 

Informacja 

skrótowa

 

background image

Funkcja 

accept 

Definic

ja

 

SOCKET accept (SOCKET s, struct sockaddr  
          FAR*
 addr, int FAR* addrlen );

s  

- deskryptor gniazda nasłuchującego ( biernego ) 

addr 

- wskaźnik do bufora w pamięci odbierającego adres stacji nawiązującej 

połączenie 
addrlen  - wskaźnik na zmienną do której zostanie wpisana długość struktury 
adresowej.

Paramet

ry

 

Funkcja pobiera pierwsze połączenie z kolejki połączeń oczekujących na 
obsługę i zwraca deskryptor gniazda identyfikujący to połączenie.

Opis

 

Deskryptor gniazda w przypadku sukcesu , inaczej wartość 
INVALID_SOCKET 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

bind, connect, listen, 

select, socket,

 WSAAsyncSelect, WSAAccept

 

Patrz także

 

Informacja 

skrótowa

 

background image

Funkcja 

shutdown

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

bind, connect, listen, 

select, socket, 

WSAAsyncSelect, WSAAccept

 

Patrz także

 

Informacja 

skrótowa

 

int shutdown (SOCKET s, int how );

int namelen );

s  

- deskryptor gniazda 

how  

- tryb zamknięcia gniazda.

Nawiązuje połączenie ze wskazanym komputerem

 

0:

 jeśli wykonanie funkcji było 

bezbłędne
SOCKET_ERROR 

w przypadku błędu

Wartość stałej how Opis
SHUT_RD

( SD_RECEIVE )

Zamknięcie gniazda dla

operacji odczytu

SHUT_WR

( SD_SEND )

Zamknięcie gniazda dla

operacji   zapisu

SHUT_RDWR

( SD_BOTH )

Zamknięcie gniazda w

obydwu kierunkach -

podobnie  jak close (

closesocket )

background image

Funkcja 

gethostbyaddr

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

gethostbyname, HOSTENT, 

WSAAsyncGetHostByAddr

Patrz także

 

Informacja 

skrótowa

 

HOSTENT FAR * gethostbyaddr (  const char FAR * addr, int len,  int type );

addr  

- Wskaźnik do adresu podanego w sieciowym porządku bajtów. 

len 

- długość adresu 

namelen  

- Typ adresu  ( stałe AF_**** )

Funkcja zwraca strukturę HOSTENT opisującą stację o podanym adresie sieciowym - addr 

0:

 jeśli wykonanie funkcji było 

bezbłędne
SOCKET_ERROR 

w przypadku błędu

struct hostent {
    char FAR *       h_name;
    char FAR * FAR * h_aliases;
    short            h_addrtype;
    short            h_length;
    char FAR * FAR * h_addr_list;
};

Wskaźnik 1

Wskaźnik 2

NULL

...

...

...

Nazwa 1

Nazwa 2

wskaźnik 1

wskaźnik 2

NULL

...

...

...

adres IP Nazwa domenowa

adres IP Nazwa domenowa

background image

Funkcja 

gethostbyname

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

gethostbyaddr,

WSAAsyncGetHostByName  

Patrz także

 

Informacja 

skrótowa

 

struct hostent FAR * gethostbyname (const char FAR * name);

name 

- wskaźnik do łańcucha znaków zawierających nazwę domenową stacji. 

Funkcja zwraca strukturę HOSTENT opisującą stację o podanej nazwie 

adres:

 jeśli wykonanie funkcji było 

bezbłędne
NULL

 

w przypadku błędu

background image

Funkcja 

getsockopt

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

setsockopt, socket, WSAAsyncSelect, 

WSAConnect, WSAGetLastError, 

WSASetLastError

 

Patrz także

 

Informacja 

skrótowa

 

int getsockopt ( SOCKET s, int level, int optname,  
                  char FAR* 
optval,  int FAR*  optlen  );

s 

- Deskryptor gniazda. 

level 

- Rodzaj oprogramowania systemowego obsługującego daną 

opcję
optname 

- Identyfikator opcji do ustawienia lub odczytu

optval  - Wskaźnik do zmiennej w której funkcja getsockopt 
zapisuje wartość opcji.
optlen

- Rozmiar bufora danych/zmiennej. 

Funkcja pobiera wartość opcji identyfikowanej parametrami level i optlen.  
Zmienne optval i optlen zawierają odpowiednio liczbę lub strukturę opisującą opcję oraz jej długość

0:

 jeśli wykonanie funkcji było 

bezbłędne
SOCKET_ERROR 

w przypadku błędu

SOL_SOCKET
IPPROTO_IP

background image

Funkcja 

getsockopt

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

setsockopt, socket, WSAAsyncSelect, 

WSAConnect, WSAGetLastError, 

WSASetLastError

 

Patrz także

 

Informacja 

skrótowa

 

int getsockopt ( SOCKET s, int level, int optname,  
                  char FAR* 
optval,  int FAR*  optlen  );

s 

- Deskryptor gniazda. 

level 

- Rodzaj oprogramowania systemowego obsługującego daną 

opcję
optname 

- Identyfikator opcji do ustawienia lub odczytu

optval  - Wskaźnik do zmiennej w której funkcja getsockopt 
zapisuje wartość opcji.
optlen

- Rozmiar bufora danych/zmiennej. 

Funkcja pobiera wartość opcji identyfikowanej parametrami level i optlen.  
Zmienne optval i optlen zawierają odpowiednio liczbę lub strukturę opisującą opcję oraz jej długość

0:

 jeśli wykonanie funkcji było 

bezbłędne
SOCKET_ERROR 

w przypadku błędu

Wartość

Znaczenie

SO_ACCEPTCONN

Sprawdza czy dane gniazdo jest w trybie biernym

SO_BROADCAST

Gniazdo ma zezwolenie na wysyłanie pakietów z adresem

rozgłoszeniowym

SO_DEBUG

Opcja DEBUG włączona/wyłączona

SO_DONTLINGER

1 jeśli opcja SO_LINGER jest zablokowana

SO_DONTROUTE

Przeglądanie tabeli tras wyłączone

SO_ERROR

Pobranie  nie obsłużonego błędu.

SO_GROUP_ID

Identyfikator grupy do której należy gniazdo.

SO_GROUP_PRIORIT

Y

Relatywny priorytet dlag gniazd  króre są częścią grupy gniazd.

SO_KEEPALIVE

Periodyczne testowanie połączenia

SO_LINGER

Zwraca aktualną wartość opcji LINGER

SO_MAX_MSG_SIZE

Maksymalny rozmiar wiadomości dla protokołów datagramowych

 ( SOCK_DGRAM). Dla protokołów i gniazd strumieniowych bez

znaczenia.

SO_OOBINLINE

Dane pilne ( dane pozapasmowe ) są zwracane w strumieniu

normalnych danych

SO_PROTOCOL_INFO Opis protokołu skojarzonego z danym gniazdem
SO_RCVBUF

Rozmiar bufora na dane odebrane

SO_REUSEADDR

Gniazdo może współdzielić adres i port z innym gniazdem

zarządzanym przez inny proces

SO_SNDBUF

Rozmiar bufora danych na wysłane dane

SO_TYPE

Typ gniazda ( np. SOCK_STREAM, SOCK_DGRAM.

PVD_CONFIG

SOL_SOCK

ET

 

background image

Funkcja 

getsockopt

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

setsockopt, socket, WSAAsyncSelect, 

WSAConnect, WSAGetLastError, 

WSASetLastError

 

Patrz także

 

Informacja 

skrótowa

 

int getsockopt ( SOCKET s, int level, int optname,  
                  char FAR* 
optval,  int FAR*  optlen  );

s 

- Deskryptor gniazda. 

level 

- Rodzaj oprogramowania systemowego obsługującego daną 

opcję
optname 

- Identyfikator opcji do ustawienia lub odczytu

optval  - Wskaźnik do zmiennej w której funkcja getsockopt 
zapisuje wartość opcji.
optlen

- Rozmiar bufora danych/zmiennej. 

Funkcja pobiera wartość opcji identyfikowanej parametrami level i optlen.  
Zmienne optval i optlen zawierają odpowiednio liczbę lub strukturę opisującą opcję oraz jej długość

0:

 jeśli wykonanie funkcji było 

bezbłędne
SOCKET_ERROR 

w przypadku błędu

IPPROTO_IP

 

TCP_NODELAY

BOOL

Blokowanie algorytmue Nagle'a.

Value

Type

Meaning

SO_RCVLOWAT

int

Zgłoszenie wypełnienia bufora danych

nadawanych

SO_RCVTIMEO

int

Time-out przy  odbiorze

SO_SNDLOWAT

int

Send low water mark

SO_SNDTIMEO

int

Tme-out przy nadawaniu

TCP_MAXSEG

int

Maksymalny rozmiar segmentu TCP

background image

Funkcja setsockopt

Definic

ja

 

Paramet

ry

 

Opis

 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadeklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

setsockopt, socket, WSAAsyncSelect, 

WSAConnect, WSAGetLastError, 

WSASetLastError 

Patrz także

 

Informacja 

skrótowa

 

int setsockopt ( SOCKET s, int level, int optname,  
                  char FAR* 
optval,  int optlen  );

s 

- Deskryptor gniazda. 

level 

- Rodzaj oprogramowania systemowego obsługującego daną opcję

optname 

- Identyfikator opcji do ustawienia

optval  - Wskaźnik do zmiennej na podstawie której funkcja setsockopt ustawia opcję.
optlen

- Rozmiar zmiennej wskazywanej przez optval

 

Funkcja pobiera wartość opcji identyfikowanej parametrami level i optlen

 Zmienne optval i optlen zawierają odpowiednio liczbę lub strukturę opisującą 
opcję oraz jej długość

Jeśli sukces  

: zwraca ilość bajtów do 

wysłania 
Jeśli błąd  

: SOCKET_ERROR


Document Outline