Материал: 1308

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

щаться к медленному пуску). Значение 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