Расчетно-пояснительная записка к курсовому проекту по теме: Надежная передача потокового видео: исследование поведения видео трафика реального времени в различных условиях загрузки сети. Студент: Плахин И.А. Группа: ИУ3-91 Преподаватель: Федоров С.В. Москва, 2010г 1 Введение Все большая часть информации, предоставляемой конечному пользователю, передается через компьютерные сети: интернет, локальные сети и т.д. Сухие новостные порталы понемногу уходят в прошлое, и наступает время онлайнового вещания телевидения. Это стало возможным, поскольку появились производительные алгоритмы для сжатия видео с минимальными потерями. Однако, передача видео реального времени по сети неизбежно осложняется следующими факторами: ширина канала, ее изменение от времени, задержки, потери и другие. Так же нерешенными остаются проблема, как эффективно передавать видео контент по схеме один ко многим. Цель 1. Исследовать существующие технологии по передачи потокового видео, понять их преимущества и недостатки (в частности: RTP). Исследовать возможности IPv6 по передаче потоковых данных. 2. Исследовать инструменты и библиотеки, которые можно использовать для организации передачи видео в режиме реального времени. 3. Сконструировать систему с помощью, которой можно проводить анализ математической модели потерь в интернете и локальных сетях. Проанализировать результаты. 4. Продумать модель сети из ВМ для дальнейших экспериментов и разработок. Описание стенда для построения модели ошибок передачи пакетов в компьютерных сетях Задачи 1. Протестировать передачу UDP пакетов через компьютерную сеть на различных режимах передачи и условиях в сети. 2. Собрать данные в удобном для анализа виде, построить графики, зависимости и посчитать показатели процессов. 3. Сделать выводы исходя из полученных данных, о том какие параметры и факты нужно учитывать при проектировании системы передачи потоковой видеоинформации в режиме реального времени. 2 Теоретическое обоснование Для тестирования был выбран транспортный протокол UDP, поскольку вся ответственность за доставку пакетов лежит на уровне приложения, а не на уровне стека системы, как в случае с протоколом TCP. Если пакет или группа пакетов повреждаются или вовсе не приходят получателю, то стек протокола TCP вызывает повторную передачу столько раз сколько необходимо для успешного завершения передачи. В случае с видеоинформацией реального времени такой подход не слишком хорош, поскольку это вносит существенные задержки в процесс воспроизведения видео в программе конечного пользователя. Природа видеоинформации, описанная выше, позволяет «потерять» пакеты из видео потока без сильного влияния на информацию, которую видит пользователь. То есть если мы обеспечиваем надежную передачу базовых кадров, то для других кадров допустимо иметь ошибки или вообще не быть принятыми, поскольку конечной целью является идея о безостановочном воспроизведении пусть даже с некоторой потерей качества. Структура стенда Стенд состоит из клиентской и серверной части, программные реализации которых были написаны под ОС Linux и базы данных MySQL, используемой для хранения логов передачи и приема. Для проведения испытаний требуются два ПК с ОС Linux, и установленным сервером базы данных MySQL, причем на ПК с серверной частью программы доступ к базе данных должен быть открыт извне. В каждый UDP пакет закладывается полезная нагрузка – идентификатор пакета, затем идут байты заполненные случайными данными. Перед отправкой или после получения соответственно отправитель и получатель вычисляют текущее системное время и сохраняют её вместе с идентификатором пакета в базу данных. Дальнейшие вычисления основываются на данных которые содержатся в каждой из этих таблиц после того как модули передачи и приема закончат свою работу. 3 Результаты экспериментов Было проведено несколько экспериментов по передаче UDP-пакетов по кафедральной сети. Целью эксперимента было выяснить влияние параметров отправки (размер пакета, задержка между отправками пакетов) и размера буфера приемника на качество приема пакетов (процент потерь, групповые ошибки и т.д.). Результаты занесены в таблицу. Составлены графики изменения времени пакета в пути от кол-ва отправленных/принятых пакетов по каждому эксперименту. Базовый опыт №1. Передано пакетов: 7152. Размер буфера: 8000. Размер пакета: 128. Задержка при отправке: 1мкс. Задержка, мс 1000 800 600 400 200 1 10 19 28 37 46 55 64 73 82 91 100 109 118 127 136 145 154 163 172 181 190 199 208 217 226 235 244 253 262 271 280 289 298 0 Номер принятого пакета Рис.1. Наблюдаем резкий скачок времени задержки (рис.1), начиная с 388-го принятого (1554-го отправленного) пакета. Объясняется малым размером буфера принимающей части. До первого переполнения буфера время между отправкой пакета и регистрацией его приемной частью минимально (порядка 1мс), далее – резкий рост времени доставки. Последующий ровный характер графика объясняется быстрым опустошением буфера (до определенного уровня) и его последующим заполнением. При увеличении отдельного участка наблюдается пилообразный профиль (скачок – переполнение буфера, плавный спад – чтение пакетов из буфера) на рис.2: Рис.2. 4 Базовый опыт №2. Передано пакетов: 5736. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 1мкс. При большом размере буфера передача идет нелинейно-постоянно, то есть ровно, без серьезных провалов. Пиковые значения могут относиться к периодически возрастающей нагрузке на сеть/маршрутизатор от других пользователей. 1 0.9 0.8 0.6 0.5 0.4 0.3 0.2 0.1 0 1 88 175 262 349 436 523 610 697 784 871 958 1045 1132 1219 1306 1393 1480 1567 1654 1741 1828 1915 2002 2089 2176 2263 2350 2437 2524 2611 2698 2785 2872 2959 Задержка, с 0.7 Номер принятого пакета Рис.3. 5 Увеличим размер буфера (относительно базового опыта №1). Уменьшим размер пакета (относительно базового опыта №2). Передано пакетов: 4957. Размер буфера: 100000. Размер пакета: 128. Задержка при отправке: 1мкс. Предположительно, во время проведения опыта была серьезная нагрузка на сетевое оборудование, в связи с чем величина задержки возрастает почти монотонно и достигает ~30мс к моменту прихода последних пакетов. По сравнению с базовым опытом №2, условия улучшились, а показатели ухудшились. 35 30 25 15 10 5 0 1 87 173 259 345 431 517 603 689 775 861 947 1033 1119 1205 1291 1377 1463 1549 1635 1721 1807 1893 1979 2065 2151 2237 2323 2409 2495 2581 2667 2753 2839 2925 Задержка, с 20 -5 Номер принятого пакета Рис.4. 6 Увеличим размер пакета и задержку при отправке пакетов. Передано пакетов: 5681. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 25мкс. Характер передачи остался тем же, т.е. увеличение размера пакета и увеличение задержки нивелировали влияние друг друга. Отметим, что вследствие уменьшения скорости отправки данных, максимальная задержка к концу передачи составляет ~20с. Показатели групповых потерь пакетов практически совпадают. 25 15 10 5 0 1 100 199 298 397 496 595 694 793 892 991 1090 1189 1288 1387 1486 1585 1684 1783 1882 1981 2080 2179 2278 2377 2476 2575 2674 2773 2872 2971 3070 3169 3268 3367 3466 Задержка, с 20 Номер принятого пакета Рис.5. 7 Повторим предыдущий опыт, увеличив число отправленных пакетов до ~10000. Передано пакетов: 9871. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 25мкс. Как видим, сеть снова разгрузилась, и максимальная задержка к концу передачи составила ~6мс. Но монотонно возрастающий характер изменения задержки сохраняется (рис.6). Наблюдается незначительное увеличение средней длины групповой потери пакетов. 7 6 5 3 2 1 0 1 116 231 346 461 576 691 806 921 1036 1151 1266 1381 1496 1611 1726 1841 1956 2071 2186 2301 2416 2531 2646 2761 2876 2991 3106 3221 3336 3451 3566 3681 3796 3911 4026 Задержка, с 4 -1 Номер принятого пакета Рис.6. 8 Повторим предыдущий опыт, увеличив число отправленных пакетов до ~15000. Передано пакетов: 15641. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 25мкс. Теория монотонного роста задержки (а не вида арктангенса) при заданных параметрах подтверждена. Необходимо уменьшать размер пакета или же уменьшить частоту отправки пакетов. Снова наблюдается незначительное увеличение средней длины групповой потери пакетов. 14 12 8 6 4 2 0 1 193 385 577 769 961 1153 1345 1537 1729 1921 2113 2305 2497 2689 2881 3073 3265 3457 3649 3841 4033 4225 4417 4609 4801 4993 5185 5377 5569 5761 5953 6145 6337 6529 Задержка, с 10 Номер принятого пакета Рис.7. 9 Увеличим задержку при отправке пакетов. Передано пакетов: 10240. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 700мкс. Характер изменения задержки снова становится нелинейно-постоянным, т.е. маршрутизатор справляется с нагрузкой. 1.2 1 0.6 0.4 0.2 0 1 173 345 517 689 861 1033 1205 1377 1549 1721 1893 2065 2237 2409 2581 2753 2925 3097 3269 3441 3613 3785 3957 4129 4301 4473 4645 4817 4989 5161 5333 5505 5677 5849 Задержка, с 0.8 -0.2 Номер принятого пакета Рис.8. 10 Увеличим задержку при отправке пакетов. Передано пакетов: 10088. Размер буфера: 100000. Размер пакета: 1000. Задержка при отправке: 2000мкс. Картина аналогичная предыдущей, то есть дальнейшее уменьшение частоты посыла пакетов не приведет к уменьшению задержек. Но при увеличении периода отправки примерно в 3 раза процент потерь упал в 2.5 раза, в основном за счет уменьшения кол-ва групповых потерь пакетов. 1.4 1.2 1 0.6 0.4 0.2 0 1 242 483 724 965 1206 1447 1688 1929 2170 2411 2652 2893 3134 3375 3616 3857 4098 4339 4580 4821 5062 5303 5544 5785 6026 6267 6508 6749 6990 7231 7472 7713 7954 8195 Задержка, с 0.8 -0.2 Номер принятого пакета Рис.9. 11 Установим задержку при отправке 1мкс и увеличим размер пакета до 1200. Передано пакетов: 10557. Размер буфера: 100000. Размер пакета: 1200. Задержка при отправке: 1мкс. По сравнению с передачей пакетов размером 1000байт, увеличился наклон кривой, т.е. увеличился рост задержки со временем. Сильно уменьшилась средняя длина групповых потерь. 45 40 35 30 20 15 10 5 0 1 179 357 535 713 891 1069 1247 1425 1603 1781 1959 2137 2315 2493 2671 2849 3027 3205 3383 3561 3739 3917 4095 4273 4451 4629 4807 4985 5163 5341 5519 5697 5875 6053 Задержка, с 25 -5 Номер принятого пакета Рис.10. 12 Сводная таблица результатов экспериментов Exp. 4 Exp. 5 Exp. 6 Exp. 7 Exp. 8 Exp. 9 Exp. 10 Exp. 11 Exp. 12 Exp. 13 Exp. 14 PackSize, byte RcvBuffer Send Delay Packets send Packets received Lost, % Burst Errors Length 27 1 2 3 88.31 Burst Errors, num 739 128 8000 1 7152 2640 1000 100000 1 5736 2921 49.08 81 35 0 0 0 128 100000 1 4957 2991 39 92 21 0 0 0 128 100000 0 5719 2207 61 75 46 0 0 0 1000 100000 25 5681 3549 37.54 91 23 0 0 0 1000 100000 25 9871 4119 58.28 225 25 0 0 0 1000 100000 25 15641 6718 57 287 31 0 0 0 1000 100000 700 10240 6005 41.36 303 13 1 0 0 1000 100000 2000 10088 8426 16.48 74 22 1 0 0 1200 100000 1 10557 6209 41 183 24 0 1 0 1200 100000 2000 9993 8722 12.75 79 16 1 0 0 13 0 0 0 Выводы по экспериментам Мы можем варьировать следующими параметрами – скоростью передачи (в виде задержки при отправке и размера пакета) и размером буфера принимающей стороны. Скорость передачи Малая задержка при отправке приводит к частым переполнениям буфера и как следствие – большому количеству групповых потерь. Большая задержка ведет к повышению процента принятых пакетов, но снижает скорость передачи (при одинаковых размерах пакета). Частота отправки может использоваться как механизм управления передачей при изменении состояния канала (пропускной способности). При большой задержке падает средняя длина групповых потерь. Размер пакета влияет на частоту групповых потерь. Передача больших пакетов приводит к частым провалам в приеме из-за недостаточного размера буфера принимающей стороны. Дополнительные эксперименты покажут, какой вариант предпочтительнее – частая отправка маленьких пакетов или редкий посыл больших. Буфер приемника Размер буфера должен рассчитываться исходя из скорости передачи данных. Изменять его объем динамически нежелательно, потому необходимо выбрать объем, ориентируясь на максимально возможную скорость передачи (минимизируя потери от переполнения буфера). Эксперименты по отправке одновременно пакетов разной длины с большой задержкой, в т.ч. в течение большого периода времени (до суток), покажут процент потерь пакетов в зависимости от размера. Также планируется проверить влияние проверки целостности пакета UDP на качество приема и конечные цифры. 14 IPv6 Ниже рассмотрим вкратце формат пакета IPv6 и какие его особенности можно использовать для передачи потоковых данных и управления потоками. Структура пакета Версия 4-битный код номера версии Интернет протокола (версия Интернет протокола для IPv6= 6). Приор. 4-битный код приоритета. Метка потока 24-битный код метки потока (для мультимедиа). Размер поля данных 16-битовое число без знака. Несет в себе код длины поля данных в октетах, которое следует сразу после заголовка пакета. Если код равен нулю, то длина поля данных записана в поле данных jumbo, которое в свою очередь хранится в зоне опций. Следующий заголовок 8-битовый разделитель. Идентифицирует тип заголовка, который следует непосредственно за IPv6 заголовком. Использует те же значения, что и протокол IPv4. Предельное число шагов 8-битовое целое число без знака. Уменьшается на 1 в каждом узле, через который проходит пакет. При предельном числе шагов, равном нулю, пакет удаляется. Адрес отправителя 128-битовый адрес отправителя пакета. Адрес получателя 128-битовый адрес получателя пакета (возможно не конечный получатель, если присутствует маршрутный заголовок). 15 Управление потоком (некоторые моменты) Традиционно поток определялся как совокупность таких полей как адреса отправителя/получателя, порты и тип протокола. В IPv6 поток идентифицировать поток как последовательность пакетов от одного отправителя и с одинаковым полем Метка потока. Метка потока представляет собой число, однозначно идентифицирующее поток. Выбирается произвольным образом. IPv6 также позволяет управлять потоком путем задания приоритета всего потока или отдельных пакетов в нем. Поле Приоритет содержит 4битное число (от 0 до 15), которое указывает на тип передачи (с управлением перегрузками или без таковой и т.д.). Предположительно при передаче возможно повышение приоритета пакетов, содержащих базовые кадры, для более надежной и быстрой передачи этих самых базовых кадров. Маршрутизатор (поддерживающий работу с IPv6) сможет распознать в сетевом трафике поток и будет обрабатывать его универсально, одинаково для всех пакетов. При этом информация о том, как именно обрабатывать пакеты, может как находиться в одном из заголовков пакета, так и быть получена через управляющий протокол. 16 Модель IPv6-сети В рамках изучения IPv6 была создана виртуальная сеть – 2 виртуальные машины на MS WinXP SP2, связанные напрямую виртуальным же кабелем. Поддержка IPv6 в WinXP – экспериментальная. По умолчанию отключена, включается командой ipv6 install или netsh interface ipv6 install (установка через netsh – Network Shell – более предпочтительна). Первым делом хотелось проверить работоспособность команды ping для 6-х адресов. Для первой виртуальной машины (winXP, winxp3sp3.vdi) для IPv4 был установлен адрес 194.168.1.2, после установки IPv6 командой netsh > interface ipv6 > add address “4” 2000::1234 был добавлен IPv6-адрес 2000::1234 (выбран произвольно; «::» означает нулевые поля в адресе). Аналогично для второй машины (winXP2, winxp3sp3_1.vdi) был добавлен адрес 2000::4321. С обеих машин команда ping <ipv6-адрес назначения> показывает те же результаты работы, что и ping <ipv4-адрес назначения>. При этом машины принимают пакеты по обоим адресам, и IPv4, и IPv6. В программе Wireshark убедились, что приходят пакеты по протоколу ICMPv6.Задержек не замечено, времена приема-передачи во всех случаях порядка 1мс (собственно, локальная сеть). При перезагрузке добавленные адреса не обнуляются. Позднее появились трудности с IPv6, а именно – появилась необходимость периодически (но не каждый запуск системы) обновлять службу, регулирующую работу IPv6, командой renew. В противном случае компьютер не может быть обнаружен в сети по IPv6-адресу. Проблема, скорее всего, в устаревшей WinXP (возможно, помогла бы установка SP3). Следующие опыты Дальнейшие опыты целесообразно проводить на ВМ с системами Linux или Windows 7, в полной мере поддерживающими работу с протоколом IPv6. Однако, остается открытым вопрос, какой процент сетевых устройств поддерживает работу с этим протоколом и будет корректно и главное эффективно обрабатывать поток. В противном случае выгоды не будет никакой, неизвестные опции/заголовки маршрутизатор будет игнорировать и работать с пакетами в порядке «общей очереди». 17 RTP/ RTCP Следует сказать, что характерные для IP-сетей временные задержки и вариация задержки пакетов (джиттер) могут серьезно исказить информацию, чувствительную к задержке, в нашем случае видео и речь, сделав ее абсолютно непригодной для восприятия. Отметим, что вариация задержки пакетов гораздо сильнее влияет на субъективную оценку качества передачи, чем абсолютное значение задержки. Для уменьшения джиттера и задержек могут применяться механизмы, обеспечивающие пользователю заданный уровень качества обслуживания. Они, конечно, улучшают качество услуг, предоставляемых сетью, но не могут совсем устранить образование очередей в сетевых устройствах и совсем убрать джиттер. Протокол RTP позволяет компенсировать негативное влияние джиттера на качество речевой и видеоинформации. В то же время, он не имеет собственных механизмов, гарантирующих своевременную доставку пакетов или другие параметры качества услуг, это осуществляют нижележащие протоколы. Он даже не обеспечивает все те функции, которые обычно предоставляют транспортные протоколы, в частности функции исправления ошибок и управления потоком. Обычно протокол RTP базируется на протоколе UDP и использует его функции, но может работать и поверх других транспортных протоколов. Существует несколько серьезных причин, по которым TCP плохо подходит для передачи чувствительной к задержкам информации. Во-первых, это алгоритм надежной доставки пакетов. Пока отправитель повторно передаст пропавший пакет, получатель будет ждать, результатом чего может быть недопустимое увеличение задержки. Во-вторых, алгоритм управления при перегрузке в протоколе TCP не оптимален для передачи речи и видеоинформации. При обнаружении потерь пакетов протокол TCP уменьшает размер окна, а затем будет его медленно увеличивать. Однако передача речевой и видеоинформации осуществляется на вполне определенных, фиксированных скоростях, которые нельзя мгновенно уменьшить, не ухудшив качество предоставляемых услуг. Правильной реакцией на перегрузку для информационных потоков этих типов было бы изменение метода кодирования, частоты видеокадров или размера видеоизображения. 18 Протокол RTP предусматривает индикацию типа полезной нагрузки и порядкового номера пакета в потоке, а также применение временных меток. Отправитель помечает каждый RTP-пакет временной меткой, получатель извлекает ее и вычисляет суммарную задержку. Разница в задержке разных пакетов позволяет определить джиттер и смягчить его влияние - все пакеты будут выдаваться приложению с одинаковой задержкой. Итак, главная особенность RTP - это вычисление средней задержки некоторого набора принятых пакетов и выдача их пользовательскому приложению с постоянной задержкой, равной этому среднему значению. Однако следует иметь в виду, что временная метка RTP соответствует моменту кодирования первого дискретного сигнала пакета. Поэтому, если RTP-пакет разбивается на блоки данных нижележащего уровня, то временная метка уже не будет соответствовать истинному времени их передачи, поскольку они перед передачей могут быть установлены в очередь. Для работы с протоколом и эффективного управления передачей потоковых данных по RTP для нас представляют интерес следующие поля пакета: РТ (7 бит) - поле типа полезной нагрузки. Идентифицирует тип полезной нагрузки и формат данных, включая сжатие и шифрование. В стационарном состоянии отправитель использует только один тип полезной нагрузки в течение сеанса, но он может его изменить в ответ на изменение условий, если об этом сигнализирует протокол управления транспортировкой информации в реальном времени (RealTime Transport Control Protocol). Порядковый номер пакета (Sequence Number, 16 бит). Каждый источник начинает нумеровать пакеты с произвольного номера, увеличиваемого затем на единицу с каждым переданным пакетом RTP. Это позволяет обнаруживать потери пакетов и определять порядок пакетов с одинаковым временным штампом. Несколько последовательных пакетов могут иметь один и тот же штамп, если логически они 19 порождены в один и тот же момент, как, например, пакеты, принадлежащие одному и тому же видеокадру. Временной штамп (Timestamp, 32 бита). Момент времени, в который был создан первый октет данных полезной нагрузки. Единицы, в которых время указывается в этом поле, зависят от типа полезной нагрузки. Значение определяется по локальным часам отправителя. Идентификатор SSRC (Synchronization Source Identifier, 32 бита) - поле идентификатора источника синхронизации. Псевдослучайное число, которое уникальным образом идентифицирует источник в течение сеанса и не зависит от сетевого адреса. Это число играет важную роль при обработке порции данных, поступившей от одного источника. Доставка RTP-пакетов контролируется специальным протоколом RTCP (Real Time Control Protocol). Основной функцией протокола RTCP является организация обратной связи приемника с отправителем информации для отчета о качестве получаемых данных. Протокол RTCP передает сведения (как от приемника, так и от отправителя) о числе переданных и потерянных пакетов, значении джиттера, задержке и т.д. Эта информация может быть использована отправителем для изменения параметров передачи, например для уменьшения коэффициента сжатия информации с целью улучшения качества ее передачи. RTP не имеет стандартного зарезервированного номера порта. Единственное ограничение состоит в том, что соединение проходит с использованием чётного номера, а следующий нечётный номер используется для связи по протоколу RTCP. 20 Стенд на основе оборудования CISCO для малого бизнеса Среди решений для малого бизнеса интерес представляют 3 модели - Cisco RVS4000, Cisco RV 120W и Cisco WRVS4400N. Функциональность трех моделей одинакова (что касается интересующего нас IPv6). С учетом роста популярности и даже востребованности беспроводных сетей WiFi, вторая и третья модели более предпочтительны, т.к. поддерживают WiFi стандарта 802.11n. Cisco RV 120W – аппаратный firewall и VPN маршрутизатор. Четыре проводных подключения Ethernet 10/100Мбит. Поддержка беспроводных сетей. Есть возможность работы в режиме точки доступа. http://www.cisco.com/en/US/prod/collateral/routers/ps9923/ps10852/DS_C78-59016100.html Cisco WRVS4400N – VPN маршрутизатор. Четыре проводных подключения Ethernet 10/100/1000Мбит. http://www.cisco.com/en/US/prod/collateral/routers/ps9923/ps9931/data_sheet_c78496737.html Cisco RVS4000 – VPN маршрутизатор. Четыре проводных подключения Ethernet 10/100/1000Мбит. Поддержка беспроводных сетей. http://www.cisco.com/en/US/prod/collateral/routers/ps9923/ps9928/data_sheet_c78496735.html 21 Что касается структуры стенда – предлагается использовать две пары машин с Win7/Linux (или другие, полноценно поддерживающие работу с IPv6), одна из которых будет имитировать нагрузку сети, другая же будет будет передавать потоковые данные, используя IPv6. Также предполагается использовать написанную ранее программу сниффера для имитации задержек в сети Интернет на основе полученных статистических данных. Схема стенда приведена ниже. 22 Выводы Мы провели работу по подбору материала для изучения методов организации систем потоковой передачи видео в режиме реального времени. Ознакомились с основами кодирования видео, и привели информацию о существующих системах, работу которых можно ощутить, пройдя по ссылкам, указанным в последнем разделе. Был спроектирован и запущен стенд для экспериментов по передаче видео и выявления проблем, которые могут возникнуть в таких системах. Судя по результатам экспериментов на стенде и данным из освященных выше статей основная сложность состоит в динамическом изменения всех параметров, которые влияют на процесс передачи видео. Может оказаться выгодным применение каких-либо оптимизирующих алгоритмов, которые будут сами решать задачу о подборе параметров, руководствуюсь определенными соотношениями. Очевидно, то при проектировании протокола нужно исходить из наличия обратной связи между приемником и передатчиком для адаптации передачи под текущие условия. 23 Использованные источники информации 1. 2. 3. 4. 5. IPv6 - http://ipv6.com/articles/general/IPv6-Header.htm RTP/RTCP - http://www.ietf.org/rfc/rfc1889.txt Cisco – www.cisco.com UDP - http://www.29west.com/docs/THPM/udp-buffer-sizing.html VLC (video streaming) - http://www.videolan.org/vlc/streaming.html 24