2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej
PŁ.
Programowanie sieciowe
Wykład III a
Protokoły warstwy
Transportowej
Połączeniowość protokołu
TCP
•
3-etapowe nawiązanie połączenia
•
Wymiana pakietów danych za potwierdzeniem
•
4-etapowe zamknięcie połączenia
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 )
Nawiązanie połączenia
Klient
Serwer
connect
accept
SYN J
SYN K, ACK J+1
ACK K+1
Accept zwraca
wynik
connect zwraca
wynik
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
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
Okno TCP
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Okno wysyłania
Okna i kontrola przepływu
i przeciążenia
•
Zmienny rozmiar okna
•
Okno o zerowej wielkości wstrzymuje transmisję
Przekroczenia czasu
–
Zagubiony segment
–
Segment opóźniony
–
RTT=(x*Stare_RTT)+((1-x)*Nowa_Próbka_Czasu
2001 © Sławomir Jeżewski Katedra Informatyki Stosowanej
PŁ.
Programowanie sieciowe
Wykład III b
Serwer echo - przykład prostego
serwera sieciowego
Typologia serwerów
serwer jednowątkowy
serwer wielowątkowy
serwer pozornie - wielowątkowy
Utworzenie nowego
procesu
Oczekiwanie
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
serwer pozornie wielowątkowy
Typologia serwerów
E.O. klienta 1
Sprawdzenie
E.O. klienta 2
....
E.O. klienta n
Dołączenie nowego
klienta
Typologia serwerów
serwery przechowujące stan interakcji ( stanowe
)
serwer nie przechowujący stanu interakcji (bez-
stanowy)
Szkielet programu
sieciowego
Poinformuj
użytkownika
o błędzie
Send
recv
closesocket
•Start
•Stop
WSAStartup
WSACleanup
socket
bind
listen
closesocket
accept
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
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;
}
Funkcja
listen
Definic
ja
int listen ( SOCKET s, int backlog );
s
- 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
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
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 )
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
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
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
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
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
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