Перейти к основному содержимому

Надёжная доставка — от идеи к TCP

Разработчику

Задача

IP и Ethernet доставляют пакеты «как получится»: возможны потери, дубликаты, перестановка порядка. Приложениям (HTTP, файлы, SSH) нужен упорядоченный поток байтов без дыр.

Транспортный уровень решает это протоколами вроде TCP. Чтобы понять TCP, полезно пройти учебную лестницу rdt (reliable data transfer) — упрощённые протоколы, где каждый шаг добавляет один механизм.


rdt 1.0 — идеальный канал

Предположение: канал никогда не портит и не теряет биты. Отправитель шлёт, получатель читает — достаточно интерфейса «отправить / принять».

В реальном интернете так не бывает → нужны проверки и повторы.


rdt 2.x — ошибки в канале

Добавляют контрольную сумму (checksum) в заголовок кадра. Получатель пересчитывает сумму; при несовпадении кадр отбрасывает и ждёт повтор.

ВерсияОбратный каналПоведение при ошибке
rdt 2.0Отдельные ACK / NAK«Принял» / «Повтори»
rdt 2.1То же + номера пакетов (0/1)Дубликаты отбрасывают по номеру
rdt 2.2Только ACK с номером ожидаемого пакетаNAK заменён на «ACK последнего верного»

Идея скользящего окна из одного бита (alternating bit) живёт в TCP как нумерация байтов, только масштаб больше.


rdt 3.0 — потери и таймаут

Кадр или ACK могут пропасть. Отправитель запускает таймер; по истечении — повторная передача того же пакета. Получатель по номеру отличает дубликат от нового.

Таймаут + ACK — ядро надёжности TCP (оценка RTT — в 421).


Go-Back-N (GBN)

Когда задержка велика, ждать ACK на каждый пакет медленно. Конвейеризация — в полёте несколько пакетов сразу.

Go-Back-N: окно из N пакетов; при потере одного получатель отбрасывает всё «вперёд», отправитель откатывается и шлёт заново с потерянного. Просто реализовать, но неэффективно на каналах с высокой задержкой.


Selective Repeat (SR)

Selective Repeat: получатель буферизует пришедшие вне порядка сегменты и ACK-ит каждый по отдельности. Отправитель повторяет только потерянные, а не всё окно.

TCP ближе к SR, чем к GBN: подтверждения с номером байта, выборочные повторы при тройных дублирующих ACK (fast retransmit в реализациях Reno).


Мост к TCP

Учебный элементВ TCP
Номер пакета 0/1Sequence number байтов в потоке
ACKAcknowledgment number
ТаймаутRTO, повтор сегмента
Окно NОкно приёма + cwnd (перегрузка)
GBN / SRВыборочные повторы, буфер приёмника

Практика соединения, slow start и BDP — 421. Сравнение с UDP без надёжности — 4.

Зачем это в энциклопедии

На собеседовании и в RFC часто ссылаются на «надёжную доставку поверх ненадёжного сервиса». Эта статья даёт словарь; реализацией занимаются стек ОС и ядро — разработчику чаще нужны симптомы в DevTools и Wireshark, а не ручная сборка rdt.

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").