1. Захват потока TCP передачи с вашего компьютера на удалённый сервер. Прежде чем начать наше исследование TCP, нам необходимо с помощью Wireshark получить трассировку пакетов TCP передачи файла с вашего компьютера на удалённый сервер. Вы можете это сделать путём входа на веб-страницу, которая позволит вам ввести имя файла, сохранённого на вашем компьютере(который содержит ASCII текст книги «Алиса в стране чудес»), и затем передать файл на веб-сервер используя HTTP метод POST (смотрите раздел 2.2.3 этого пособия). Мы будем использовать метод POST чаще, чем метод GET, так как нам необходимо передать большой объём данных с вашего компьютера на другой компьютер. Естественно, Wireshark должен быть запущен на протяжении всего времени выполнения для получения трассировки TCP сегментов отправленных и полученных вашим компьютером. Что необходимо сделать: Запустите свой браузер. Перейдите по адресу http://gaia.cs.umass.edu/wiresharklabs/alice.txt и найдите там ASCII копию текста книги «Алиса в стране чудес». Сохраните этот фаил где-нибудь на вашем компьютере. Далее перейдите на http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html. Вы должны увидеть изображение похожее на это Используйте кнопку Browse данной формы, чтобы указать имя файла (полный путь к файлу) на вашем компьютере содержащего текст «Алисы в стране чудес» (или введите его вручную) (На деле есть только кнопка «Choose file» без поля ввода – прим. авт.). Пока что не нажимайте кнопку «Upload alice.txt file». Теперь запустите Wireshark и начните захват пакетов (Capture -> Options)и затем нажмите OK в окне Wireshark с параметрами захвата пакетов (здесь не нужно выбирать какие-либо опции) Переключитесь на браузер, нажмите кнопку «Upload alice.txt file» для загрузки файла на сервер gaia.cs.umass.edu. После того, как файл загрузится, в окне вашего браузера отобразится короткое сообщение с поздравлениями. Остановите захват пакетов в Wireshark. Ваше окно Wireshark должно выглядеть аналогично тому, что показано на изображении ниже. Если у вас нет возможности запустить Wireshark при работающем интернет соединении, то вы можете скачать файл трассировки пакетов, который был записан при выполнении вышеописанных шагов на одном из компьютеров2 автора статьи. Вы можете скачать эту трассировку, даже если вы записали свой собственный файл трассировки, и использовать его, как свой собственный, когда вы будете изучать вопросы, находящиеся ниже. _____________________________________________________________________________________________________________________________________ Загрузите zip-файл http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip и распакуйте файл tcp-ethereal-trace-1. Трассировки в этом архиве были получены через Wireshark, запущенный на одном из компьютеров автора статьи, во время выполнения шагов, указанных в лабораторной работе по Wireshark. После того, как вы скачаете файл трассировки, вы можете загрузить его в Wireshark и посмотреть трассировку, с помощью выпадающего меню File, выбрав пункт Open, и затем выбрав файл трассировки tcp-ethereal-trace-1. 2 2. Первый взгляд на сохранённую трассировку. Прежде чем детально анализировать поведение TCP соединения, давайте приобретём навыки просмотра трассировки. Первое это фильтр пакетов, отображающийся в окне Wireshark’a путём ввода «tcp» (в нижнем регистре, без кавычек, и не забудьте нажать return после ввода!) в окно параметров фильтра в верхней части окна Wireshark. То, что вы должны увидеть это серия TCP и HTTP сообщений между вашим компьютером и gaia.cs.umass.edu. Вы должны увидеть начальное тройное рукопожатие, включающее SYN сообщение. Вы должны увидеть HTTP сообщение POST и серию «HTTP Continuation» сообщений, которые были отправлены с вашего компьютера на gaia.cs.umass.edu. Вспоминая предыдущую лабораторную работу по Wireshark, стоит отметить, что не существует такого понятия, как «HTTP Continuation» сообщение – это способ Wireshark’а отобразить, что множество TCP сегментов используются для передачи одного HTTP сообщения. Вы также должны увидеть TCP ACK сегменты возвращающиеся от gaia.cs.umass.edu вашему компьютеру. Ответьте на вопросы указанные ниже, открыв сохранённый пакетный файл tcpetherealtrace-1 в архиве http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip (скачайте эту трассировку и откройте её в Wireshark; смотреть примечание 2). Когда это возможно, во время ответов на вопросы вам следует сохранять распечатку пакета(ов) в трассировке, которую вы использовали для ответа на заданный вопрос. Прокомментируйте распечатку для объяснения вашего ответа. Чтобы распечать пакет, выберите File->Print, затем Selected packet only, затем Packet summary line и выберите минимальное количество деталей пакета, которые вам необходимы для ответа. 1. Каков IP-адрес и номер TCP порта, использованные клиентским компьютером (источник), который передаёт файл на gaia.cs.umass.edu? Для ответа на этот вопрос, возможно, проще всего будет выбрать HTTP-сообщение и изучить детали TCP пакета, использованного для передачи этого HTTP-сообщения, с помощью окна «детали выбранного заголовка» (обратитесь к Главе 2 в лабораторной работе «Начинаем работу с Wireshark», если вы, что-либо не поняли об окнах Wireshark’a). 2. Каков IP-адрес gaia.cs.umass.edu? На каком номере порта он отправляет и получает TCP сегменты для этого соединения? Если вы создали свою собственную трассировку, ответьте на следующий вопрос: 3. Каков IP-адрес и номер TCP порта, использованные вашим клиентским компьютером (источник) для передачи файла на gaia.cs.umass.edu? Начиная с этой лабораторной работы речь будет вестись больше о TCP, чем о HTTP, поэтому давайте изменим окно Wireshark’а «listing of captured packets» так, чтобы оно показывало информацию о TCP сегментах, содержащих HTTP-сообщения, а не только о HTTP-сообщениях. Для этого выберите Analyze -> Enabled Protocols. Затем уберите галочку с поля HTTP и нажмите OK. После этого вы должны увидеть, что окно Wireshark’а выглядит так: Это то, чего мы добивались – серии передачи TCP сегментов между вашим компьютером и gaia.cs.umass.edu. В оставшейся части лабораторной работы мы будем использовать пакетную трассировку, которую вы сохранили (и/или пакетную трассировку tcp-etherealtrace-1 в http://gaia.cs.umass.edu/wireshark-labs/wiresharktraces.zip; смотрите примечание 2) для изучения поведения TCP. 3. Основы TCP Ответьте на следующие вопросы о TCP сегментах: 4. Каков порядковый номер TCP SYN сегмента, используемого для инициации TCP соединения между клиентским компьютером и gaia.cs.umass.edu? Что в сегменте определяет его, как SYN сегмент? 5. Каков порядковый номер SYNACK сегмента переданного gaia.cs.umass.edu клиентскому компьютеру в ответ на SYN? Каково значение поля ACKnowledgement (ACK, подтверждения) в SYNACK сегменте? Как gaia.cs.umass.edu определяет это значение? Что внутри сегмента определяет его, как SYNACK сегмент? 6. Каков порядковый номер TCP сегмента, содержащего HTTP команду POST? Обратите внимание, для того чтобы найти команду POST, вам необходимо обратится к окну деталей заголовка и искать запись со значение POST в поле данных. 7. Рассмотрим сегмент, содержащий HTTP POST, как первый сегмент в TCP соединении. Каковы первые 6 порядковых номеров сегментов (включая сегмент с HTTP POST)? В какое время эти сегменты были отправлены? Где получается ACK для каждого сегмента? Объясните разницу между тем, когда отправляется TCP сегмент, а когда принимается ACK. Каково значение RTT для каждого сегмента? Вычислите значение EstimatedRTT, равное измеренному RTT для первого сегмента, для всех последующих сегментов. Примечание: В Wireshark есть отличный инструмент, позволяющий показать RTT на графике для каждого отправленного TCP-сегмента. Выберите TCP сегмент в окне «listing of captured packets», который отправлен от пользователя на сервер gaia.cs.umass.edu. Затем выберите Statistics->TCP Stream Graph-> Round Trip Time Graph. 8. Какова длина каждого из первых 6 TCP сегментов?3 9. Какое минимальное количество доступного буферного пространства заявлено целиком для всей трассировки? Всегда ли отсутствие буферного пространства приёмника регулирует передачу? 10. Есть ли какие-то повторно переданные сегменты в этом трэйс файле? Что вы проверяли (в трассировке), когда давали ответ на этот вопрос? 11. Как много данных приёмник подтверждает в ACK? Можете привести пример, где приёмник посылает сигнал ACK каждому принятому сегменту? 12. Какова пропускная способность (байты, переданные в единицу времени) TCP соединения. Объясните, как вы вычислили это значение. _______________________________________________________________________ Размер всех TCP-сегментов в файле tcp-etheteal-trace-1 менее 1460 байт. Это потому что в компьютере, на котором была получена трассировка, используется сетевая карта Ethernet, которая ограничивает максимальную длину, передаваемого по IP пакета, 1500 байтами (40 байтов TCP/IP данных заголовка и 1460 байт 1460 байт полезных данных). Это стандартная максимальная длина, разрешённая в Ethernet. Если в вашей трассировке отображает длину TCP сегмента более 1500 байт, и вашем компьютере используется Ethernet соединение, значит, Wireshark некорректно отображает длину TCP сегмента; скорее всего он также будет показывать только один большой TCP сегмент, а не множество более мелких сегментов. Ваш компьютер на самом деле, возможно, отправляет множество небольших сегментов, как указано в сигналах ACK, которые он получает. Это несоответствие в указанной длине сегмента возникает связано с взаимодействием между Ethernet драйвером и программой Wireshark. В случае возникновения такого несоответствия, мы вам рекомендуем использовать предоставленный файл трассировки. 3 4. TCP контроль перегрузки в действии. Давайте теперь исследуем количество данных отправленных в единицу времени от пользователя серверу. Вместо того, чтобы вычислять его с помощью исходных данных в окне Wireshark’a, мы будем использовать одну из Wireshark TCP графических утилит – Time-Sequence-Graph(Stevens) – для отображения данных на графике. Выберите TCP сегмент в окне Wireshark «listing of captured-packets». Затем выберите пункт меню: Statistics -> TCP Stream Graph -> Time-SequenceGraph(Stevens). Вы должны увидеть график, который выглядит, примерно, как график ниже, который отображает данные пакетов в трассировке tcp-ethereal-trace-1 в http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip (смотрите примечание 2): Здесь, каждая точка представляет собой отправленный TCP сегмент, графическое представление порядкового номера сегмента относительно времени его отправки. Обратите внимание на то, что точки, поставленные друг над другом, представляют собой ряд пакетов, которые были отправлены один за другим. Ответьте на нижеописанные вопросы о TCP сегментах трассировки tcp-ethereal-trace-1 в http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 13. Используйте инструмент построения графиков Time-Sequence-Graph(Stevens), чтобы просмотреть зависимость порядкового номера ко времени относительно сегментов отправленных от пользователя на сервер gaia.cs.umass.edu. Можете ли вы определить, где начинается и заканчивается фаза медленного старта, и где, начинается избежание перегрузки? Прокомментируйте отличия измеренных данных от предполагаемых при идеальном поведении TCP, которое мы изучали в статье. 14. Ответьте на каждый из двух заданных выше вопросов относительно трассировки полученной при передаче файла с вашего компьютера на gaia.cs.umass.edu.