щаться к медленному пуску). Значение 2 используется для сокращения окна из-за ECN признака. Оно сбрасывает окно перегрузки к его начальному значению (обычно обусловленным медленным пуском), но не изменяет ssthresh_.
Функции для обработки ACK
recv () - эта функция - основной путь приема для ACK. Обратите внимание, что, так как используется только одно направление потока данных, эта функция должна вызываться только с чистым ACK пакетом (то есть без каких-либо данных). Функция хранит метку времени от ACK в ts_peer _, и проверяет присутствие ECN бита (сокращающего окно отправителя, если назначен). Если ACK - новый ACK, она вызывает newack (), а иначе проверяет наблюдением, является ли он копией последнего замеченного ACK. Если это так, вводит быструю повторную передачу, закрывая окно, сбрасывая таймер повторной передачи и посылая пакет вызовом send_much.
newack () - эта функция обрабатывает "новый" ACK (тот, который содержит номер ACK выше, чем любой замеченный прежде). Функция устанавливает новый таймер повторной передачи, вызывая newtimer (), обновляет оценку RTT, вызывая rtt_update, и обновляет(модифицирует) самые высокие и последние ACK переменные.
Функции для управления таймером повторной передачи Эти функциями служат двум целям: оценке времени кругооборота и установке таймера фактической повторной передачи. rtt_init - эта функция инициализирует srtt_ и rtt_ к нулю, устанавливает rttvar_ в 3/tcp_tick _ и устанавливает множитель backoff в 1.
rtt_timeout - эта функция задает значение таймаута в секундах, которое должны использоваться, чтобы наметить следующий таймер повторной передачи. Она вычисляет это на основании текущих оценок средних значений и отклонений времени кругооборота. Кроме того, она осуществляет возврат экспоненциального таймера Карна для многократных последовательных таймаутов повторной передачи.
rtt_update - эта функция в качестве аргумента берет измеренный RTT и усредняет его для выполнения оценки среднего и отклонения согласно описанию выше. Обратите внимание, что t_srtt_ и t_rttvar оба сохранены с фиксированной точкой (целые
51
числа). Они имеют, соответственно, 3 и 2 бита справа от двоичной точки.
reset_rtx_timer – Эта функция вызывается в течение быстрой повторной передачи или в течение таймаута. Она устанавливает таймер повторной передачи, вызывая set_rtx_timer, и, если вызвано таймаутом, также вызывает rtt_backoff.
rtt_backoff - эта функция возвращает таймер повторной передачи (удваивая его).
newtimer - эта функция вызываема только когда прибывает новый ACK. Если левый край окна отправителя - вне ACK, то вызывается set_rtx_timer, иначе она отменяется, если таймер повторной передачи в ожидании.
Отслеживание динамики TCP
Поведение TCP часто наблюдается созданием графика в координатах: номер последовательности – время. Обычно выполненная трассировка допускает отслеживание на соединении, по которому пройдут пакеты TCP. Поддержаны два метода отслеживания: заданный по умолчанию (используемый для рассмотрения агентов TCP), и расширенный, используемый только для
FullTcP.
Трассировка динамики одностороннего TCP Пакеты TCP, сформированные одним из однонаправленных агентов TCP и предназначенные для агента TCP sink, прошедшие через отслеживаемое соединение, выработают строки файла трассировки в формате:
+0.94176 2 3 tcp 1000 ------ 0 0.0 3.0 25 40
+0.94276 2 3 tcp 1000 ------ 0 0.0 3.0 26 41 d 0.94276 2 3 tcp 1000 ------ 0 0.0 3.0 26 41
+0.95072 2 0 ack 40 ------ 0 3.0 0.0 14 29
-0.95072 2 0 ack 40 ------ 0 3.0 0.0 14 29
-0.95176 2 3 tcp 1000 ------ 0 0.0 3.0 21 36
+ 0.95176 2 3 tcp 1000 ------ 0 0.0 3.0 27 42
Точный формат этого файла следа дается в разделе 26.4 ру-
ководства [The ns Manual (formerly ns Notes and Documentation) The VINT Project]. При рассмотрении TCP уместны пакеты типа tcp или ack. Их тип, размер, номер последовательности (номер ack для ack пакетов), и время прибытия / отправления / удаления задается полем, соответственно, 5, 6, 11, и 2. Знак “+” указывает
52
прибытие пакета, “-“ – отправление и “d” – удаление. Множество сценариев обрабатывает этот файл, чтобы выполнить графический вывод или статистические резюме (см., например, ~ns/testsuite.tcl, процедура finish).
Основные команды
Далее следует список команд, используемых при установке/управлении потоками TCP для имитаций:
set tcp0 [new Agent/TCP]
Это создает экземпляр агента TCP. В настоящее время в ns осуществлены несколько разновидностей агентов TCP отправителей и TCP получателей (или стоков). На данный момент дос-
тупны TCP отправители: Agent/TCP, Agent/TCP/Reno,
Agent/TCP/Newreno, Agent/TCP/Sack1, Agent/TCP/Vegas, Agent/TCP/Fack. TCP получатели, доступные в настоящее время:
Agent/TCPSink, Agent/TCPSink/DelAck, Agent/TCPSink/Sack1, Agent/TCPSink/Sack1/DelAck. Имеется также двунаправленная реализация tcp под названием Agent/TCP/FullTcp.
Параметры конфигурации для потока TCP могут быть установлены следующими:
$tcp set window_ <wnd-size>
Для всех возможных параметров конфигурации, доступных для TCP см. раздел 35.1.4 руководства [The ns Manual (formerly ns Notes and Documentation) The VINT Project]. Заданные по умолчанию значения конфигурации могут быть найдены также в
ns/tcl/lib/ns-default.tcl.
Далее – пример простой установки TCP соединения: set tcp [new Agent/TCP] ;# создать агента tcp
$ns_ attach-agent $node_(s1) $tcp ;# связать агента c с узлом отправителя
$tcp set fid_ 0 ;# установить поле идентификатора потока tcp set ftp [new Application/FTP] ;# создать ftp трафик
$ftp attach-agent $tcp ;# связать ftp трафик с tcp агентом set sink [new Agent/TCPSink] ;# создать агента tcpsink
$ns_ attach-agent $node_(k1) $sink ;# связать агента c с узлом получателя
$sink set fid_ 0 ;# установить поле идентификатора потока
sink
$ns_ connect $ftp $sink ;# действительное подключение ис-
53
точника к стоку
$ns_ at $start-time "$ftp start" ;# запустить поток ftp
ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА
Ознакомиться с основными характеристиками протокола TCP по материалам данного практикума и рекомендуемых в нем литературных источников, а также разделов 8 и 9 учебного пособия В.Г. Козлова, Е.С. Семигук «Программные средства систем связи», электронная версия которого размещена на сервере S ЛВС кафедры ТОР [S:\\ Библиотека кафедры ТОР \ Программные средства систем связи \ (. – Томск: ТМЦДО, 2004. 156 с.)]
Повторить основы функционирования транспортного уровня модели OSI по материалам лекций и рекомендованной литературы. Восстановить в памяти основные принципы и особенности реализации в протоколе ТСР организации гарантированной доставки сообщений и механизмов ее регулирования. Уяснить роль и значение таймеров, разобраться с соображениями по выбору временных интервалов.
Изучить раздел «Краткие сведения о моделях TCP Agents имитатора NS2» методических указаний по данной лабораторной работе и подготовить необходимые Tcl скрипты для работы с NS2, рассмотренные в данном разделе.
В качестве основы исследований использовать модель сети, разработанной в п.6 раздела «Лабораторное задание» работы №3 настоящего сборника. Доработать сценарий своего варианта моделирования таким образом, чтобы интенсивность трафика CBR источника составляла 1% пропускной способности линии связи, соединяющей узлы C и D., а длина очереди на этой линии ограничивалась 5 пакетами.
Изменить доработанный выше сценарий моделирования таким образом, чтобы в качестве источника трафика использовать не агент ftp, а агент telnet. Для этого все команды и параметры сценария, содержащие подстроку ftp заменить на подстроку telnet, а также по окончании описания агента telnet для установки метода формирования пакетов ввести в программу строку
$telnet set interval_ 0.
Дополнить разработанные сценарии инструкциями о формировании файлов трассировки для последующего анализа резуль-
54
татов моделирования. Техника получения файла трассировки приведена в описании лабораторной работы №3 настоящего сборника.
Результатами предварительной подготовки по данной работе являются файлы Tcl скрипта, подготовленные для моделирования сетей с помощью имитатора NS2.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ
1.Какие задачи решает протокол TCP?
2.Сопоставить стек ТСР и стек OSI.
3.Какие механизмы использует протокол ТСР для надежной доставки данных?
4.Какая информация передается в полях «номера портов» и «номера последовательностей» заголовка ТСР сегмента?
5.Какая информация передается в полях «флаги» заголовка ТСР сегмента?
6.Какая информация передается в полях «размер окна» и «контрольная сумма» заголовка ТСР-сегмента?
7.Порядок установления ТСР соединения.
8.Как завершается ТСР соединение в штатном режиме?
9.Как завершается ТСР соединение в особых случаях?
10.Какие состояния можно выделить в процессе ТСР соединения?
11.Особенности работы ТСР с интерактивными данными.
12.В чем заключается алгоритм Нейгла?
13.Особенности передачи ТСР большого объема данных.
14.Особенности реализации алгоритма «скользящее окно» в протоколе ТСР.
15.Пояснить механизм «скользящего окна».
16.Из каких соображений выбирается размер окна?
17.В каких случаях в заголовке пакета устанавливается флаг «PUSH»? Как на это реагирует получатель?
18.В чем заключается алгоритм медленного старта?
19.С какой целью и как используется параметр «окно переполнения»?
20.Раскрыть понятие «сокет». В каких полях заголовка содержится информация о нем?
55