
Сегмент номер 5 является квитанцией на сегмент номер 4, о чем нам сообщает Ethereal,
отметим, что в данном сегменте поле Acknowledged Number принимает относительное значение 12,
что и является квитанцией на полученные 11 байт с номерами от 1 до 11, поле Sequence Number
равно относительной единице, так как сервер ранее еще не передавал клиенту данных, данный
сегмент не содержит полезных данных, а является чистой квитанцией. Аналогично, в сегменте
номер 6 клиент передает серверу еще 9 байт данных, анализатор сообщает нам, что относительный
номер ожидаемого подтверждения – 21. Сегмент 7 является квитанцией на сегмент 6, что видно из
анализа его поля Acknowledged Number – оно равно 21. Аналогично рассматриваем самостоятельно
сегменты 8/9 и 10/11 для окончательного закрепления на практике понимания того, как
используются поля Sequence Number и Acknowledged Number при квитировании.
Теперь рассмотрим пример, в котором можно будет наблюдать объединение квитанций и
полезных данных в одном сегменте. Для наблюдения такого поведения нам понадобится сервер, у
которого появляются данные на отправку клиенту всякий раз, когда от клиента приходят данные – в
таком случае квитанция, отправляемая клиенту может быть объединена с данными, передаваемыми
в том же направлении. Использовать утилиту sock в качестве сервера в данной задаче не удобно,
так как у нее нет режима генерации данных клиенту в момент получения данных от него. Вместо
этого мы воспользуемся еще одной простой службой TCP/IP (аналогичной использованной нами
ранее службе daytime), эта служба называется echo и занимает на сервере хорошо известный порт 7.
Работа данной службы крайне проста – при поступлении произвольных данных в рамках
соединения эти данные должны быть, разумеется, квитированы (это делает не служба, а стек),
служба же должна передать в соединение ТЕ ЖЕ самые байты, которые получены в рамках
соединения. Таким образом, данная служба является хорошим примером для рассмотрения
объединения квитанций и полезных данных в одном сегменте – получение таким сервером данных
от клиента приводит к генерации и квитанции и данных для клиента. Подключимся утилитой sock к
7 порту узла, на котором предварительно проинсталлированы простые службы TCP/IP и передадим
серверу несколько порций данных, проанализируем при этом трафик (файл TCP6.cap).