Sobes.tech
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):

  1. Klient wysyła segment z flagą SYN i numerem sekwencji początkowym.
  2. Serwer otrzymuje SYN, odpowiada segmentem z flagami SYN i ACK, swoim numerem sekwencji początkowym i numerem potwierdzenia równym client_seq + 1.
  3. 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
};