По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Система контроля версий (Version Control System) – это инструмент, который используется для отслеживания, внесения и управления изменениями в программном коде. Это также можно назвать просто контролем версий. Системы контроля версий помогает разработчикам сохранять изменения, внесенные в файл, на разных этапах, чтобы и они сами, и их коллеги могли их увидеть позже. Существует три типа систем контроля версий: Локальные системы контроля версий Централизованные системы контроля версий Распределенные системы контроля версий Что такое локальная система контроля версий (LVCS)? Этот тип системы контроля версий очень распространен и прост в использовании. Однако этот метод может выдавать ошибки и подвержен атакам, потому что файлы хранятся в вашей локальной системе. Это означает, что вы можете потерять системный файл или случайно забыть каталог, с которым вы работаете (и затем записать в другой каталог). Что такое централизованная система контроля версий (CVCS)? В этом типе контроля версий сервер работает как общее хранилище, в котором находятся все версии кода. CVCS помогает разработчикам работать совместно. Однако, несмотря на то, что такой метод позволяет разработчикам сотрудничать, если сервер отключится на несколько секунд или будет поврежден, то есть шанс, что вы потеряете все файлы. Это является серьезной проблемой при работе с CVCS. В CVCS только несколько разработчиков могут работать совместно над проектом. Что такое распределенная система контроля версий (DVCS)? В настоящее время это новый и наиболее часто используемый тип системы контроля версий. В DVCS у каждого разработчика есть полная резервная копия всех данных на сервере. Это означает, что всякий раз, когда сервер не будет работать или будет неисправен, то вы все равно сможете работать над своим проектом, а также копировать или создавать резервные копии своих хранилищ на сервере, чтобы восстановить их. При работе с DVCS над одним проектом может работать много разработчиков. Одной из популярнейших DVCS является Git, о которой мы сейчас будем говорить подробнее. Что такое Git? Git – это бесплатная распределенная система контроля версий с открытым исходным кодом, которую можно использовать для отслеживания изменений в ваших файлах. В Git можно работать над всеми типами и размерами проектов. С помощью Git вы можете добавлять изменения в свой код, а затем фиксировать их (или сохранять), когда это необходимо. Это означает, что у вас есть возможность вернуться к ранее внесенным изменениям. Git работает рука об руку с GitHub. А что же такое GitHub? Что такое GitHub? GitHub – это веб-интерфейс, в котором можно хранить свои репозитории Git, а также эффективно отслеживать и управлять своими изменениями. С его помощью разные разработчики имеют доступ к коду одного проекта. У вас есть возможность вносить свои собственные изменения в проект одновременно с другими разработчиками. Например, если вы вдруг допустили какую-то ошибку во время внесения изменений, вы можете легко вернуться к предыдущему этапу, где ошибки еще нет. Для чего нужно использовать GitHub? Есть множество причин для использования GitHub. Давайте рассмотрим некоторые из них. Эффективное управление проектами GitHub – это своего рода хранилище ваших репозиториев. GitHub позволяет разработчикам работать над одним проектом, находясь в разных местах. С помощью GitHub вы можете легко отслеживать внесенные вами изменения и управлять ими, а также проверять ход вашей работы над проектом. Простое сотрудничество С GitHub разработчики со всего мира могут работать вместе на одним проектом без каких-либо проблем. Команды разработчиков могут оставаться на одной странице во время совместной работы над проектом и могут легко организовывать и эффективно управлять проектом. Открытый исходный код GitHub – это бесплатная система с открытым исходным кодом. Это означает, что разработчики могут легко получить доступ к различным типам кода/проектов, которые они могут использовать для обучения и развития своих навыков. Универсальность Это свойство GitHub очень важно. GitHub – это веб-интерфейс не только для разработчиков. Его также могут использовать дизайнеры, писатели и все, кто хочет отслеживать историю своих проектов. Как настроить Git? Чтобы использовать Git, его необходимо загрузить на свой компьютер. Сделать это можно, зайдя на официальный сайт. Когда сайт откроется, прокрутите страницу вниз, и вы увидите кнопку загрузки. Нажмите на нее. Выберите свою операционную систему: Windows, MacOS, Linux/Unix. В моем случае я выбираю Windows, потому что я использую компьютер именно с этой операционной системой. Нажмите на первую ссылку в самом верху страницы, чтобы загрузить последнюю версию Git. Когда загрузка будет завершена, установите Git на свой компьютер. Для этого вам нужно будет перейти в папку, куда был загружен файл, и установить его. После завершения установки, необходимо убедиться, что Git успешно установлен в вашей системе. Откройте командную строку или Git bash (в зависимости от того, что вы решили использовать) и выполните команду: git --version Если Git был успешно установлен на вашем компьютере, то он должен отобразить текущую версию Git под командой, которую вы только что выполнили. Если отображается, то мои поздравления! Как настроить Git? Теперь, когда мы установили Git на компьютер, нам нужно его настроить. Мы делаем это для того, чтобы каждый раз, когда мы работаем в команде над проектом, мы могли бы легко идентифицировать сделанные нами коммиты в репозитории. Чтобы настроить Git, нам нужно указать имя, адрес электронной почты и ветку с помощью команды git config --global. Например: На изображении выше мы использовали git config --global user.name для настройки имени пользователя. То же самое относится и к конфигурации git config --global user.email. Git имеет ветку по умолчанию master, можно поменять называние, чтобы она называлась main, с помощью команды git config --global init.default branch main. Теперь вы готовы начать использовать Git. Чтобы настроить учетную запись GitHub, зайдите на их официальный сайт. Нажмите на кнопку регистрации в правом верхнем углу: Когда откроется форма регистрации, введите свой адрес электронной почты, создайте пароль, введите свое имя пользователя, а затем проверьте все, прежде чем нажимать кнопку создания учетной записи. Популярные команды Git Есть несколько основных команд Git, которые должен знать каждый разработчик: git config git init git remote add origin git add git commit git clone git push git rm git branch git diff git log git checkout git merge Давайте кратко рассмотрим каждую из них, чтобы вы понимали, как их использовать. Как использовать команду git config Эта команда используется для того, чтобы установить имя пользователя, адрес электронной почты и ветку пользователя, чтобы определить, кто зафиксировал изменения при работе над проектом. Эта команда используется, когда вы загрузили Git на свой компьютер и хотите настроить его для своего использования. Например: git config --global user.name “[username]” git config --global user.email [email address] Как использовать команду git init Эта команда используется для того, чтобы запустить Git в своем проекте для отслеживания изменений, внесенных в проект. git init Когда вы запускаете эту команду, вы должны увидеть, что папка с названием .git автоматически создалась в текущей папке, над которой вы работаете. Как использовать команду git remote add origin Теперь мы укажем нашей кодовой базе (папке, в которой находится наш код), где хранить наш код в облаке. Мы введем git remote add origin [your-repo-url], который установит источник для нашего репозитория. Теперь мы можем заливать (пушить) код в наш источник (origin), чтобы сохранить его на наше облако в GitHub. Как использовать команду git add Эта команда добавляет ваш файл в промежуточную область (staging area). Промежуточная область – это та область, в которую добавляются файлы, в которые мы вносим изменения, и где они ждут следующего коммита. Чтобы добавить файл в промежуточную область, нужно воспользоваться командой git add. Она добавляет все файлы в папке в промежуточную область. git add (file name) добавляет имя конкретного файла, который вы хотите зафиксировать в промежуточной области. Эту команду нужно использовать тогда, когда вы внесли изменения в файл и хотите зафиксировать их в своем проекте. Как использовать команду git commit Эта команда фиксирует любой файл, который был добавлен с помощью команды git add, а также все файлы в промежуточной области. git commit –m “first commit” Эта команда навсегда сохраняет файл в репозиторий Git. Ее необходимо использовать каждый раз, когда вы добавляете файл в промежуточную область с помощью команды git add. -m называется «флагом» и сигнализирует о том, что есть необязательные действия, которые мы хотели бы выполнить с этим комитом. Флаг m означает, что впоследствии мы предоставим сообщение, которое является в нашем случае - «first commit». Как использовать команду git clone Эта команда используется для того, чтобы скопировать существующий репозиторий в другую область из одного места в другое. git clone (repository name) Эта команда используется, когда вы хотите продублировать репозиторий Git из GitHub в локальное хранилище. Как использовать команду git push Эта команда используется для того, чтобы загрузить/отправить файлы из локального репозитория/хранилища в другое хранилище, например, в удаленное, такое как GitHub. git push (remote storage name) Эта команда используется только тогда, когда вы довольны всеми изменениями и комитами, которые были сделаны в проекте, и, наконец, хотите отправить их в репозиторий Git на GitHub. Как использовать команду git rm Эта команда используется для того, чтобы удалить файл из рабочего репозитория. git rm (filename) Эта команда используется только тогда, когда вам необходимо избавиться от нежелательных изменений или файлов из репозитория Git. Как использовать команду git branch Эта команда используется для того, чтобы проверить текущую ветку, над который вы работаете, main или master. git branch Эта команда поможет вам узнать имя текущей ветки, над которой вы работаете. Как использовать команду git diff Git покажет вам разницу между кодом, который у вас есть сейчас, и кодом, когда он был сохранен в последний раз. Немного сложно понять, что здесь происходит, но - — это удаления, а + — вставки. Мы удалили текст Hello, this is a git example и добавили текст Now I have changed the first line. Так Git отслеживает, что изменилось между версиями. diff --git a/git.js b/git.js index eb0f1d1..8dbf769 100644 --- a/git.js +++ b/git.js @@ -1,3 +1,3 @@ +console.log('Now I have changed the first line.') -console.log('Hello, this is a git example!') console.log('And here is another!') console.log('And yet a third') Как использовать команду git log Мы можем просмотреть сделанные нами коммиты с помощью команды git log. Это может выглядеть так: commit 67627dd44e84a3106a18a19e94cf9f3723e59b3c (HEAD -> master) Author: amberwilkie amber@amberwilkie.com Date: Wed Apr 22 16:55:39 2020 -0400 Update first console log commit 49fe4152f474a9674a83e2b014a08828209d2690 Author: amberwilkie amber@amberwilkie.com Date: Wed Apr 22 16:54:59 2020 -0400 Initial commit Мы видим наши сообщения комиты, время, в которое мы их совершили, и уникальный идентификатор для нашго комита, который мы можем использовать для ссылки на коммиты в будущем. Как использовать команду git checkout Если мы хотим вернуться и увидеть изменения в нашем коде из предыдущего коммита, мы сделаем это с помощью: git checkout 49fe4152f474a9674a83e2b014a08828209d2690 Git поместит наш код во временное состояние, чтобы мы могли посмотреть, как код выглядел на этом снимке во времени. Тут мы использовали идентификатор комитаю Чтобы вернуться к нашей ветке, введите git checkout [branch_name]. Как использовать команду git merge git merge возьмет все коммиты, которые вы сделали в этой ветке, и вставит их в основную ветку, сохранив вашу работу. Ветки Git полагается на ветвление для поддержки нашего кода. Вы можете считать главной веткой (обычно это master или main) ствол вашего дерева кода. Вы можете отпочковаться от нее и внести некоторые изменения, но конечная цель всегда состоит в том, чтобы вернуть их в ствол, в основную ветку. Вы можете использовать git checkout для создания новой ветки, а не только для проверки предыдущих версий вашего кода. Попробуйте использовать git checkout -b new-branch. Флаг -b используется, когда мы создаем новую ветку, и после флага мы пишем имя нашей новой ветки. Мы можем сделать много коммитов в этой ветке, а затем вернуть их в master с помощью процесса, называемого слиянием (merging), используя для этого команду git merge. На диаграмме ниже точки обозначают коммиты. Две ветки были сделаны от мастера. В разработке программного обеспечения мы часто называем эти «функциональные» (feature) ветки, в отличие от основной главной ветки. Синяя ветвь была объединена с мастером, а желтая ветвь все еще находится в разработке. Обратите внимание, что несмотря на то, что желтая ветка была создана после синей ветки, в этой ветке будут видны только изменения из мастера. Если мы создадим третью ветку когда-нибудь в будущем, изменения как из master, так и из синей ветки будут присутствовать в новой, третьей ветке. Просмотр кода в GitHub Теперь ваш код находится GitHub! Вы можете щелкать по файлам и папкам вашего репозитория, просматривая текущее состояние кода. Вы также можете просмотреть предыдущие версии кода. Вы увидите список коммитов, сделанных в репо, и если вы нажмете на них, вы сможете просмотреть файлы вашего проекта в том виде, в каком они существовали в этот период времени. Пулл-реквесты Есть много других возможностей GitHub, но самая важная в совместной работе с коллегами — это пулл реквесты (pull request). Пулл реквест (очень часто сокращается до PR или ПР) — это способ управления входящими изменениями в базе кода. По сути это событие, когда один участник просит влить свои изменения в ветку. Чтобы сделать это, вы создадите новую ветку на своем локальном компьютере, создадите хотя бы один комит в этой ветке, а затем сделайте git push origin head отправите эту ветку на GitHub. (Вы можете указать имя своей ветки вместо заголовка, но это полезно для точного соответствия всех элементов). Теперь, когда вы вернетесь на GitHub, вы увидите, что ваша ветка доступна для создания PR. Если вы нажмете кнопку Compare & pull request, вы сможете изменить многие настройки для своего PR. Наиболее важными, как правило, являются заголовок и описание. Если вы работаете в команде, вы можете пометить коллег, чтобы попросить их просмотреть ваш код, добавить в проекты и использовать многие другие функции. Обратите внимание, что мы сравниваем ветки. Здесь мы просим добавить изменения из этой ветки (pr-пример) в основную ветку. Но мы могли бы ориентироваться на любую другую ветку в нашем репо. А пока просто помните, что master — не единственная ветка, с которой вы можете сделать ПР. Когда вы нажмете Create Pull Request, вы увидите этот экран: Вы можете посмотреть все коммиты в этой ветке, а также можете слить свой пулреквест. Помните, как мы могли объединить наш код локально при помощи merge, когда говорили о Git? Мы можем выполнить то же действие с нашим облачным кодом на GitHub. Если вы нажмете зеленую кнопку Merge pull request, ваши изменения будут объединены в мастер. Заключение Благодаря этому руководству, вы узнали, что такое системы контроля версий. Также вы узнали, как установить и настроить Git на своем компьютере и настроить учетную запись GitHub. И, наконец, мы рассмотрели некоторые популярные команды Git.
img
Одним из важных компонентов установления соединения по протоколу SIP является протокол Session Description Protocol, или сокращенно SDP. О протоколе SDP впервые заговорили в 1998 году в рамках опубликованного RFC2327. Спустя 8 лет, в 2006 году протокол претерпел некоторые изменения, которые были отображены в RFC4566. Протокол SDP используется для установления соединения и согласования параметров передачи и приема аудио или видео потоков между оконечными устройствами. Наиболее важными параметрами обмена являются IP – адреса, номера портов и кодеки. Давайте разбираться? Пример SDP При установлении сессии SDP параметры передаются в рамках SIP – запросов. Давайте взглянем на один из таких запросов. В данном случае распарсим SIP INVITE, который прилетело на нашу IP – АТС Asterisk с помощью утилиты sngrep: INVITE sip:74996491913@192.168.x.xxx:5061;transport=UDP SIP/2.0 Via: SIP/2.0/UDP 80.xx.yy.zz:5060;branch=z9hG4bK-524287-1-MThkZjMzNzMyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;rport Via: SIP/2.0/UDP 80.xx.yy.zz:5077;branch=z9hG4bK-XXXXXXXXXXXXXXXX;rport=5077 Max-Forwards: 69 Record-Route: <sip:80.xx.yy.zz:5060;lr;transport=UDP> Contact: <sip:80.xx.yy.zz:5077> To: <sip:74996491913@80.xx.yy.zz> From: <sip:7925XXXXXXX@80.xx.yy.zz>;tag=qdpxhe2avyyjcqfn.o Call-ID: fb9909e8fYYYYYYYYYYYYYYYYYYYYYY CSeq: 479 INVITE Expires: 300 Allow: INVITE, ACK, BYE, CANCEL, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS, UPDATE Content-Disposition: session Content-Type: application/sdp User-Agent: Sippy P-Asserted-Identity: <sip:7925XXXXXXX@80.xx.yy.zz> Remote-Party-ID: <sip:7925XXXXXXX@80.xx.yy.zz>;party=calling h323-conf-id: 4133864240-4217115111-2706418710-XXXXXXXXX Portasip-3264-action: offer 1 cisco-GUID: 4133864240-4217115111-2706418710-XXXXXXXXX Content-Length: 278 v=0 o=Sippy 1011212504475793896 1 IN IP4 80.xx.yy.zz s=- c=IN IP4 80.xx.yy.zz t=0 0 m=audio 57028 RTP/AVP 0 8 18 101 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:18 G729/8000 a=fmtp:18 annexb=yes a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=sendrecv В приведенном примере можно увидеть, что основная часть SIP – сообщения отделена от SDP сегмента пустой строкой. Помимо прочего, поле Content-Type, что сообщение сопоставимо с SDP параметрами. Про SDP поля Каждый из параметров SDP сообщения можно отнести к одной из следующих категорий: Имя сессии; Время, в течении которого сессия активна; Параметры медиа; Информация о пропускной способности; Контактная информация; Поговорим об основных параметрах. Они всегда имеют следующее обозначение: <поле> = <значение>. Поле всегда обозначается 1 буквой. Поле Значение Формат v= версия протокола v=0 o= инициатор сессии и соответствующие идентификаторы o=<имя_пользователя> <идентификатор_сессии> <версия> <тип_сети> <тип_адреса> <адрес>. В нашем примере поле o=Sippy 1011212504475793896 1 IN IP4 80.xx.yy.zz (IN - тип сети, интернет, IP4 - тип адреса, IPv4; s= имя сессии в нашем примере прочерк ("-"), имя сессии не указано; c= информация о подключении; Синтаксис таков: c=<тип_сети> <тип_адреса> <адрес>. В нашем примере IN IP4 80.xx.yy.zz. Параметры IN/IP4 объяснены выше. t= время активности сессии Синтаксис поля таков: t=<начальное_время> <конечное_время>. Это обязательное поле, но важно отметить, что оно весьма субъективно, так как невозможно предсказать точное время начала и окончания. В нашем примере t=0 0 m= тип передачи медиа данных, формат и адресация m=<тип_медиа> <порт> <транспорт> <формат_передачи>. Давайте разберемся - у нас m=audio 57028 RTP/AVP 0 8 18 101, это означает передачу аудио (может быть значение video, или передача обоих типов), порт передачи обозначен как 57028, транспорт, указанный как RTP/AVP, означает передачу по протоколу RTP в рамках стандарта Audio and Video Conferences with Minimal Control, который описан в RFC3551. После, первый 0 означает протокол G.711 uLaw, 8 означает G.711 ALaw, 18 означает G.729. То есть условно говоря, нам предложено предпочтение кодеков сначала G.711 uLaw, затем G.711 ALaw, и третьим приоритетом G.729. 101 означает поддержку динамического типа данных, например DTMF. a= параметры сессии a=<параметр> или a=<параметр><значение>. SDP сессия может содержать несколько дополнительных атрибутов передачи. Более подробно мы рассмотрим далее. Помимо указанных параметров, зачастую встречаются такие как k=, в рамках которого описывается метод шифрования, или i=, содержащий дополнительную информацию о сессии. Поговорим про параметры поля a=: Параметр Синтаксис и описание rtpmap a=rtpmap:<тип> <название_кодировки>/<частота_дискретизации> [/<параметры_кодирования>]. Данный параметр подсказывает имена кодеков, частоту и прочие параметры кодирования для данных, обозначенных в параметре m=. Например, у нас a=rtpmap:0 PCMU/8000, означает использование G.711 с импульсно - кодовой модуляцией по U - закону с частотой дискретизации 8000 Гц. sendrecv a=sendrecv Данный параметр указывает на то, что мы собираемся отправлять и получать медиа - данные. Например, возможно опция отправки (sendonly), только получение (recvonly) и отключения медиа (inactive); ptime a=ptime:<длительность_пакета> Продолжительность RTP - пакет (в миллисекундах). Условно говоря, какой длительности фрагмент голоса переносит один RTP - пакет; fmtp a=fmtp:<формат> <специальные_параметры> Параметр описывает дополнительные параметры сессии, например, такие как режим подавления тишины (VAD) и прочие;
img
До сих пор в этой серии статей примеры перераспределения маршрутов, над которыми мы работали, использовали один роутер, выполняющий перераспределение между нашими автономными системами. Однако с точки зрения проекта, глядя на этот роутер понимаем, что это единственная уязвимая точка, то есть точка отказа. Для избыточности давайте подумаем о добавлении второго роутера для перераспределения между несколькими автономными системами. То, что мы, вероятно, не хотим, чтобы маршрут объявлялся, скажем, из AS1 в AS2, а затем AS2 объявлял тот же самый маршрут обратно в AS1, как показано на рисунке. Хорошая новость заключается в том, что с настройками по умолчанию, скорее всего не будет проблем. Например, на приведенном выше рисунке роутер CTR2 узнал бы два способа добраться до Сети A. Один из способов — это через OSPF, к которому он подключен. Другой путь был бы через EIGRP AS, через роутер CTR1 и обратно в OSPF AS. Обычно, когда роутер знает, как добраться до сети через два протокола маршрутизации, он сравнивает значения административного расстояния (AD) протоколов маршрутизации и доверяет протоколу маршрутизации с более низким AD. В этом примере, хотя EIGRP AD обычно составляет 90, что более правдоподобно, чем OSPF AD 110, AD EIGRP External route (т. е. маршрута, который возник в другом AS) составляет 170. В результате OSPF-изученный маршрут CTR2 к сети A имеет более низкую AD (т. е. 110), чем AD (т. е. 170) EIGRP-изученного маршрута к сети A. Что в итоге? CTR2 отправляет трафик в Сеть A, отправляя этот трафик в OSPF AS, без необходимости передавать EIGRP AS. Время от времени, однако, нам потребуется произвести настройки некоторых не дефолтных параметров AD, или же нам понадобятся creative metrics, применяемые к перераспределенным маршрутам. В таких случаях мы подвергаемся риску развития событий, описанных на предыдущем рисунке. Давайте обсудим, как бороться с такой проблемой. Рассмотрим следующую топологию. В этой топологии у нас есть две автономные системы, одна из которых работает под управлением OSPF, а другая- под управлением EIGRP. Роутеры CTR1 и CTR2 в настоящее время настроены для выполнения взаимного перераспределения маршрутов между OSPF и EIGRP. Давайте взглянем на таблицы IP-маршрутизации этих магистральных роутеров. Обратите внимание, в приведенном выше примере, что с точки зрения роутера CTR2, лучший способ добраться до Сети 192.0.2.0 / 30 — это next-hop на следующий IP-адрес 192.0.2.5 (который является роутером OFF1). Это означает, что если бы роутер CTR2 хотел отправить трафик в сеть 192.0.2.0 /30, то этот трафик остался бы в пределах OSPF AS. Интересно, что процесс маршрутизации EIGRP, запущенный на роутере CTR2, также знает, как добраться до Сети 192.0.2.0 / 30 из-за того, что роутер CTR1 перераспределяет этот маршрут в Интересно, что процесс маршрутизации EIGRP, запущенный на роутере CTR2, также знает, как добраться до Сети 192.0.2.0 / 30 из-за того, что роутер CTR1 перераспределяет этот маршрут в EIGRP AS, но этот маршрут считается EIGRP External route. Поскольку EIGRP External route AD 170 больше, чем OSPF AD 110, в OSPF маршрут прописывается в таблице IP-маршрутизации роутера CTR2. Именно так обычно работает Route redistribution, когда у нас есть несколько роутеров, выполняющих перераспределение маршрутов между двумя автономными системами. Однако, что мы можем сделать, если что-то идет не так, как ожидалось (или как мы хотели)? Как мы можем предотвратить перераспределение маршрута, перераспределенного в AS, из этого AS и обратно в исходное AS, например, в примере, показанном на следующем рисунке. В приведенном выше примере роутер OFF1 объявляет сеть 192.168.1.0 / 24 роутеру CTR1, который перераспределяет этот маршрут из AS1 в AS2. Роутер OFF2 получает объявление маршрута от роутера CTR1 и отправляет объявление для этого маршрута вниз к роутеру CTR2. Роутер CTR2 затем берет этот недавно изученный маршрут и перераспределяет его от AS2 к AS1, откуда он пришел. Мы, скорее всего, не хотим, чтобы это произошло, потому что это создает неоптимальный маршрут. Общий подход к решению такой проблемы заключается в использовании route map в сочетании с tag (тегом). В частности, когда маршрут перераспределяется из одного AS в другой, мы можем установить тег на этом маршруте. Затем мы можем настроить все роутеры, выполняющие перераспределение, чтобы блокировать маршрут с этим тегом от перераспределения обратно в его исходный AS, как показано на следующем рисунке. Обратите внимание, что в приведенной выше топологии, когда маршрут перераспределяется от AS1 к AS2, он получает тег 10. Кроме того, роутер CTR2 имеет инструкцию (настроенную в карте маршрутов), чтобы не перераспределять любые маршруты из AS2 в AS1, которые имеют тег 10. В результате маршрут, первоначально объявленный роутером OFF1 в AS1, никогда не перераспределяется обратно в AS1, тем самым потенциально избегая неоптимального маршрута. Далее давайте еще раз рассмотрим, как мы можем настроить этот подход к тегированию, используя следующую топологию. В частности, на роутерах CTR1 и CTR2 давайте установим тег 10 на любом маршруте, перераспределяемом из OSPF в EIGRP. Затем, на тех же самых роутерах, мы предотвратим любой маршрут с тегом 10 от перераспределения из EIGRP обратно в OSPF. Для начала на роутере CTR1 мы создаем карту маршрутов, целью которой является присвоение тегу значения 10. CTR1 # conf term CTR1 (config) # route-map TAG10 CTR1 (config-route-map) # set tag 10 CTR1 (config-route-map) #exit CTR1 (config) # Обратите внимание, что мы не указали permit как часть инструкции route-map, и мы не указали порядковый номер. Причина в том, что permit — это действие по умолчанию, и карта маршрута TAG10 имела только одну запись. Далее мы перейдем к роутеру CTR2 и создадим карту маршрутов, которая предотвратит перераспределение любых маршрутов с тегом 10 в OSPF. Кроме того, мы хотим, чтобы роутер CTR2 маркировал маршруты, которые он перераспределяет из OSPF в EIGRP со значением тега 10. Это означает, что мы хотим, чтобы роутер CTR1 предотвратил перераспределение этих маршрутов (со значением тега 10) обратно в OSPF. Итак, пока мы находимся здесь на роутере CTR1, давайте настроим route-map, которая предотвратит Route redistribution со значением тега 10 в OSPF. CTR1 (config) # route-map DENYTAG10 deny 10 CTR1 (config-route-map) # match tag 10 CTR1 (config-route-map) # exit CTR1 (config) # route-map DENYTAG10 permit 20 CTR1 (config-route-map) # end CTR1 # Эта недавно созданная route-map (DENYTAG10) использует ключевые слова permit и deny, и у нее есть порядковые номера. Порядковый номер 10 используется для запрещения маршрутов с тегом 10. Затем имеем следующий порядковый номер (который мы пронумеровали 20), чтобы разрешить перераспределение всех других маршрутов. Теперь, когда мы создали наши две карты маршрутов, давайте применим TAG10 route map к команде EIGRP redistribute (к тегу routes, перераспределяемому в EIGRP со значением 10). Кроме того, мы хотим применить DENYTAG10 route map к команде OSPF redistribute (чтобы предотвратить перераспределение маршрутов, помеченных значением 10, обратно в OSPF AS). CTR1 # conf term CTR1 (config) # router eigrp 100 CTR1 (config-router) # redistribute ospf 1 route-map TAG10 CTR1 (config-router) # router ospf 1 CTR1 (config-router) # redistribute eigrp 100 subnets route-map DENYTAG10 CTR1 (config-router) # end CTR1 # Теперь нам нужно ввести зеркальную конфигурацию на роутере CTR2. CTR2#conf term CTR2(config)#route-map TAG10 CTR2(config-route-map) # set tag 10 CTR2(config-route-map) # exit CTR2(config)#route-map DENYTAG10 deny 10 CTR2(config-route-map) # match tag 10 CTR2(config-route-map) # exit CTR2(config) # route-map DENYTAG10 permit 20 CTR2(config-route-map) # exit CTR2(config) # router eigrp 100 CTR2(config-router) # redistribute ospf 1 route-map TAG10 CTR2(config-router) # router ospf 1 CTR2(config-router) # redistribute eigrp 100 subnets route-map DENYTAG10 CTR2(config-router) # end CTR2# Просто чтобы убедиться, что наши маршруты помечены, давайте проверим таблицу топологии EIGRP роутера OFF2. Обратите внимание, что все маршруты, перераспределенные в EIGRP из OSPF, теперь имеют тег 10, и мы сказали роутерам CTR1 и CTR2 не перераспределять эти маршруты обратно в OSPF. Именно так мы можем решить некоторые потенциальные проблемы, возникающие при перераспределении маршрутов. Дело за малым - прочитайте нашу статью про route redistribution с помощью IPv6.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59