Middle
Opowiedz o warstwie transportowej (transport layer) modelu TCP/IP.
sobes.tech AI
Odpowiedź od AI
Poziom transportowy TCP/IP zapewnia komunikację między procesami uruchomionymi na różnych hostach. Główne zadania:
- Identyfikacja aplikacji/procesów na hoście (przez porty).
- Zapewnienie usług dostarczania danych:
- Niezawodne, uporządkowane dostarczanie (TCP).
- Niezawodne, bez gwarancji dostarczanie (UDP).
Dwa główne protokoły:
- Protokół Kontroli Transmisji (TCP):
- Oparty na połączeniu.
- Gwarantuje dostarczenie pakietów, zachowanie kolejności, kontrolę przepływu i zarządzanie przeciążeniami.
- Używany dla aplikacji wymagających niezawodnej transmisji (HTTP, FTP, SMTP).
- Protokół Datagramów Użytkownika (UDP):
- Bez połączenia.
- Nie gwarantuje dostarczenia, kolejności ani kontroli przepływu.
- Niskie opóźnienia, odpowiedni dla aplikacji wrażliwych na czas, gdzie dopuszczalna jest niewielka utrata danych (DNS, VoIP, streaming wideo).
Segmenty TCP zawierają pola dla: portów źródłowych/docelowych, numerów sekwencji, numerów potwierdzeń, flag (SYN, ACK, FIN), sumy kontrolnej.
Datagramy UDP zawierają pola dla: portów źródłowych/docelowych, długości i sumy kontrolnej.
Porty (ports): 16-bitowe liczby używane do multiplexowania/demultiplexowania danych między procesami.
- Well-known ports (0-1023): Zarezerwowane dla standardowych usług (80 dla HTTP, 443 dla HTTPS, 22 dla SSH).
- Registered ports (1024-49151): Używane dla prywatnych aplikacji zarejestrowanych w IANA.
- Dynamic/Private ports (49152-65535): Używane przez klientów do połączeń wychodzących.
Przykład ustanowienia połączenia TCP (Three-way Handshake):
- Klient wysyła segment z flagą SYN i numerem sekwencji początkowym.
- Serwer otrzymuje SYN, odpowiada segmentem z flagami SYN i ACK, swoim numerem sekwencji początkowym i numerem potwierdzenia równym client_seq + 1.
- Klient otrzymuje SYN+ACK, odpowiada segmentem z flagą ACK i numerem potwierdzenia równym server_seq + 1. Połączenie jest ustanowione.
// Przykład struktury nagłówka TCP (uproszczony)
struct tcp_header {
unsigned short src_port; // Port źródłowy
unsigned short dest_port; // Port docelowy
unsigned int seq_num; // Numer sekwencji
unsigned int ack_num; // Numer potwierdzenia
unsigned short flags; // Flagi (SYN, ACK, FIN itp.)
// inne pola...
};
// Przykład struktury nagłówka UDP (uproszczony)
struct udp_header {
unsigned short src_port; // Port źródłowy
unsigned short dest_port; // Port docelowy
unsigned short length; // Długość datagramu UDP
unsigned short checksum; // Suma kontrolna
};