2.Interfejs-gniazd.pdf
(
601 KB
)
Pobierz
2. Interfejs gniazd
2.1. Gniazdo
•
Gniazdo
(ang.
socket
): pewna abstrakcja wykorzystywana do wysyłania lub otrzymywania danych z innych
procesów. Pełni rolę punktu końcowego w linii komunikacyjnej.
•
Interfejs gniazd to interfejs między programem użytkowym a protokołami komunikacyjnymi w systemie
operacyjnym.
Proces
użytkownika
Warstwa aplikacyjna
( TELNET, FTP, NFS)
Interfejs gniazd
Warstwa transportowa
(TCP, UDP)
Stos protokołów
w jądrze systemu
Warstwa sieciowa (IP)
Warstwa łącza danych
1
Interfejs gniazd
2005/2006
2.2. Gniazdo jako obiekt systemowy
Tablica deskryptorów
(oddzielna dla każdego procesu)
Struktura wewnętrzna pliku 0
0:
a
Struktura wewnętrzna pliku 1
1:
Struktura wewnętrzna pliku 2
2:
Id. rodziny protokołów PF_INET:
Id. usługi: SOCK_STREAM
Lokalny adres IP:
Odległy adres IP:
Numer lokalnego portu:
Numer odległego
portu:
4
:
Gniazdo: struktura danych
opisująca gniazdo rodziny
PF_INET do
obsługi
połączenia
TCP
2
Interfejs gniazd
2005/2006
2.3. Przykład wykorzystania interfejsu gniazd: komunikacja serwer-klient oparta
o TCP/IP
Serwer połączeniowy
Klient
(aktywny)
Serwer
(bierny)
Utwórz gniazdo
socket()
Utwórz gniazdo
socket()
Przypisz gniazdu
nazwę
bind()
Załóż kolejkę połączeń
listen()
Zainicjuj połączenie
connect()
Ustanowienie połączenia
Pobierz z kolejki
połączeń
accept()
żądanie
write()
read()
przetwarzanie żądania
odpowiedź
write()
read()
close()
close()
3
Interfejs gniazd
2005/2006
Wymiana pakietów przez połączenie TCP
klient
serwer
socket
connect
socket, bind, listen
SYN J
LISTEN
SYN_SENT
ESTABLISHED
SYN K, ACK J+1
SYN_RCVD
ACK K+1
connect
ESTABLISHED
dane (żądanie)
accept
write
read
dane (odp)
read
write
ACK żądania
read
read
ACK odpowiedzi
close
FIN M
FIN_WAIT_1
CLOSE WAIT
ACK M+1
read
FIN WAIT 2
FIN N
close
TIME_WAIT
CLOSED
ACK N+1
Kody segmentów:
SYN
Zsynchronizuj numery porządkowe
ACK
Zawiera potwierdzenie
FIN
Koniec strumienia bajtów u nadawcy
RST
Skasuj połączenie
URG
Dane poza głównym strumieniem transmisyjnym (pozapasmowe)
4
Interfejs gniazd
2005/2006
Serwer bezpołączeniowy
Serwer
Klient
Utwórz gniazdo
socket()
Utwórz gniazdo
socket()
Przypisz gniazdu
nazwę
bind()
Odbieraj dane od
klienta
recvfrom()
żądanie
Wysyłaj żądanie do serwera
sendto()
przetwarzanie żądania
odpowiedź
Odbieraj dane
z serwera
recvfrom()
Wysyłaj dane do klienta
sendto()
close()
5
Interfejs gniazd
2005/2006
Plik z chomika:
R.xyz85
Inne pliki z tego folderu:
bgnet.pdf
(337 KB)
2.Interfejs-gniazd.pdf
(601 KB)
Inne foldery tego chomika:
C# C++
Przepełnienie bufora
Qt
Zgłoś jeśli
naruszono regulamin