UDP

Поделись знанием:
Перейти к: навигация, поиск
UDP
Название:

User Datagram Protocol

Уровень (по модели OSI):

Транспортный

Семейство:

TCP/IP (иногда называют UDP/IP)

Порт/ID:

17 (в IP)

Спецификация:

RFC 768 / [tools.ietf.org/html/std6 STD 6]

Основные реализации (клиенты):

Ядра Windows, Linux, UNIX

Основные реализации (серверы):

Ядра Windows, Linux, UNIX

Расширяемость:

нет

UDP (англ. User Datagram Protocol — протокол пользовательских датаграмм) — один из ключевых элементов TCP/IP, набора сетевых протоколов для Интернета. С UDP компьютерные приложения могут посылать сообщения (в данном случае называемые датаграммами) другим хостам по IP-сети без необходимости предварительного сообщения для установки специальных каналов передачи или путей данных. Протокол был разработан Дэвидом П. Ридом в 1980 году и официально определён в RFC 768.

UDP использует простую модель передачи, без неявных «рукопожатий» для обеспечения надёжности, упорядочивания или целостности данных. Таким образом, UDP предоставляет ненадёжный сервис, и датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа. UDP подразумевает, что проверка ошибок и исправление либо не нужны, либо должны исполняться в приложении. Чувствительные ко времени приложения часто используют UDP, так как предпочтительнее сбросить пакеты, чем ждать задержавшиеся пакеты, что может оказаться невозможным в системах реального времени. При необходимости исправления ошибок на сетевом уровне интерфейса приложение может задействовать TCP или SCTP, разработанные для этой цели.

Природа UDP как протокола без сохранения состояния также полезна для серверов, отвечающих на небольшие запросы от огромного числа клиентов, например DNS и потоковые мультимедийные приложения вроде IPTV, Voice over IP, протоколы туннелирования IP и многие онлайн-игры.





Служебные порты

UDP-приложения используют датаграммные сокеты для установки соединения между хостами. Приложение связывает сокет с его конечной точкой передачи данных, которая является комбинацией IP-адреса и порта службы. Порт — это программная структура, определяемая номером порта — 16-битным целочисленным значением (то есть от 0 до 65535). Порт 0 зарезервирован, хотя и является допустимым значением порта источника в случае, если процесс-отправитель не ожидает ответных сообщений.

IANA разбила номера портов на три группы.

  • Порты с номерами от 0 до 1023 используются для обычных, хорошо известных служб. В Unix-подобных операционных системах для использования таких портов необходимо разрешение суперпользователя.
  • Порты с номерами от 1024 до 49151 предназначены для зарегистрированных IANA служб.
  • Порты с 49152 по 65535 могут быть использованы для любых целей, поскольку официально не разработаны для какой-то определённой службы. Они также используются как динамические (временные) порты, которые запущенное на хосте программное обеспечение может случайным образом выбрать для самоопределения. По сути, они используются как временные порты в основном клиентами при связи с серверами.

Структура пакета

UDP — минимальный ориентированный на обработку сообщений протокол транспортного уровня, задокументированный в RFC 768.

UDP не предоставляет никаких гарантий доставки сообщения для вышестоящего протокола и не сохраняет состояния отправленных сообщений. По этой причине UDP иногда называют Unreliable Datagram Protocol (англ. — Ненадёжный протокол датаграмм).

UDP обеспечивает многоканальную передачу (с помощью номеров портов) и проверку целостности (с помощью контрольных сумм) заголовка и существенных данных. Надёжная передача в случае необходимости должна реализовываться пользовательским приложением.

Биты 0 - 15 16 - 31
0-31 Порт отправителя (Source port) Порт получателя (Destination port)
32-63 Длина датаграммы (Length) Контрольная сумма (Checksum)
64-... Данные (Data)

Заголовок UDP состоит из четырёх полей, каждое по 2 байта (16 бит). Два из них необязательны к использованию в IPv4 (розовые ячейки в таблице), в то время как в IPv6 необязателен только порт отправителя.

Порт отправителя

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

Порт получателя

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

Длина датаграммы

Поле, задающее длину всей датаграммы (заголовка и данных) в байтах. Минимальная длина равна длине заголовка — 8 байт. Теоретически, максимальный размер поля — 65535 байт для UDP-датаграммы (8 байт на заголовок и 65527 на данные). Фактический предел для длины данных при использовании IPv4 — 65507 (помимо 8 байт на UDP-заголовок требуется ещё 20 на IP-заголовок).

На практике также следует учитывать, что если длина IPv4 пакета с UDP будет превышать MTU (для Ethernet по умолчанию 1500 байт), то отправка такого пакета может вызвать его фрагментацию, что может привести к тому, что он вообще не сможет быть доставлен, если промежуточные маршрутизаторы или конечный хост не будут поддерживать фрагментированные IP пакеты. Также в RFC 791 указывается минимальная длина IP пакета 576 байт, которую должны поддерживать все участники, и рекомендуется отправлять IP пакеты большего размера только в том случае если вы уверены, что принимающая сторона может принять пакеты такого размера. Следовательно, чтобы избежать фрагментации UDP пакетов (и возможной их потери), размер данных в UDP не должен превышать: MTU — (Max IP Header Size) — (UDP Header Size) = 1500 — 60 — 8 = 1432 байт. Для того чтобы быть уверенным, что пакет будет принят любым хостом, размер данных в UDP не должен превышать: (минимальная длина IP пакета) — (Max IP Header Size) — (UDP Header Size) = 576 — 60 — 8 = 508 байт.

В Jumbogram’мах IPv6 пакеты UDP могут иметь больший размер. Максимальное значение составляет 4 294 967 295 байт (232 — 1), из которых 8 байт соответствуют заголовку, а остальные 4 294 967 287 байт — данным.

Следует заметить, что большинство современных сетевых устройств отправляют и принимают пакеты IPv4 длиной до 10000 байт без их разделения на отдельные пакеты. Неофициально такие пакеты называют «Jumbo-пакетами», хотя понятие Jumbo официально относится к IPv6. Тем не менее, «Jumbo-пакеты» поддерживают не все устройства и перед организацией связи с помощью UDP/IP IPv4 посылок с длиной превышающей 1500 байт нужно проверять возможность такой связи опытным путём на конкретном оборудовании[1].

Контрольная сумма

Поле контрольной суммы используется для проверки заголовка и данных на ошибки. Если сумма не сгенерирована передатчиком, то поле заполняется нулями. Поле не является обязательным для IPv4.

Расчёт контрольной суммы

Метод для вычисления контрольной суммы определён в RFC 1071[2].

Перед расчётом контрольной суммы, если длина UDP-сообщения в байтах нечётна, то UDP-сообщение дополняется в конце нулевым байтом (псевдозаголовок и добавочный нулевой байт не отправляются вместе с сообщением, они используются только при расчёте контрольной суммы). Поле контрольной суммы в UDP-заголовке во время расчёта контрольной суммы принимается нулевым.

Для расчёта контрольной суммы псевдозаголовок и UDP-сообщение разбивается на двухбайтные слова. Затем рассчитывается сумма всех слов в арифметике обратного кода (то есть кода, в котором отрицательное число получается из положительного инверсией всех разрядов числа и существует два нуля: 0х0000 (обозначается +0) и 0xffff(обозначается −0)). Результат записывается в соответствующее поле в UDP-заголовке.

Значение контрольной суммы, равное 0х0000 (+0 в обратном коде), зарезервировано и означает, что для посылки контрольная сумма не вычислялась. В случае, если контрольная сумма вычислялась и получилась равной 0х0000, то в поле контрольной суммы заносят значение 0xffff(-0 в обратном коде).

При получении сообщения получатель считает контрольную сумму заново (уже учитывая поле контрольной суммы), и, если в результате получится −0 (то есть 0xffff), то контрольная сумма считается сошедшейся. Если сумма не сходится (данные были повреждены при передаче, либо контрольная сумма неверно посчитана на передающей стороне), то решение о дальнейших действиях принимает принимающая сторона. Как правило, в большинстве современных устройств, работающих с UDP/IP-пакетами имеются настройки, позволяющие либо игнорировать такие пакеты, либо пропускать их на дальнейшую обработку, невзирая на неправильность контрольной суммы.

Пример расчёта контрольной суммы

Для примера рассчитаем контрольную сумму нескольких 16-битных слов: 0x398a, 0xf802, 0x14b2, 0xc281.

Для этого можно сначала сложить попарно числа, рассматривая их как 16-разрядные беззнаковые числа с последующим приведением к дополнительному коду путём прибавления единицы к результату, если при сложении произошёл перенос в старший (17-й) разряд (то есть де-факто, этой операцией мы переводим отрицательное число из дополнительного в обратный код). Или, что равноценно, можно считать, что перенос прибавляется к младшему разряду числа.

0x398a + 0xf802 = 0x1318c → 0x318d (перенос в старший разряд)
0x318d + 0x14b2 = 0x0463f → 0x463f (число положительное)
0x463f + 0xc281 = 0x108c0 → 0x08c1

В конце выполняется инверсия всех битов получившегося числа

0x08c1 = 0000 1000 1100 0001 → 1111 0111 0011 1110 = 0xf73e или, иначе — 0xffff − 0x08c1 = 0xf73e. Это и есть искомая контрольная сумма.

В документе RFC 1071[2] приведены и другие способы расчёта контрольной суммы, в частности, с использованием 32х-разрядной арифметики.

Псевдозаголовки

Псевдозаголовок для IPv4

Если UDP работает над IPv4, контрольная сумма вычисляется при помощи псевдозаголовка, который содержит некоторую информацию из заголовка IPv4. Псевдозаголовок не является настоящим IPv4-заголовком, используемым для отправления IP-пакета. В таблице приведён псевдозаголовок, используемый только для вычисления контрольной суммы.

Биты 0 — 7 8 — 15 16 — 23 24 — 31
0 Адрес источника
32 Адрес получателя
64 Нули Протокол Длина UDP
96 Порт источника Порт получателя
128 Длина Контрольная сумма
160+
Данные

Адреса источника и получателя берутся из IPv4-заголовка. Значения поля «Протокол» для UDP равно 17 (0x11). Поле «Длина UDP» соответствует длине заголовка и данных.

Вычисление контрольной суммы для IPv4 необязательно, если она не используется, то значение равно 0.

Псевдозаголовок для IPv6

При работе UDP над IPv6 контрольная сумма обязательна. Метод для её вычисления был опубликован в RFC 2460:

При вычислении контрольной суммы опять используется псевдозаголовок, имитирующий реальный IPv6-заголовок:

Биты 0 — 7 8 — 15 16 — 23 24 — 31
0 Адрес источника
32
64
96
128 Адрес получателя
160
192
224
256 Длина UDP
288 Нули Следующий заголовок
320 Порт источника Порт получателя
352 Длина Контрольная сумма
384+
Данные

Адрес источника такой же, как и в IPv6-заголовке. Адрес получателя — финальный получатель; если в IPv6-пакете не содержится заголовка маршрутизации (Routing), то это будет адрес получателя из IPv6-заголовка, в противном случае, на начальном узле, это будет адрес последнего элемента заголовка маршрутизации, а на узле-получателе — адрес получателя из IPv6-заголовка. Значение «Следующий заголовок» равно значению протокола — 17 для UDP. Длина UDP — длина UDP-заголовка и данных.

Надёжность и решения проблемы перегрузок

Из-за недостатка надёжности приложения UDP должны быть готовы к некоторым потерям, ошибкам и дублированиям. Некоторые из них (например, TFTP) могут при необходимости добавить элементарные механизмы обеспечения надёжности на прикладном уровне.

Но чаще такие механизмы не используются UDP-приложениями и даже мешают им. Потоковые медиа, многопользовательские игры в реальном времени и VoIP — примеры приложений, часто использующих протокол UDP. В этих конкретных приложениях потеря пакетов обычно не является большой проблемой. Если приложению необходим высокий уровень надёжности, то можно использовать другой протокол (TCP) или воспользоваться методами помехоустойчивого кодирования (Erasure code</span>ruen).

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

Сетевые механизмы были предназначены для того, чтобы свести к минимуму возможные эффекты от перегрузок при неконтролируемых, высокоскоростных нагрузках. Такие сетевые элементы, как маршрутизаторы, использующие пакетные очереди и техники сброса, часто являются единственным доступным инструментом для замедления избыточного UDP-трафика. DCCP (англ. Datagram Congestion Control Protocol — протокол контроля за перегрузками датаграмм) разработан как частичное решение этой потенциальной проблемы с помощью добавления конечному хосту механизмов для отслеживания перегрузок для высокоскоростных UDP-потоков вроде потоковых медиа.


Приложения

Многочисленные ключевые Интернет-приложения используют UDP, в их числе — DNS (где запросы должны быть быстрыми и состоять только из одного запроса, за которым следует один пакет ответа), Простой Протокол Управления Сетями (SNMP), Протокол Маршрутной Информации (RIP), Протокол Динамической Конфигурации Узла (DHCP).

Голосовой и видеотрафик обычно передается с помощью UDP. Протоколы потокового видео в реальном времени и аудио разработаны для обработки случайных потерь пакетов так, что качество лишь незначительно уменьшается вместо больших задержек при повторной передаче потерянных пакетов. Поскольку и TCP, и UDP работают с одной и той же сетью, многие компании замечают, что недавнее увеличение UDP-трафика из-за этих приложений реального времени мешает производительности TCP-приложений вроде систем баз данных или бухгалтерского учёта. Так как и бизнес-приложения, и приложения в реальном времени важны для компаний, развитие качества решений проблемы некоторыми рассматривается в качестве важнейшего приоритета.

Сравнение UDP и TCP

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

  • Надёжность — TCP управляет подтверждением, повторной передачей и тайм-аутом сообщений. Производятся многочисленные попытки доставить сообщение. Если оно потеряется на пути, сервер вновь запросит потерянную часть. В TCP нет ни пропавших данных, ни (в случае многочисленных тайм-аутов) разорванных соединений.
  • Упорядоченность — если два сообщения последовательно отправлены, первое сообщение достигнет приложения-получателя первым. Если участки данных прибывают в неверном порядке, TCP отправляет неупорядоченные данные в буфер до тех пор, пока все данные не могут быть упорядочены и переданы приложению.
  • Тяжеловесность — TCP необходимо три пакета для установки сокет-соединения перед тем, как отправить данные. TCP следит за надёжностью и перегрузками.
  • Потоковость — данные читаются как поток байтов, не передается никаких особых обозначений для границ сообщения или сегментов.

UDP — более простой, основанный на сообщениях протокол без установления соединения. Протоколы такого типа не устанавливают выделенного соединения между двумя хостами. Связь достигается путём передачи информации в одном направлении от источника к получателю без проверки готовности или состояния получателя. В приложениях для голосовой связи через интернет-протокол (Voice over IP, TCP/IP) UDP имеет преимущество над TCP, в котором любое «рукопожатие» помешало бы хорошей голосовой связи. В VoIP считается, что конечные пользователи в реальном времени предоставят любое необходимое подтверждение о получении сообщения.

  • Ненадёжный — когда сообщение посылается, неизвестно, достигнет ли оно своего назначения — оно может потеряться по пути. Нет таких понятий, как подтверждение, повторная передача, тайм-аут.
  • Неупорядоченность — если два сообщения отправлены одному получателю, то порядок их достижения цели не может быть предугадан.
  • Легковесность — никакого упорядочивания сообщений, никакого отслеживания соединений и т. д. Это небольшой транспортный уровень, разработанный на IP.
  • Датаграммы — пакеты посылаются по отдельности и проверяются на целостность только если они прибыли. Пакеты имеют определенные границы, которые соблюдаются после получения, то есть операция чтения на сокете-получателе выдаст сообщение таким, каким оно было изначально послано.
  • Нет контроля перегрузок — UDP сам по себе не избегает перегрузок. Для приложений с большой пропускной способностью возможно вызвать коллапс перегрузок, если только они не реализуют меры контроля на прикладном уровне.

Напишите отзыв о статье "UDP"

Ссылки на RFC

  • RFC 768 — Протокол Пользовательских Датаграмм
  • RFC 2460 — Интернет протокол, спецификация версии 6 (IPv6)
  • RFC 2675 — IPv6 Jumbograms
  • RFC 4113 — Management Information Base for the UDP
  • RFC 5405 — Unicast UDP Usage Guidelines for Application Designers

См. также

Примечания

  1. Scott Hogg Jumbo Frames. Does your network support Jumbo Frames and should you enable it? // Network World : www.networkworld.com/article/2224722/cisco-subnet/jumbo-frames.html. — Jun 3, 2013.
  2. 1 2 R. Braden, D. Borman, C. Partridge. [rfc2.ru/1071.rfc RFC 1071 — Расчет контрольных сумм в Internet] (Сентябрь 1988).

Напишите отзыв о статье "UDP"

Ссылки

  • Kurose, J. F.; Ross, K. W. (2010). Computer Networking: A Top-Down Approach (5th ed.). Boston, MA: Pearson Education. ISBN 978-0-13-136548-3.
  • Forouzan, B.A. (2000). TCP/IP: Protocol Suite, 1st ed. New Delhi, India: Tata McGraw-Hill Publishing Company Limited.
  • content@ipv6.com. «UDP Protocol Overview». Ipv6.com. Retrieved 17 August 2011.
  • Clark, M.P. (2003). Data Networks IP and the Internet, 1st ed. West Sussex, England: John Wiley & Sons Ltd.
  • RFC 2675
  • Postel, J. (August 1980). RFC 768: User Datagram Protocol. Internet Engineering Task Force. Retrieved from tools.ietf.org/html/rfc768
  • Deering S. & Hinden R. (December 1998). RFC 2460: Internet Protocol, Version 6 (IPv6) Specification. Internet Engineering Task Force. Retrieved from tools.ietf.org/html/rfc2460
  • «The impact of UDP on Data Applications». Networkperformancedaily.com. Retrieved 17 August 2011.
  • [www.iana.org/assignments/port-numbers IANA Port Assignments]
  • Семенов Ю. А. [book.itep.ru/4/44/udp_442.htm Протокол UDP]

Отрывок, характеризующий UDP

– И то, дядюшка. Позавчера набежали мы, так куда те, до себя не допущают. Живо ружья покидали. На коленки. Пардон – говорит. Так, только пример один. Сказывали, самого Полиона то Платов два раза брал. Слова не знает. Возьмет возьмет: вот на те, в руках прикинется птицей, улетит, да и улетит. И убить тоже нет положенья.
– Эка врать здоров ты, Киселев, посмотрю я на тебя.
– Какое врать, правда истинная.
– А кабы на мой обычай, я бы его, изловимши, да в землю бы закопал. Да осиновым колом. А то что народу загубил.
– Все одно конец сделаем, не будет ходить, – зевая, сказал старый солдат.
Разговор замолк, солдаты стали укладываться.
– Вишь, звезды то, страсть, так и горят! Скажи, бабы холсты разложили, – сказал солдат, любуясь на Млечный Путь.
– Это, ребята, к урожайному году.
– Дровец то еще надо будет.
– Спину погреешь, а брюха замерзла. Вот чуда.
– О, господи!
– Что толкаешься то, – про тебя одного огонь, что ли? Вишь… развалился.
Из за устанавливающегося молчания послышался храп некоторых заснувших; остальные поворачивались и грелись, изредка переговариваясь. От дальнего, шагов за сто, костра послышался дружный, веселый хохот.
– Вишь, грохочат в пятой роте, – сказал один солдат. – И народу что – страсть!
Один солдат поднялся и пошел к пятой роте.
– То то смеху, – сказал он, возвращаясь. – Два хранцуза пристали. Один мерзлый вовсе, а другой такой куражный, бяда! Песни играет.
– О о? пойти посмотреть… – Несколько солдат направились к пятой роте.


Пятая рота стояла подле самого леса. Огромный костер ярко горел посреди снега, освещая отягченные инеем ветви деревьев.
В середине ночи солдаты пятой роты услыхали в лесу шаги по снегу и хряск сучьев.
– Ребята, ведмедь, – сказал один солдат. Все подняли головы, прислушались, и из леса, в яркий свет костра, выступили две, держащиеся друг за друга, человеческие, странно одетые фигуры.
Это были два прятавшиеся в лесу француза. Хрипло говоря что то на непонятном солдатам языке, они подошли к костру. Один был повыше ростом, в офицерской шляпе, и казался совсем ослабевшим. Подойдя к костру, он хотел сесть, но упал на землю. Другой, маленький, коренастый, обвязанный платком по щекам солдат, был сильнее. Он поднял своего товарища и, указывая на свой рот, говорил что то. Солдаты окружили французов, подстелили больному шинель и обоим принесли каши и водки.
Ослабевший французский офицер был Рамбаль; повязанный платком был его денщик Морель.
Когда Морель выпил водки и доел котелок каши, он вдруг болезненно развеселился и начал не переставая говорить что то не понимавшим его солдатам. Рамбаль отказывался от еды и молча лежал на локте у костра, бессмысленными красными глазами глядя на русских солдат. Изредка он издавал протяжный стон и опять замолкал. Морель, показывая на плечи, внушал солдатам, что это был офицер и что его надо отогреть. Офицер русский, подошедший к костру, послал спросить у полковника, не возьмет ли он к себе отогреть французского офицера; и когда вернулись и сказали, что полковник велел привести офицера, Рамбалю передали, чтобы он шел. Он встал и хотел идти, но пошатнулся и упал бы, если бы подле стоящий солдат не поддержал его.
– Что? Не будешь? – насмешливо подмигнув, сказал один солдат, обращаясь к Рамбалю.
– Э, дурак! Что врешь нескладно! То то мужик, право, мужик, – послышались с разных сторон упреки пошутившему солдату. Рамбаля окружили, подняли двое на руки, перехватившись ими, и понесли в избу. Рамбаль обнял шеи солдат и, когда его понесли, жалобно заговорил:
– Oh, nies braves, oh, mes bons, mes bons amis! Voila des hommes! oh, mes braves, mes bons amis! [О молодцы! О мои добрые, добрые друзья! Вот люди! О мои добрые друзья!] – и, как ребенок, головой склонился на плечо одному солдату.
Между тем Морель сидел на лучшем месте, окруженный солдатами.
Морель, маленький коренастый француз, с воспаленными, слезившимися глазами, обвязанный по бабьи платком сверх фуражки, был одет в женскую шубенку. Он, видимо, захмелев, обнявши рукой солдата, сидевшего подле него, пел хриплым, перерывающимся голосом французскую песню. Солдаты держались за бока, глядя на него.
– Ну ка, ну ка, научи, как? Я живо перейму. Как?.. – говорил шутник песенник, которого обнимал Морель.
Vive Henri Quatre,
Vive ce roi vaillanti –
[Да здравствует Генрих Четвертый!
Да здравствует сей храбрый король!
и т. д. (французская песня) ]
пропел Морель, подмигивая глазом.
Сe diable a quatre…
– Виварика! Виф серувару! сидябляка… – повторил солдат, взмахнув рукой и действительно уловив напев.
– Вишь, ловко! Го го го го го!.. – поднялся с разных сторон грубый, радостный хохот. Морель, сморщившись, смеялся тоже.
– Ну, валяй еще, еще!
Qui eut le triple talent,
De boire, de battre,
Et d'etre un vert galant…
[Имевший тройной талант,
пить, драться
и быть любезником…]
– A ведь тоже складно. Ну, ну, Залетаев!..
– Кю… – с усилием выговорил Залетаев. – Кью ю ю… – вытянул он, старательно оттопырив губы, – летриптала, де бу де ба и детравагала, – пропел он.
– Ай, важно! Вот так хранцуз! ой… го го го го! – Что ж, еще есть хочешь?
– Дай ему каши то; ведь не скоро наестся с голоду то.
Опять ему дали каши; и Морель, посмеиваясь, принялся за третий котелок. Радостные улыбки стояли на всех лицах молодых солдат, смотревших на Мореля. Старые солдаты, считавшие неприличным заниматься такими пустяками, лежали с другой стороны костра, но изредка, приподнимаясь на локте, с улыбкой взглядывали на Мореля.
– Тоже люди, – сказал один из них, уворачиваясь в шинель. – И полынь на своем кореню растет.
– Оо! Господи, господи! Как звездно, страсть! К морозу… – И все затихло.
Звезды, как будто зная, что теперь никто не увидит их, разыгрались в черном небе. То вспыхивая, то потухая, то вздрагивая, они хлопотливо о чем то радостном, но таинственном перешептывались между собой.

Х
Войска французские равномерно таяли в математически правильной прогрессии. И тот переход через Березину, про который так много было писано, была только одна из промежуточных ступеней уничтожения французской армии, а вовсе не решительный эпизод кампании. Ежели про Березину так много писали и пишут, то со стороны французов это произошло только потому, что на Березинском прорванном мосту бедствия, претерпеваемые французской армией прежде равномерно, здесь вдруг сгруппировались в один момент и в одно трагическое зрелище, которое у всех осталось в памяти. Со стороны же русских так много говорили и писали про Березину только потому, что вдали от театра войны, в Петербурге, был составлен план (Пфулем же) поимки в стратегическую западню Наполеона на реке Березине. Все уверились, что все будет на деле точно так, как в плане, и потому настаивали на том, что именно Березинская переправа погубила французов. В сущности же, результаты Березинской переправы были гораздо менее гибельны для французов потерей орудий и пленных, чем Красное, как то показывают цифры.
Единственное значение Березинской переправы заключается в том, что эта переправа очевидно и несомненно доказала ложность всех планов отрезыванья и справедливость единственно возможного, требуемого и Кутузовым и всеми войсками (массой) образа действий, – только следования за неприятелем. Толпа французов бежала с постоянно усиливающейся силой быстроты, со всею энергией, направленной на достижение цели. Она бежала, как раненый зверь, и нельзя ей было стать на дороге. Это доказало не столько устройство переправы, сколько движение на мостах. Когда мосты были прорваны, безоружные солдаты, московские жители, женщины с детьми, бывшие в обозе французов, – все под влиянием силы инерции не сдавалось, а бежало вперед в лодки, в мерзлую воду.
Стремление это было разумно. Положение и бегущих и преследующих было одинаково дурно. Оставаясь со своими, каждый в бедствии надеялся на помощь товарища, на определенное, занимаемое им место между своими. Отдавшись же русским, он был в том же положении бедствия, но становился на низшую ступень в разделе удовлетворения потребностей жизни. Французам не нужно было иметь верных сведений о том, что половина пленных, с которыми не знали, что делать, несмотря на все желание русских спасти их, – гибли от холода и голода; они чувствовали, что это не могло быть иначе. Самые жалостливые русские начальники и охотники до французов, французы в русской службе не могли ничего сделать для пленных. Французов губило бедствие, в котором находилось русское войско. Нельзя было отнять хлеб и платье у голодных, нужных солдат, чтобы отдать не вредным, не ненавидимым, не виноватым, но просто ненужным французам. Некоторые и делали это; но это было только исключение.
Назади была верная погибель; впереди была надежда. Корабли были сожжены; не было другого спасения, кроме совокупного бегства, и на это совокупное бегство были устремлены все силы французов.
Чем дальше бежали французы, чем жальче были их остатки, в особенности после Березины, на которую, вследствие петербургского плана, возлагались особенные надежды, тем сильнее разгорались страсти русских начальников, обвинявших друг друга и в особенности Кутузова. Полагая, что неудача Березинского петербургского плана будет отнесена к нему, недовольство им, презрение к нему и подтрунивание над ним выражались сильнее и сильнее. Подтрунивание и презрение, само собой разумеется, выражалось в почтительной форме, в той форме, в которой Кутузов не мог и спросить, в чем и за что его обвиняют. С ним не говорили серьезно; докладывая ему и спрашивая его разрешения, делали вид исполнения печального обряда, а за спиной его подмигивали и на каждом шагу старались его обманывать.
Всеми этими людьми, именно потому, что они не могли понимать его, было признано, что со стариком говорить нечего; что он никогда не поймет всего глубокомыслия их планов; что он будет отвечать свои фразы (им казалось, что это только фразы) о золотом мосте, о том, что за границу нельзя прийти с толпой бродяг, и т. п. Это всё они уже слышали от него. И все, что он говорил: например, то, что надо подождать провиант, что люди без сапог, все это было так просто, а все, что они предлагали, было так сложно и умно, что очевидно было для них, что он был глуп и стар, а они были не властные, гениальные полководцы.
В особенности после соединения армий блестящего адмирала и героя Петербурга Витгенштейна это настроение и штабная сплетня дошли до высших пределов. Кутузов видел это и, вздыхая, пожимал только плечами. Только один раз, после Березины, он рассердился и написал Бенигсену, доносившему отдельно государю, следующее письмо:
«По причине болезненных ваших припадков, извольте, ваше высокопревосходительство, с получения сего, отправиться в Калугу, где и ожидайте дальнейшего повеления и назначения от его императорского величества».
Но вслед за отсылкой Бенигсена к армии приехал великий князь Константин Павлович, делавший начало кампании и удаленный из армии Кутузовым. Теперь великий князь, приехав к армии, сообщил Кутузову о неудовольствии государя императора за слабые успехи наших войск и за медленность движения. Государь император сам на днях намеревался прибыть к армии.
Старый человек, столь же опытный в придворном деле, как и в военном, тот Кутузов, который в августе того же года был выбран главнокомандующим против воли государя, тот, который удалил наследника и великого князя из армии, тот, который своей властью, в противность воле государя, предписал оставление Москвы, этот Кутузов теперь тотчас же понял, что время его кончено, что роль его сыграна и что этой мнимой власти у него уже нет больше. И не по одним придворным отношениям он понял это. С одной стороны, он видел, что военное дело, то, в котором он играл свою роль, – кончено, и чувствовал, что его призвание исполнено. С другой стороны, он в то же самое время стал чувствовать физическую усталость в своем старом теле и необходимость физического отдыха.
29 ноября Кутузов въехал в Вильно – в свою добрую Вильну, как он говорил. Два раза в свою службу Кутузов был в Вильне губернатором. В богатой уцелевшей Вильне, кроме удобств жизни, которых так давно уже он был лишен, Кутузов нашел старых друзей и воспоминания. И он, вдруг отвернувшись от всех военных и государственных забот, погрузился в ровную, привычную жизнь настолько, насколько ему давали покоя страсти, кипевшие вокруг него, как будто все, что совершалось теперь и имело совершиться в историческом мире, нисколько его не касалось.
Чичагов, один из самых страстных отрезывателей и опрокидывателей, Чичагов, который хотел сначала сделать диверсию в Грецию, а потом в Варшаву, но никак не хотел идти туда, куда ему было велено, Чичагов, известный своею смелостью речи с государем, Чичагов, считавший Кутузова собою облагодетельствованным, потому что, когда он был послан в 11 м году для заключения мира с Турцией помимо Кутузова, он, убедившись, что мир уже заключен, признал перед государем, что заслуга заключения мира принадлежит Кутузову; этот то Чичагов первый встретил Кутузова в Вильне у замка, в котором должен был остановиться Кутузов. Чичагов в флотском вицмундире, с кортиком, держа фуражку под мышкой, подал Кутузову строевой рапорт и ключи от города. То презрительно почтительное отношение молодежи к выжившему из ума старику выражалось в высшей степени во всем обращении Чичагова, знавшего уже обвинения, взводимые на Кутузова.
Разговаривая с Чичаговым, Кутузов, между прочим, сказал ему, что отбитые у него в Борисове экипажи с посудою целы и будут возвращены ему.
– C'est pour me dire que je n'ai pas sur quoi manger… Je puis au contraire vous fournir de tout dans le cas meme ou vous voudriez donner des diners, [Вы хотите мне сказать, что мне не на чем есть. Напротив, могу вам служить всем, даже если бы вы захотели давать обеды.] – вспыхнув, проговорил Чичагов, каждым словом своим желавший доказать свою правоту и потому предполагавший, что и Кутузов был озабочен этим самым. Кутузов улыбнулся своей тонкой, проницательной улыбкой и, пожав плечами, отвечал: – Ce n'est que pour vous dire ce que je vous dis. [Я хочу сказать только то, что говорю.]
В Вильне Кутузов, в противность воле государя, остановил большую часть войск. Кутузов, как говорили его приближенные, необыкновенно опустился и физически ослабел в это свое пребывание в Вильне. Он неохотно занимался делами по армии, предоставляя все своим генералам и, ожидая государя, предавался рассеянной жизни.
Выехав с своей свитой – графом Толстым, князем Волконским, Аракчеевым и другими, 7 го декабря из Петербурга, государь 11 го декабря приехал в Вильну и в дорожных санях прямо подъехал к замку. У замка, несмотря на сильный мороз, стояло человек сто генералов и штабных офицеров в полной парадной форме и почетный караул Семеновского полка.
Курьер, подскакавший к замку на потной тройке, впереди государя, прокричал: «Едет!» Коновницын бросился в сени доложить Кутузову, дожидавшемуся в маленькой швейцарской комнатке.
Через минуту толстая большая фигура старика, в полной парадной форме, со всеми регалиями, покрывавшими грудь, и подтянутым шарфом брюхом, перекачиваясь, вышла на крыльцо. Кутузов надел шляпу по фронту, взял в руки перчатки и бочком, с трудом переступая вниз ступеней, сошел с них и взял в руку приготовленный для подачи государю рапорт.
Беготня, шепот, еще отчаянно пролетевшая тройка, и все глаза устремились на подскакивающие сани, в которых уже видны были фигуры государя и Волконского.
Все это по пятидесятилетней привычке физически тревожно подействовало на старого генерала; он озабоченно торопливо ощупал себя, поправил шляпу и враз, в ту минуту как государь, выйдя из саней, поднял к нему глаза, подбодрившись и вытянувшись, подал рапорт и стал говорить своим мерным, заискивающим голосом.
Государь быстрым взглядом окинул Кутузова с головы до ног, на мгновенье нахмурился, но тотчас же, преодолев себя, подошел и, расставив руки, обнял старого генерала. Опять по старому, привычному впечатлению и по отношению к задушевной мысли его, объятие это, как и обыкновенно, подействовало на Кутузова: он всхлипнул.
Государь поздоровался с офицерами, с Семеновским караулом и, пожав еще раз за руку старика, пошел с ним в замок.
Оставшись наедине с фельдмаршалом, государь высказал ему свое неудовольствие за медленность преследования, за ошибки в Красном и на Березине и сообщил свои соображения о будущем походе за границу. Кутузов не делал ни возражений, ни замечаний. То самое покорное и бессмысленное выражение, с которым он, семь лет тому назад, выслушивал приказания государя на Аустерлицком поле, установилось теперь на его лице.
Когда Кутузов вышел из кабинета и своей тяжелой, ныряющей походкой, опустив голову, пошел по зале, чей то голос остановил его.
– Ваша светлость, – сказал кто то.
Кутузов поднял голову и долго смотрел в глаза графу Толстому, который, с какой то маленькою вещицей на серебряном блюде, стоял перед ним. Кутузов, казалось, не понимал, чего от него хотели.
Вдруг он как будто вспомнил: чуть заметная улыбка мелькнула на его пухлом лице, и он, низко, почтительно наклонившись, взял предмет, лежавший на блюде. Это был Георгий 1 й степени.


На другой день были у фельдмаршала обед и бал, которые государь удостоил своим присутствием. Кутузову пожалован Георгий 1 й степени; государь оказывал ему высочайшие почести; но неудовольствие государя против фельдмаршала было известно каждому. Соблюдалось приличие, и государь показывал первый пример этого; но все знали, что старик виноват и никуда не годится. Когда на бале Кутузов, по старой екатерининской привычке, при входе государя в бальную залу велел к ногам его повергнуть взятые знамена, государь неприятно поморщился и проговорил слова, в которых некоторые слышали: «старый комедиант».
Неудовольствие государя против Кутузова усилилось в Вильне в особенности потому, что Кутузов, очевидно, не хотел или не мог понимать значение предстоящей кампании.
Когда на другой день утром государь сказал собравшимся у него офицерам: «Вы спасли не одну Россию; вы спасли Европу», – все уже тогда поняли, что война не кончена.
Один Кутузов не хотел понимать этого и открыто говорил свое мнение о том, что новая война не может улучшить положение и увеличить славу России, а только может ухудшить ее положение и уменьшить ту высшую степень славы, на которой, по его мнению, теперь стояла Россия. Он старался доказать государю невозможность набрания новых войск; говорил о тяжелом положении населений, о возможности неудач и т. п.