UNИX, осень 2008, 06 лекция (от 05 ноября)
Материал из eSyr's wiki.
Мы черезчур поспешно добрались до уровня сетевого, на котором решаются две задачи: задача глобальной идентификации и задача доставки пакета, маршрутизацуии,в случае, если отпр. и получатель отделены посл. разл. СПД. Этот уровень TCP/IP носит название сетевой.
Лектор напоминает, что если бы СПД была одна, и она была бы Eth, то этого уровня не было бы. Есть некий мезанизм порождения уник, eth-идент., который моджно было бы исп., и задеёствовать для идент. устройств именно из уник. идент, то есть MAC-адреса.
Необх. ещё одного идент. также дикт. незав. уровней.
Для идент. на сетевом уровне вводится понятие IP-адрес. Он состоит из 4 байтов, эти 4 байта можно записывать в 10-м виде через точку: 127.0.0.1, их же можно записывать в 16-ричном виде, в 2-ном (только долго пистаь придётся), и принято различать... какждый такой адрес присв. некоему сетевому интерфейсу, то есть, той дырке, той части системы, через которую пакеты переходят на уровень сетевой. Тут может происх. сборка-расборка пакетов.
Принято разл. в IP-адресе адрес компьютера и адрес сети. Адрес сети и адрес абонента сети. Поначалу предп., что сетей будлет 256 штук, поэтому считались, что первый байт сети. Потом выяснилось, что то отфонарное деление и реальные сети содерж. мало компьютеров, поэтомк придумали деление сетей на классы. Система там очень простая: A — первый бит адреса 0, B — 10, С — 110. A — один байт на адр. сети, B — два байта на адр. сети, C — три байта. Но это деление тоже оказалось малоосмысленным, и все на это забили. В альте, например, нетмаск выдаётся /24, даже если адрес 10.х.х.х.
Поск. не все умеют корректно и правильн обр. дырявые маски, и они мало где имп., то обычно маска задач тся количеством единиц в ней: в адресе 210.111.18.2/24 маска 255.255.255.0 и подсеть 210.111.18.0.
...
Поск. мы всех перенумеровали, то теор. один абонент может передать другому данные. Но тут возн. неск. вопросов:
Откуда я знаю, что я такой адрес? От провайдера. А откуда у провайдера этот адрес? Наверное, есть орган (IANA), которая раздаёт адреса по-крупному. Например, 210.x.x.x выдан Китаю (?), и если спросить у неё про конкр. адрес, то она не ответит, скажет, все вопросу к Китаю. Там уже пошлют к провайдеру, там ещё к одному и так далее. Идея понятна: сущ. некая чисто адм. иерарзия по разд. адресов в порстю. интернета. Эта иерарх. держится на адм. и отчасти тополог. закономерностях — скажем, связность между двумя адресами 210.х.х.х выше, чем между ними и адресами из другой подсети.
Соотв., адр. получается не кто первый занял, а есть организация.
Второе. Есть некий шаблон поведения, который, по крайней мрее, не требует того, чтобы для каждого из таких комп. рег. IP-адрес, а в ряде случаев такое даже не нужно. Например, если у нас есть комп. класс, от при добавлении десятка компьютеров было бы очень неудобно ходить к провайдеру и регистрировать 10 адресов. Более того, в ряде случаев было бы хорошо скрывать диапазон адресов, исп. в локальной сети.
Есьт ещё одна проблема: IP-шники начинают кончаться, и IANA выдаёт их неохотно.
Ещё одна типичная ситуация: подключение к интернету непостоянное.
Две посл. проблем решаются след. образом:
- Сущ. тезнология подмены IP-адреса, про неё мы будем говорить, когда будем говорить про IP-уровень. Суть этой технологии (NAT) очень простая: есть компьютер с неважным IP-адрсеом, и посылает пакет в интернет, пакет прозоидт через некое устр., которое запоминает ист. пакета и его уник. хзар-ки, подменяет IP и посылает наружу, когда приходит ответ, происх. обратная операция. Когда исп. NAT, адреса в локалке никого не волнуют. Для того, чтобы это дело более менее ввести в какое-то русло.
На заре становления факультетского интернета были IBM RT, которые приезали неизв. откуда. Приехали они с чистыми зардами, но на одной из машин оказался бэкап, с которого как-то развернули систему, и олгое время адреса в у них были такие же, как у MIT. Поск. был NAT, то никто об этом не знал, но на сайт MIT'а было нельзя.
Чтобы такой проблемы не возникало, нек. диапазоны адресов отведены под лок. сети:
- 10.0.0.0/8
- 172.16.0.0/12
- 169.254.0.0/16
- 192.168.0.0/16
Любой из них можно исп. для адр. в лок. сетях беспроблемно.
При этом в наст. интернете такие адреса встр. не должны, а если и встр., то первый попавшийся маршр. обязан такой адр. выкинуть. Ещё их обозн. интранет. Интранет — такое слово без определние, и им называет много чего. И если говорят интранет-адрес, то скорее всего имеют адрес из этих диапазонов.
Поск очевидно некое неуд. исп. адресов в привычном виде, давно разраб. система раздачи адресов, наз. IPv6. Она немного сложнее, там много вопросов решается.
Соср. на одном из всего этого: есть абонент сети, и ... за это отвечате сетевая маска. Есть довольно простой способ (это часть сет. протокола), принадлежит ли абонент лок. сети и, след. сдотупен в пределах СПД, или же он её не принадлежит и с ним надо что-то делать: накл. маску на адреса отпр. и получателя и если они совп., то они лежат в пределах лок. сети. Что в этом случае делать: заворач. в eth-фрейм и посылаем, поск. знаем его идент, MAC-адреса. А откуда мы его знаем? Есть СПД, где заранее известны все идентификаторы, это статические сети, напр. в рамках выч. кластера. В реальной жизни бывает всё не так. В общем случае нам неизвестен интерфейсный идент. абонента, известен только IP. Для того, чтобы выполн. операцию нах. соотв. между MAC-адресами и IP-адресами (инт. и сетевым адресами), мы должны иметь некую табл. соотв, и сущ. протокол (ARP), который как раз занимается переводом из адреса уровня сетевого в адрес уровня интерфейсного. Там богатый спеутр верзхних и нижних уровней, и, в частности, переводит из IP в MAC. Поддержка ARP — неотъемлемое свойство практ. любой машины, подкл. к интернету. Протокл ARP широковещетельный, его пакеты напр. сразу всем (в поле MAC-адреса стоят 1), и тип этого пакета — ARP-запрос. В нём написано? "Чей такой вот IP?". Этот пакет все получ., и та машина, чей IP, отвечает: "Это ARP-ответ", поск. адрес содержится в фрейме. После этого таблица пополняется.
Таблица соотв. динамическая, записи в ней живут недолго, буквально минуту или неск. минут. В линуксе, по кр. мере в утилите ip эпоказ., наск. запись старая.
Сразу, чтобы было понятно, наша универс. утилита ip это часть пакета iproute2, которая занимается чёрт знает всем, и, в частности, маршрутизацией. У утилиты ip есть команада neighbour. команда ip n выдаст ARP-таблицу, для тех, кто ещё помнит, есть arp -a. Внимательное изучение док. по ip, можно узнать, что можно прописывть статические ARP-записи. Можно ещё в этой таблице прописать чужой IP-адрес. Чем это отличается от alias? Чаще всего это бывает в след. ситуациях: есть интернет, по нему есть ppp-канал, за которым машины с таой же подсетью, как и ваша. В этом случае на маршрутизаторе прописывается ещё одна arp-запись.
Что касается маршрутизации: здесь есть две проблемы. Первая проблема состоит в очень простом вопросе: мы выяснили, что наш пакет на ур. IP, мы его зотим посл. абоненту, который не находится в нашей лок. сети. Что дальше? Видимо, послать его куда-то, причём в надежде, что оно пошлё ещё длальше, и ещё дальше и так далее. В нашей сети не все йогурты... не все абоненты одинаковы. Это значит, что мы должны взять за правило все пакеты не для нашей сети посылать опр. машине. Это и есть акт маршрутизации. Очень часто бывает, что это пластиковая мыльница, которая лампочками мигает и маршрутизирует. При этом что нужно сделать на клиенте: на ней нужно созд. спец. запись, опять таки, внутрит таблиц ядра, которая именровала эту машину маршрутизатором для. Есть команда ip route, которая позв. просмотреть все маршруту. Выполнив её...
Возвращаемся к вопр. идентификации. Мы помним, что все стеевые инт. можно просмотреть командой ip link. С помощью ip addr можно просмотреть список всех интерфейсов и всю инф., касающуюся сетового уровня, присв. этим инт. По краней мере, с точки зрения линукса, должен бьыть инт., и на него уже навеш. параметры уровня сетевого. Для того, чтобы добавить адр. к инт, достаточно сказать ip addr add 210.11.70.8/24 dev eth0.
Некоторые узнают в эжтом синтаксис ifconfig. Естест., поск. ip это в первую очередь замена ему, и умеет всё и ещё больше. Только в ifconfig для доб неск. адресов необх было созд. вирт. интерфейсы... проделывать некое упраженение.
...
За каждую лок сеть, которая навешана на инт., будет отвечать запись в таблице маршр., примерно след. содержания: ... сеть такая-то, передавать через то-то.
В случае, когда есть неск. записей, таблица будет просм. след. образом: чем более общая маска, тем позже она будет просм: сначала, записи хост-хост, дальше для маленьких сетей и так далее до записи defaulkt, где маска нулевая.
Некое утверждение: когда мы гвоорим про адрес сети, мы должны понимать, чтоккак минимум два адреса абонента зарещервированы: адрес абонента не может иметь из всех нулей и из всех единиц. Из нулей — собственно адрес сети, и не может исп., чот же касается адреса, сост. из адреса сети и всех единиц, то это широков. адрес сетевого уровня, broadcast. Кстати сказать, этот параметр, вычисл. из маски, но его можно задавать вручную по-другому.
В случае соед. точка-точка, нам вообще не нужно польз. механизмом сеть-подсеть. Если это подкл. не точка-точка, то сколько тогда надо бит? 2, не 1. Сеть /30. Это к тому, наск. максимум подсетей можно разрезать подсеть класса C: не на 256, и не на 128, а на 64, или даже 63.
АЛг. маршр. достаточно прост: мы просм. строчки таблицы маршрутизации, где сначала абоненты лок сети, потом записи вида пересылки через абонентов и посл. будет по умолч. Это всё станд. алг. маршрутизации, если не исп. хитрые штуки ip route. Ибо не зря iproute2. Ибо такой способ маршр. весьма неэфф в случае сложной маршрутизации. В случае настр. простой маршр. он вполне хорош.
Напеример, в случае, когда нужно предост. разл. скорость доступа для разных категорий польз., для опр. того, куда пересылать пакет, нужно изучать адрес отпр., а не адрес получателя. Тут мы наталк. на ситуапцию, что в адресе отпр. ничего про это не гвоорится. Эта задача одна из первых возн. в задаче принуд. маршр., оа называется source-based routing. Разумеется, раз пошла такая пьянка, то пошли всякий примеси. Напр., пакеты одного класса можно пересылать через быстрый и онкий канал, другого — через тонкий и медленный. Или если пакет из привелиг. сеанса, от обр. его привелигерованно. Вообще говоря, можно подменить ст. процесс маршр., маршр. по правилам какое сост. в системе и какими свойствами обл. приехавший пакет.
Пристальный анализ док. к утилите ip покажет, что там дост. много разных действий.
Осалось 5 минут на проблему глоб. маршрутизации. У нас есть.. в реальности тот же интернет не явлется деревом. Поск. если это было ы дерево, то был бы маршрутизатор всего интернета, к которому в очередь выстраивались бы терросристы, желающие обрушить весь интернет.
В реальности имеются некие облачка (внутри которых уже очень часто бывают деревья), и между ними неплохо было бы устр. какую-то сеть, и поддерживать инф. о
- Достижимости
- Стоимости этого дела
- Уметь в случае пропадения достижимости гибко перестраивать этот маршрут
С точки зрения деревообр. кусочка это выгл. так: сначала передавали их через одно место, потом через другое.
Если бы не было такой стратегии разю. интернета на авт. системы и отслеж. достижимости, то никакого интернета бы не было. Эта проблема это тоже проблема маршрутизации. Перваыя проблема — марш. изнутри, вторая — марш. снаружи.
Существует неск. протоколов разн. степени замшелости, которые опис. поведение авт. систем: BGP, RIP, RIP2, EGP. Реализ. такого протокола есть функция не столько рабочей машины, скорее всего вы даже такую машину не увидите, это очень редкий компьютер, и на нём совсем не обязательно линукс или что-то юникс-подобное. Сущ. прогр. продукты, которые реализ эти протокколы маршрутизации, наиб. известный это Zebra и вырослий из неё ... . Проблема в том, что это вообще не очень часто решающаяся задача, и если юникс-гуру дали такую задачу, то он возьмёт ту же ..., посидит над неё неделю и сделает так, чотбы оно работало. Но есть фирмы, которые занимаются продажей такого железа.
О протоколах этого уровня в след. раз.
|
|