Что за штуковина UDP? Будующее BitTorrent, и Интернета в целом
Пол Хадсон пробует объяснить, почему модификации в сетевых протоколах могут сделать BitTorrent «хитрее» — или остальной Интернет медленнее.
Добрейший вечер! Приятно узнать о хитростях, ускоряющих загрузку моего линукса!
Загрузка дистрибутивов. Вот-вот, как раз это и поможет мне разъяснить суть изменений. Значиться, начнем. Жили-были динозавры. . .
Э-э, а не прокрутить ли вперед?
. . . а потом появился Интернет! И Винт Серф кинул взор на него, и изрек: это хорошо. И было два главных способа отправки данных — TCP и UDP.
Как-то мы не туда рулим. Я отправляю свои данные электрической почтой, в отсутствие всяких там UDP. А TCP — это не антибиотик?
Надо думать, мы говорим о разных вещах. Пораскиньте умом: почтовые сообщения — это всего лишь текст. Каким образом, по-вашему, он приходит к получателям?
Ну, насчет этого я в курсе: SMTP, POP3, IMAP и парочка других аббревиатур. Они-то и колдуют с отправкой и получением почты.
Ну да, однако они попросту добавляют несколько строк с мета-информацией о ваших письмах. А как же сообщения находят путь в Интернете?
. . . TCP?
Уже теплее.
TCP и UDP?
Горячо! Если совсем просто, ваше письмо заворачивается в SMTP (так называемый «прикладной уровень», потому что он содержит информацию для почтовых программ), далее в TCP или UDP (т. н. «транспортный уровень», потому как осуществляет передачу из точки A в точку B). Технически, все эти данные потом заворачиваются ещё в один слой, Internet Protocol, или попросту «IP», называемый «Интернет-уровнем», он отвечает за фактическую доставку сообщения по глобальным каналам связи.
Ну у вас и технояз. По мне, антибиотики всё же проще. . .
Да я стараюсь помельче разъяснить, честно! Суть в том, что существует два метода отправки пакетов данных по Интернету, TCP и UDP. Оба протокола заворачиваются в IP, а вы используете либо TCP/IP, либо UDP/IP.
А в чем разница? Надо выбрать Интернет-протокол?
Нет, всё идет через IP, однако при каждом подключении нужно выбирать между UDP и TCP.
Как это — выбирать? До сих пор меня не просили!
Ну, хорошо, не вам — это программы выбирают UDP или TCP, в зависимости от типа пересылаемых данных. Видите ли, UDP — протокол незатейливый, он отправляет данные от A к B, и его не тревожит, что будет дальше: в каком виде данные доберутся до точки предназначения и доберутся ли вообще. Иными словами, если отосланы три пакета, 1, 2 и 3, то к получателю они могут прибыть в виде 3, 2, 1. А случается и так, что пакет 2 доставлен, а 1 и 3 затерялись в эфире! Короче говоря, отправил и забыл.
Ах, вот отчего я не получил почты на прошлой неделе!
Подождите, я не договорил. TCP очень различается от UDP, ведь этот протокол создает соединение и хранит его открытым, пока не будут доставлены все данные. Протокол автоматически проверяет, все ли данные прибыли в сохранности, а при надобности даже повторяет отправку. Если что-то перепуталось (скажем, пришло 3, 2, 1 вместо 1, 2, 3), TCP дождется, пока вся передача не завершится в правильном порядке — а приложение (почтовый клиент, например) в процессе не участвует.
Умно придумано. Небось, это UDP потерял мою почту. . .
Никоим образом. Ведь TCP ручается за доставку данных (если сигнал до отправителя не доходит, подключение будет попросту оборвано), его и применяют для доставки по Интернету важных сведений — а собственно, web-трафика, почты, FTP, SSH и подобных протоколов. Во всех этих случаях потеря мельчайшего кусочка данных повергает в негодность всё прочее — если вы загрузили 100 MB файл, а 14 КБ информации из него посеял UDP, то файл бесполезен!
Стоп. . . если TCP уж такой замечательный, зачем тогда нужен UDP?
Затем, что подчас потеря кусочка информации роли не играет. Вот, скажем, VoIP. Если мы беседуем через Интернет по телефону, и связь прервалась всего на секунду, TCP застопорится и затребует повтора реплики, пока все не дойдет до вас в лучшем виде. UDP просто перепрыгнет эту секунду и продолжит себе трансляцию. При прослушивании радио TCP вообще может прервать подключение, только и всего. UDP намного проще и идеально подходит для случаев, когда непрерывность соединения важнее точности трансляции. Вообразите, что стало бы с онлайн-репортажами о всяческих встречах президентов, если бы вместо TCP использовали UDP!
Однако все эти TCP/UDP, вроде бы, уже не новинка. Зачем же говорить о них сейчас?
По причине BitTorrent. Сейчас в этой системе используется TCP, а значит, происходит проверка сохранности отосланных данных.
И правильно, неужели нет? Ведь кому надобны, допустим, 99,9% файла?
Несомненно, но сейчас любой Torrent-клиент точно в курсе, что он должен получить в результате закачки и, при необходимости, запросит недостающее.
И они перейдут на UDP и увеличат скорость? Красота!
Не спешите. Одно из достоинств TCP — его способность сообщать о недополучении данных, а в случае значительной потери — уменьшать скорость передачи, чтобы не перегружать сеть. У UDP ничего такого нет: он будет продолжать отправку, даже если линия будет забита напрочь. Если скорость передачи по сети снижается, то TCP-программы (почта, web и пр. ) сбавят ход, а UDP-приложения будут шпарить напропалую, лишь бы отстреляться.
А разве торренты не составляют солидную часть нынешнего Интернет-трафика? В таком случае, переход приведет к замедлению!
Потенциально — да. Принужденные избирать между UDP, заполняющим сеть, и замедлением web, почты и других немаловажных служб, Интернет-провайдеры неминуемо убавят приоритет UDP-трафика. А это, в свою очередь, приведет к замедлению VoIP, игровых соединений, видео-трансляций и других UDP-программ.
Ужасно! Можно ли как-нибудь сделать BitTorrent чуточку хитрее?
Над этим и бьются разработчики UDP: они хотят приобщить протоколу кое-какие функции TCP (в частности, контроль непроходимости сети). Проверка целостности доставки UDP не нужна, но определять проходимость канала протокол научится не хуже TCP, и выиграют от этого все.
Станут ли торренты быстрее?
Возможно. Но если разработчики BitTorrent добьются своей цели, уменьшив объем попусту расходуемого Интернет-трафика, то и весь Интернет ускорится. Не забывайте, что протоколу TCP уже 35 лет, он «взрослый», и если новоиспеченное UDP-протокол BitTorrent (UTP) его победит, это будет нечто! Небольшой, но ценный бонус: гадкие TCP-сообщения, принудительно закрывающие BitTorrent-соединения, рассылаемые кое-какими интернет-провайдерами (ComCast, это про вас!), с UDP перестанут работать.
Ура! Бегу испытывать. . .
Не спешите: пока вся эта система проходит бета-тестирование. Она предстанет в следующей официальной версии клиента BitTorrent; нужно также, чтобы эта версия была установлена и на других компьютерах, с которыми вы соединяетесь.
Клиентов BitTorrent не так уж много, и большинству пользователей придется ждать следующего цикла обновления дистрибутивов (а вместе с ними и приложений). Выходит, что загрузить обновленный дистрибутивчик через UDP мы с вами сможем не раньше, чем через шесть месяцев.