TCP

Поделись знанием:
(перенаправлено с «Transmission Control Protocol»)
Перейти к: навигация, поиск
TCP
Название:

Transmission Control Protocol

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

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

Семейство:

TCP/IP

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

RFC 793 (сентябрь 1981 года) / [tools.ietf.org/html/std7 STD 7]

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

UNIX, Linux, BSD, Windows

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

Опции

TCP (англ. transmission control protocol — протокол управления передачей) — один из основных протоколов передачи данных интернета, предназначенный для управления передачей данных. Сети и подсети, в которых совместно используются протоколы TCP и IP называются сетями TCP/IP.

В стеке протоколов IP TCP выполняет функции протокола транспортного уровня модели OSI.

Механизм TCP предоставляет поток данных с предварительной установкой соединения, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета, гарантируя тем самым, в отличие от UDP, целостность передаваемых данных и уведомление отправителя о результатах передачи.

Реализации TCP обычно встроены в ядра ОС. Существуют реализации TCP, работающие в пространстве пользователя.

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





Заголовок сегмента TCP

Структура заголовка
Бит 0 — 3 4 — 9 10 — 15 16 — 31
0 Порт источника Порт назначения
32 Порядковый номер
64 Номер подтверждения
96 Длина заголовка Зарезервировано Флаги Размер Окна
128 Контрольная сумма Указатель важности
160 Опции (необязательное, но используется практически всегда)
160/192+ Данные

Порт источника, Порт назначения

Эти 16-битные поля содержат номера портов — числа, которые определяются по специальному списку.

Порт источника идентифицирует приложение клиента, с которого отправлены пакеты. Ответные данные передаются клиенту на основании этого номера.

Порт назначения идентифицирует порт, на который отправлен пакет.

Порядковый номер

Порядковый номер выполняет две задачи:

  1. Если установлен флаг SYN, то это изначальный порядковый номер — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер, равный ISN + 1.
  2. В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот порядковый номер

Поскольку поток TCP в общем случае может быть длиннее, чем число различных состояний этого поля, то все операции с порядковым номером должны выполняться по модулю 232. Это накладывает практическое ограничение на использование TCP. Если скорость передачи коммуникационной системы такова, чтобы в течение MSL (максимального времени жизни сегмента) произошло переполнение порядкового номера, то в сети может появиться два сегмента с одинаковым номером, относящихся к разным частям потока, и приёмник получит некорректные данные.

Номер подтверждения

Если установлен флаг ACK, то это поле содержит порядковый номер, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.

Длина заголовка (смещение данных)

Это поле определяет размер заголовка пакета TCP в 4-байтных (4-октетных) словах. Минимальный размер составляет 5 слов, а максимальный — 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.

Зарезервировано

Зарезервировано (6 бит) для будущего использования и должно устанавливаться в ноль. Из них два (5-й и 6-й) уже определены:

  • CWR (Congestion Window Reduced) — Поле «Окно перегрузки уменьшено» — флаг установлен отправителем, чтобы указать, что получен пакет с установленным флагом ECE (RFC 3168)
  • ECE (ECN-Echo) — Поле «Эхо ECN» — указывает, что данный узел способен на ECN (явное уведомление перегрузки) и для указания отправителю о перегрузках в сети (RFC 3168)

Флаги (управляющие биты)

Это поле содержит 6 битовых флагов:

  • URG — поле «Указатель важности» задействовано (англ. Urgent pointer field is significant)
  • ACK — поле «Номер подтверждения» задействовано (англ. Acknowledgement field is significant)
  • PSH — (англ. Push function) инструктирует получателя протолкнуть данные, накопившиеся в приёмном буфере, в приложение пользователя
  • RST — оборвать соединения, сбросить буфер (очистка буфера) (англ. Reset the connection)
  • SYN — синхронизация номеров последовательности (англ. Synchronize sequence numbers)
  • FIN (англ. final, бит) — флаг, будучи установлен, указывает на завершение соединения (англ. FIN bit used for connection termination).

Размер окна

В этом поле содержится число, определяющее в байтах размер данных, которые отправитель может отправить без получения подтверждения.

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

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

Указатель важности

16-битовое значение положительного смещения от порядкового номера в данном сегменте. Это поле указывает порядковый номер октета, которым заканчиваются важные (urgent) данные. Поле принимается во внимание только для пакетов с установленным флагом URG.

Опции

Могут применяться в некоторых случаях для расширения протокола. Иногда используются для тестирования. На данный момент в опции практически всегда включают 2 байта NOP (в данном случае 0x01) и 10 байт, задающих timestamps. Вычислить длину поля опции можно через значение поля смещения.

Механизм действия протокола

В отличие от традиционной альтернативы — UDP, который может сразу же начать передачу пакетов, TCP устанавливает соединения, которые должны быть созданы перед передачей данных. TCP соединение можно разделить на 3 стадии:

  • Установка соединения
  • Передача данных
  • Завершение соединения

Состояния сеанса TCP

Состояния сеанса TCP
CLOSED Начальное состояние узла. Фактически фиктивное
LISTEN Сервер ожидает запросов установления соединения от клиента
SYN-SENT Клиент отправил запрос серверу на установление соединения и ожидает ответа
SYN-RECEIVED Сервер получил запрос на соединение, отправил ответный запрос и ожидает подтверждения
ESTABLISHED Соединение установлено, идёт передача данных
FIN-WAIT-1 Одна из сторон (назовём её узел-1) завершает соединение, отправив сегмент с флагом FIN
CLOSE-WAIT Другая сторона (узел-2) переходит в это состояние, отправив, в свою очередь сегмент ACK и продолжает одностороннюю передачу
FIN-WAIT-2 Узел-1 получает ACK, продолжает чтение и ждёт получения сегмента с флагом FIN
LAST-ACK Узел-2 заканчивает передачу и отправляет сегмент с флагом FIN
TIME-WAIT Узел-1 получил сегмент с флагом FIN, отправил сегмент с флагом ACK и ждёт 2*MSL секунд, перед окончательным закрытием соединения
CLOSING Обе стороны инициировали закрытие соединения одновременно: после отправки сегмента с флагом FIN узел-1 также получает сегмент FIN, отправляет ACK и находится в ожидании сегмента ACK (подтверждения на свой запрос о разъединении)

Установка соединения

Процесс начала сеанса TCP (также называемый «рукопожатие» (англ. handshake)), состоит из трёх шагов.

1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.

  • Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента.
    • В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED.
    • В случае неудачи сервер посылает клиенту сегмент с флагом RST.

2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.

  • Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED.
  • Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться.
  • Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.

3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.

  • В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.

Процесс называется «трёхэтапным согласованием» (англ. three way handshake), так как несмотря на то что возможен процесс установления соединения с использованием четырёх сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется три сегмента.

Пример базового 3-этапного согласования:

TCP A                                                    TCP B
   1.  CLOSED                                               LISTEN
   2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               --> SYN-RECEIVED
   3.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED
   4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>      --> ESTABLISHED
   5.  ESTABLISHED <-- <SEQ=301><ACK=101><CTL=ACK>      <-- ESTABLISHED

В строке 2 TCP A начинает передачу сегмента SYN, говорящего об использовании номеров последовательности, начиная со 100. В строке 3 TCP B передает SYN и подтверждение для принятого SYN в адрес TCP A. Надо отметить, что поле подтверждения показывает ожидание TCP B приёма номера последовательности 101, подтверждающего SYN с номером 100.

В строке 4 TCP A отвечает пустым сегментом с подтверждением ACK для сегмента SYN от TCP B; в строке 5 TCP B передает некоторые данные. Отметим, что номер подтверждения сегмента в строке 5 (ACK=101) совпадает с номером последовательности в строке 4 (SEQ=101), поскольку ACK не занимает пространства номеров последовательности (если это сделать, придется подтверждать подтверждения — ACK для ACK).

Существуют экспериментальные расширения протокола TCP, сокращающие количество пакетов при установлении соединения, например TCP Fast Open[en]. Ранее также существовало расширение T/TCP. Для прозрачного шифрования данных предлагается использовать расширение tcpcrypt.

Передача данных

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

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

В некоторых случаях передающее приложение может явно затребовать протолкнуть данные до некоторой последовательности принимающему приложению, не буферизируя их. Для этого используется флаг PSH. Если в полученном сегменте обнаруживается флаг PSH, то реализация TCP отдает все буферизированные на текущий момент данные принимающему приложению. «Проталкивание» используется, например, в интерактивных приложениях. В сетевых терминалах нет смысла ожидать ввода пользователя после того, как он закончил набирать команду. Поэтому последний сегмент, содержащий команду, обязан содержать флаг PSH, чтобы приложение на принимающей стороне смогло начать её выполнение.

Завершение соединения

Завершение соединения можно рассмотреть в три этапа:

  1. Посылка серверу от клиента флага FIN на завершение соединения.
  2. Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
  3. После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.

Известные проблемы

Максимальный размер сегмента

TCP требует явного указания максимального размера сегмента (MSS) в случае, если виртуальное соединение осуществляется через сегмент сети, где максимальный размер блока (MTU) менее, чем стандартный MTU Ethernet (1500 байт).

В протоколах туннелирования, таких как GRE, IPIP, а также PPPoE MTU туннель меньше, чем стандартный, поэтому сегмент TCP максимального размера имеет длину пакета больше, чем MTU. Это приводит к фрагментации и уменьшению скорости передачи полезных данных. Если на каком-либо узле фрагментация запрещена, то со стороны пользователя это выглядит как «зависание» соединений. При этом «зависание» может происходить в произвольные моменты времени, а именно тогда, когда отправитель использовал сегменты длиннее допустимого размера. Для решения этой проблемы на маршрутизаторах применяются правила Firewall-а, добавляющие параметр MSS во все пакеты, инициирующие соединения, чтобы отправитель использовал сегменты допустимого размера.

MSS может также управляться параметрами операционной системы.

Обнаружение ошибок при передаче данных

Хотя протокол осуществляет проверку контрольной суммы по каждому сегменту, используемый алгоритм считается слабым [portal.acm.org/citation.cfm?doid=347059.347561]. Так, в 2008 году ошибка в передаче одного бита, не обнаруженная сетевыми средствами, привела к остановке серверов системы Amazon Web Services [status.aws.amazon.com/s3-20080720.html].

В общем случае распределенным сетевым приложениям рекомендуется использовать дополнительные программные средства для гарантирования целостности передаваемой информации[evanjones.ca/tcp-checksums.html].

Атаки на протокол

Недостатки протокола проявляются в успешных теоретических и практических атаках, при которых злоумышленник может получить доступ к передаваемым данным, выдать себя за другую сторону или привести систему в нерабочее состояние.

Реализация

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

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

TCP-псевдозаголовок IPv4

Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0-31 IP-адрес отправителя (Source address)
32-63 IP-адрес получателя (Destination address)
64-95 0 0 0 0 0 0 0 0 Протокол (Protocol) Длина TCP-сегмента (TCP length)

TCP-псевдозаголовок IPv6

Биты 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0-96 IP-адрес отправителя (Source address)
128-224 IP-адрес получателя (Destination address)
256 Длина TCP-сегмента (TCP length)
288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Протокол верхнего уровня (Next header)
  • Протокол (Protocol)/Протокол верхнего уровня (Next header) — содержит в себе значение 6 (00000110 в двоичном виде, 0x6 — в шестнадцатеричном) — идентификатор TCP-протокола.
  • Длина TCP-сегмента (TCP length) — содержит в себе длину TCP-сегмента в байтах (TCP-заголовок + данные; длина псевдозаголовка не учитывается).

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

Освобождение от расчёта контрольной суммы

Многие реализации стека TCP/IP предоставляют возможности использования аппаратной поддержки для автоматического расчёта контрольной суммы в сетевом адаптере до передачи в сеть или после приёма из сети для верификации. Это может освобождать операционную систему от использования ценных тактов процессора при вычислении контрольной суммы.

Эта функция может приводить к тому, что анализаторы трафика, перехватывающие исходящие пакеты до их передачи в сетевой адаптер и не знающие о делегировании расчёта контрольной суммы сетевому адаптеру, могут сообщать об ошибке контрольной суммы в исходящих пакетах.

См. также

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

Ссылки

  • RFC 793 (англ.) — Transmission Control Protocol
  • [rfc.com.ru/rfc793.htm RFC 793 на русском]
  • [www.citforum.ru/internet/tifamily/tcpspec.shtml Спецификация протокола TCP]

Литература

  • Терри Оглтри. Модернизация и ремонт сетей = Upgrading and Repairing Networks. — 4-е изд. — М.: «Вильямс», 2005. — С. 1328. — ISBN 0-7897-2817-6.
  • Дуглас Камер. Сети TCP/IP, том 1. Принципы, протоколы и структура = Internetworking with TCP/IP, Vol. 1: Principles, Protocols and Architecture. — М.: «Вильямс», 2003. — С. 880. — ISBN 0-13-018380-6.
  • Андрей Робачевский, Сергей Немнюгин, Ольга Стесик. Операционная система UNIX. — 2-е изд. — "БХВ-Петербург", 2007. — С. 656. — ISBN 5-94157-538-6.


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

За сараем послышались голоса.
– Кто там? – окликнул князь Андрей.
Красноносый капитан Тимохин, бывший ротный командир Долохова, теперь, за убылью офицеров, батальонный командир, робко вошел в сарай. За ним вошли адъютант и казначей полка.
Князь Андрей поспешно встал, выслушал то, что по службе имели передать ему офицеры, передал им еще некоторые приказания и сбирался отпустить их, когда из за сарая послышался знакомый, пришепетывающий голос.
– Que diable! [Черт возьми!] – сказал голос человека, стукнувшегося обо что то.
Князь Андрей, выглянув из сарая, увидал подходящего к нему Пьера, который споткнулся на лежавшую жердь и чуть не упал. Князю Андрею вообще неприятно было видеть людей из своего мира, в особенности же Пьера, который напоминал ему все те тяжелые минуты, которые он пережил в последний приезд в Москву.
– А, вот как! – сказал он. – Какими судьбами? Вот не ждал.
В то время как он говорил это, в глазах его и выражении всего лица было больше чем сухость – была враждебность, которую тотчас же заметил Пьер. Он подходил к сараю в самом оживленном состоянии духа, но, увидав выражение лица князя Андрея, он почувствовал себя стесненным и неловким.
– Я приехал… так… знаете… приехал… мне интересно, – сказал Пьер, уже столько раз в этот день бессмысленно повторявший это слово «интересно». – Я хотел видеть сражение.
– Да, да, а братья масоны что говорят о войне? Как предотвратить ее? – сказал князь Андрей насмешливо. – Ну что Москва? Что мои? Приехали ли наконец в Москву? – спросил он серьезно.
– Приехали. Жюли Друбецкая говорила мне. Я поехал к ним и не застал. Они уехали в подмосковную.


Офицеры хотели откланяться, но князь Андрей, как будто не желая оставаться с глазу на глаз с своим другом, предложил им посидеть и напиться чаю. Подали скамейки и чай. Офицеры не без удивления смотрели на толстую, громадную фигуру Пьера и слушали его рассказы о Москве и о расположении наших войск, которые ему удалось объездить. Князь Андрей молчал, и лицо его так было неприятно, что Пьер обращался более к добродушному батальонному командиру Тимохину, чем к Болконскому.
– Так ты понял все расположение войск? – перебил его князь Андрей.
– Да, то есть как? – сказал Пьер. – Как невоенный человек, я не могу сказать, чтобы вполне, но все таки понял общее расположение.
– Eh bien, vous etes plus avance que qui cela soit, [Ну, так ты больше знаешь, чем кто бы то ни было.] – сказал князь Андрей.
– A! – сказал Пьер с недоуменьем, через очки глядя на князя Андрея. – Ну, как вы скажете насчет назначения Кутузова? – сказал он.
– Я очень рад был этому назначению, вот все, что я знаю, – сказал князь Андрей.
– Ну, а скажите, какое ваше мнение насчет Барклая де Толли? В Москве бог знает что говорили про него. Как вы судите о нем?
– Спроси вот у них, – сказал князь Андрей, указывая на офицеров.
Пьер с снисходительно вопросительной улыбкой, с которой невольно все обращались к Тимохину, посмотрел на него.
– Свет увидали, ваше сиятельство, как светлейший поступил, – робко и беспрестанно оглядываясь на своего полкового командира, сказал Тимохин.
– Отчего же так? – спросил Пьер.
– Да вот хоть бы насчет дров или кормов, доложу вам. Ведь мы от Свенцян отступали, не смей хворостины тронуть, или сенца там, или что. Ведь мы уходим, ему достается, не так ли, ваше сиятельство? – обратился он к своему князю, – а ты не смей. В нашем полку под суд двух офицеров отдали за этакие дела. Ну, как светлейший поступил, так насчет этого просто стало. Свет увидали…
– Так отчего же он запрещал?
Тимохин сконфуженно оглядывался, не понимая, как и что отвечать на такой вопрос. Пьер с тем же вопросом обратился к князю Андрею.
– А чтобы не разорять край, который мы оставляли неприятелю, – злобно насмешливо сказал князь Андрей. – Это очень основательно; нельзя позволять грабить край и приучаться войскам к мародерству. Ну и в Смоленске он тоже правильно рассудил, что французы могут обойти нас и что у них больше сил. Но он не мог понять того, – вдруг как бы вырвавшимся тонким голосом закричал князь Андрей, – но он не мог понять, что мы в первый раз дрались там за русскую землю, что в войсках был такой дух, какого никогда я не видал, что мы два дня сряду отбивали французов и что этот успех удесятерял наши силы. Он велел отступать, и все усилия и потери пропали даром. Он не думал об измене, он старался все сделать как можно лучше, он все обдумал; но от этого то он и не годится. Он не годится теперь именно потому, что он все обдумывает очень основательно и аккуратно, как и следует всякому немцу. Как бы тебе сказать… Ну, у отца твоего немец лакей, и он прекрасный лакей и удовлетворит всем его нуждам лучше тебя, и пускай он служит; но ежели отец при смерти болен, ты прогонишь лакея и своими непривычными, неловкими руками станешь ходить за отцом и лучше успокоишь его, чем искусный, но чужой человек. Так и сделали с Барклаем. Пока Россия была здорова, ей мог служить чужой, и был прекрасный министр, но как только она в опасности; нужен свой, родной человек. А у вас в клубе выдумали, что он изменник! Тем, что его оклеветали изменником, сделают только то, что потом, устыдившись своего ложного нарекания, из изменников сделают вдруг героем или гением, что еще будет несправедливее. Он честный и очень аккуратный немец…
– Однако, говорят, он искусный полководец, – сказал Пьер.
– Я не понимаю, что такое значит искусный полководец, – с насмешкой сказал князь Андрей.
– Искусный полководец, – сказал Пьер, – ну, тот, который предвидел все случайности… ну, угадал мысли противника.
– Да это невозможно, – сказал князь Андрей, как будто про давно решенное дело.
Пьер с удивлением посмотрел на него.
– Однако, – сказал он, – ведь говорят же, что война подобна шахматной игре.
– Да, – сказал князь Андрей, – только с тою маленькою разницей, что в шахматах над каждым шагом ты можешь думать сколько угодно, что ты там вне условий времени, и еще с той разницей, что конь всегда сильнее пешки и две пешки всегда сильнее одной, a на войне один батальон иногда сильнее дивизии, а иногда слабее роты. Относительная сила войск никому не может быть известна. Поверь мне, – сказал он, – что ежели бы что зависело от распоряжений штабов, то я бы был там и делал бы распоряжения, а вместо того я имею честь служить здесь, в полку вот с этими господами, и считаю, что от нас действительно будет зависеть завтрашний день, а не от них… Успех никогда не зависел и не будет зависеть ни от позиции, ни от вооружения, ни даже от числа; а уж меньше всего от позиции.
– А от чего же?
– От того чувства, которое есть во мне, в нем, – он указал на Тимохина, – в каждом солдате.
Князь Андрей взглянул на Тимохина, который испуганно и недоумевая смотрел на своего командира. В противность своей прежней сдержанной молчаливости князь Андрей казался теперь взволнованным. Он, видимо, не мог удержаться от высказывания тех мыслей, которые неожиданно приходили ему.
– Сражение выиграет тот, кто твердо решил его выиграть. Отчего мы под Аустерлицем проиграли сражение? У нас потеря была почти равная с французами, но мы сказали себе очень рано, что мы проиграли сражение, – и проиграли. А сказали мы это потому, что нам там незачем было драться: поскорее хотелось уйти с поля сражения. «Проиграли – ну так бежать!» – мы и побежали. Ежели бы до вечера мы не говорили этого, бог знает что бы было. А завтра мы этого не скажем. Ты говоришь: наша позиция, левый фланг слаб, правый фланг растянут, – продолжал он, – все это вздор, ничего этого нет. А что нам предстоит завтра? Сто миллионов самых разнообразных случайностей, которые будут решаться мгновенно тем, что побежали или побегут они или наши, что убьют того, убьют другого; а то, что делается теперь, – все это забава. Дело в том, что те, с кем ты ездил по позиции, не только не содействуют общему ходу дел, но мешают ему. Они заняты только своими маленькими интересами.
– В такую минуту? – укоризненно сказал Пьер.
– В такую минуту, – повторил князь Андрей, – для них это только такая минута, в которую можно подкопаться под врага и получить лишний крестик или ленточку. Для меня на завтра вот что: стотысячное русское и стотысячное французское войска сошлись драться, и факт в том, что эти двести тысяч дерутся, и кто будет злей драться и себя меньше жалеть, тот победит. И хочешь, я тебе скажу, что, что бы там ни было, что бы ни путали там вверху, мы выиграем сражение завтра. Завтра, что бы там ни было, мы выиграем сражение!
– Вот, ваше сиятельство, правда, правда истинная, – проговорил Тимохин. – Что себя жалеть теперь! Солдаты в моем батальоне, поверите ли, не стали водку, пить: не такой день, говорят. – Все помолчали.
Офицеры поднялись. Князь Андрей вышел с ними за сарай, отдавая последние приказания адъютанту. Когда офицеры ушли, Пьер подошел к князю Андрею и только что хотел начать разговор, как по дороге недалеко от сарая застучали копыта трех лошадей, и, взглянув по этому направлению, князь Андрей узнал Вольцогена с Клаузевицем, сопутствуемых казаком. Они близко проехали, продолжая разговаривать, и Пьер с Андреем невольно услыхали следующие фразы:
– Der Krieg muss im Raum verlegt werden. Der Ansicht kann ich nicht genug Preis geben, [Война должна быть перенесена в пространство. Это воззрение я не могу достаточно восхвалить (нем.) ] – говорил один.
– O ja, – сказал другой голос, – da der Zweck ist nur den Feind zu schwachen, so kann man gewiss nicht den Verlust der Privatpersonen in Achtung nehmen. [О да, так как цель состоит в том, чтобы ослабить неприятеля, то нельзя принимать во внимание потери частных лиц (нем.) ]
– O ja, [О да (нем.) ] – подтвердил первый голос.
– Да, im Raum verlegen, [перенести в пространство (нем.) ] – повторил, злобно фыркая носом, князь Андрей, когда они проехали. – Im Raum то [В пространстве (нем.) ] у меня остался отец, и сын, и сестра в Лысых Горах. Ему это все равно. Вот оно то, что я тебе говорил, – эти господа немцы завтра не выиграют сражение, а только нагадят, сколько их сил будет, потому что в его немецкой голове только рассуждения, не стоящие выеденного яйца, а в сердце нет того, что одно только и нужно на завтра, – то, что есть в Тимохине. Они всю Европу отдали ему и приехали нас учить – славные учители! – опять взвизгнул его голос.
– Так вы думаете, что завтрашнее сражение будет выиграно? – сказал Пьер.
– Да, да, – рассеянно сказал князь Андрей. – Одно, что бы я сделал, ежели бы имел власть, – начал он опять, – я не брал бы пленных. Что такое пленные? Это рыцарство. Французы разорили мой дом и идут разорить Москву, и оскорбили и оскорбляют меня всякую секунду. Они враги мои, они преступники все, по моим понятиям. И так же думает Тимохин и вся армия. Надо их казнить. Ежели они враги мои, то не могут быть друзьями, как бы они там ни разговаривали в Тильзите.
– Да, да, – проговорил Пьер, блестящими глазами глядя на князя Андрея, – я совершенно, совершенно согласен с вами!
Тот вопрос, который с Можайской горы и во весь этот день тревожил Пьера, теперь представился ему совершенно ясным и вполне разрешенным. Он понял теперь весь смысл и все значение этой войны и предстоящего сражения. Все, что он видел в этот день, все значительные, строгие выражения лиц, которые он мельком видел, осветились для него новым светом. Он понял ту скрытую (latente), как говорится в физике, теплоту патриотизма, которая была во всех тех людях, которых он видел, и которая объясняла ему то, зачем все эти люди спокойно и как будто легкомысленно готовились к смерти.
– Не брать пленных, – продолжал князь Андрей. – Это одно изменило бы всю войну и сделало бы ее менее жестокой. А то мы играли в войну – вот что скверно, мы великодушничаем и тому подобное. Это великодушничанье и чувствительность – вроде великодушия и чувствительности барыни, с которой делается дурнота, когда она видит убиваемого теленка; она так добра, что не может видеть кровь, но она с аппетитом кушает этого теленка под соусом. Нам толкуют о правах войны, о рыцарстве, о парламентерстве, щадить несчастных и так далее. Все вздор. Я видел в 1805 году рыцарство, парламентерство: нас надули, мы надули. Грабят чужие дома, пускают фальшивые ассигнации, да хуже всего – убивают моих детей, моего отца и говорят о правилах войны и великодушии к врагам. Не брать пленных, а убивать и идти на смерть! Кто дошел до этого так, как я, теми же страданиями…
Князь Андрей, думавший, что ему было все равно, возьмут ли или не возьмут Москву так, как взяли Смоленск, внезапно остановился в своей речи от неожиданной судороги, схватившей его за горло. Он прошелся несколько раз молча, но тлаза его лихорадочно блестели, и губа дрожала, когда он опять стал говорить:
– Ежели бы не было великодушничанья на войне, то мы шли бы только тогда, когда стоит того идти на верную смерть, как теперь. Тогда не было бы войны за то, что Павел Иваныч обидел Михаила Иваныча. А ежели война как теперь, так война. И тогда интенсивность войск была бы не та, как теперь. Тогда бы все эти вестфальцы и гессенцы, которых ведет Наполеон, не пошли бы за ним в Россию, и мы бы не ходили драться в Австрию и в Пруссию, сами не зная зачем. Война не любезность, а самое гадкое дело в жизни, и надо понимать это и не играть в войну. Надо принимать строго и серьезно эту страшную необходимость. Всё в этом: откинуть ложь, и война так война, а не игрушка. А то война – это любимая забава праздных и легкомысленных людей… Военное сословие самое почетное. А что такое война, что нужно для успеха в военном деле, какие нравы военного общества? Цель войны – убийство, орудия войны – шпионство, измена и поощрение ее, разорение жителей, ограбление их или воровство для продовольствия армии; обман и ложь, называемые военными хитростями; нравы военного сословия – отсутствие свободы, то есть дисциплина, праздность, невежество, жестокость, разврат, пьянство. И несмотря на то – это высшее сословие, почитаемое всеми. Все цари, кроме китайского, носят военный мундир, и тому, кто больше убил народа, дают большую награду… Сойдутся, как завтра, на убийство друг друга, перебьют, перекалечат десятки тысяч людей, а потом будут служить благодарственные молебны за то, что побили много люден (которых число еще прибавляют), и провозглашают победу, полагая, что чем больше побито людей, тем больше заслуга. Как бог оттуда смотрит и слушает их! – тонким, пискливым голосом прокричал князь Андрей. – Ах, душа моя, последнее время мне стало тяжело жить. Я вижу, что стал понимать слишком много. А не годится человеку вкушать от древа познания добра и зла… Ну, да не надолго! – прибавил он. – Однако ты спишь, да и мне пера, поезжай в Горки, – вдруг сказал князь Андрей.
– О нет! – отвечал Пьер, испуганно соболезнующими глазами глядя на князя Андрея.
– Поезжай, поезжай: перед сраженьем нужно выспаться, – повторил князь Андрей. Он быстро подошел к Пьеру, обнял его и поцеловал. – Прощай, ступай, – прокричал он. – Увидимся ли, нет… – и он, поспешно повернувшись, ушел в сарай.
Было уже темно, и Пьер не мог разобрать того выражения, которое было на лице князя Андрея, было ли оно злобно или нежно.
Пьер постоял несколько времени молча, раздумывая, пойти ли за ним или ехать домой. «Нет, ему не нужно! – решил сам собой Пьер, – и я знаю, что это наше последнее свидание». Он тяжело вздохнул и поехал назад в Горки.
Князь Андрей, вернувшись в сарай, лег на ковер, но не мог спать.
Он закрыл глаза. Одни образы сменялись другими. На одном он долго, радостно остановился. Он живо вспомнил один вечер в Петербурге. Наташа с оживленным, взволнованным лицом рассказывала ему, как она в прошлое лето, ходя за грибами, заблудилась в большом лесу. Она несвязно описывала ему и глушь леса, и свои чувства, и разговоры с пчельником, которого она встретила, и, всякую минуту прерываясь в своем рассказе, говорила: «Нет, не могу, я не так рассказываю; нет, вы не понимаете», – несмотря на то, что князь Андрей успокоивал ее, говоря, что он понимает, и действительно понимал все, что она хотела сказать. Наташа была недовольна своими словами, – она чувствовала, что не выходило то страстно поэтическое ощущение, которое она испытала в этот день и которое она хотела выворотить наружу. «Это такая прелесть был этот старик, и темно так в лесу… и такие добрые у него… нет, я не умею рассказать», – говорила она, краснея и волнуясь. Князь Андрей улыбнулся теперь той же радостной улыбкой, которой он улыбался тогда, глядя ей в глаза. «Я понимал ее, – думал князь Андрей. – Не только понимал, но эту то душевную силу, эту искренность, эту открытость душевную, эту то душу ее, которую как будто связывало тело, эту то душу я и любил в ней… так сильно, так счастливо любил…» И вдруг он вспомнил о том, чем кончилась его любовь. «Ему ничего этого не нужно было. Он ничего этого не видел и не понимал. Он видел в ней хорошенькую и свеженькую девочку, с которой он не удостоил связать свою судьбу. А я? И до сих пор он жив и весел».
Князь Андрей, как будто кто нибудь обжег его, вскочил и стал опять ходить перед сараем.


25 го августа, накануне Бородинского сражения, префект дворца императора французов m r de Beausset и полковник Fabvier приехали, первый из Парижа, второй из Мадрида, к императору Наполеону в его стоянку у Валуева.
Переодевшись в придворный мундир, m r de Beausset приказал нести впереди себя привезенную им императору посылку и вошел в первое отделение палатки Наполеона, где, переговариваясь с окружавшими его адъютантами Наполеона, занялся раскупориванием ящика.
Fabvier, не входя в палатку, остановился, разговорясь с знакомыми генералами, у входа в нее.
Император Наполеон еще не выходил из своей спальни и оканчивал свой туалет. Он, пофыркивая и покряхтывая, поворачивался то толстой спиной, то обросшей жирной грудью под щетку, которою камердинер растирал его тело. Другой камердинер, придерживая пальцем склянку, брызгал одеколоном на выхоленное тело императора с таким выражением, которое говорило, что он один мог знать, сколько и куда надо брызнуть одеколону. Короткие волосы Наполеона были мокры и спутаны на лоб. Но лицо его, хоть опухшее и желтое, выражало физическое удовольствие: «Allez ferme, allez toujours…» [Ну еще, крепче…] – приговаривал он, пожимаясь и покряхтывая, растиравшему камердинеру. Адъютант, вошедший в спальню с тем, чтобы доложить императору о том, сколько было во вчерашнем деле взято пленных, передав то, что нужно было, стоял у двери, ожидая позволения уйти. Наполеон, сморщась, взглянул исподлобья на адъютанта.