Маршрутизация пакетов и поставка
Несмотря на то, что некоторые сетевые соединения являются магистральными линиями между двумя узлами, большинство сетевых соединений включает больше чем два узла, часто соединяемые через концентратор, переключатель, маршрутизатор или другие аппаратные средства. Это означает, что каждый узел может потенциально получить пакеты, предназначенные для других узлов в сети. Таким образом каждый узел должен быть в состоянии распознать, является ли это предполагаемым получателем так, чтобы это неправильно не реагировало на чей-либо пакет.
Для поддержки этого каждый пакет содержит адрес канального уровня своего предполагаемого получателя. Когда узел получает пакет, предназначенный для другого узла, он игнорирует его. Во многих системах эта фильтрация выполняется в аппаратных средствах, так, чтобы операционная система не должна была интересоваться трафиком других узлов.
Из-за этого проекта, когда два узла должны связаться через локальную физическую сеть, отправляющий узел должен знать адрес канального уровня узла получения, прежде чем это сможет начать отправлять пакеты. Для предоставления той информации специфичные для аппаратных средств части операционной системы используют различный, означает преобразовывать между логическим адресом (таким как IP-адрес) и физическим адресом (таким как MAC-адрес Ethernet). Механизм для выполнения этого преобразования зависит от типа сети:
В подобных Ethernet сетях операционная система может получить аппаратный адрес из адреса IPv4 с помощью протокола определения адресов (ARP). Запрос ARP состоит из широковещательного сообщения в сети (сообщение, что все узлы получают), выяснение, у кого есть определенный IP-адрес. Узел, которому принадлежит тот IP-адрес тогда, отвечает своим адресом канального уровня.
Для коммуникации IPv6 по Ethernet узлы используют подобный протокол, названный протоколом обнаружения соседних устройств (NDP) (который также служит другим целям, включая обнаружение маршрутизатора), который основывается на ICMP.
Неподобные Ethernet сети используют различные протоколы, но они обычно ведут себя так же на высоком уровне — сетевой драйвер (или другое программное обеспечение или аппаратные средства, действующие от своего лица), обеспечивает способ отобразиться от IP-адреса до некоторого специфичного для аппаратных средств значения, однозначно определяющего место назначения пакета.
Сети точка-точка (такие как туннели VPN) не должны выполнять это отображение, потому что каждый пакет отправляется в узел на другом конце такой ссылки.
На сотовых сетях, когда мобильный телефон инициирует связь с сотовой вышкой, башня присваивает телефон определенная частота, временной интервал или оба. От той точки на соединение ведет себя как сеть точка-точка.
Когда два узла должны связаться через большее расстояние, однако, эти протоколы не достаточны по двум причинам:
Было бы невозможно передать широковещательный пакет всюду по всему Интернету.
Даже если бы Вы могли бы получить адрес канального уровня удаленного хоста, та информация отдельно не была бы достаточна, чтобы определить, как получить пакеты к тому узлу.
Таким образом пакеты ARP ограничиваются физической локальной сетью и интернет-маршрутизацией использования, чтобы определить, как отправить пакеты в удаленные машины. Более в частности маршрутизатор является типом инфраструктурного устройства, знающего, как отправить данные от одного диапазона IP-адресов к другому диапазону.
Граничные маршрутизаторы — маленькие маршрутизаторы, предоставляющие услугу единственной территории клиента — обычно, знают не что иное как диапазон IP на одной стороне сети. Любые пакеты, отправленные в узкий диапазон IP-адресов в Вашем в домашней сети, отосланы через один физический порт, и любые пакеты, отправленные в любой другой адрес, отосланы через другой порт (который может тогда пройти через модем встроенного или кабеля для открытой проводки, модем DSL или другие аппаратные средства кодирования, продвигающиеся восходящий поток).
Базовые маршрутизаторы — маршрутизаторы, предоставляющие услугу для главных маршрутов Магистрали Интернета — имеют многократные физические соединения и сохраняют большие таблицы маршрутизации, говорящие который направление отправить пакеты в данном диапазоне IP. Они используют протоколы, такие как протокол граничного маршрутизатора (BGP) или протокол маршрутной информации (RIP) для распространения новых маршрутов друг другу. Каждый раз, когда новый физический кабель прибывает онлайн, маршрутизатор в одном конце говорит его коллегам, что это теперь имеет маршрут к маршрутизатору в другом конце. Его коллеги тогда распространяют ту рекламу к другим маршрутизаторам и т.д.
Точно так же, когда ссылка разъединена (могут ли из-за намеренного изменения или потому что экскаватор типа обратная лопата непреднамеренно разъединил волоконно-оптический кабель при рытье для нового основного коллектора), маршрутизаторы на любом конце обнаружить проблему и перенаправить пакеты прозрачно через различную ссылку. Этот проект позволяет Интернету в целом быть динамично реконфигурируемым и устойчивым против отказов оборудования.
Поскольку топология сети сложна и регулярно изменение, сетевая производительность также сложна и регулярно изменяется. Например, если Вам подключили ноутбук к маршрутизатору Wi-Fi и двум настольным компьютерам, подключенным Ethernet, коммуникация между этими двумя настольными компьютерами быстрее, чем коммуникация между ноутбуком и настольными компьютерами. Оба локальных соединения, вероятно, быстрее, чем соединение с любым сайтом в общедоступном Интернете. И скорость, на которой Вы связываетесь с одним сайтом, может быть намного быстрее или медленнее, чем другой сайт просто, потому что соединение проходит через различные маршрутизаторы, кабели, и т.д.
Подробные данные маршрутизации отличаются в зависимости от того, используете ли Вы IPv4 или IPv6.
Маршрутизация IPv4
Адрес IPv4 состоит из 32-разрядного числа, разделенного на часть узла и часть сети. Часть узла однозначно определяет данный узел в данной физической сети. Часть сети идентифицирует сеть, с которой подключен узел.
В зависимости от того, как определенный блок IP-адресов был разделен его владельцем, часть сети может быть всего 8 битов, или столь же большой как 30 битов.
Для сетей для работы правильно каждый узел должен знать три вещи: его собственные IP-адреса, IP-адрес узла назначения, и является ли тот узел назначения в той же сети как один из ее собственных адресов. Узел использует ту информацию, чтобы определить, отправить ли пакет непосредственно его месту назначения (если место назначения находится в той же сети), или через маршрутизатор (если это не).
Большинство узлов принимает это решение с помощью довольно простого алгоритма:
Для IP-адресов, в которых биты сетевой части все соответствие, узел отправляет пакет непосредственно в узел назначения (использующий ARP или другие протоколы для обнаружения его физического адреса).
Для всех других IP-адресов узел отправляет пакет в маршрутизатор для основной физической сети (использующий ARP или другой протокол для обнаружения физического адреса маршрутизатора на основе его IP-адреса). Этот определенный маршрутизатор известен как шлюз по умолчанию.
Если узел знает что-то специальное о IP-адресе — например, если это знает, что IP-адрес имеет с другой стороны соединение VPN — это может отправить пакет в маршрутизатор кроме шлюза по умолчанию, но это - исключение, а не правило.
Чтобы представлять, насколько большой часть сети, узел использует сетевую маску. Сетевая маска является 32-разрядным значением, в котором 1 бит указывает, что эквивалентный бит в IP-адресе находится в части сети, и 0 битов указывают, что соответствующий бит находится в части узла. Сетевая маска обычно пишется в том же формате как IP-адрес. Например, если у Вас есть 28-разрядная часть сети, сетевая маска 255.255.255.240
. Таблица 5-1 показывает как IP-адрес для developer.apple.com
может анализироваться в часть сети и часть узла на основе сетевой маски в качестве примера.
Часть сети | Часть узла | |||
---|---|---|---|---|
IP-адрес | 17. | 254. | 2. | 129 |
IP-адрес (в двоичном файле) | 00010001 | 11111110 | 00000010 | 10000001 |
Сетевая маска | 255. | 0. | 0. | 0 |
Сетевая маска (в двоичном файле) | 11111111 | 00000000 | 00000000 | 00000000 |
Поскольку часть сети и часть узла всегда непрерывны (на практике), эта сетевая маска часто сокращается к единственному числу, представляющему число 1 бита в сетевой маске, которой обычно предшествует наклонная черта. Таким образом вышеупомянутая сеть с 28-разрядной частью сети иногда упоминается как a /28
сеть, примером в Таблице 5-1 является a /8
сеть, и т.д. В теории можно создать сеть с любой произвольной комбинацией нулей и в сетевой маске, но нет никакой гарантии, что все операционные системы или программное обеспечение управления сетью будут правильно поддерживать такую нестандартную конфигурацию.
Учитывая определенное значение для части сети, допустимый диапазон IP-адресов, доступных для использования в части узла, упоминается как подсеть или netblock. Подсеть могла бы, например, использовать 24 бита для части сети, оставляя 8 битов для части узла. Это дает Вам блок 256 IP-адресов для работы с.
Однако не все те 256 IP-адресов фактически доступны. В любой данной подсети существует три специальных зарезервированные IP-адреса: широковещательный адрес, сетевой адрес и адрес маршрутизатора.
Широковещательный адрес является адресом, в котором часть узла является всеми. При отправке пакета в этот адрес это получено каждым узлом в том же широковещательном домене (обычно подсеть), и это никогда не направляется вне локальной сети.
Сетевой адрес является адресом, в котором часть узла является всеми нулями. Это использовалось более старыми операционными системами в качестве широковещательного адреса, таким образом, по историческим причинам совместимости, резервируется это число.
Адрес маршрутизатора является адресом Вашего маршрутизатора. Это может быть любой IP-адрес в подсети (или в редких ситуациях, вне подсети), но это должно быть достижимо без маршрутизации, что означает, что это должно быть в той же физической сети. Обычно, адрес маршрутизатора состоит из части узла, которая является всеми нулями за исключением самого низкого бита (который является один выше, чем сетевой адрес).
Кроме того, IPv4 резервирует определенные адреса для определенного использования. Проект позволяет Вам распознавать определенные типы адресов путем поиска определенных образцов в старших битах, как упомянуто ниже:
Тип адреса | Маска IPv4 |
---|---|
Неуказанный адрес Используемый для указания отсутствия адреса. Может не быть присвоен никакому узлу. |
|
Петлевой адрес Адрес, позволяющий узлу соединяться назад с собой (localhost). |
|
Групповой адрес Адрес раньше отправлял пакеты в любую заинтересованную сторону. |
|
Локальный для ссылки индивидуальный адрес Адрес, который никогда не должен направляться. |
|
Локальный для сайта индивидуальный адрес Адрес, который должен быть направлен только на территории клиента. |
|
Маршрутизация IPv6
Адрес IPv6 разделен на следующие части:
64-разрядный идентификатор сети, поочередно разделенный на следующие части:
Глобальный префикс маршрутизации — Говорит, какому поставщику услуг принадлежит число. Эта часть может быть организована иерархически, и таким образом может эффективно быть разделена на многие меньшие части, но это - стратегическое решение поставщика услуг и не видимо за пределами организации.
Подсеть ID — Идентифицирует отдельную физическую сеть на территории клиента. Эта часть может быть организована произвольно территорией клиента.
Подразделение между этими двумя частями произвольно. ISP, присваивающий блок крупной компании, мог бы присвоить a
/48
блок (48-разрядный глобальный префикс маршрутизации, 16-разрядная подсеть, 64-разрядный интерфейс), позволяя клиенту создать до 216 отличных сетей. С другой стороны, ISP, присваивающий блок частному лицу домой, мог бы присвоить a/64
блок, в котором ISP принадлежат вся часть сети и клиент, имеет только единую сеть.64-разрядный интерфейсный идентификатор, идентифицирующий узел в той сети. (Адрес узла часто сгенерирован программно от MAC-адреса узла.)
Часть сети | Часть узла | |
---|---|---|
Глобальный префикс маршрутизации n биты | Подсеть ID 64-n биты | Интерфейсный ID 64 бита |
В понятии маршрутизация IPv6 подобна маршрутизации IPv4. Однако нет никаких зарезервированных широковещательных или сетевых адресов. Вместо этого локальное для специальной ссылки “все узлы” группа многоадресной передачи (ff02::1
) обеспечивает схожую функциональность. Точно так же нет никаких непостоянно измеренных подсетей; часть на интерфейс всегда - 64 бита.
IPv6 резервирует определенные адреса для определенного использования. Проект позволяет Вам распознавать определенные типы адресов путем поиска определенных образцов в старших битах, как упомянуто ниже:
Тип адреса | Маска IPv6 | Комбинация двоичных разрядов маски |
---|---|---|
Неуказанный адрес Используемый для указания отсутствия адреса. Может не быть присвоен никакому узлу. |
|
|
Петлевой адрес Адрес, позволяющий узлу соединяться назад с собой (localhost). |
|
|
Групповой адрес Адрес раньше отправлял пакеты в любую заинтересованную сторону. |
|
|
Локальный для ссылки индивидуальный адрес Адрес, который никогда не должен направляться. |
|
|
Локальный для сайта индивидуальный адрес Адрес, который должен быть направлен только на территории клиента. |
|
|
Все другие образцы адреса, как предполагается, являются глобально routable индивидуальными адресами.
Брандмауэры и преобразование сетевых адресов
Большинство маршрутизаторов сконфигурировано, чтобы быть максимально прозрачным с точки зрения узлов с обеих сторон. Маршрутизаторы, которые не прозрачны, вызывают брандмауэрами.
Брандмауэр является любым маршрутизатором, проверяющим трафик, изменяющим трафик или блокирующим определенные подмножества трафика, текущего через него. Как физический брандмауэр (несгораемая стена, предупреждающая пожар от распространения от одной части здания другому), сетевые брандмауэры обычно используются в качестве граничных маршрутизаторов для улучшения безопасности корпоративных или домашних сетей путем ограничения способов, которыми внешний атакующий может взаимодействовать с той сетью.
Брандмауэры обычно привыкли к:
Блокируйте определенные порты. Например, много брандмауэров блокируют порты, связанные с протоколами организации общего доступа к файлам, такими как SMB или AFP так, чтобы те службы были доступны только в локальной сети.
Блокируйте уродливые или имитировавшие сетевые пакеты. Уродливые пакеты использовались за эти годы для многих атак «отказ в обслуживании», включая атаки Smurf, ping смерти и INVITE смерти.
Выполните глубокую проверку пакетов, чтобы обнаружить и сообщить о подозрительном трафике.
Выполните преобразование сетевых адресов (NAT), в котором брандмауэр изменяет исходный адрес каждого пакета или адрес назначения или порт.
Преобразование сетевых адресов заслуживает дальнейшего объяснения. NAT обычно используется, чтобы заставить трафик из каждой машины на одной стороне брандмауэра, казаться, произошел из различного IP-адреса. Это может служить различным целям в зависимости от того, как это сконфигурировано:
Подмена: конфигурация, в которой изменяются соединения из брандмауэра так, чтобы пакеты, казалось, произошли в брандмауэре. Когда узел в брандмауэре делает соединение с узлом в общедоступном Интернете, брандмауэр создает временное правило перевода, переписывающее исходный адрес к тому из брандмауэра и номер исходного порта к порту с высоким номером.
В этой конфигурации узлы позади брандмауэра могут соединиться с Интернетом, но узлы в Интернете в целом не могут сделать соединения назад с машинами на внутренней части брандмауэра. Это значительно улучшает безопасность, но может повредить определенные сетевые протоколы, полагающиеся на ту возможность.
Целевой NAT: конфигурация, в которой соединения извне брандмауэра приводят к соединениям с узлами в брандмауэре, IP-адреса которого отличаются. Это расположение часто используется для определенных типов выравнивания нагрузки, чтобы заставить многократные серверы появиться, как будто они были единственным сервером.
Некоторые брандмауэры подмены также поддерживают протоколы, позволяющие приложениям, работающим на узлах во временных целевых правилах NAT запроса брандмауэра так, чтобы вне узлов мог временно достигнуть их. Два наиболее распространенных протокола для поддержки этого являются портом преобразования сетевых адресов, отображающим протокол (NAT-PMP), и устройство интернет-шлюза (IGD) стандартизировало протокол управления устройствами (часть Универсального стандарта Plug and Play или UPnP).
В OS X и iOS, Добрый день предоставляет встроенную поддержку для создания отображений порта через брандмауэры, поддерживающие NAT-PMP или UPnP. Службы распространились, использование, глобальное Добрый день, автоматически отображаются. Для служб, распространенных другими способами, можно вызвать DNSServiceNATPortMappingCreate
создать отображение, и DNSServiceRefDeallocate
уничтожать отображение. Эти отображения также разъединяются автоматически, когда процесс, создавший выходы отображений.