Sobes.tech
Middle

Ispričaj mi o sloju za prenos (transport layer) modela TCP/IP.

sobes.tech АИ

Одговор од АИ

Транспортни ниво TCP/IP обезбеђује везу између процеса покренутих на различитим хостовима. Главни задаци:

  • Идентификација апликација/процеса на хосту (преко портова).
  • Обезбеђивање сервиса преноса података:
    • Поуздан, поређан пренос (TCP).
    • Непоуздан, без гаранције преноса (UDP).

Два главна протокола:

  • Transmission Control Protocol (TCP):
    • Везано оријентисано.
    • Гарантује испоруку пакета, очување редоследа, контролу тока и управљање пренатрпаношћу.
    • Користи се за апликације које захтевају поуздан пренос (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Без везе.
    • Не гарантује испоруку, редослед или контролу тока.
    • Низка латенција, погодна за апликације осетљиве на време, где је мала изгуба података прихватљива (DNS, VoIP, стриминг видео).

TCP сегменти укључују поља за: изворне/одредне портове, редне бројеве, бројеве потврде, флагове (SYN, ACK, FIN), контролни збир.

UDP датаграми укључују поља за: изворне/одредне портове, дужину и контролни збир.

Порти (ports): 16-битни бројеви који се користе за мултиплексирање/демултиплексирање података између процеса.

  • Well-known ports (0-1023): Резервисани за стандардне сервисе (80 за HTTP, 443 за HTTPS, 22 за SSH).
  • Registered ports (1024-49151): Користе се за приватне апликације регистроване у IANA.
  • Dynamic/Private ports (49152-65535): Користе их клијенти за излазна повезивања.

Пример успостављања TCP везе (Three-way Handshake):

  1. Клијент шаље сегмент са флагом SYN и почетним редним бројем.
  2. Сервер добија SYN, одговара сегментом са флаговима SYN и ACK, својим почетним редним бројем и бројем потврде, једнаким client_seq + 1.
  3. Клијент добија SYN+ACK, одговара сегментом са флагом ACK и бројем потврде, једнаким server_seq + 1. Веза је успостављена.
// Пример структуре заглавља TCP (поједностављена)
struct tcp_header {
    unsigned short src_port;       // Изворни порт
    unsigned short dest_port;      // Циљни порт
    unsigned int   seq_num;        // Редни број
    unsigned int   ack_num;        // Број потврде
    unsigned short flags;          // Флагови (SYN, ACK, FIN и др.)
    // друге поља...
};
// Пример структуре заглавља UDP (поједностављена)
struct udp_header {
    unsigned short src_port;       // Изворни порт
    unsigned short dest_port;      // Циљни порт
    unsigned short length;         // Дужина UDP датаграма
    unsigned short checksum;       // Контролна сума
};