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