exam22 - stankin/inet-2022 GitHub Wiki

Билет 22

1. Понятия сетевого шлюза, маршрутизатора, прокси-сервера и межсетевого экрана.

2. Программная и аппаратная реализация сетевых шлюзов. Использование репозиториев и системы управления версиями в веб-разработке.

◀️ Реферат к вопросам экзамена по дисциплине Интернет-технологии 1 курса магистратуры ▶️

Выполнили: Филатова Ольга ИДМ-22-08, Просякова Дарья ИДМ-22-02, Торчинский Максим ИДМ-22-01, Григорян Артур ИДМ-22-03, Трошин Владислав ИДМ-22-07, Каплин Денис ИДМ-22-05


1. Понятия сетевого шлюза, маршрутизатора, прокси-сервера и межсетевого экрана.

Сетевой шлюз — аппаратный маршрутизатор или программное обеспечение для сопряжения компьютерных сетей, использующих разные протоколы (например, локальной и глобальной) [1].

Рис. 1.1. Сетевой шлюз

Сетевой шлюз конвертирует протоколы одного типа физической среды в протоколы другой физической среды (сети). Например, при соединении локального компьютера с сетью Интернет обычно используется сетевой шлюз [1].

Сетевые шлюзы работают на всех известных операционных системах. Основная задача сетевого шлюза — конвертировать протокол между сетями. Роутер сам по себе принимает, проводит и отправляет пакеты только среди сетей, использующих одинаковые протоколы. Сетевой шлюз может с одной стороны принять пакет, сформатированный под один протокол (например Apple Talk) и конвертировать в пакет другого протокола (например TCP/IP) перед отправкой в другой сегмент сети. Сетевые шлюзы могут быть аппаратным решением, программным обеспечением или тем и другим вместе, но обычно это программное обеспечение, установленное на роутер или компьютер. Сетевой шлюз должен понимать все протоколы, используемые роутером. Обычно сетевые шлюзы работают медленнее, чем сетевые мосты, коммутаторы и обычные маршрутизаторы. Сетевой шлюз — это точка сети, которая служит выходом в другую сеть. В сети Интернет узлом или конечной точкой может быть или сетевой шлюз, или хост. Интернет-пользователи и компьютеры, которые доставляют веб-страницы пользователям — это хосты, а узлы между различными сетями — это сетевые шлюзы. Например, сервер, контролирующий трафик между локальной сетью компании и сетью Интернет — это сетевой шлюз [1].

В крупных сетях сервер, работающий как сетевой шлюз, обычно интегрирован с прокси-сервером и межсетевым экраном. Сетевой шлюз часто объединен с роутером, который управляет распределением и конвертацией пакетов в сети [1].

Сетевой шлюз может быть специальным аппаратным роутером или программным обеспечением, установленным на обычный сервер или персональный компьютер. Большинство компьютерных операционных систем использует термины, описанные выше. Компьютеры под Windows обычно используют встроенный мастер подключения к сети, который по указанным параметрам сам устанавливает соединение с локальной или глобальной сетью. Такие системы могут также использовать DHCP-протокол. Dynamic Host Configuration Protocol (DHCP) — это протокол, который обычно используется сетевым оборудованием, чтобы получить различные данные, необходимые клиенту для работы с протоколом IP. С использованием этого протокола добавление новых устройств и сетей становится простым и практически автоматическим [1].

Маршрутизатор – это устройство, которое строит на основе таблицы маршрутизации локальную сеть, принимает внешние пакеты от интернет провайдера и передаёт из получателю по кабелю или беспроводной технологии Wi-Fi.

Рис. 1.2. Маршрутизатор

  1. Первый вход – для питания от розетки.
  2. USB – туда можно воткнуть принтер или флэшку, жесткий диск. Это нужно для того, чтобы все пользователи сети могли иметь доступ к одному выделенному месту. Закачал туда фильмов и смотришь с ноутбука, который подключен к сети. Также можно организовать Torrent-сервер и закачивать фильмы туда в автономном режиме. Ушел спать – а фильмы качаются. Полезная штука. Также не забываем про 3G/4G модемы, которые также работают через этот порт.
  3. WAN порт синего цвета – вот сюда и подключается провод от провайдера. Грубо говоря, сюда и заходят внешние интернет потоки.
  4. LAN порт – это для подключения устройств напрямую к локальной сети.
  5. WPS – быстрое подключение к беспроводной сети без пароля.
  6. Сброс – сбросить на заводские настройки устройство. Лучше не неё не нажимать, если не хотите заново его настраивать. Но иногда это единственный выход.

Далее подключение идёт как на картинке ниже.

Рис. 1.3. Подключение маршрутизатора

Задач у маршрутизатора несколько:

1)Организовать локальную сеть из подключенных устройств по кабелю или по беспроводной технологии. 2)Принимать сигнал интернета извне. 3)Распределять интернет по локальной сети.

Это основные задачи, которыми пользуются многие. Но современные маршрутизаторы имеют и дополнительный функционал, который можно настроить:

1)Встроенный Firewall – который защищает локальную сеть и устройства от несанкционированного доступа. 2)Белый список адресов – то есть к сети смогут иметь доступ только зарегистрированные клиенты. 3)Шифрование пакетов данных. 4)Родительский контроль – можно задать список адресов в интернете, куда не смогут заходить дети. 5)Аппарат можно настроить так, что к нему можно подключиться из любой точки планеты, поменять настройки, посмотреть в камеры видеонаблюдения и т.д.[8]

Прокси-сервер — промежуточный сервер (комплекс программ) в компьютерных сетях, выполняющий роль посредника между пользователем и целевым сервером (при этом о посредничестве могут как знать, так и не знать обе стороны), позволяющий клиентам как выполнять косвенные запросы (принимая и передавая их через прокси-сервер) к другим сетевым службам, так и получать ответы [11].

Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, e-mail), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш). В некоторых случаях запрос клиента или ответ сервера может быть изменён прокси-сервером в определённых целях. Прокси-сервер позволяет защищать компьютер клиента от некоторых сетевых атак и помогает сохранять анонимность клиента, но также может использоваться мошенниками, для скрытия адреса сайта, уличённого в мошенничестве, изменения содержимого целевого сайта (подмена), а также перехвата запросов самого пользователя [11].

Межсетевой экран — программный или программно-аппаратный элемент компьютерной сети, осуществляющий контроль и фильтрацию проходящего через него сетевого трафика в соответствии с заданными правилами [12].

Межсетевой экран позволяет разделить общую сеть на две части или более и реализовать набор правил, определяющих условия прохождения пакетов с данными через границу из одной части общей сети в другую. Как правило, эта граница проводится между корпоративной (локальной) сетью предприятия и глобальной сетью Интернет. Обычно межсетевые экраны защищают внутреннюю сеть предприятия от вторжений из глобальной сети Интернет, хотя они могут использоваться и для защиты от нападений из корпоративной интрасети, к которой подключена локальная сеть предприятия. Технология межсетевых экранов стала одной из самых первых технологий защиты корпоративных сетей от внешних угроз [12].

Межсетевой экран может быть отдельной программой, а может входить в состав какого-либо приложения. Многие современные антивирусные программы включают в себя межсетевой шлюз как компонент, защищающий компьютер. Иногда МЭ выполнен в виде ПАК (программно-аппаратного комплекса, то есть «железки»).

Для защиты брандмауэр следит за параметрами входящего и исходящего трафика. Классические брандмауэры, так называемые пакетные фильтры, оценивают трафик по параметрам сетевого уровня и принимают решение о том, пропускать или не пропускать каждый IP-пакет, по его свойствам, например:

  1. IP-адрес и порт источника IP-пакета (узла сети, от которого пакет пришел);
  2. IP-адрес и порт узла назначения IP-пакета (узла сети, от которого пакет пришел);
  3. Протокол транспортного уровня (UDP, TCP и так далее);
  4. Время передачи пакета.

Кроме того, межсетевые экраны умеют учитывать контекст передачи трафика. Например, часто межсетевой экран настроен так, что трафик, который инициирован из внешней сети, блокируется, но если трафик из внешней сети является ответом на запрос из внутренней сети, то он будет пропущен [14].

Прокси - серверы: Прокси-сервер (proxy server) — особый тип приложения, выполняющего функции посредника между клиентскими и серверными частями распределенных сетевых приложений, причем предполагается, что клиенты принадлежат внутренней (защищаемой) сети, а серверы — внешней (потенциально опасной) сети. Роль транзитного узла позволяет прокси-серверу логически разорвать прямое соединение между клиентом и сервером с целью контроля процесса обмена сообщениями между ними.

Когда клиенту необходимо получить ресурс от какого-либо сервера (файл, веб-страницу, почтовое сообщение), он посылает свой запрос соответствующему прокси-серверу. Последний анализирует этот запрос и на основании заданных ему администратором правил решает, каким образом он должен быть обработан: отброшен, передан без изменения ресурсному серверу, модифицирован тем или иным способом перед передачей, немедленно обработан силами самого прокси-сервера и др.

Помимо основных функций, многие прокси-серверы могут выполнять другие полезные операции, например, обнаруживать вирусы еще до того, как они попали во внутреннюю сеть, или собирать статистические данные о работе пользователей сети в Интернете. В некоторых случаях прокси-сервер может изменять запрос клиента. Например, если в него встроена функция трансляции сетевых адресов (см. далее раздел «Файерволы с функцией NAT»), то он может в пакете запроса подменять IP-адреса и/или номера портов TCP и UDP отправителя. Поэтому многие атаки, построенные на знании злоумышленником адресов узлов внутренней сети, становятся нереализуемыми.

image image Варианты размещения прокси сервера

Прокси-сервер, выступая посредником между клиентом и сервером, взаимодействующими по определенному протоколу, не может не учитывать специфику этого протокола. Так, для каждого из протоколов HTTP, HTTPS, SMTP/POP, FTP, telnet существует особый прокси-сервер, ориентированный на использование соответствующими приложениями: веб-браузером, программой электронной почты, FTP-клиентом, клиентом telnet. Каждый из этих посредников принимает и обрабатывает пакеты только того типа приложений, для обслуживания которого он был создан. Обычно несколько разных прокси-серверов объединяют в один программный продукт.

Подключение к ресурсам сети через прокси-сервер является актуальной и востребованной услугой. Преимуществами такого подхода для пользователей являются:

  • практически любой из известных браузеров легко настраивается для работы через proxy;
  • использование качественного сервиса дает пользователю возможность контроля траффика, скорости обмена данными, фильтрации пакетов;
  • современные операционные системы поддерживают работу через proxy и легко конфигурируются без использования прав администратора;
  • корпоративная сеть организации не подвергается хакерским атакам при использовании прокси, так как отсутствует использование сторонних протоколов обмена данными;
  • большое количество доступных настроек позволяет сконфигурировать доступ к сетевым ресурсам с конкретного браузера, возможность посещения только определенных или всех сайтов [15].

2. Программная и аппаратная реализация сетевых шлюзов. Использование репозиториев и системы управления версиями в веб-разработке.

2.1. Программная и аппаратная реализация сетевых шлюзов.

Аппаратная маршрутизация

Выделяют два типа аппаратной маршрутизации: со статическими шаблонами потоков и с динамически адаптируемыми таблицами. Основная статья: коммутация IP-пакетов Статические шаблоны потоков подразумевают разделение всех входящих в маршрутизатор IP-пакетов на виртуальные потоки; каждый поток характеризуется набором признаков для пакета: IP-адресами отправителя/получателя, TCP/UDP-порт отправителя/получателя (в случае поддержки маршрутизации на основании информации 4 уровня), порт, через который пришёл пакет. Оптимизация маршрутизации при этом строится на идее, что все пакеты с одинаковыми признаками должны обрабатываться одинаково (по одинаковым правилам), при этом правила проверяются только для первого пакета в потоке (при появлении пакета с набором признаков, не укладывающимся в существующие потоки, создаётся новый поток), по результатам анализа этого пакета формируется статический шаблон, который и используется для определения правил коммутации приходящих пакетов (внутри потока). Обычно время хранения неиспользующегося шаблона ограничено (для освобождения ресурсов маршрутизатора). Ключевым недостатком подобной схемы является инерциональность по отношению к изменению таблицы маршрутизации (в случае существующего потока изменение правил маршрутизации пакетов не будет "замечено" до момента удаления шаблона). Динамически адаптируемые таблицы используют правила маршрутизации "напрямую", используя маску и номер сети из таблицы маршрутизации для проверки пакета и определения порта, на который нужно передать пакет. При этом изменения в таблице маршрутизации (в результате работы, например, протоколов маршрутизации/резервирования) сразу же влияют на обработку всех новопришедших пакетов. Динамически адаптируемые таблицы также позволяют легко реализовывать быструю (аппаратную) проверку списков доступа [16].

Программная маршрутизация

Программная маршрутизация выполняется либо специализированным ПО маршрутизаторов (в случае, когда аппаратные методы не могут быть использованы, например, в случае организации туннелей), либо программным обеспечением на компьютере. В общем случае, любой компьютер осуществляет маршрутизацию своих собственных исходящих пакетов (как минимум, для разделения пакетов, отправляемых на шлюз по умолчанию и пакетов, предназначенных узлам в локальном сегменте сети). Для маршрутизации чужих IP-пакетов, а также построения таблиц маршрутизации используется различное ПО:

  • Сервис RRAS (англ. routing and remote access service) в Windows Server
  • routed, gated, quagga в Unix-подобных операционных системах (Linux, FreeBSD и т.д..) [16].

Для TCP/IP, маршрутизация является базовой функцией стека IP (кода поддержки TCP/IP). Маршрутизацию своих пакетов к месту назначения выполняет любая система в сети, маршрутизацию же чужих пакетов (форвардинг) выполняют только маршрутизаторы (также известные как роутеры или шлюзы). Задачи маршрутизатора при форвардинге пакета:

  • принять пакет
  • найти машину на которую следует этот пакет или следующий маршрутизатор по маршруту к ней (в таблице маршрутов)
  • передать пакет или вернуть ICMP-сообщение о невозможности его доставки по причинам:
  • Назначение недостижимо (Destination unreachable) — у пакета кончилось «время жизни» прежде чем он достиг места назначения
  • Хост недостижим (Host unreachable) — компьютер или следующий маршрутизатор выключен или не существует
  • Сеть недостижима (Network unreachable) — маршрутизатор не имеет маршрута в сеть назначения
  • если пакет не может быть доставлен по причине перегрузки маршрутизатора (или сети) — отбросить пакет без уведомлений [16].

Шлюзы – это такие субъекты технических систем, что могут быть реализованы в виде аппаратного или программного решения, или соединены вместе(что встречается чаще всего) [9].

Программный сетевой шлюз может быть в реализации отдельного приложения или в реализации операционной системы с нужным программным обеспечением. Программное обеспечение сетевого шлюза просто конвертирует пакеты одной сети и отправляет их в другую от своего имени. Сетевой шлюз, так же может быть в аппаратной реализации, то есть устройство с определённой прошивкой/ОС, ПО которого и выполняет функции шлюза. Существует еще программно-аппаратный вид, встречающийся чаще всего. Каждое оборудование имеет собственное программное обеспечение. Сигналы, проходящие через шлюз, могут несколько раз конвертироваться в разные типы. К конечному пользователю материал попадает в нужном виде. Этот процесс контролируется совместно и программным обеспечением, и на аппаратном уровне[10].

В настройках соединения большую роль играет IP – уникальный сетевой адрес с протоколом TCP/IP. Его формирование напрямую зависит от шлюза. А если в роли шлюза выступает физическая аппаратура, например, модем или маршрутизатор, IP-адрес оборудования и адрес шлюза будут совпадать[9].

В Windows встроен мастер по настройке, поэтому вручную прописывать значения не обязательно, подключение произойдет автоматически. При сбое соединения или при добавлении нового компьютера к ЛВС может потребоваться введение необходимых параметров[9].

Маршрутизатор (он же — роутер) является одним из примеров аппаратных сетевых шлюзов [1].

Интернет-шлюз — как правило, это программное обеспечение, призванное организовать передачу трафика между разными сетями. Программа является рабочим инструментом системного администратора, позволяя ему контролировать трафик и действия сотрудников [2].

Обычно Интернет-шлюз позволяет распределять доступ среди пользователей, вести учёт трафика, ограничивать доступ отдельным пользователям или группам пользователей к ресурсам в Интернет. Интернет-шлюз может содержать в себе прокси-сервер, межсетевой экран, почтовый сервер, шейпер, антивирус и другие сетевые утилиты. Интернет-шлюз может работать как на одном из компьютеров сети, так и на отдельном сервере. Шлюз устанавливается как программное обеспечение на машину с операционной системой, либо на пустой компьютер с развертыванием встроенной операционной системы [2].

Также под шлюзом часто понимается IP-адрес машины, через которую организован доступ в интернет [2].

Программно-аппаратный комплекс шлюз безопасности устанавливают в локальной рабочей сети организации в разрыв канала связи. Тем самым появляется промежуточное звено между пользователями и внешними интернет-ресурсами. Поступающие данные, трафик фильтруются, что позволяет исключить несанкционированный доступ извне к информационным ресурсам организации, а также контролировать работу персонала, собирать статистику по многим параметрам. Типичная схема работы шлюза выглядит следующим образом [3]:

  • При обращении к какому-либо интернет ресурсу шлюз запрашивает у пользователя выполнение аутентификации.

  • Происходит проверка аутентификационных данных и анализ параметров запроса согласно политикам безопасности. Возможна дополнительная проверка запроса через сторонние приложения и ПО, к примеру, антивирус.

  • При одобрении запроса и получении разрешения на трансляцию информации запрос от приложения переводится на сервер назначения.

  • Далее еще раз проверяется ответ на соответствие установленным политикам безопасности на прокси-сервере. При успешно произведенной верификации ответ направляется приложению из которого поступил запрос.

  • В случае формировании отказа на запрос или ответ на основании политик безопасности пользователь видит окно, где представлен отказ и его причина. Приложение в этом случае получает отказ доступа.

Программно-аппаратные шлюзы безопасности наделены следующими функциями и возможностями [3]:

  • Аутентификация пользователей. Позволяет провести проверку пользователя в системе и его прав. Реализована посредством разнообразных протоколов, например, Basic, NTLM. Также при аутентификации производится проверка пользователей по IP-адресам.

  • Контроль трафика. За счет размещения шлюза между пользователем и сервером он полностью контролируется согласно действующим политикам безопасности, антивирусной защите. Шифровка и дешифровка трафика сильно затрудняют перехват конфиденциальных данных злоумышленниками. Когда происходит нарушение политик безопасности выполняется блокировка передачи трафика на внешние источники.

  • Фильтрация трафика. Проверяется на безопасность, соответствие правилам, заложенные политиками безопасности в системе. Реализуется через использование списка разрешенных доменных имен, диапазон IP-адресов. Фильтрация позволяет проверять порты, протоколы, ссылки, ключевые слова запросов. В результате пользователь работает в строго ограниченной рабочей среде, где нет лишних искушений и угроз безопасности.

  • Категоризация ресурсов. Через внешние и внутренние службы шлюз проводит разделение на категории используемые ресурсы. Это упрощает процесс проверки веб-ресурсов, помогает обозначить локальный список категорий или выполнить их обновление.

  • Блокирование рекламы и вредоносного ПО. Трафик зачастую содержит различного рода раздражающую рекламу, которая отвлекает внимание и мешает работать. Большинство аппаратных шлюзов безопасности снабжены собственными базами adware-сигнатур, которые успешно блокируют рекламу и помогают защитить данные пользователя от неправомерного использования и сбора.

  • Учет активности пользователей и ведение регулярных отчетов. Регулярный мониторинг рабочей сети и получение результатов по занятости персонала, их успехах дает множество аналитической информации, которая пригодится для управления человеческими ресурсами и повышения продуктивности труда. Также возможно составить досье на каждого сотрудника для оценки его уровня ответственности, изучения списка нарушений.

Итого, сетевой шлюз — это специальное сетевое устройство или сервер, которые используются для предоставления подключения к Internet или локальной сети. Без подобных приспособлений невозможно одновременно организовать доступ к интернету нескольким устройствам [4].

Некоторые шлюзы имеют программную реализацию. Например, прокси-сервера могут работать на ОС Windows или Linux. Однако в повседневной жизни чаще всего используются аппаратные устройства, которые изготавливаются для подключения различного оборудования к сети проводным и беспроводным способами [4].

Наиболее распространенный пример сетевого шлюза — Wi-Fi маршрутизатор. Сегодня такие роутеры встречаются практически в каждой квартире. С их помощью пользователи создают беспроводную точку доступа к сети, чтобы подключаться к интернету с ноутбука, смартфона или планшета. Существуют и комбинированные разновидности сетевых шлюзов, которые называются программно-аппаратными. Такое оборудование оснащается уникальным программным обеспечением, контролирующим работу устройства. Именно за счет встроенного ПО и осуществляется конвертация полученных сигналов в различные типы [4].


2.2. Использование репозиториев и системы управления версиями в веб-разработке.

Система управления версиями (Version Control System, VCS) — это программное обеспечение для облегчения работы с изменяющейся информацией [5]. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. Такие системы наиболее широко используются при разработке программного обеспечения для хранения исходных кодов разрабатываемой программы [5].

Git — система контроля версий

GIT — это одна из таких систем. В GIT используется распределённая модель вместо традиционной клиент-серверной. Таким образом, репозитории GIT не нуждаются в централизованном хранилище: вся история изменения документов хранится на каждом компьютере, в локальном хранилище, и при необходимости отдельные фрагменты истории локального хранилища синхронизируются с аналогичным хранилищем на другом компьютере [5].

На сегодняшний день, GIT стал стандартной системой управления версиями для очень многих разработчиков, а хостинг исходных кодов GitHub — самым крупным подобным сервисом. Примерами проектов, использующих Git, являются ядро Linux, Android, Ruby on Rails, Drupal, Wine, Chromium, Compiz Fusion, jQuery, PHP, MediaWiki и некоторые дистрибутивы Linux [5].

В самом простом виде контроль версий — это сохранение на компьютере серии измененных файлов, например с разными датами в названии, или режим отслеживания исправлений в текстовых документах [6].

Разработчикам часто бывает нужно вернуться к предыдущей версии кода [6]:

  • если оказывается, что решаемая задача больше не актуальна;
  • если требуется внести исправления в более раннюю версию программы;
  • если ошибка нашлась во время работы над новой задачей.

Если над проектом работает много людей, нужно, чтобы они могли вносить изменения в одни и те же файлы без конфликтов и потерь кода. Все эти задачи удобно решаются с помощью Git [6].

К базовым возможностям Git относятся [6]:

  • возврат к любой предыдущей версии кода;
  • просмотр истории изменений;
  • параллельная работа над проектом;
  • backup кода.

Рис. 2. Графический интерфейс Git

Что такое репозиторий Git?

Репозиторий — это все файлы, находящиеся под контролем версий, вместе с историей их изменения и другой служебной информацией [6].

Репозиторий Git можно создать, либо выбрав любую папку на компьютере, либо клонировав себе уже существующий репозиторий, например у работодателя [6].

Где хранится репозиторий?

Существуют разные способы хранения и использования репозитория: выделяют локальные, централизованные и распределенные системы контроля версий [6].

В локальных системах контроля версий репозиторий хранится и используется на одном устройстве, но работать с такой системой может только один разработчик. В случае централизованной системы репозиторий хранится на одном сервере [6].

Лучше всего для большого количества разработчиков подходят распределенные системы контроля версий, к которым относится и Git. Такая система представляет собой облачное хранилище: каждый пользователь хранит на своем устройстве весь репозиторий целиком, и по мере изменения репозитории синхронизируются [6].

Что такое коммит и коммитить?

По-английски commit значит «фиксировать». Git-коммит — это операция, которая берет все подготовленные изменения и отправляет их в репозиторий как единое целое [6].

Зачем нужен коммит, если Git и так следит за всеми изменениями? Коммиты разбивают процесс разработки, состоящий из большого количества правок, на отдельные шаги. То есть коммит — это некое логически завершенное изменение внутри проекта и понятная (в том числе и другим разработчикам) точка, к которой можно вернуться, если возникнут какие-то проблемы [6].

Изменения в рамках одного коммита подчиняются определенным, установленным командой разработчиков правилам и рекомендациям, касающимся именования, описания и содержания коммитов [6].

Как правило, рабочий процесс представляет собой цикл: коммит — изменение файлов — коммит [6].

Рис. 3. Коммиты Git

Что такое ветвление?

Удобная поддержка ветвления — важное свойство Git. Использование ветвления позволяет решать отдельные задачи, не вмешиваясь в основную линию разработки [6].

Ветка в Git — это последовательность коммитов. С технической точки зрения ветка — это указатель или ссылка на последний коммит в этой ветке. По умолчанию, имя основной ветки в Git — master. Каждый раз, когда создается новый коммит, указатель ветки master автоматически передвигается на него [6].

При создании новой ветки коммиту дается новый указатель, например testing. Если переключиться на ветку testing и сделать новый коммит, то указатель на ветку testing переместится вперед, тогда как указатель на основную ветку master останется на месте. Переключившись обратно на ветку master, файлы в рабочем каталоге вернутся в состояние коммита, на который указывает master [6].

Рис. 4. Ветвление Git

Зачем нужен GitHub?

GitHub — это самый популярный сайт для хранения git-репозиториев и работы с ними. Также GitHub является крупнейшей площадкой для размещения проектов с открытым исходным кодом. Для просмотра и загрузки общедоступных репозиториев не требуется ни регистрации, ни оплаты аккаунта [6].

В каком-то смысле GitHub — это еще и социальная сеть для разработчиков. Зарегистрированные пользователи могут публиковать контент и управлять своими репозиториями, вносить вклад в чужие репозитории, вести обсуждения, просматривать изменения в коде, комментировать их и следить за обновлениями знакомых [6].

GitHub часто используют при рекрутменте — активный аккаунт и высокое качество кода могут сильно помочь в поиске работы. Поэтому особенно важно иметь аккаунт, чтобы показать свой код коллегам и как он эволюционирует со временем [6].

Сейчас существует и множество других онлайн-сервисов, интегрированных с Git. Альтернативы GitHub — это, например, GitLab и BitBucket. У обоих сайтов меньше аудитория, но у них есть свой функционал и свои преимущества, например BitBucket более удобен для небольших проектов с закрытым кодом [6].

Что собой представляет Git-flow?

Git-flow — альтернативная модель ветвления Git, в которой используются функциональные ветки и несколько основных веток. Эта модель была впервые опубликована и популяризована Винсентом Дриссеном на сайте nvie. По сравнению с моделью магистральной разработки, в Git-flow используется больше веток, каждая из которых существует дольше, а коммиты обычно крупнее. В соответствии с этой моделью разработчики создают функциональную ветку и откладывают ее слияние с главной магистральной веткой до завершения работы над функцией. Такие долгосрочные функциональные ветки требуют тесного взаимодействия разработчиков при слиянии и создают повышенный риск отклонения от магистральной ветки. В них также могут присутствовать конфликтующие обновления [7].

Git-flow можно использовать для веб-проектов, в которых запланирован цикл релизов и реализуется характерная для DevOps методика непрерывной поставки. В этом рабочем процессе используются понятия и команды, которые были предложены в рамках рабочего процесса с функциональными ветками. Однако Git-flow привносит новые специфические роли для разных веток и определяет характер и частоту взаимодействия между ними. Помимо функциональных веток в рамках этого рабочего процесса используются отдельные ветки для подготовки, поддержки и регистрации релизов. При этом вы по-прежнему можете пользоваться преимуществами рабочего процесса с функциональными ветками, такими как запросы pull, изолированные эксперименты и эффективное командное взаимодействие [7].

Рис. 5. Git-flow

Ветка разработки и главная ветка

В этом рабочем процессе для регистрации истории проекта вместо одной ветки main используются две ветки. В главной ветке main хранится официальная история релиза, а ветка разработки develop предназначена для объединения всех функций. Кроме того, для удобства рекомендуется присваивать всем коммитам в ветке main номер версии.

Функциональные ветки (feature)

Под каждую новую функцию нужно выделить собственную ветку, которую можно [отправить в центральный репозиторий] для создания резервной копии или совместной работы команды. Ветки feature создаются не на основе main, а на основе develop. Когда работа над функцией завершается, соответствующая ветка [сливается с веткой develop]. Функции не следует отправлять напрямую в ветку main.

Ветки выпуска (release)

Когда в ветке develop оказывается достаточно функций для выпуска (или приближается назначенная дата релиза), от ветки develop создается ветка release. Создание этой ветки запускает следующий цикл релиза, и с этого момента новые функции добавить больше нельзя — допускается лишь исправление багов, создание документации и решение других задач, связанных с релизом. Когда подготовка к поставке завершается, ветка release сливается с main и ей присваивается номер версии. Кроме того, нужно выполнить ее слияние с веткой develop, в которой с момента создания ветки релиза могли возникнуть изменения.

Благодаря тому, что для подготовки выпусков используется специальная ветка, одна команда может дорабатывать текущий выпуск, в то время как другая команда продолжает работу над функциями для следующего. Это также позволяет разграничить этапы разработки (например, можно без труда посвятить неделю подготовке к версии 4.0 и действительно увидеть это в структуре репозитория).

Ветки исправления (hotfix)

Ветки сопровождения или исправления (hotfix) используются для быстрого внесения исправлений в рабочие релизы. Ветки hotfix очень похожи на ветки release и feature. Отличие заключается в том, что они создаются на основе main, а не develop. Это единственная ветка, которую нужно обязательно создавать напрямую от main. Как только исправление завершено, эту ветку следует слить с main и develop (или текущей веткой release), а ветке main присвоить обновленный номер версии.

Благодаря специальной ветке для исправления ошибок команда может устранять проблемы, не прерывая остальную часть рабочего процесса и не дожидаясь следующего цикла релиза. Ветки сопровождения можно рассматривать как специальные ветки release, которые работают непосредственно с main.

Последовательность действий при работе по модели Gitflow

  • Из ветки main создается ветка develop.
  • Из ветки develop создается ветка release.
  • Из ветки develop создаются ветки feature.
  • Когда работа над веткой feature завершается, она сливается в ветку develop.
  • Когда работа над веткой release завершается, она сливается с ветками develop и main.
  • Если в ветке main обнаруживается проблема, из main создается ветка hotfix.
  • Когда работа над веткой hotfix завершается, она сливается с ветками develop и main.

ИСТОЧНИКИ

  1. 📃 Википедия: Сетевой шлюз;
  2. 📃 Википедия: Интернет шлюз;
  3. 📃 Solar: аппаратный шлюз безопасности;
  4. 📃 Swinopes: программный сетевой шлюз;
  5. 📃 Web-creator: GIT — система управления версиями;
  6. 📃 Skillfactory: подробно про Git;
  7. 📃 Atlassian: рабочий процесс Git-flow;
  8. 📃 Wifigid: маршрутизатор;
  9. 📃 Шлюз в компьютерной сети;
  10. 📃 Мосты. Шлюзы;
  11. 📃 Прокси-сервер;
  12. 📃 Технологии межсетевого экранирования;
  13. 📃 Компьютерные сети Виктор Олифер;
  14. 📃 Межсетевой экран;
  15. 📃 Прокси-сервер;
  16. 📃 Программная и аппаратная маршрутизация.
⚠️ **GitHub.com Fallback** ⚠️