= Дполнительные главы сист. адм. = Начало не с самых снов, а про сеть. == Про сеть == Прежде чем расск, что происх, когда человек нажимает кнопку "Настроить сеть", потеоретизируем по части сети. Какие задачи надо решить человеку, перед которым встала задача рганихзация сети передачи данных между нек-рыми кмпьютерами, возможно в пределах всего мира? * Перве решение --- что используется в качестве носителя данных. Т есть, каким спсбом (по проводам, по радио, грузовик с винчестерами, голубиная почта). Не исключени, что их будет несколько, поскольку сеть может быть здоровая. Надо изобрести, как данные передавать. Примем решение, что данные передаются по 4 проводам, или что0то в этом дуже. В этом месте две проблемы: как выглядит этот носитель, какие его физ. хар-ки, и как выглядят данные (представление данных в носителе). К 4 прводам надо добавить, как 0 от 1 отличить: наличие напр. --- 1, отсутствие --- 0. * До тех пор, пока мы не придумаем, как этт нооситель подключить к компьютеру, мы не решим задачу подключения к компьютеру, мы не организуем СПД. Вторая задача --- обеспечение интерфейса между компьютерм и СПД * Вопрос: а мы решили свои проблемы? Вообще говоря, мы уже мжем передавать какие-то данные между двумя компьютерами. Тут мы вспоминаем, чт задача была передавать данные между многими кмпьютерами. Правда, эту задачу мы можем решить прямо здесь: ... . Первую проблему мы решили --- интерфейс подключения СПД к к-ру, вторая задача --- дисциплина, организация передачи данных. Даже если только два компьютера, т всё равно над дговориться, например, о том, как выглядят данные, когда их нет (как отличаются данные кгда ни есть от данных, когнда их нет). Например, для начала-конца передачи можно использовать некие последовательности 0 и 1. Когда же компьютеров несколько, то указывать ещё адресата. Или как обеспечить дновременную передачу от нескольких кмпьбтеров друг другу. Достаточн очевидно, что задачу объекдинения большог количества компьютеров мы не решили. Решили задачу подкл. малого количества. Следующий класс задач: * Уровень сбственно организации сети. Этот уровень состоит из двух задач * Перенумеровать все компьютеры на свете, например, выдать им какие-то уникальные номера. * Вторая задача возникает, когда у нас возн. задача обхекдинения разных спд. У нас не дна сеть, на ммного, в каждом устройства перенумерованы и возн. задача переброски куска информации от одного кмпьютера к другому, при этом чевидно, что они будут переюрошены через несколько СПД, в частности, на пути будут неск. устр., которые перебрасывают данные из одной СПД в другую. Эт задача маршрутизации Вопрос, а не хватит ли теоретизировать: есть СПД, есть спсоб передачи от одного компьбютера к другому, не хватит ли этого? Но мы же передаём важные данные. актически, данные мы передавать научились, а доставлять их в целости и схранности --- ещё нет. Сответственно, надо решить эту задачу или передавать абы как. Фактически, речь идёт о задачек дставки. Тут есть два способа нарушить сохранности: * потеря данных * порча данных Задача качества дставки. В эту задачу входят все три кмпоненты: чтобы доставилось то, что дставилось, чтобы мы знали, что доставилось, отслеживание сост. канала. Какая ситуация: есть чень мощная машина, которая может гигабайтами загаживать сеть, и в неё сключен 10-гигабитный кабель, и мы туда наливаем бесчисленные гигабайты информацие, которые упираются в модем... На самом деле, туту решается ещё дна задача: задача управления потоками данных. Если в этом потоке данных есть несклоьк элементов (пакеты), котрые передаются от дного компьютера другому. Соответственно, на каждом должн быть написано, к какому птоку этот кусочек относится. сталось вспомнить, что мы передаём данные, которые имеют семантику, и есть ещё одна задача: задача интерпретации. На самом деле это 4-уровневый tcp/ip. (4 потому, что первые два объед.) Эти уровни независимы, то есть, решив одну задачу, про неё можн забыть. Например, как только мы решили 2-ю задачу путём вставки езернет-карточки, мы мжем про то, как эти карточки общаются, можем забыть. Аналогично, TCP/IP можно пробросить поверх мног чего. Это очень важное свойство. Как только мы решили задачу нижнег уровня, мы можем решать задачу верхнего в отрыве от неё. Уровни tcp/ip: * Физический * Сетевой * Транспортный * Прикладной Далее. Принято использовать сети с использованием пакетовю Вообще есть сети с исп. каналоов и пакетом.ю Аналогом сети с исп. каналов можно рассм. телефонную сеть: на время звонка оба абонента заняты, если у них одно возм. подкл. Но при этом мы можем не опасаться, что что-то во время передачи случится. Это такое главне достоинство сетей с коммутацией каналов. Главный недостаток --- если имеется n абонентов, т непонятно, склоько надо иметь каналов взапасе, чтобы все могли связаться друг с другом. Соответственно, если каналов не хватает, то при звонке будет занято, если между атс каналы кончились. В сетях с коммутацие пакетов всё наоборот. Передавать данные могут все абоненты этой среды в любой момент. Но дисциплина передачи такова, что данные нарезаны на пакеты и за один раз можн передать один пакет. В старых унижках по стеям здесь привоят token ring. Что касается нашего случая, то надо рассказывать про Ethernet. На самом деле, тут решается много интересных задач. Например, как передавать высокочастотный сигнал по бычному проводу? По каксиалу понятно, а как в обычнм проводе? Там на каждый проводок с даннымы есть свой провод с землёй, и они закручены друг вокруг друга, что обеспечивает экранирование. (рассказ про секьюрных бжимальщиков) Опучтимся на уровень выше и пговорим про интерфейс. У нас есть езернетный кабель и езернетная карта. С точки зрения кмпьютера начиается всё только с точки зрения интерфейса. Езернет устроен след. образом: общая СПД. Любой кмпьютер в любой момент может захтеть передавать любому другому данные. Сразу встаёт вопрос дисциплины передачи. 1. Прежде чем что-то передавать, сетевое утройство определяет, занята ли среда или свободна. Если свободна то происхдит, иначе задерживается. Что это значит: Это значит, что если какой-то машине взбрело в голову что-то передать, то сетевая карта не будет сразу передавать данные. Какое время ожидания выбирается? Произвольное. Сналчала в некем диапазоне, потом в два раза большем и так далее. Это спасает от request ... . Случайнсть времени жидания обеспечивается неким прстейшим RNG. 1. Если два компьбютера одновременно захтели передавать данные и увидели, что среда свободна, то они мгут начать передачу. Т есть, возникает коллизия, которую над решать. Все адоненты, которые попали в коллизию, то ожидание происходит как в предыдущем случае 1. Униклаьные адреса. В сети езернет все устройства имеют уникальный идентификатор (MAC-адрес), каждое устройство видит каждое, и на этом основании происходит передача данных. Пакет этого уровня пмимо полезных данных содержит всякую полезную информацию о том, что это за пакет, в частности, кто адресат, кто тправитель, Но MAC-адресом как способом нумерации мы воспользоваться не можем. Но на днм уровне требование уникальности вып. и дисц. передачи рабтает. Второе свойство TCP/IP: инкапсуляция. Лектор начал рассказывать про разд. пакетв сразу. Если мы сразу решили, что исп. пакеты, то будем исп. ихз и выше, только везде оно будет иметь разное значение. * Что такое пакет на уровне интерфейсном? Это кусок данных, который может принять карта за раз. В этом фрейме написено от кого и кому он. Адрес получателя может быть широковещательным. Если в поле макадреса стоят только 1, то такой пакет преджназначен всем устройствам одновременно. * На уровне сетевом понимается нечто не привязанное к одной конкретной СПД, а некая абстация. Поскольку было бы уодоно нарезать пакеты такого размера, который передаётся в СПД за раз. Это некая оторванная от конкретного интерфейса штука, в которой есть payload и некие допполя: адреса, TTL... * Такие же вещи происх. на уровне доставки. Тут уже они определяются требованием качества (чем выше качество, тем больше пакет) * Оно же может быть на прикладном уровне. Это уже требование самой программы, мы про это уже ничего не знаем. Мы становились на езернете. Для того, чтобы посмотреть, какие сетевые инт. есть в системе, можно воспользвать ip l (link). один интерфейс есть в линух машине всегда --- loopback. Оно просто позволяет подключаться машине к самой себе. Интерфейсы можно переименовывать, традиционно они называются eth и нумеруются с 0. Далее идёт MAC и broadcast-адрес. Можно сказать, что локальная сеть --- сеть в пределах дной СПД. Далее поднимаемся на уровень сетевой. Тут мы должны выполнить две задачи: задачу перенумеровать все компьютеры в интернете и организовать доставку от одного компьютера к другому. Опять второе свйство tcp/pi: мы решщили передать данные, скармливаем их программе, например, ftp-клиенту, он оформляет их в соответствии с протоколом ftp. Ровн в тот момент, когда возн. необх. уст. соед., этот массив данных рубится в соотв. с требованиями tcp. Тем не менее, когда мы разрезаем файл колбасой. которые потом заворачиваем в tcp-пакеты, то есть данных прибавляется. На этом дело не останавливается. Для того, чтобы передать конкретно соседнему кмпьютеру в сети, этот пакет режется на куски опять, кадый кусок режентся на ip-пакеты, то есть опять проводим перацию инкапс. --- режем данные на части и борачиваем их заголовком более низкого уровня. Далее каждая часть заворачивается в eth-фрейм и отправляется. Таким обращзом, процесс инкапсуляции он на каждом уровне. Дальше происходит такое путешествие: этот фарш восставнасливается братно: из двух eth-фреймв получаем ip-пакет, узнаём, что его надо отправтиь дальше, запаковываем и отпр. обратно. И так до целевой машины, котрая собирает tcp-пакет и делает что-то с полученными данными. В некоторых случаях может быть так, что ip-пакеты собираются до tcp, чтобы решить, что делать дальше. Это налдо всегда иметь в виду. Главное, что известно: надо передавать существенн больше данных, чем надо передавать. Проверка соотв. mac-адреса делается на апп. уровне, но в нек. случаях бывает полезно перевести карту с promist-режим. В этом случае карат будет принимать все пакеты, которые пробегют мимо неё, в частности,чужие. Вообще говоря, именно таким спсобом выковыривают пароли... Есть даже метод выявляения таких шпионов: пишется программа, которая генерит немычслимый трафик, которые предназначены никому. Если там сидит челоовек, который прослушивает всю сеть, то он сразу захлебнётся. Что касается уровня сетевого. Задача пронумеровть все сетевые устр. в сети (поск. мы так передаём, то это идент. стеевонг устр-ва) --- задача невыполнима. Эту задачу надо перераспределить, чтобы не в одном конкр. месте выдавались все адреса, а выработать некоторую жисциплину, чтобы решения принимались в локальном порядке. Для этого устр. некоторую пирамидку. Есть некая организация, которая выдаёт списки сетевых адресов. Эта организация (ICANN?). Потом этот список режется на кусочки и раздаётся другим людям и так далее. В концеп концов некий конечний сисадмин получает группу адресов так, чтобы это работало в интернете. IP-адрес это 4 байта, которые записываются через точку в десятичнм виде. Если набрать ip addr, то увидим дополнительную строку, в которой есть инф пр ip. В частности, ip адрес. ## Педедыв Мы приступаем к тому, как устроен tcp/ip. Уже было сказано, что на уровне ip идентификация произв. 4 байтами. В старых книжках по tcp/ip мжно обнаружить рассказ про то, что адреса бывают разнвх классов: A, B, C, D. Но в реальности адреса редко порезаны так, как это предполагается этими классами. Вохьмём адрес как строку битов и отделим от неё те адреса, у которых первый бит --- 0. Все сети, у которых самый старший бит 0 --- сети класса А, и условно внутри локальной сети на одной среде передачи данных нахдится сразу 16 млн. компьютеров, т. к. под адрес абонента отводится 3 байта. Соответственн, на адрес сети остаётся один байт. И вообще, если СПД и сеть не настоящая, то можно сколоько угодно адресов завести, илшь бы мощности позволили. В общем, система классов вот в чём: адрес делится на адрес сети и адрес абонента сети, и если адрес сети совп., то передача локальна, иначе надо выяснять, какй марш. может передать эти данные. Сеть класса b --- 10/14/16, c --- 110/21/8, сеть класса d --- 1110/28 --- используются для мультикастинга, когда пакеты попадают некоторым адресатам, но не всем. Как это выглядит в жизни: 127.0.0.1 --- адрес класса A, и /8 показывает количество битов, которые идентифицируют сеть. Сейас классы не исп., исп. диапазоны адресов, которые разд по мере надобности. Соответственн, под идент. сети можно отводить разное количество бит. Сколько машин в сети? n-2, возн. два спец. адреса: если все единички в поле абонент, то пакет широковещательный. Как настраивать сеть: ip addr add 192.168.200.117/24 dev eth0 После этого можно сказать ip addr, чтобы посмотреть, что получилсь. В числе прочего, мы научились вручную настраивать сеть. Данный адрес класса c, это значает, что все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей сети, а стальные --- другой. Дальше мжно проверить работоспособность сети, например,ЮЮ пингшануть 192.168.200.1. Зедсь мжно вспмнить о такомпонятии как протокол. Вообще, протокол это документ, который описывает, как происх. взаим. п сети в разных случаях. Таких протоколов очен много. В частности, на каждом из уровней есть свои протоолкы. На уровне сетевом (где есть задачи пронумеровать все машины и орг. маршрут.) тже есть свои протоколы, которые позв. решать какие-то задачи. Главная задача, которая должна здесь решаться --- задача передачи диаг. сообщ. Например, невозм. организация маршрута. Причём, про это не знает ни наша мешина, ни сосдедняя, а только в середине маршрута. Тогда надо послать диаг. сообщение оттуда, что пакет не будет дост. Эт одна из чень мнгих задач, которые надо рещать, когда нам надо посл. диаг. о происх. Этот протокол называется ICMP, Internet Connection Management Protocol. Это происх. прямо на уровне ip. В частности, команда ping пользуется одиним из типов таких собщ., на посылает спец. пакет, ICMP-пакет, в котором написано "ответь мне пожалуйста". Ну, там есть ещё некая инф. о том, какой номер такого пакета. Согласно протоколу icmp получатель бязан отослать по получении ответ. Несмотря на очеаидный системный характер протокола ICMP --- он не несёт никаких данных, чрезвычайно вредно уроезать его. При этм действительно нужно знать, какие типы ICMP действительно нужны, а какие --- нет. Чтобы закрыть вопрос с IP-адресами, лектор добавит вот что: задача перенумеровать все компьютеры адресами невыполнима. Например, есть большое количество компьютеров, которым внешние адреса не нужны. С одной стороны есть преобразование адресов, с другой стороны, есть адресов, которые неуникальны в интернете. В частности, у каждого сетевого интерфейса есть loopback и адрес 127.0.0.1. Диапазон адресов класса A, который начинается на 10., также неуникален. Кроме того адреса в диапазоне, 192.168.0.0/16 тоже можно раздавать без трукдностей. Другое дело, что любой маршрутизатор вам скажет, что компьютеров с такими адресами быть не может. Также локальны 127.0.0.0/8, 172.16.0.0/12. Вторая проблема, которую надо решить --- маршрутизация. Прежде чем переходить к марш., решим один очень важный впрос. В случае, если несколько компьютеров объединены СПД, то каждое устойство может каждому передавать каие-т устройства. Но у нас-то маршрутизация сущ. на третьем, стевом, определяющим является не IP, а MAC-адрес, более того, может так случиться, что для MAC-адреса мжет меняться IP, а для IP может меняться MAC. Поэтому не совсем понятно, как может приниматься решение, куда передавать ethernet-frame, ибо мы знаем про абонента только IP. Тут мы встречаемся с понятием сетевой службы, поскольку прежде чем передача данных, должна произойти операция по выяснению того, куда необх. отпр. данные. Для того, чтобы в теч. некрго времени зранить данные о тм, какому IP соотв. какие MAС, служат ARP-таблицы. Если сказать ip n, то можно увидеть своих соседей. Если попинговать соседнюю тачку и после этого сказать, то можно увидеть свою ARP-таблицу. Если сказать tcpdump arp, то при пинге какой-то тачки можно увидеть, что происх. в сети. Вообще, tcpdump ввергает карточку в сост. просл. всей сети, для того, чтбы знать, что в сети происходит. tcpdump arp говорит. что мы слушаем arp. Когда мы пинговали 192.168.200.10, мы выяснили что: * Эта машина в локальной сети, и можно передавать ей данные прямо так * Надо выяснить ARP-адрес этой машины, псылаем широковещательный eth-фрейм, который гворит следующее: "мужики! адрес 192.168.200.10 у кого? Отвечай!" * Получатели принимают этот пакет, пдонимают на уровень ядра, видят, что это за запрос и отвечают: Дорогой 192.168.200.117, MAC у 192.168.200.10 такой. * Когда удалённая машина отвечает на пинг, т она проводит аналгичную операцию. Этот протокол отчасти уровня интерфейсного, потму чт происх. обмен eth-фреймами. Переходим к второй задаче ip, а именно маршрутизации. Мы сейчас всё это время имели дело с локальнй машиной. Что будет, если мы захотим переслать пакет удалённой машине? Ни одной машине в лок. сети этот пакет не нужен. А кому нужен? Маршрутизатору. В сети должны быть одна или неск. машин, которые занимаются тем, что перекладывают пакеты с одного интерфейса на другой. Общий алгоритм очень простой. Сущ. некие правила, по которым в лок. сети выбирается машины, которым передаются пакеты, не адр. машинам данной сети. Эти правила и наз. маршрутизацией. И дальше написания таблички, что за пересылку пакетов в интернет отвечает эта машина, а за пересылку пакетов в жругой класс --- эта, не идёт. Тем не менее, самих правил, связанных с усл., по которым не будет проходить маршгрутизация. По умолчанию, пользовтаелю надо только указать машину, которая является шлюзом (а в случае с DHCP вообще ничего не надо делать): ip route add default via 192.168.200.1. После чего в ip route увидим два маршрута, второй появился автоматом для локальных адресов. В таблице маршрутизации указывается, на какие машины послуать пакеты для каких адресов. Маршруты сортируются по величине маски. Как в рещультате форм. маршрут пакета? Это штука вполне динамическая. В каждой точке маршрутизации принимается решение, куда пакет дальше отправить. Чтобы увидеть, как ходит пакет, можно сделать, например, traceroute 89.188.104.91. Как это реализовано? В принципе, в пакете ip есть флаг record route, но его никто не записывает. Вместо этого используется ttl, который уменьшается на 1 каждую секунду и при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутихзатор ttl обнкляется, о чём маршрутизатор посъылает соообщение. Далее посылается пакет с ttl=2. При этом надо понимать, что этот маршщрут не обязан быть таким, но даёт представление о маршруте. Поднимаемся на уровень TCP. Лектор напоминает, в чём проблема: мы можем доставить пакет до абонента, у нас есть такая возможность. Другой вопрос, случилось оно или не случилось. Соответственно, для отслеживания качестваи по другим причинам было бы неплохо получать подтверждение того, что данные получены. Втооре. Надо предусмотреть ситуацию, когда мы отправили, а абонент ничего не получил. Например, отправили 4 пакета, пришли только 1, 2, 4. Надо составить механизм доставки так, чтобы эти пакеты могли быть собраны на другой стороне. Было бы неплохо перед тем, как передавать данные есть, кому их принимать. То есть, нам нужно подключаться к абонненту, чтобы обменяться инф, есть ли н на свете. Ещё дна задача: манипулирование потоками. Вопрос: а в действительности ли каждые из 5 требований нужно реализовывать, когда мы хотим передавать данные? Если вся информация, которую мы хтим отправить, помещается в один пакет (датаграмму), то, возможно всё это использовать не надо. Поэтому, на уровне TCP есть всего два протокола: надёжный TCP и ненадёжный UDP. TCP начинается с уст. подключения, и, прежде чем процедура подкл. не произойдёт, ничего не может начться. при этом, процедура подключения двусторонняя. То есть, данные передаются в обе стороны. TCP устроен по принципу подтверждений. Каждый TCP-пакет, после того, как он принят сервером, на него генерируется подстверждение, что он принят, в проивном случае (сразу или по таймауту) происходит извещ. об ошибке. При этом процесс симметричный. Более, того подтв. могут совмещаться с данными. Все TCP-пакеты пронумерованы, есть понятие seqno, и в каждом их два, увеличиваются они на размер переданных данных. Это одновременно позволяет вычислять последовательность пакетов и позволяет выяснять, что пропало и не сдублировался ли пакет. Везде считается checksum, что касается отслеж. сост канала, то тут довольно хитрая технология, в которой поначалу обмен идёт маленькими пакетами, но далее размер увеличивается. Для того, чтобы выполнить задачу разделения данных, появляется ещё одно понятие --- порт. Придумано оно по аналогии с портами ввода-вывода. Когда происх. соед. между клиентом и сервером, то происх. соед. по определённому порту. Когда происх. пдоключение, то у сервера порт 22, а у клиента случайный, (44670), что пзволяет разделять потоки даже в случяае нескольких подключений между двумя машинами. Почему лектор говорит, что порт это переходный уровень между TCP и уровнем приложений? Потому что согл. нек. договорённостям, рахные типы приложений сидят на разных портах. Почему так? Да потому что никакого другого способа определить, как подключаться к определённому порту, нет. Есть организация IANA, котрая регистрирует эти порты (cat /etc/services). Вопросы В чём разница между TCP-пакетами и UDP-датаграммами? Они нужны для разных вещей. Например, при задаче широковещания не нужны не сообщ. о доставке, ни сообщ. об ошибках. Другой случай --- маленькие пакеты, на которые всегда должен быть какй-то ответ. Ещё один юзейс --- медленные обработка и ответ.