По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В предыдущей статье мы рассмотрели, как можно использовать файлы для того, чтобы не засорять код Terraform. В данной статье мы посмотрим, как можно использовать динамические файлы (шаблоны) для написания кода Терраформ. Что такое динамический файл? В данном контексте это файл, в который мы посылаем всякие переменные и файл генерируется в зависимости от наших переменных. Когда в коде мы используем конструкцию user_data = file (), по сути мы делаем копировать-вставить из файла, который мы указываем в качестве аргумента функции. Теперь мы будем использовать другую функцию ее синтаксис немного отличается: user_data = templetfile(). Данная функция принимает два параметра. Первый параметр имя файла. Далее ставится знак , и затем фигурные скобки {}, в которых мы указываем переменные, которые мы хотим отправить в файл шаблона. Рекомендую для читаемости кода и удобства работы файл, в который будут отправляться переменные переименовывать в имя_файла.tpl. Обще принятое расширение для файла-шаблона. В итоге мы получаем генерированный файл с отправленными в него параметрами. Выглядит это следующем образом. Допустим мы хотим отправить в файл несколько переменных например: f_name = “Olya” , l_name = “Vasilkova”, names = [“Masha”, ”Vasya”, ”Rik”, ”Petya”, “Oleg”] Как видите мы засылаем переменные в файл, мы можем одну переменную или кучу целую отправить, не обязательно что данные переменные будут использоваться. Переменные разные, одиночные мы взяли 2 переменные и одну переменную где много значений. Можно сказать, что массив данных. В предыдущей статье мы создавали html страничку, мы продолжим ее создавать, только с использованием переменных. Берем скрипт из предыдущего урока и начинаем править. Переименовываем файл - cp user_data.sh user_data.sh.tpl. Следующим шагом правка непосредственно самого скрипта с использованием html разметке. Отправляем переменные в файл. Вместо переменных вставятся значение переменных. Далее мы вставляем цикл, чтобы пройтись по значениям переменной names. Получаем в цикле, что x будет равна каждому значению в переменной names. Обратите внимание, что конструкция %{ for x in names ~} и % { endfor~} печататься не будут! Печататься будет то, что находится в цикле Hello to ${x} from ${f_name}. Т.е вот этим скриптом мы генерируем user_data в коде терраформ. Следовательно, наш файл index.html будет с кучей строчек. Теперь нам необходимо, это все запустить. Переходим в командной строке в директорию Lesson-4. И проводим первичную инициализацию terraform init. Результатом успешной инициализации будет следующий вывод команды на экран. Далее даем команду на проверку кода терраформ в том числе убедится, что не создастся ничего лишнего. terraform apply, подтверждаем выполнение команды словом yes. А далее мы можем видеть, как система начинает создание ресурсов. После исполнения мы можем в консоли AWS увидеть созданный ресурс. Обратите внимание, что при создании ресурса user_data шифруется. Это хорошо видно в момент вывода terraform apply. Когда инстанс в консоли AWS запустился, мы можем посмотреть, что у нас содержится в user_data. Для этого необходимо по instance щелкнуть правой кнопкой мыши и вызвать меню. В данном меню выбираем user_data. Появляется следующее окно. Как мы видим на картинке, часть нашего скрипта. Если прокрутить, то он будет там весь со всему принимаемыми значениями. Это функция будет достаточно полезна для контроля переменных, чтобы посмотреть какие данные попали в переменные. Следовательно, на выходе мы получаем в веб браузере следующего вида веб страничку. У нас получилось с помощью переменных и шаблона сгенерировать html файл, то есть наш файл динамичный. Далее уже дело техники подставить его в веб-сервер для отображения и запуска в инстансе AWS. Напоминаю, что IP адрес нашего сервера в AWS можно посмотреть в двух местах. А затем обратиться к веб странице по протоколу http с использованием данного IP адреса в любом браузере. Немного еще функционала - можно не поднимая инстанса посмотреть какие данные получим на выходе. Для этого используем функционал terraform console. Берем часть терраформ файла. Выравниваем в одну строку: templatefile("user_data.sh.tpl", { f_name = "Olya",l_name = "Vasilkova", names = ["Masha", "Vasya", "Rik", "Petya", "Oleg"] }) и вставляем. Как вы видите получаем те данные которые передаются на инстанс в AWS.
img
Основой любого сайта является HTML. Это первое, что видят люди. Без него сайта бы не существовало. Поэтому так важно придерживаться правильных методов написания кода. Если этого не делать, то посетители вашего сайта получат плохой пользовательский опыт. В HTML всегда есть, чему поучиться. Причем не важно, новичок вы в программировании или опытный специалист. В данной статье мы поговорим о лучших практиках HTML. Давайте начнем. Лучшие практики HTML – это набор правил, помогающих создавать сайты, одинаково удобные для чтения и сопровождения. При создании сайта на HTML необходимо придерживаться следующих принципов: Используйте только один элемент <h1> для страницы В HTML доступно 6 различных тегов заголовков – от <h1> до <h6>. Тегом <h1> отмечается основной заголовок (название веб-страницы), а тег <h6> используется для наименее важного заголовка. Тег <h1> крупнее <h2>, <h2> крупнее <h3> и так до тега <h6>. Размер каждого заголовка уменьшается по степени его важности. Очень важно не добавлять более одного элемента <h1> на странице. Не делайте так: <main> <div> <h1>Писать код – это весело?</h1> <p>Чем больше вы пишете, тем опытнее становитесь</p> </div> <div> <h1>Писать код – это весело</h1> <p>Лучше писать код с удовольствием</p> </div> </main> В примере выше мы используем тег <h1> в первом и втором блоке <div>. Такой код, конечно же, заработает, но это не самый правильный вариант оформления. Лучше вот так: <main> <div> <h1>Писать код – это весело?</h1> <p>Чем больше вы пишете, тем опытнее становитесь</p> </div> <div> <h2>Писать код – это весело</h2> <p>Лучше писать код с удовольствием</p> </div> </main> Кроме того, наличие одного элемента <h1> на странице – крайне важно для поисковой оптимизации (SEO). Через этот тег поисковики понимают, что находится на странице (главная мысль страницы). Не забывайте про иерархию заголовков в HTML Когда вы пользуетесь тегами заголовков, важно следовать установленной иерархии: после <h1> идет <h2>, за <h3> следует <h4> и т.д... Не перескакивайте от <h1> к <h3>. Некоторые посетители сайта используют средства чтения с экрана. И таким пользователям бывает трудно понять содержимое вашей страницы при нарушенной иерархии элементов. Средства чтения с экрана – это одна из специальных возможностей, помогающая людям получать доступ к цифровому содержимому (сайтам или приложениям) и взаимодействовать с ним через звуки и касания. Основные пользователи данной технологии – слабовидящие или незрячие люди. Не делайте так: <h1>Писать код – это весело</h1> <h3>Лучше писать код с удовольствием</h3> <h5>Постоянство – это ключ</h5> Лучше вот так: <h1>Писать код – это весело?</h1> <h2>Чем больше вы пишете, тем опытнее становитесь</h2> <h3>Писать код – это весело</h3> Добавляйте подписи к изображениям через элемент figure Добавлять подписи к изображениям рекомендуется через элемент <figure>. А чтобы все заработало, нужно прописать не только <figure>, но и <figcaption>. Не делайте так: <div> <img src=“a-man-coding.jpg” alt=“Мужчина за компьютером”> <p>Это изображение мужчины, который работает за компьютером</p> </div> С точки зрения кода, пример выше написан хорошо. Но лучше сделать все иначе. Если изображение не загрузилось, отображается содержимое alt, и на экране показывается текст из элемента <p>. Но посетитель, использующий средства чтения с экрана, не сможет отличить тексты в <p> и alt. Помните: даже если ваш код работает, это еще не значит, что вы делаете все правильно. Лучше сделать вот так: <figure> <img src=“a-man-coding.jpg” alt=“ Мужчина за компьютером”> <figcaption>Это изображение мужчины, который работает за компьютером</figcaption> </figure> Пример выше – отличный способ, как можно добавить подписи к изображениям. Почему важно добавлять подписи к изображениям именно так: Поисковая оптимизация. Ваши изображения легче найти в поисковых системах. Посетителям, использующим средства чтения с экрана, проще понять содержимое вашей страницы. Не используйте div для шапки и подвала; для этого подходят семантические элементы Семантические элементы HTML используются для логической разметки структуры документа на странице. Кроме того, они нужны для правильной сборки страницы. Откажитесь от <div> в пользу семантики. Не используйте <div> для обозначения шапки и подвала страницы. Для этих целей есть семантические элементы <header> и <footer>. Элемент <header> показывает навигацию или вводную часть страницы. В элементе <footer> размещается информация об авторских правах или ссылки для перехода на страницы. Не делайте так: <div class="header"> <a href="index.html">Главная</a> <a href="#">О нас</a> <a href="#">Контакты</a> </div> <div class="footer"> <a href="index.html">Главная</a> <a href="#">О нас</a> <a href="#">Контакты</a> </div> В примере выше тег <div> используется в качестве контейнера для <header> и <footer>. Такой код будет работать, но это не самый правильный способ реализации. Лучше вот так: <header> <h1></h1> </header> <footer> <a href="index.html">Главная</a> <a href="#">О нас</a> <a href="#">Контакты</a> </footer> Лучше всего добавлять <footer> и <header> на страницу именно так. Почему важно добавлять <footer> и <header> с помощью семантических элементов HTML: Использование семантических элементов для шапки и подвалаупрощает чтение кода. Такой способ предлагает более качественный пользовательский опыт. Посетителям, использующим средства чтения с экрана, будет проще понять содержимое страницы. Не используйте <b> и <i> для выделения текста на странице Теги <b> и <i> выделяют текст жирным шрифтом (b) или курсивом (i). Но не стоит ими пользоваться на сайте, поскольку оба тега не несут семантической нагрузки. Для выделения текста лучше подходит свойство CSS font-weight, либо теги <strong> и <em>. Тегом <strong> отмечают важный текст на странице. Он выделяет текст или делает его жирным. Тег <em> подчеркивает текст или добавляет курсив (точно также, как <i>). Не делайте так: <p><i>Пишите код в своем собственном темпе</i><p> <p><b>пишите код в своем собственном темпе </b><p> В этом примере текст выделяется жирным и курсивом. Но пользователи со средствами для чтения с экрана не заметят разницы. Данные теги не несут семантического значения. Спецификация HTML 5 рекомендует нам использовать теги <b> и <i> только в самых крайних случаях и при отсутствие альтернативных вариантов. Лучше делайте так: <p><strong>Пишите код в своем собственном темпе</strong><p> <p><em>пишите код в своем собственном темпе</em><p> Не используйте блочные элементы внутри строчных Блочные элементы начинают новую строку на странице. По умолчанию действие этих элементов распространяется на всю строку – от ее начала до конца. Вы не сможете добавить строчные элементы внутри блочных без CSS. К блочным элементам относятся <p>, <h1> – <h6> и <div>. Строчные элементы действуют на небольшую часть страницы. Они не начинаются с новой строки. К строчным элементам относятся <span>, <em> и <a>. Вы не можете добавить блочные элементы внутри строчных. Не делайте так: <a href="#" > <p>Посетите merion</p> </a> У вас не получится добавить <p> внутрь элемента <a>, поскольку <p> относится к блочным элементам, а <a> – к строчным. Лучше сделать так: <p> Посетите <a href="wiki.merionet.ru" target="_blank">Merion</a> для изучения IT </p> Это отличный пример того, как можно вложить строчные элементы внутри блочных. Важно помнить, что: Блочный элемент нельзя вложить внутри строчного. Строчный элемент можно вложить внутри блочного. Строчный и блочный элемент можно вложить внутри блочного. Небольшое уточнение: «вложить» что-то в данном случае означает «добавить внутрь». Так что, говоря «это нельзя вложить», я имею ввиду, что вы не сможете добавить один такой элемент внутрь другого. Надеюсь, вы запомнили 3 простых правила для вложения элементов. Кроме того, CSS позволяет преобразовать блочные элементы в строчные. Для этого используется display: inline-block и display: inline. А еще важно помнить простую истину: даже если ваш код работает, это еще не значит, что вы делаете все правильно. Именно поэтому я всегда рекомендую пользоваться валидатором разметки W3C и дополнительно проверять свой код. Этот валидатор отслеживает правильность разметки веб-документов в HTML, XHTML, SMIL, MathML и т.д. Для проверки кода можно скопить его URL и добавить на сайт, либо загрузить сам файл HTML. Заключение Надеемся, что данная статья помогла вам узнать что-то новое о лучших практиках в HTML. Мы постарались включить в нее самые полезные советы, которыми можно начинать пользоваться уже сегодня.
img
Это первая статья цикла. Продолжение: 2 часть Плоскость данных Начнем с того, что основная задача сети-перенос данных с одного подключенного хоста на другой. Это может показаться простым на первый взгляд, но на самом деле это чревато проблемами. Здесь может быть полезна иллюстрация; рисунок № 1 используется для иллюстрации сложности проблемы. Начиная с верхнего левого угла иллюстрации: Приложение генерирует некоторые данные. Эти данные должны быть отформатированы таким образом, чтобы принимающее приложение могло понять, что было передано, - данные должны быть упорядочены. Механизм, используемый для упорядочения данных, должен быть эффективным во многих отношениях, включая быстрое и простое кодирование, быстрое и простое декодирование, достаточно гибкий, чтобы можно было вносить изменения в кодирование, не нарушая слишком много вещей, и добавлять наименьшее количество накладных расходов, возможных во время передача данных. Сетевое программное обеспечение должно инкапсулировать данные и подготовить их к фактической передаче. Каким-то образом сетевое программное обеспечение должно знать адрес хоста назначения. Сеть, которая соединяет источник и пункт назначения, является общим ресурсом, и, следовательно, должна быть доступна некоторая форма мультиплексирования, чтобы источник мог направлять информацию в правильный пункт назначения. Как правило, это будет связано с определенной формой адресации. Данные должны быть перемещены из памяти в источнике и непосредственно в сеть - фактический провод (или оптический кабель, или беспроводное соединение), который будет передавать информацию между устройствами, подключенными к сети. Сетевые устройства должны иметь какой-то способ обнаружить конечный пункт назначения информации - вторую форму проблемы мультиплексирования - и определить, требуется ли какая-либо другая обработка информации, когда она находится в пути между источником и пунктом назначения. Информация, прошедшая через сетевое устройство, должна быть снова закодирована и перенесена из памяти в провод. В любой точке, где информация перемещается из памяти в какую-либо форму физического носителя, информация должна быть поставлена в очередь; часто бывает больше данных для передачи, чем может быть помещено на любой конкретный физический носитель в любой момент времени. Здесь в игру вступает качество услуг. Информация, передаваемая по сети, теперь должна быть скопирована с физического носителя и обратно в память. Он должен быть проверен на наличие ошибок - это контроль ошибок - и у приемника должен быть какой-то способ сообщить передатчику, что ему не хватает памяти для хранения входящей информации - это контроль потока. Особый интерес представляет сетевое устройство в середине диаграммы. Сетевое устройство-например, маршрутизатор, коммутатор или middle box—соединяет два физических носителя вместе для построения реальной сети. Возможно, самый простой вопрос для начала заключается в следующем: зачем вообще нужны эти устройства? Маршрутизаторы и коммутаторы — это, очевидно, сложные устройства со своей собственной внутренней архитектурой и зачем добавлять эту сложность в сеть? Есть две фундаментальные причины. Первоначальная причина создания этих устройств заключалась в соединении различных видов физических носителей вместе. Например, внутри здания может быть практично работать ARCnet или thicknet Ethernet (приведены примеры из времени, когда были впервые изобретены сетевые устройства). Расстояние, которое эти носители могли преодолеть, однако, очень мало-порядка сотни метров. Каким-то образом эти сети должны быть расширены между зданиями, между кампусами, между городами и, в конечном счете, между континентами, используя своего рода мультиплексированную (или обратную мультиплексированную) телефонную сеть, такую как T1 или DS3. Эти два различных типа носителей используют различные виды сигналов; должно быть какое-то устройство, которое переводит один вид сигналов в другой. Вторая причина заключается в следующем — это масштаб и это стало проблемой. Природа физического мира такова, что у вас есть два варианта, когда дело доходит до передачи данных по проводу: Провод может соединять напрямую два компьютера; в этом случае каждая пара компьютеров должна быть физически соединена с каждым другим компьютером, с которым она должна взаимодействовать. Провод может быть общим для многих компьютеров (провод может быть общим носителем информации). Чтобы решить проблему первым способом, нужно много проводов. Решение проблемы вторым способом кажется очевидным решением, но оно представляет другой набор проблем - в частности, как пропускная способность, доступная по проводам, распределяется между всеми устройствами? В какой-то момент, если на одном общем носителе достаточно устройств, любая схема, используемая для обеспечения совместного использования ресурсов, сама по себе будет потреблять столько же или больше пропускной способности, как любое отдельное устройство, подключенное к проводу. В какой-то момент даже 100-гигабайтное соединение, разделенное между достаточным количеством хостов, оставляет каждому отдельному хосту очень мало доступных ресурсов. Решением этой ситуации является сетевое устройство - маршрутизатор или коммутатор, который разделяет два общих носителя, передавая трафик между ними только по мере необходимости. При некотором логическом планировании устройства, которые должны чаще общаться друг с другом, можно размещать ближе друг к другу (с точки зрения топологии сети), сохраняя пропускную способность в других местах. Конечно, маршрутизация и коммутация вышли далеко за рамки этих скромных начинаний, но это основные проблемы, которые системные администраторы решают, внедряя сетевые устройства в сети. Есть и другие сложные проблемы, которые необходимо решить в этом пространстве, помимо простого переноса информации из источника в пункт назначения; Во многих случаях полезно иметь возможность виртуализировать сеть, что обычно означает создание туннеля между двумя устройствами в сети. Сети всегда создавались для одной цели: передачи информации от одной подключенной системы к другой. Дискуссия (или, возможно, спор) о наилучшем способе выполнения этой, казалось бы, простой задачи длилась долго. Эту дискуссию можно грубо разбить на несколько, часто пересекающихся, этапов, каждый из которых задавал свой вопрос: Должны ли сети быть с коммутацией каналов или с коммутацией пакетов? Должны ли сети с коммутацией пакетов использовать кадры фиксированного или переменного размера? Как лучше всего рассчитать набор кратчайших путей через сеть? Как сети с коммутацией пакетов должны взаимодействовать с качеством обслуживания (QoS)? Должна ли плоскость управления быть централизованной или децентрализованной? На некоторые из этих вопросов давным-давно был дан ответ. С другой стороны, некоторые из этих вопросов все еще актуальны, особенно последний. Коммутация каналов Первое большое обсуждение в мире компьютерных сетей было то, должны ли сети быть с коммутацией каналов или с коммутацией пакетов. Основное различие между этими двумя понятиями заключается в концепции схемы: нужно ли передатчику и приемнику «видеть» сеть как один провод или соединение, предварительно сконфигурированное (или настроенное) с определенным набором свойств прежде чем они начнут общаться? Или они «видят» сеть как общий ресурс, где информация просто генерируется и передается «по желанию»? Первый считается с коммутацией каналов, а второй считается с коммутацией пакетов. Коммутация каналов имеет тенденцию обеспечивать больший поток трафика и гарантии доставки, в то время как коммутация пакетов обеспечивает доставку данных при гораздо меньших затратах - первый из многих компромиссов, с которыми вы столкнетесь при проектировании сетей. Рисунок 2 будет использован для иллюстрации коммутации каналов с использованием мультиплексирования с временным разделением (TDM) в качестве примера. На рисунке 2 общая пропускная способность каналов между любыми двумя устройствами разделена на восемь равных частей; A отправляет данные E, используя временной интервал A1 и F, используя временной интервал A2; B отправляет данные в E с использованием временных интервалов B1 и F с использованием временных интервалов B2. Каждый фрагмент информации имеет фиксированную длину, поэтому каждый из них может быть помещен в один временной интервал в текущем потоке данных (следовательно, каждый блок данных представляет фиксированное количество времени или интервала в проводе). Предположим, что где-то есть контроллер, назначающий слот в каждом из сегментов, через которые будет проходить трафик: Для трафика [A, E]: На C: слот 1 от A переключен на слот 1 в направлении D На D: слот 1 от C переключен на слот 1 в направлении E Для трафика [A, F]: На C: слот 4 от A переключен на слот 4 в направлении D На D: слот 4 от C переключен на слот 3 в направлении F Для трафика [B, E]: На C: слот 4 от B переключен на слот 7 в направлении D На D: слот 7 от C переключен на слот 4 в направлении E Для трафика [B, F]: На C: слот 2 от B переключен на слот 2 в направлении D На D: слот 2 от C переключен на слот 1 в направлении F Ни одно из устройств обработки пакетов в сети не должно знать, какой бит данных идет куда; до тех пор, пока C берет все, что находится в слоте 1 в потоке данных A в каждом временном интервале, и копирует его в слот 1 в своем исходящем потоке в направлении D, А D копирует его из слота 1 входящего из C в слот 1 исходящего в E, трафик, передаваемый A, будет доставляться в E. Есть интересный момент, который следует отметить об этом виде обработки трафика—для пересылки трафика ни одно из устройств в сети на самом деле не должно знать, что является источником или назначением. Блоки данных, передаваемые по сети, не обязательно должны содержать адреса источника или назначения; куда они направляются и откуда поступают, все решения основываются на знании контроллерами открытых слотов в каждом канале. Набор слотов, назначенных для любой конкретной связи между устройствами, называется схемой, потому что это пропускная способность и сетевые ресурсы, выделенные для связи между одной парой устройств. Основные преимущества сетей с коммутацией каналов включают в себя: Для коммутации пакетов устройствам не нужно читать заголовок или выполнять какую-либо сложную обработку. Это было чрезвычайно важно в первые дни работы сети, когда аппаратное обеспечение имело гораздо меньшее количество транзисторов и переключателей, скорость линии была ниже, а время обработки пакета в устройстве составляло большую часть общей задержки пакета через сеть. Контроллер знает доступную полосу пропускания и трафик, направляемый к периферийным устройствам по всей сети. Это делает его несколько простым, учитывая, что на самом деле имеется достаточная пропускная способность, для организации трафика для создания наиболее оптимальных путей через сеть. Есть и недостатки, в том числе: Сложность контроллера значительно возрастает по мере того, как сеть и услуги, которые она предлагает, растут в масштабе. Нагрузка на контроллер может стать подавляющей, фактически вызывая перебои в работе сети. Пропускная способность на каждом канале используется не оптимально. На рис. 1-3 блоки времени (или ячейки), содержащие*, по существу являются потерянной полосой пропускания. Слоты назначаются определенной схеме заранее: слоты, используемые для трафика [A, E], не могут быть «заимствованы» для трафика [A, F], даже если A ничего не передает в сторону E. Время, необходимое для реагирования на изменения в топологии, может быть довольно длительным с точки зрения сети; локальное устройство должно обнаружить изменение, сообщить о нем контроллеру, и контроллер должен перенастроить каждое сетевое устройство вдоль пути каждого затронутого потока трафика. Системы TDM внесли ряд идей в развитие сетей, используемых сегодня. В частности, системы TDM сформировали большую часть ранних дискуссий о разбиении данных на пакеты для передачи по сети и заложили основу для гораздо более поздней работы в области QoS и управления потоком. Одна довольно важная идея, которую эти ранние системы TDM завещали большему сетевому миру, - это network planes. В частности, системы TDM делятся на три плоскости: Плоскость управления - это набор протоколов и процессов, которые формируют информацию, необходимую сетевым устройствам для пересылки трафика через сеть. В сетях с коммутацией каналов плоскость управления является полностью отдельной плоскостью; обычно существует отдельная сеть между контроллером и отдельными устройствами (хотя и не всегда, особенно в новых системах с коммутацией каналов). Плоскость данных (также известная как плоскость пересылки) - это путь информации через сеть. Это включает в себя декодирование сигнала, полученного в проводе, в кадры, обработку их и передачу их обратно в провод, закодированный в соответствии с физической транспортной системой. Плоскость управления ориентирована на управление сетевыми устройствами, включая мониторинг доступной памяти, мониторинг глубины очереди, а также мониторинг, когда устройство отбрасывает информацию, передаваемую по сети, и т. д. Часто бывает трудно различить уровни управления и плоскости управления в сети. Например, если устройство вручную сконфигурировано для пересылки трафика определенным образом, является ли это функцией плоскости управления (потому что устройство настраивается) или функцией плоскости управления (потому что это информация о том, как пересылать информацию)? Коммутация пакетов В начале-середине 1960-х годов коммутация пакетов находилась в состоянии «in the air». Много людей переосмысливали то, как сети были построены, и рассматривали альтернативы парадигме коммутации каналов. Paul Baran, работавший в RAND Corporation, предложил сеть с коммутацией пакетов в качестве решения для обеспечения живучести; примерно в то же время Donald Davies в Великобритании предложил такой же тип системы. Эти идеи попали в Lawrence Livermore Laboratory, что привело к созданию первой сети с коммутацией пакетов (названной Octopus), введенной в эксплуатацию в 1968 году. ARPANET, экспериментальная сеть с коммутацией пакетов, начала функционировать вскоре после этого, в 1970 году. Существенное различие между коммутацией каналов и коммутацией пакетов заключается в роли отдельных сетевых устройств в передаче трафика, как показано на рис.3. На рисунке 3, A создает два блока данных. Каждый из них включает в себя заголовок, описывающий, как минимум, пункт назначения (представлен H в каждом блоке данных). Этот полный пакет информации - исходный блок данных и заголовок - называется пакетом. Заголовок также может описывать, что находится внутри пакета, и может включать любые специальные инструкции по обработке, которые устройства пересылки должны принимать при обработке пакета - их иногда называют метаданными или «данными о данных в пакете». Есть два пакета, произведенных A: A1, предназначенный для E; и A2, предназначенный для F. B также отправляет два пакета: B1, предназначенный для F, и B2, предназначенный для E. Когда C получает эти пакеты, он считывает небольшую часть заголовка пакета, часто называемого полем, чтобы определить место назначения. Затем C обращается к локальной таблице, чтобы определить, по какому исходящему интерфейсу должен быть передан пакет. D делает то же самое, перенаправляя пакет из правильного интерфейса к месту назначения. Этот способ пересылки трафика называется переадресацией по частям, поскольку каждое устройство в сети принимает совершенно независимое решение о том, куда пересылать каждый отдельный пакет. Локальная таблица, к которой обращается каждое устройство, называется таблицей пересылки; обычно это не одна таблица, а множество таблиц, потенциально включающих в себя базу информации маршрутизации (RIB) и базу информации пересылки (FIB). В оригинальных системах с коммутацией каналов плоскость управления полностью отделена от пересылки пакетов по сети. С переходом от коммутации каналов к коммутации пакетов произошел соответствующий переход от решений централизованного контроллера к распределенному протоколу, работающему в самой сети. В последнем случае каждый узел способен принимать свои собственные решения о пересылке локально. Каждое устройство в сети запускает распределенный протокол, чтобы получить информацию, необходимую для построения этих локальных таблиц. Эта модель называется распределенной плоскостью управления; таким образом, идея плоскости управления была просто перенесена из одной модели в другую, хотя на самом деле они не означают одно и то же. Сети с коммутацией пакетов могут использовать централизованную плоскость управления, а сети с коммутацией каналов могут использовать распределенные плоскости управления. В то время, когда сети с коммутацией пакетов были впервые спроектированы и развернуты, однако они обычно использовали распределенные плоскости управления. Software-Defined Networks (SDN) вернули концепцию централизованных плоскостей управления в мир сетей с коммутацией пакетов. Первым преимуществом сети с коммутацией пакетов над сетью с коммутацией каналов является парадигма пересылки hop-by-hop. Поскольку каждое устройство может принимать полностью независимое решение о пересылке, пакеты могут динамически пересылаться в зависимости от изменений в топологии сети, что устраняет необходимость связываться с контроллером и ждать решения. Пока существует как минимум два пути между источником и пунктом назначения (сеть имеет два подключения), пакеты, переданные в сеть источником, в конечном итоге будут переданы в пункт назначения. Вторым преимуществом сети с коммутацией пакетов по сравнению с сетью с коммутацией каналов является то, как сеть с коммутацией пакетов использует пропускную способность. В сети с коммутацией каналов, если конкретная схема (действительно временной интервал в приведенном примере TDM) не используется, то слот просто тратится впустую. При переадресации hop-by-hop каждое устройство может наилучшим образом использовать пропускную способность, доступную на каждом исходящем канале, чтобы нести необходимую нагрузку трафика. Хотя это локально сложнее, это проще глобально, и это позволяет лучше использовать сетевые ресурсы. Основным недостатком сетей с коммутацией пакетов является дополнительная сложность, особенно в процессе пересылки. Каждое устройство должно быть в состоянии прочитать заголовок пакета, найти пункт назначения в таблице, а затем переслать информацию на основе результатов поиска в таблице. В раннем аппаратном обеспечении это были сложные, трудоемкие задачи; коммутация каналов была обычно быстрее, чем коммутация пакетов. Поскольку со временем аппаратное обеспечение усовершенствовалось, то скорость переключения пакета переменной длины, как правило, достаточно близка к скорости переключения пакета фиксированной длины, так что между пакетной коммутацией и коммутацией каналов небольшая разница. Управление потоками в сетях с коммутацией пакетов В сети с коммутацией каналов контроллер выделяет определенную полосу пропускания для каждого канала, назначая временные интервалы от источника до назначения. Что происходит, если передатчик хочет отправить больше трафика, чем выделенные временные интервалы будут поддерживать? Ответ — прост-это невозможно. В некотором смысле, таким образом, возможность управлять потоком пакетов через сеть встроена в сеть с коммутацией каналов; и нет способа отправить больше трафика, чем может передать сеть, потому что «пространство», которое имеет передатчик в своем распоряжении для отправки информации, предварительно выделяется. А как насчет сетей с коммутацией пакетов? Если все звенья сети, показанные на рис. 3, имеют одинаковую скорость соединения, что произойдет, если и А, и В захотят использовать всю пропускную способность соединения в направлении С? Как C решит, как отправить все это в D по каналу связи, который пропускает вдвое меньше трафика, необходимого для обработки? Здесь можно использовать методы управления транспортными потоками. Как правило, они реализованы в виде отдельного набора протоколов / правил, «движущихся поверх» базовой сети, помогая «организовать» передачу пакетов путем создания виртуального канала между двумя взаимодействующими устройствами. Протокол управления передачей (TCP) обеспечивает управление потоком для сетей с коммутацией пакетов на основе Интернет-протокола (IP). Этот протокол был впервые указан в 1973 году Vint Cerf и Bob Kahn. онтроллер выделяет определенную полосу пропускания для каждого канала, назначая временные интервалы от источника до назначения. Что происходит, если передатчик хочет отправить больше трафика, чем выделенные временные интервалы будут поддерживать? Ответ — прост-это невозможно. В некотором смысле, таким образом, возможность управлять потоком пакетов через сеть встроена в сеть с коммутацией каналов; и нет способа отправить больше трафика, чем может передать сеть, потому что «пространство», которое имеет передатчик в своем распоряжении для отправки информации, предварительно выделяется. А как насчет сетей с коммутацией пакетов? Если все звенья сети, показанные на рис. 3, имеют одинаковую скорость соединения, что произойдет, если и А, и В захотят использовать всю пропускную способность соединения в направлении С? Как C решит, как отправить все это в D по каналу связи, который пропускает вдвое меньше трафика, необходимого для обработки? Здесь можно использовать методы управления транспортными потоками. Как правило, они реализованы в виде отдельного набора протоколов / правил, «движущихся поверх» базовой сети, помогая «организовать» передачу пакетов путем создания виртуального канала между двумя взаимодействующими устройствами. Протокол управления передачей (TCP) обеспечивает управление потоком для сетей с коммутацией пакетов на основе Интернет-протокола (IP). Этот протокол был впервые указан в 1973 году Vint Cerf и Bob Kahn.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59