Differences between revisions 1 and 69 (spanning 68 versions)
Revision 1 as of 2008-07-02 20:47:48
Size: 15361
Editor: eSyr
Comment:
Revision 69 as of 2008-10-04 10:24:12
Size: 26505
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Что касается уровня сетевого. == Сетевой уровень ==
Line 3: Line 3:
Задача пронумеровть все сетевые устр. в сети (поск. мы так передаём, то это идент. стеевонг устр-ва) --- задача невыполнима. Эту задачу надо перераспределить, чтобы не в одном конкр. месте выдавались все адреса, а выработать некоторую жисциплину, чтобы решения принимались в локальном порядке. Для этого устр. некоторую пирамидку. Есть некая организация, которая выдаёт списки сетевых адресов. Эта организация (ICANN?). Потом этот список режется на кусочки и раздаётся другим людям и так далее. В концеп концов некий конечний сисадмин получает группу адресов так, чтобы это работало в интернете. IP-адрес это 4 байта, которые записываются через точку в десятичнм виде. Если набрать ip addr, то увидим дополнительную строку, в которой есть инф пр ip. В частности, ip адрес. === Задачи сетевого уровня ===
Line 5: Line 5:
## Педедыв Организация передачи данных на сетевом уровень предполагает, что компьютеры соединены между собой несколькими средами передачи данных, вообще говоря, совершенно различными. На этом уровне нужно решить две задачи:
 1. Однозначно идентифицировать все компьютеры в глобальной сети, чтобы их можно было адресовать и отличать друг от друга.
 2. Организовать маршрутизацию данных от одного компьютера к другому через некоторое количество промежуточных узлов.
Line 7: Line 9:
Мы приступаем к тому, как устроен 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 --- используются для мультикастинга, когда пакеты попадают некоторым адресатам, но не всем. С развитием концепции глобальной сети на сетевом уровне стека TCP/IP были реализованы возможности по передаче данных из любой сети в любую сеть, независимо от протоколов нижнего уровня. Задачей протокола сетевого уровня IP (''Internet Protocol'') является обмен между устройствами, которые, вообще говоря, не находятся в одной среде передачи данных. Для этого необходимо определить, во-первых, механизм адресации, чтобы можно было выделить среди множества компьютеров тот, которому предназначены данные, и, во-вторых, механизм маршрутизации, отвечающий за доставку пакетов между различными сетями. Рассмотрим подробнее каждую из этих двух функций протокола IP.
Line 9: Line 11:
Как это выглядит в жизни: 127.0.0.1 --- адрес класса A, и /8 показывает количество битов, которые идентифицируют сеть. Сейас классы не исп., исп. диапазоны адресов, которые разд по мере надобности. Соответственн, под идент. сети можно отводить разное количество бит. === IP-адресация ===
 
Адрес устройства в сети, использующий протокол IP версии 4, состоит из четырёх байт, которые обычно записываются как четыре десятичных числа от 0 до 255, разделённые точками. Распределением IP-адресов в масштабах земного шара занимается организация IANA. Эта организация выделяет диапазоны адресов другим организациям, затем эти диапазоны делятся на более мелкие диапазоны и в конце концов присваиваются компьютерным сетям, и внутри сети устройствам присваиваются адреса из присвоенного этой сети диапазона.
Line 11: Line 15:
Сколько машин в сети? n-2, возн. два спец. адреса: если все единички в поле абонент, то пакет широковещательный. Диапазоны IP-адресов организуются так, что у всех компьютеров одной сети первые несколько бит адреса совпадают. Таким образом, IP-адрес можно разделить на две части. Первая из них адресует сеть и одинакова для всех устройств, подключённых к данной среде передачи данных, а вторая -- хост в сети, т. е. конкретное устройство, например компьютер или сетевой принтер. Записывается это следующим образом: после собственно адреса указывается количество бит, адресующих сеть, например 127.0.0.1/8 или 192.168.200.10/24. Количество бит идентификатора хоста (k) позволяет вычислить максимально возможное количество машин в сети: оно равно 2^k-2. Кроме приведённой краткой формой записи маски, существует и другая, когда маску, подобно адресу, записывают в виде четырёх десятичных чисел. При этом равный единице двоичный разряд соответствует адресу сети, а равный нулю --- адресу хоста. Таким образом, краткой записи маски /24 соответствует полная маска 255.255.0.0.
Line 13: Line 17:
Как настраивать сеть: ip addr add 192.168.200.117/24 dev eth0
После этого можно сказать ip addr, чтобы посмотреть, что получилсь. В числе прочего, мы научились вручную настраивать сеть. Данный адрес класса c, это значает, что все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей сети, а стальные --- другой. Дальше мжно проверить работоспособность сети, например,ЮЮ пингшануть 192.168.200.1.
Назначение масок и адресов сети следующее: если адрес сети двух компьютеров совпадает, то они подключены к одной среде передачи данных, и передача между ними является локальной. Если адреса сети назначения отличается от адреса сети отправителя, то речь необходимо определить маршрут следования IP-пакета с данными. Для решения этой задачи существует IP-маршрутизация.
Line 16: Line 19:
Зедсь мжно вспмнить о такомпонятии как протокол. Вообще, протокол это документ, который описывает, как происх. взаим. п сети в разных случаях. Таких протоколов очен много. В частности, на каждом из уровней есть свои протоолкы. На уровне сетевом (где есть задачи пронумеровать все машины и орг. маршрут.) тже есть свои протоколы, которые позв. решать какие-то задачи. Главная задача, которая должна здесь решаться --- задача передачи диаг. сообщ. Например, невозм. организация маршрута. Причём, про это не знает ни наша мешина, ни сосдедняя, а только в середине маршрута. Тогда надо послать диаг. сообщение оттуда, что пакет не будет дост. Эт одна из чень мнгих задач, которые надо рещать, когда нам надо посл. диаг. о происх. Этот протокол называется ICMP, Internet Connection Management Protocol. Это происх. прямо на уровне ip. В частности, команда ping пользуется одиним из типов таких собщ., на посылает спец. пакет, ICMP-пакет, в котором написано "ответь мне пожалуйста". Ну, там есть ещё некая инф. о том, какой номер такого пакета. Согласно протоколу icmp получатель бязан отослать по получении ответ. Ранее использовалась несколько иная, классовая, система IP-адресов. В соответствии с ней IP-адреса делятся на четыре класса: A, B, C, D и E. Принадлежность к тому или иному классу определяется следующим образом: рассмотрим IP-адреса как строку битов и выберем те, у которых первый (старший) бит --- 0. Сети с такими адресами являются сетями класса А; их адрес может быть представлен в виде N.H.H.H, где N --- cеть (''network''), H --- хост (''host''). Под адрес хоста отводится 3 байта, это означает, что внутри локальной сети может находиться примерно 16 млн компьютеров. Соответственно, адрес сети занимает оставшийся 1 байт. В связи с тем, что адреса класса А имеют 8-разрядный сетевой префикс (т.е. сеть идентифицируется 8 битами), их обозначают записью /8. Cетям класса B (N.N.H.H) соответствуют IP-адреса, начальные биты которых --- 10, сетям класса C (N.N.N.H) --- адреса, начальные биты которых --- 110. Аналогично обозначению сетей класса А, сети классов B, C, D обозначаются /16 и /24.
Line 18: Line 21:
Несмотря на очеаидный системный характер протокола ICMP --- он не несёт никаких данных, чрезвычайно вредно уроезать его. При этм действительно нужно знать, какие типы ICMP действительно нужны, а какие --- нет. Сетям класса D соответствуют адреса, начальные биты которых --- 1110. Такие сети используются для для групповой передачи данных. Существуют также сети класса E, их старшие биты --- 1111, это экспериментальные сети.
Line 20: Line 23:
Чтобы закрыть вопрос с IP-адресами, лектор добавит вот что: задача перенумеровать все компьютеры адресами невыполнима. Например, есть большое количество компьютеров, которым внешние адреса не нужны. С одной стороны есть преобразование адресов, с другой стороны, есть адресов, которые неуникальны в интернете. В частности, у каждого сетевого интерфейса есть loopback и адрес 127.0.0.1. Диапазон адресов класса A, который начинается на 10., также неуникален. Кроме того адреса в диапазоне, 192.168.0.0/16 тоже можно раздавать без трукдностей. Другое дело, что любой маршрутизатор вам скажет, что компьютеров с такими адресами быть не может. Также локальны 127.0.0.0/8, 172.16.0.0/12. Рассмотрим примеры IP-адресов с указанием маски сети и их связь с классами сетей: 127.0.0.1/8 --- IP-адрес класса А, 192.168.10.2/24 -- адрес в сети класса С, 10.1.2.15/24 --- адрес в подсети с маской /24 в сети класса А.
Line 22: Line 25:
Вторая проблема, которую надо решить --- маршрутизация. === Настройка IP-адреса ===
Line 24: Line 27:
Прежде чем переходить к марш., решим один очень важный впрос. В случае, если несколько компьютеров объединены СПД, то каждое устойство может каждому передавать каие-т устройства. Но у нас-то маршрутизация сущ. на третьем, стевом, определяющим является не IP, а MAC-адрес, более того, может так случиться, что для MAC-адреса мжет меняться IP, а для IP может меняться MAC. Поэтому не совсем понятно, как может приниматься решение, куда передавать ethernet-frame, ибо мы знаем про абонента только IP. Тут мы встречаемся с понятием сетевой службы, поскольку прежде чем передача данных, должна произойти операция по выяснению того, куда необх. отпр. данные. Для операций с IP-адресами машины в системе Linux можно использовать команду {{{ip addr}}}. Примерный вывод этой команды имеет следующий вид:
{{{
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:46:43:09:11 brd ff:ff:ff:ff:ff:ff
}}}
Line 26: Line 37:
Для того, чтобы в теч. некрго времени зранить данные о тм, какому IP соотв. какие MAС, служат ARP-таблицы. Если сказать ip n, то можно увидеть своих соседей. Если попинговать соседнюю тачку и после этого сказать, то можно увидеть свою ARP-таблицу. Как видно из вывода команды {{{ip addr}}}, вся сеть класса А 127.0.0.1/8 по стандарту распределения адресов отведена под локальный сетевой интерфейс, через который данные передаются только в пределах одного компьютера.
Line 28: Line 39:
Если сказать tcpdump arp, то при пинге какой-то тачки можно увидеть, что происх. в сети. Вообще, tcpdump ввергает карточку в сост. просл. всей сети, для того, чтбы знать, что в сети происходит. Одним из способов задания IP-адреса сетевому интерфейсу является использование команды {{{ip}}}. Выполним команду {{{ip addr add 192.168.200.117/24 dev eth0}}}, после этого введем {{{ip addr}}}, чтобы посмотреть, что получилось.
{{{
# ip addr add 192.168.200.117/24 dev eth0
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:46:43:09:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.117/24 scope global eth0
}}}
Line 30: Line 51:
tcpdump arp говорит. что мы слушаем arp. Когда мы пинговали 192.168.200.10, мы выяснили что:
 * Эта машина в локальной сети, и можно передавать ей данные прямо так
 * Надо выяснить ARP-адрес этой машины, псылаем широковещательный eth-фрейм, который гворит следующее: "мужики! адрес 192.168.200.10 у кого? Отвечай!"
 * Получатели принимают этот пакет, пдонимают на уровень ядра, видят, что это за запрос и отвечают: Дорогой 192.168.200.117, MAC у 192.168.200.10 такой.
 * Когда удалённая машина отвечает на пинг, т она проводит аналгичную операцию.
Мы научились вручную настраивать IP-адрес и маску компьютера в сети. В соответствии с маской /24 все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей же сети, а с другими IP-адресами --- каким-то другим сетям. Однако, мы не указали компьютеру, как следует передавать данные, если их получатель находится в не нашей сети. Для этого нужно рассмотреть IP-маршрутизацию.
Line 36: Line 53:
Этот протокол отчасти уровня интерфейсного, потму чт происх. обмен eth-фреймами. === Отображение IP-адреса в MAC-адрес ===
Line 38: Line 55:
Переходим к второй задаче ip, а именно маршрутизации. Мы сейчас всё это время имели дело с локальнй машиной. Что будет, если мы захотим переслать пакет удалённой машине? Ни одной машине в лок. сети этот пакет не нужен. А кому нужен? Маршрутизатору. В сети должны быть одна или неск. машин, которые занимаются тем, что перекладывают пакеты с одного интерфейса на другой. Общий алгоритм очень простой. Сущ. некие правила, по которым в лок. сети выбирается машины, которым передаются пакеты, не адр. машинам данной сети. Эти правила и наз. маршрутизацией. И дальше написания таблички, что за пересылку пакетов в интернет отвечает эта машина, а за пересылку пакетов в жругой класс --- эта, не идёт. Прежде чем переходить к маршрутизации, рассмотрим вопрос передачи данных в пределах одной сети. В случае, если несколько компьютеров объединены средой передачи данных, то каждое устройство может каждому передавать некоторые данные через канальный уровень, при этом определяющим является не IP-адрес хоста, а его MAC-адрес, обычно закреплённый за сетевой картой. Более того, может случиться, что MAC-адрес может связываться с различными IP-адресами с течением времени, как и IP-адрес может связываться с различными MAC-адресами. Поэтому необходимо выяснить, кому передавать фрейм протокола Ethernet, зная только IP абонента. Для этого, прежде чем начнётся передача полезных данных, следует выяснить, на какой MAC-адрес необходимо отправить данные.
Line 40: Line 57:
Тем не менее, самих правил, связанных с усл., по которым не будет проходить маршгрутизация. По умолчанию, пользовтаелю надо только указать машину, которая является шлюзом (а в случае с DHCP вообще ничего не надо делать): ip route add default via 192.168.200.1. После чего в ip route увидим два маршрута, второй появился автоматом для локальных адресов. В таблице маршрутизации указывается, на какие машины послуать пакеты для каких адресов. Маршруты сортируются по величине маски. Для хранения данных о том, какому IP соответствуют какие MAС, служат ARP-таблицы. При выполнении команды {{{ip n}}}, то можно увидеть ARP-таблицу с адресами соседей по среде передачи данных. Обычно мы увидим там компьютер с адресом 1 в нашей же сети.
{{{
# ip n
dev eth0 lladdr 00:10:dc:63:fc:c0 REACHABLE
}}}
Line 42: Line 63:
Как в рещультате форм. маршрут пакета? Это штука вполне динамическая. В каждой точке маршрутизации принимается решение, куда пакет дальше отправить. Если выполнить команду {{{tcpdump arp}}}, то при начале передачи данных какой-то машине можно увидеть, что происходит в сети. Для сброса ARP-таблицы перед экспериментом следует выполнить команду {{{ip n flush all}}}.
Line 44: Line 65:
Чтобы увидеть, как ходит пакет, можно сделать, например, traceroute 89.188.104.91. Как это реализовано? В принципе, в пакете ip есть флаг record route, но его никто не записывает. Вместо этого используется ttl, который уменьшается на 1 каждую секунду и при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутихзатор ttl обнкляется, о чём маршрутизатор посъылает соообщение. Далее посылается пакет с ttl=2. При этом надо понимать, что этот маршщрут не обязан быть таким, но даёт представление о маршруте. {{{
# ip n flush all
# tcpdump arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
18:38:02.331053 arp who-has 192.168.200.1 tell pspo.local
18:38:02.331257 arp reply 192.168.200.1 is-at 00:a0:c9:b2:ef:c4 (oui Unknown)
18:38:07.331993 arp who-has pspo.local tell 192.168.200.1
18:38:07.332021 arp reply pspo.local is-at 08:00:46:43:09:11 (oui Unknown)

4 packets captured
4 packets received by filter
0 packets dropped by kernel
}}}

Команда {{{tcpdump arp}}} говорит, что мы слушаем протокол ARP, предназначенный для выяснения MAC-адреса по известному IP-адресу. В момент начала передачи данных хосту с адресом 192.168.200.1 произошло следующее:
 * Протокол IP установил, что адрес получателя находится в локальной сети, и можно передавать данные непосредственно через среду передачи данных;
 * Для выяснения MAC-адреса получателя всем узлам, подключённым к среде передачи данных, посылается eth-фрейм. Он представляет собой широковещательный ARP-запрос, который сообщает всем остальным машинам примерно следующее: "кому принадлежит адрес 192.168.200.1 - отзовитесь".
 * Получатели принимают этот eth-фрейм, и хост с IP-адресом 192.168.200.1 сообщает в ответе свой MAC-адрес.
 * Инициатор процесса запоминает выясненный IP-адрес в своей ARP-таблице.

Отметим, что сам протокол ARP относится к канальному уровню, поскольку в нем происходит обмен фреймами протокола Ethernet без использования протокола IP.

=== IP-маршрутизация ===

Основная задача на сетевом уровне --- организовать маршрутизацию между двумя компьютерами в разных точках земного шара. Для этого требуется пронумеровать все компьютеры уникальными IP-адресами, что практически невозможно. Поэтому все возможные IP-адреса были разделены на две большие группы: внешние (иногда называемые "белыми") и внутренние ("серые"). Последние не являются уникальными и могут назначаться компьютерам локальной сети по желанию администратора. Для них выделены следующие диапазоны адресов: 127.0.0.0/8 для передачи только в пределах одного хоста и 172.16.0.0/12, 192.168.0.0/16 и 10.0.0.0/8 для выделения адресов в локальных сетях. При этом каждый маршрутизатор в интернете считает, что компьютеров с такими адресами быть не может. Для связи между компьютерами с внутренними и внешними адресами существует специальный механизм трансляции сетевых адресов, который будет рассмотрен позднее.

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

Таким образом, для передачи данных в другие сети необходимо знать адрес как миниму одного маршрутизатора, подключённого к этой же сети. Существуют некие правила, по которым в локальной сети выбираются машины, которым передаются пакеты, не адресованные машинам данной сети. Эти правила и называются маршрутизацией. Простейшим правилом будет выбор для всех внешних адресов единственного маршрутизатора, называющегося маршрутизатором по-умолчанию (''default gateway''). В общем же случае необходимо написать таблицу, определяющую, какая машина отвечает за пересылку пакетов в Интернет или в другую сеть. У обычных хостов содержимое таблицы ограничивается одним или, реже, несколькими локальными маршрутизаторами.

Для указания маршрутизатора по умолчанию в случае ручной конфигурации интерфейса необходимо указать IP-адрес машины, которая им является. Команда {{{ip route add default via 192.168.200.1}}} устанавливает 192.168.200.1 в качестве адреса маршрутизатора по умолчанию. После чего, выполнив команду {{{ip route}}}, мы увидим два маршрута; второй, для локальных адресов, появился автоматически. В таблице маршрутизации указывается, каким маршрутизаторам посылать IP-пакеты для разных адресов назначения.

{{{
# ip route add default via 192.168.200.1
# ip route
192.168.200.0/24 dev eth0 proto kernel scope link src 192.168.200.117
default via 192.168.200.1 dev eth0
}}}

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

=== Диагностика сетевого соединения ===

После настройки IP-адреса машины маски следует проверить работоспособность маршрутизатора по умолчанию, например, отдав команду {{{ping}}}.
{{{
$ ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.37.1: icmp_seq=1 ttl=255 time=1.26 ms
64 bytes from 192.168.37.1: icmp_seq=2 ttl=255 time=0.892 ms
64 bytes from 192.168.37.1: icmp_seq=3 ttl=255 time=0.880 ms
}}}


Чтобы пояснить происходящее при её выполнении, уместно вспомнить о таком понятии, как протокол. Протокол --- это документ, который описывает, как происходит взаимодействие в сети в различных ситуациях. Таких протоколов очень много, и на каждом из уровней стека TCP/IP действуют свои протоколы. Так, на сетевом уровне существуют протоколы, которые из которых позволяет решать определённый круг задач. Основной протокол сетевого уровня --- IP --- предназначен для передачи полезных данных. Другой задачей сетевого уровня является передача диагностических сообщений. Например, маршрутизатор должен уведомить отправителя, если невозможна организация маршрута до получателя, причем это может обнаружить машина в середине маршрута. В таком случае ей необходимо послать диагностическое сообщение о том, что пакет не будет доставлен. Это одна из многих задач, которые надо решать, когда нам нужно выслать сведения о сложившейся ситуации. Протокол, решающий эти задачи прямо на уровне IP, называется ICMP (''Internet Connection Management Protocol''). В частности, команда {{{ping }}} пользуется одним из типов таких сообщений --- эхо-запросами (''ICMP Echo Request''). Она посылает специальный ICMP-пакет в котором содержится информация о его номере и нечто вроде "ответь мне пожалуйста". Согласно протоколу ICMP получатель обязан отослать по получении эхо-ответ (''ICMP Echo Reply'').

Несмотря на очевидный системный характер протокола ICMP --- он не несёт никаких данных --- чрезвычайно вредно отключать или ограничивать его. При этом нужно знать, какие типы ICMP действительно нужны, а какие --- нет.

Чтобы проследить весь путь пакета от маршрутизатора к маршрутизатору, можно воспользоваться командой {{{traceroute}}} с указанием IP-адреса пункта назначения, например:
{{{
$ traceroute 194.107.17.137
1 192.168.1.1 (192.168.1.1) 2.825 ms 3.585 ms 4.160 ms
2 ppp83-237-4-1.pppoe.mtu-net.ru (83.237.4.1) 14.061 ms 15.617 ms 17.048 ms
...
8 te2-3.cerber.citytelecom.ru (217.65.1.246) 23.526 ms 23.508 ms 23.900 ms
9 altlinux-gw.datahouse.su (89.188.100.246) 24.386 ms 25.619 ms 27.260 ms
10 jabber.altlinux.org (194.107.17.137) 28.575 ms 30.186 ms 31.362 ms
}}}

В ответ будут выведены адреса и имена маршрутизаторов, через которые проходит маршрут. Как же это реализовано? Для этого используется специальное поле в IP-пакете, называющееся ttl (''Time To Live''), которое уменьшается на единицу каждую секунду жизни пакета или при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутизатор ttl обнуляется, о чём маршрутизатор посылает ICMP-сообщение в связи с истечением времени жизни IP-пакета. Далее посылается пакет с ttl=2, и так далее. Это позволяет определить место разрыва сети, если проблема связана, например, с работой интернет-провайдера.
Line 51: Line 141:
|| 0 || 1 || 1 || 1 || || 1 || || || ||90|| 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, ОльгаТочилкина, VsevolodKrishchenko ||  ||

Сетевой уровень

Задачи сетевого уровня

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

  1. Однозначно идентифицировать все компьютеры в глобальной сети, чтобы их можно было адресовать и отличать друг от друга.
  2. Организовать маршрутизацию данных от одного компьютера к другому через некоторое количество промежуточных узлов.

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

IP-адресация

Адрес устройства в сети, использующий протокол IP версии 4, состоит из четырёх байт, которые обычно записываются как четыре десятичных числа от 0 до 255, разделённые точками. Распределением IP-адресов в масштабах земного шара занимается организация IANA. Эта организация выделяет диапазоны адресов другим организациям, затем эти диапазоны делятся на более мелкие диапазоны и в конце концов присваиваются компьютерным сетям, и внутри сети устройствам присваиваются адреса из присвоенного этой сети диапазона.

Диапазоны IP-адресов организуются так, что у всех компьютеров одной сети первые несколько бит адреса совпадают. Таким образом, IP-адрес можно разделить на две части. Первая из них адресует сеть и одинакова для всех устройств, подключённых к данной среде передачи данных, а вторая -- хост в сети, т. е. конкретное устройство, например компьютер или сетевой принтер. Записывается это следующим образом: после собственно адреса указывается количество бит, адресующих сеть, например 127.0.0.1/8 или 192.168.200.10/24. Количество бит идентификатора хоста (k) позволяет вычислить максимально возможное количество машин в сети: оно равно 2^k-2. Кроме приведённой краткой формой записи маски, существует и другая, когда маску, подобно адресу, записывают в виде четырёх десятичных чисел. При этом равный единице двоичный разряд соответствует адресу сети, а равный нулю --- адресу хоста. Таким образом, краткой записи маски /24 соответствует полная маска 255.255.0.0.

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

Ранее использовалась несколько иная, классовая, система IP-адресов. В соответствии с ней IP-адреса делятся на четыре класса: A, B, C, D и E. Принадлежность к тому или иному классу определяется следующим образом: рассмотрим IP-адреса как строку битов и выберем те, у которых первый (старший) бит --- 0. Сети с такими адресами являются сетями класса А; их адрес может быть представлен в виде N.H.H.H, где N --- cеть (network), H --- хост (host). Под адрес хоста отводится 3 байта, это означает, что внутри локальной сети может находиться примерно 16 млн компьютеров. Соответственно, адрес сети занимает оставшийся 1 байт. В связи с тем, что адреса класса А имеют 8-разрядный сетевой префикс (т.е. сеть идентифицируется 8 битами), их обозначают записью /8. Cетям класса B (N.N.H.H) соответствуют IP-адреса, начальные биты которых --- 10, сетям класса C (N.N.N.H) --- адреса, начальные биты которых --- 110. Аналогично обозначению сетей класса А, сети классов B, C, D обозначаются /16 и /24.

Сетям класса D соответствуют адреса, начальные биты которых --- 1110. Такие сети используются для для групповой передачи данных. Существуют также сети класса E, их старшие биты --- 1111, это экспериментальные сети.

Рассмотрим примеры IP-адресов с указанием маски сети и их связь с классами сетей: 127.0.0.1/8 --- IP-адрес класса А, 192.168.10.2/24 -- адрес в сети класса С, 10.1.2.15/24 --- адрес в подсети с маской /24 в сети класса А.

Настройка IP-адреса

Для операций с IP-адресами машины в системе Linux можно использовать команду ip addr. Примерный вывод этой команды имеет следующий вид:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:46:43:09:11 brd ff:ff:ff:ff:ff:ff

Как видно из вывода команды ip addr, вся сеть класса А 127.0.0.1/8 по стандарту распределения адресов отведена под локальный сетевой интерфейс, через который данные передаются только в пределах одного компьютера.

Одним из способов задания IP-адреса сетевому интерфейсу является использование команды ip. Выполним команду ip addr add 192.168.200.117/24 dev eth0, после этого введем ip addr, чтобы посмотреть, что получилось.

# ip addr add 192.168.200.117/24 dev eth0
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:46:43:09:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.117/24 scope global eth0

Мы научились вручную настраивать IP-адрес и маску компьютера в сети. В соответствии с маской /24 все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей же сети, а с другими IP-адресами --- каким-то другим сетям. Однако, мы не указали компьютеру, как следует передавать данные, если их получатель находится в не нашей сети. Для этого нужно рассмотреть IP-маршрутизацию.

Отображение IP-адреса в MAC-адрес

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

Для хранения данных о том, какому IP соответствуют какие MAС, служат ARP-таблицы. При выполнении команды ip n, то можно увидеть ARP-таблицу с адресами соседей по среде передачи данных. Обычно мы увидим там компьютер с адресом 1 в нашей же сети.

# ip n
dev eth0 lladdr 00:10:dc:63:fc:c0 REACHABLE

Если выполнить команду tcpdump arp, то при начале передачи данных какой-то машине можно увидеть, что происходит в сети. Для сброса ARP-таблицы перед экспериментом следует выполнить команду ip n flush all.

# ip n flush all
# tcpdump arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
18:38:02.331053 arp who-has 192.168.200.1 tell pspo.local
18:38:02.331257 arp reply 192.168.200.1 is-at 00:a0:c9:b2:ef:c4 (oui Unknown)
18:38:07.331993 arp who-has pspo.local tell 192.168.200.1
18:38:07.332021 arp reply pspo.local is-at 08:00:46:43:09:11 (oui Unknown)

4 packets captured
4 packets received by filter
0 packets dropped by kernel

Команда tcpdump arp говорит, что мы слушаем протокол ARP, предназначенный для выяснения MAC-адреса по известному IP-адресу. В момент начала передачи данных хосту с адресом 192.168.200.1 произошло следующее:

  • Протокол IP установил, что адрес получателя находится в локальной сети, и можно передавать данные непосредственно через среду передачи данных;
  • Для выяснения MAC-адреса получателя всем узлам, подключённым к среде передачи данных, посылается eth-фрейм. Он представляет собой широковещательный ARP-запрос, который сообщает всем остальным машинам примерно следующее: "кому принадлежит адрес 192.168.200.1 - отзовитесь".
  • Получатели принимают этот eth-фрейм, и хост с IP-адресом 192.168.200.1 сообщает в ответе свой MAC-адрес.
  • Инициатор процесса запоминает выясненный IP-адрес в своей ARP-таблице.

Отметим, что сам протокол ARP относится к канальному уровню, поскольку в нем происходит обмен фреймами протокола Ethernet без использования протокола IP.

IP-маршрутизация

Основная задача на сетевом уровне --- организовать маршрутизацию между двумя компьютерами в разных точках земного шара. Для этого требуется пронумеровать все компьютеры уникальными IP-адресами, что практически невозможно. Поэтому все возможные IP-адреса были разделены на две большие группы: внешние (иногда называемые "белыми") и внутренние ("серые"). Последние не являются уникальными и могут назначаться компьютерам локальной сети по желанию администратора. Для них выделены следующие диапазоны адресов: 127.0.0.0/8 для передачи только в пределах одного хоста и 172.16.0.0/12, 192.168.0.0/16 и 10.0.0.0/8 для выделения адресов в локальных сетях. При этом каждый маршрутизатор в интернете считает, что компьютеров с такими адресами быть не может. Для связи между компьютерами с внутренними и внешними адресами существует специальный механизм трансляции сетевых адресов, который будет рассмотрен позднее.

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

Таким образом, для передачи данных в другие сети необходимо знать адрес как миниму одного маршрутизатора, подключённого к этой же сети. Существуют некие правила, по которым в локальной сети выбираются машины, которым передаются пакеты, не адресованные машинам данной сети. Эти правила и называются маршрутизацией. Простейшим правилом будет выбор для всех внешних адресов единственного маршрутизатора, называющегося маршрутизатором по-умолчанию (default gateway). В общем же случае необходимо написать таблицу, определяющую, какая машина отвечает за пересылку пакетов в Интернет или в другую сеть. У обычных хостов содержимое таблицы ограничивается одним или, реже, несколькими локальными маршрутизаторами.

Для указания маршрутизатора по умолчанию в случае ручной конфигурации интерфейса необходимо указать IP-адрес машины, которая им является. Команда ip route add default via 192.168.200.1 устанавливает 192.168.200.1 в качестве адреса маршрутизатора по умолчанию. После чего, выполнив команду ip route, мы увидим два маршрута; второй, для локальных адресов, появился автоматически. В таблице маршрутизации указывается, каким маршрутизаторам посылать IP-пакеты для разных адресов назначения.

# ip route add default via 192.168.200.1
# ip route
192.168.200.0/24 dev eth0  proto kernel  scope link  src 192.168.200.117
default via 192.168.200.1 dev eth0

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

Диагностика сетевого соединения

После настройки IP-адреса машины маски следует проверить работоспособность маршрутизатора по умолчанию, например, отдав команду ping.

$ ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.37.1: icmp_seq=1 ttl=255 time=1.26 ms
64 bytes from 192.168.37.1: icmp_seq=2 ttl=255 time=0.892 ms
64 bytes from 192.168.37.1: icmp_seq=3 ttl=255 time=0.880 ms

Чтобы пояснить происходящее при её выполнении, уместно вспомнить о таком понятии, как протокол. Протокол --- это документ, который описывает, как происходит взаимодействие в сети в различных ситуациях. Таких протоколов очень много, и на каждом из уровней стека TCP/IP действуют свои протоколы. Так, на сетевом уровне существуют протоколы, которые из которых позволяет решать определённый круг задач. Основной протокол сетевого уровня --- IP --- предназначен для передачи полезных данных. Другой задачей сетевого уровня является передача диагностических сообщений. Например, маршрутизатор должен уведомить отправителя, если невозможна организация маршрута до получателя, причем это может обнаружить машина в середине маршрута. В таком случае ей необходимо послать диагностическое сообщение о том, что пакет не будет доставлен. Это одна из многих задач, которые надо решать, когда нам нужно выслать сведения о сложившейся ситуации. Протокол, решающий эти задачи прямо на уровне IP, называется ICMP (Internet Connection Management Protocol). В частности, команда ping  пользуется одним из типов таких сообщений --- эхо-запросами (ICMP Echo Request). Она посылает специальный ICMP-пакет в котором содержится информация о его номере и нечто вроде "ответь мне пожалуйста". Согласно протоколу ICMP получатель обязан отослать по получении эхо-ответ (ICMP Echo Reply).

Несмотря на очевидный системный характер протокола ICMP --- он не несёт никаких данных --- чрезвычайно вредно отключать или ограничивать его. При этом нужно знать, какие типы ICMP действительно нужны, а какие --- нет.

Чтобы проследить весь путь пакета от маршрутизатора к маршрутизатору, можно воспользоваться командой traceroute с указанием IP-адреса пункта назначения, например:

$ traceroute 194.107.17.137
1  192.168.1.1 (192.168.1.1)  2.825 ms  3.585 ms  4.160 ms
2  ppp83-237-4-1.pppoe.mtu-net.ru (83.237.4.1)  14.061 ms  15.617 ms  17.048 ms
...
8  te2-3.cerber.citytelecom.ru (217.65.1.246)  23.526 ms  23.508 ms  23.900 ms
9  altlinux-gw.datahouse.su (89.188.100.246)  24.386 ms  25.619 ms  27.260 ms
10  jabber.altlinux.org (194.107.17.137)  28.575 ms  30.186 ms  31.362 ms

В ответ будут выведены адреса и имена маршрутизаторов, через которые проходит маршрут. Как же это реализовано? Для этого используется специальное поле в IP-пакете, называющееся ttl (Time To Live), которое уменьшается на единицу каждую секунду жизни пакета или при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутизатор ttl обнуляется, о чём маршрутизатор посылает ICMP-сообщение в связи с истечением времени жизни IP-пакета. Далее посылается пакет с ttl=2, и так далее. Это позволяет определить место разрыва сети, если проблема связана, например, с работой интернет-провайдера.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

90

1

1

1

1

MaximByshevskiKonopko, ОльгаТочилкина, VsevolodKrishchenko


PspoClasses/080702/04IP (last edited 2008-10-04 10:24:12 by VsevolodKrishchenko)