Найти в Дзене

Про перевод 'in-order delivery' / Байки ИТ-переводчика

Однажды мы переводили ИТ-книгу, где нам попалась такое замечательное предложение: The reliance on an in-order, reliable delivery of data provided by TCP allowed the HTTP specification to focus on the actual functionality of a search-and-retrieve of text information... Глаз зацепился за "in-order". Что за зверь? Что за, пардон, "в-порядке-доставка"? ну не "внутризаказная" же, правда? В общем, нужно придумать какой-то приличный перевод, чтобы не было стыдно перед заказчиком. Из пальца такое не высосешь, нужно заныривать в матчасть. Что ж, сделаем короткое, но увлекательное путешествие в 1970-е годы, во времена, когда интернет был ещё грудой железа и смелых идей. Поехали. В начале 1970-х годов компьютеры уже умели общаться, но делали это как глухие на переговорном пункте: каждый орал на своём языке и в своем ареале. Сети ARPANET (военная), PRNet (радиосеть) и SATNET (спутниковая) говорили на разных протоколах и не понимали друг друга (см. TCP Design Published и рисунок ниже). Уверенн
Оглавление

Однажды мы переводили ИТ-книгу, где нам попалась такое замечательное предложение:

The reliance on an in-order, reliable delivery of data provided by TCP allowed the HTTP specification to focus on the actual functionality of a search-and-retrieve of text information...

Глаз зацепился за "in-order". Что за зверь? Что за, пардон, "в-порядке-доставка"? ну не "внутризаказная" же, правда? В общем, нужно придумать какой-то приличный перевод, чтобы не было стыдно перед заказчиком.

Из пальца такое не высосешь, нужно заныривать в матчасть. Что ж, сделаем короткое, но увлекательное путешествие в 1970-е годы, во времена, когда интернет был ещё грудой железа и смелых идей. Поехали.

1. TCP или рождение короля протоколов. Как всё начиналось

В начале 1970-х годов компьютеры уже умели общаться, но делали это как глухие на переговорном пункте: каждый орал на своём языке и в своем ареале. Сети ARPANET (военная), PRNet (радиосеть) и SATNET (спутниковая) говорили на разных протоколах и не понимали друг друга (см. TCP Design Published и рисунок ниже).

Схема взаимодействия сетей ARPANET, Packet Radio Net и Atlantic Packet Satellite Net.
Схема взаимодействия сетей ARPANET, Packet Radio Net и Atlantic Packet Satellite Net.

Уверенная связь между этими сетями нужна была позарез — разгар холодной войны и у американцев еще свеж в памяти кубинский кризис. Соответственно, Агентство передовых исследовательских проектов Министерства обороны США (DARPA) поставило задачу: нужен единый язык для связи между всеми этими сетями.

За ее решение взялись двое ученых — Роберт Кан и Винтон Серф; в 1974 году опубликовали работу «A Protocol for Packet Network Intercommunication», где впервые представили протокол TCP.

Роберт Кан (Bob Kahn), Винтон Серф(Vint Cerf)
Роберт Кан (Bob Kahn), Винтон Серф(Vint Cerf)

Изначально TCP расшифровался как Transmission Control Program, но позже его разделили на две части: TCP (отвечает за саму передачу и он стал Transmission Control Protocol) и IP (отвечает за адресацию). Собственно, отсюда и пошло название TCP/IP.

После тестирования TCP/IP на трех различных видах сетей DARPA принял решение сделать его своим основным протоколом. В 1981 году был разработан и опубликован план по переводу 400 хостов со старого протокола NCP на TCP/IP. Крайним сроком для перехода был назначен день 1 января 1983 года, когда все устройства, не перешедшие на новый протокол, были бы отключены от сети. Так оно и случилось: 1 января 1983 года, когда ARPANET полностью перешла на TCP/IP, и по факту именно этот день можно считать датой рождения современного интернета — именно этот протокол стал международным стандартом.

2. Анатомия надежности: как работает TCP

TCP — это не просто протокол, это курьер с синдромом отличника-перфекциониста. Его главная задача — гарантировать, что данные будут доставлены полностью, без ошибок и в правильном порядке (подробнее о его механизмах).

В отличие от своего коллеги UDP, который просто «кидает» пакеты в сеть и забывает о них, TCP сначала устанавливает соединение и дальше следит за каждым пакетом. Получается прямо по-джентельменски — сначала предварительно созванивается, а потом следит за каждой фразой.

Он разбивает поток информации на сегменты, нумерует каждый байт и ждёт подтверждения (ACK — acknowledgement), что данные получены . Не получил ACK — отправил снова. Именно эта фанатичная добросовестность и педантичность позволяет приложениям (тому же HTTP, который тут совсем не всуе упомянули авторы переводимой нами книги) воспринимать сеть как простой файл на диске: что записал, то и прочитал.

3. Механизмы для 'in-order'

Разумеется, пакеты в интернете строем не ходят, там сплошной разброд и шатание: один может вылететь позже, но прийти раньше, потому что его маршрут оказался короче; у другого — как-то иначе. Как TCP борется с этим хаосом? В протоколе для этого работают последовательно три механизма.

1. Порядковые номера. Сообщения делятся по пакетам, у каждого отправленного пакета есть свой уникальный порядковый номер или "код позиции в сообщении (sequence number, см. рисунок). Получается, что-то типа постраничной отправки книги по почте, где у каждой страницы есть свой номер, но каждую отправляют в отдельном конверте.

Sequence number = Код позиции в сообщении
Sequence number = Код позиции в сообщении

2. Буферизация на приёмнике. Получающее устройство не отдаёт данные приложению сразу, как только они пришли. Он складывает их в специальный буфер и смотрит на номера . Если пришёл пакет №3, а пакеты №2 и №1 ещё в пути, получатель не отдаёт третий пакет. Он держит его в буфере на складе и ждёт два предшествующих.

Если пришёл пакет №3, а пакеты №2 и №1 ещё в пути, получатель не отдаёт третий пакет.
Если пришёл пакет №3, а пакеты №2 и №1 ещё в пути, получатель не отдаёт третий пакет.

3. Сборка. Как только приходят недостающие пакеты №1 и №2, TCP достаёт из буфера пакет №3, склеивает их в правильной последовательности (№1, №2, потом №3) и только тогда передаёт готовые данные приложению.

4. Перевод 'in-order delivery'

Получается, если вынести за скобки технический жаргон, in-order delivery означает, что получатель получает данные именно в том порядке, в котором их отправил отправитель, даже если физически по сети они пришли вперемешку. Для веб-сервера или браузера это значит, что они могут не думать о сортировке — TCP уже всё сделал за них.

Теперь становится очевидным, что «in-order» по смыслу означает не просто «порядок», а гарантию того, что пакеты не поменяются местами. Поэтому перевод формулируем так:

Поскольку доставка данных в правильном порядке гарантировалась TCP, в спецификациях HTTP в центре внимания были поиск и получение текстовой информации...

Вроде все.

Спасибо за внимание. Чтобы глубже разбираться в тонкостях IT-перевода и не бояться технических текстов, подписывайтесь на наш канал.

Такого добра у меня навалом, записывать только не успеваю (или ленюсь, грешен) :).