В прошлый раз поговорили про доступность физического и канального уровня с точки зрения операционнй системы.
Лектор обнаружил, что для настройки вайфая изобретена штука iw. Если на аппаратном уровне мы решали задачу как представлять сигнал, если на канальном уровне мы решали задчу как компьютер будет пользоваться спд, то на сетевом уровне мы должны решать задачу объединения спд в глобальную компьютерную сеть.
Эта задача порождает специфику подхода к проблеме, в частности то, что мы не должны решать все задачи сразу.
Сосредоточимся на двух подзадачах: 1. Идентификация (адресация) 1. Обеспечение возможности доставки (маршрутизация)
На этом уровне не заморачиваемся надежностью.
Мы не подписываемся обеспечивать даже связность интернета на этом уровне. Но если она есть, то мы хотим обеспечить возможность доставки.
Если отвлечься от разных способов маргрутизации и адресации и отвлечься от тцп ип, мы увидим повсеместно распространенный ipv4 и потихоньку набирающий силу ipv6.
Как решить задачу идентификации? Если бы компьютеров было 50, можно было бы дать каждому имя, которое понравилось бы хозяину,а потом упорядочить.
Компьютеров не 50, но все равно выдается каждому уникальный номер. Как и кем поговорим попозже. Лектор думает, что никого не удивит, если расскажет, что ип адрес состоит из 4 байтов или 32 битов.
Эти 32 бита делятся на 2 части -- адрес сети и адрес абонента в сети.
Нужно это для того, чтобы организовывать маршрутизацию.
За неимением другого подхода считается что все компьютеры в одной сети друг друга видят и если адреса сетей совпадают у двух компьютеров, то они принадлежат одной спд. Это не так. Почему -- поговорим когда будем говорить о маршрутизации.
Чтобы отличать адрес компьютера от адреса сети вводится понятие сетевая маска. Это такие 32 бита, которые состоят из единиц в том месте где у ип-адреса адрес сети и нулей в том месте, где адрес абонента.
Все единицы -- аналог широковещательного адреса в эзернете.
Тут возможны хитрости. Если у вас адрес абонента 10.0.1.255 -- может ли он быть таким? Зависит от того, какая маска подсети. Если маска /24 или /23, то нет, потому что это будет широковещательный адрес. Если же /16, то вполне может быть.
В старых учебниках были классификации сетей A B C D E, в зависимости от первых бит. В реальной жизни все перешли на бесклассовую систему. Но у этой схемы есть один выхлоп -- если адрес начинается с 1110, то это мультикастовый адрес -- такие пакеты получают несколько абонентов.
Надо сказать, что мультикаст штуа довольно сложная и в ипв4 работающая не глобально. Мультикаст нужен для того что бы пакет получали абоненты, входящие в мультикастовую группу. Все хорошо, но непонятно как они об этом узнают и где находятся.
Где мы можем увидеть эти самые адреса в линуксе?
ip addr
127.0.0.1/8 всегда присваивается лупбэк интерфейсу. Иногда можно на нем несколько адресов создать.
Если у интерфейс поднят, то добавить ему ип адрес можно
ip a dev ... add adress
В результате мы имеем некий компьютер, у которого один или несколько сетевых интерфейсов, у каждого из них свой адрес. Между ними возможен обмен информации на уровне интерфейсном и канальном.
Что за волшебный образ, которым перенумеровываются все компьютеры в интернете.
Этот способ административный. Есть контора под названием IANA, которая занимается буквально этим -- раздает диапазоны адресов всем желающим. Приходит провайдер, говорит - у меня столько клиентов, столько планируется. дайте мне столько адресов. Провайдер проверяют и дают ему сеть класса А. Провайдер приходит к свои клиентам и начинает спрашивать -- ну что, никому не нужна сеть /17? Отдам почти задаром. Дальше они передоверяют другим организациям и так далее и так далее.
Это именно диапазоны ип-адресов, которые мы должны зарегистрировать и использовать. Поскольку ип-адресов уже не хватило, то диапазон могут отобрать -- мы вам выдали сеть класса Б, а вы используете три компьютера. отдавайте обратно, народ хочет. Какого размера может быть сетевая маска? 30. При 31 -- остается только маска и мультикаст. 32 -- может быть, означает что это просто ип-адрес, поговрим позже.
Как принимать решение о том чтобы смаршрутизировать наши пакеты?
Мы можем нарисовать карту абонентов на 0 абонентов и жестко прописать как именно маршрутизировать.
Понятное дело что для интернета это вещь абсолютно неприминимая. Не бывает карты всех компьютеров в интернете. К тому же, при таком подходе при обновлении связности надо менять всю карту на всеху злах.
Какой есть выход из этого положения? Не видеть ничего дальше собственного носа. Принимать решения о маршрутизации на основании только ближайших видимых спд.
Для нас это означает две вещи. При добавлении адреса на интерфйс автоматически запоминается что вся эта подсеть находится за этим интерфейсом передачи данных.
ip a 1.2.3.4/16 dev eth0
Означает, что когда мы захотим послать на 1.2.111.111, мы отправим туда.
Второе -- понятное дело, что одним этим ограничиться нельзя. Мы должны приримать решения про ип адреса, которые не находятся в нашей спд. 4.3.2.1 явно не лежит в нашей спд. Значит для него в таблице маршрутизации должен найтись хостпересыльщик, через который мы отправим этот пакет получателю
В таблицу маршрутизации добавляются записи вида "такая то сеть доступна за таким то маршрутизатором"
0.0.0.0/0 -> 1.2.3.1 4.3.0.0/16 -> 1.2.3.100
Из двух подходящих получателю записей при принятии решения будет выбрана последняя, потому что у неё сетевая маска шире. Чем конкретней, тем выше приоритет.
Мы плавно приступили к понятию таблица маршрутизации, которую можно посмотреть командочкой.
ip route
Если сказать ей хелп, то можно даться диву по поводу того, что можно делать с этими самыми ип-адресами.
Именно ради того чтобы переписать работу с маргрутизацией Кузнецов переписал очень много в этой части ip.
Но, в простейших случаях факта добавления таких записей достаточно, чтобы маршрутизация локально заработала.
Если не задумываться крепко, довольно трудно придумать механизм, который бы требовал других правил работы с маршрутами. Тем не менее мы о таких ситуациях возможно поговорим.
На следующий раз обещана история рашн впн, она же корбина нетворк.
Маршрутные таблицы заполняются автоматом при добавлении адресов на интерфейс.
В приницпе маршрутные таблицы можно заполнять с помощью специальных протоколов. Вы не знаете, за кем находится адрес, но знаете того, кто знает, и дложен вам про это рассказать. Для этого разработано несколько специальных протоколов. МСамый известный имеет говорящее название RIP. В нем нашлось бездна уязвимостей, сделали RIP2... Насколько механизм используется сегодня лектор не знает. Известно только одно -- при передаче такой информации необходимо убедиться, что передающая машина не передаст вам какой-нибудь треш, который превратит ваш маршрутизатор в тыкву.
В случае, если идет мультикаст вещание -- как узнать, что в разных уолках интернета существуют соответствующие абоненты? Никак. Нужен специальный проотокол, который бы строил дерево доступности абонентов, входящих в мультикаст группу.
У вас есть компьютеры. которые довольно хорошо друг между другом обмениваются информацией куда откуда идут провода. Но вы не можете это знать по всему интернету. Вдруг кабель перегрызли. Поэтому для решения задчи куда отыутболивать пакет мы должны отслеживать связность всего интернета. Понятно, что на каждую машину фулл вью -- карту связности кустов интернета -- не поставишь.
Для этого придумали протоколы маршрутизации, которые оперируют автономными системны.Это диапазоны ип адресов, которые управляются одним администратором, и обеспечивают внутри себя связность как захотят.
Автономных ситсем несколько тысяч, возможно десятки тысяч. Построить карту можно, такие решения есть у больших операторов. стоят специальные сервера, которые отследивают это фулвью.
Постоянно отслеживается не пропала ли связность, и сколько стоит тот или иной путь (стоит как в понятии денег, так и других -- загруженности канала например) Ещё одна особенность border gateway protocol, что оно представляет интернет как граф, а не как дерево.
В лекциях есть табличка разных специальных ип адресов.
127.0.0.1 -- лупбэк
224.х.х.х -- мультикастовый
Что ещё есть интересного? Интранет адреса. Адреса которые вообщен нельзя маршрутизировать наружу. Прошел год с тех пор как был делигирован последний диапазон. Как так получилось, что адресов всем еще хватает? Есть три класса адресов, которые не уникальный
10.0.0.0/8 192.168.0.0/16 172.16.0.0/12
Есть нехитрые технологии, называемые NAT, которые состоят в махинациях с адресами отправителей и получателей. Как определить, что пришедший нам ответ предназначается такому-то абоненту в нашей сети, то можно сделать так. Есть внутренний адрес. При прохождении через нат он меняется на внешний. Нам отвечают на внешний адрес. При прохождении НАТ мы подменяем адрес обратно на внутренний. Как это делается может поговрим чуть позже.
169.254.0.0/16
Используется когда никому неизвестно, какие должны быть адреса у машин. Если такое случилось, машины должны включить мозг, применить протокол zeroconf -- и, обменявшись специальной инфорацией, догвоориться, какой у кого ип адрес. В апплконф этим догворняком все прощито сверху донизу. Это выглядит так -- маководы приходят, втыкают маки в сеть и уходяит пить кофе. Надолго. Когда возвращаются -- маки уже знаюют где интернет, где принтер, где файлопомойка, у кого какой адрес.
Если вам кажется что это легко -- попробуйте решить задачку. Есть вакуум, абсолютно черный. Есть планета абсолютно круглая. Два человека на разных полюсах. Как им встретиться?
В предыдущем изложении есть один пробел.
Предположим мы описываем процесс передачи пакета от одного компьютера к другому.
Внимание вопрос -- а как я узнаю мак адрес получателя?
Когда у нас полносвязная сеть, у нас есть просто провод, по которому мы посылаем. В случае езернета общая шина, и про мак адреса мы ничего не знаем. Чтобы выяснить у кого из абонентов мак такой-то, нужно послать арп- запрос. Это широковещательный эзернет фрейм,в уотором написано -- вот такой айпишник, он чей?
Традиционно таблица соответствия ип и мак адресов называется арп таблицей. В терминах утилиты ип это таблиуа соседей.
ip neigh.
Живет такая запись в таблице очень недолго, потому что маину могут выключить из этой спд, и, что еще хуже, включить в другую. Машине могут поменять мак адрес.
Могут выдать этот ипшник кому-нибудь еще.
Поэтому таблица соседей держится очень недолго и у нее есть три стадии, после прохождения трех стадий запись удаляется. Если запись удалена, то снова происходит арп-запрос.
Протокол ICMP
Это договоренность о том, как абоненты интернета сигнализируют друг другу о том все так или не так.
Для чего используется icmp. Посылаете кому-то пакет, а для него маршрутизация невозможна.
Path mtu discovery -- во всех случаях при отправлении пакета ставится флажок, что его нельзя фрагментировать. Если он попадает в спд, куда он не пролезает, маршрутизатор не будет пытаться его дальше проотолкнуть, а вернет ицмп сообщение -- что нужно фрагментировать и сказать, сколько байтов могло бы пролезть. Процедура когда мы сначала посылаем пакет с запрещенной фрагментацией, а потом ловим ошибки называется path mtu discovery.
Надо понимать, что icmp это важный и полезный протокол и надо понимать, что есть сервисы когда его надо в обе стороны пропускать.
Про ипв6 гораздо большихше чем способен рассказать лектор можно найти в интернетах.
В ipv6 горахдо лучше разработаны механизмы мультикаст и эникаст. И то и другое -- результат договоренности и построения деревьев доступности абонентов. Зато можно организовывать распределение нагрузки, что весьма сложно реализуется для ипв4.
В ипв6 нету фрагментации, контрольной суммы в пакете
ipsec. Поначалу ипв6 включал в себя обязательное шифрование. Но потом шифрующие устройства перегрелись и его сделали необязательным.