Sobes.tech
Middle
121
questionbank

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

Ответ от нейросети

sobes.tech AI

Транспортный уровень TCP/IP обеспечивает связь между процессами, запущенными на разных хостах. Основные задачи:

  • Идентификация приложений/процессов на хосте (через порты).
  • Предоставление сервисов доставки данных:
    • Надежная, упорядоченная доставка (TCP).
    • Ненадежная, безгарантийная доставка (UDP).

Два основных протокола:

  • Transmission Control Protocol (TCP):
    • Соединение ориентированный.
    • Гарантирует доставку пакетов, сохранение порядка, контроль потока и управление перегрузками.
    • Используется для приложений, требующих надежной передачи (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Без соединения.
    • Не гарантирует доставку, порядок или контроль потока.
    • Низкие задержки, подходит для приложений, чувствительных ко времени, где небольшая потеря данных допустима (DNS, VoIP, потоковое видео).

Сегменты TCP включают поля для: портов источника/назначения, порядковых номеров (sequence numbers), номеров подтверждения (acknowledgment numbers), флагов (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. Клиент получает SIN+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;       // Контрольная сумма
};