Sobes.tech
Middle

Разкажи за транспортния слой (transport layer) на модела TCP/IP.

sobes.tech AI

Отговор от AI

Транспортният слой 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, със своето начално последователно число и ACK число, равно на client_seq + 1.
  3. Клиентът получава SYN+ACK, отговаря със сегмент с флаг 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;       // Контролна сума
};