Различия между версиями 1 и 64 (по 63 версиям)
Версия 1 от 2008-07-02 20:47:48
Размер: 15361
Редактор: eSyr
Комментарий:
Версия 64 от 2008-07-08 09:55:09
Размер: 26073
Редактор: VsevolodKrishchenko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
Что касается уровня сетевого. == Сетевой уровень ==
Строка 3: Строка 3:
Задача пронумеровть все сетевые устр. в сети (поск. мы так передаём, то это идент. стеевонг устр-ва) --- задача невыполнима. Эту задачу надо перераспределить, чтобы не в одном конкр. месте выдавались все адреса, а выработать некоторую жисциплину, чтобы решения принимались в локальном порядке. Для этого устр. некоторую пирамидку. Есть некая организация, которая выдаёт списки сетевых адресов. Эта организация (ICANN?). Потом этот список режется на кусочки и раздаётся другим людям и так далее. В концеп концов некий конечний сисадмин получает группу адресов так, чтобы это работало в интернете. IP-адрес это 4 байта, которые записываются через точку в десятичнм виде. Если набрать ip addr, то увидим дополнительную строку, в которой есть инф пр ip. В частности, ip адрес. Организация передачи данных на сетевом уровень предполагает, что компьютеры соединены между собой несколькими средами передачи данных, вообще говоря, совершенно различными. На этом уровне нужно решить две задачи:
 1. Однозначно идентифицировать все компьютеры в глобальной сети, чтобы их можно было адресовать и отличать друг от друга.
 2. Организовать маршрутизацию данных от одного компьютера к другому через некоторое количество промежуточных узлов.
Строка 5: Строка 7:
## Педедыв С развитием концепции глобальной сети на сетевом уровне стека TCP/IP были реализованы возможности по передаче данных из любой сети в любую сеть, независимо от протоколов нижнего уровня. Задачей протокола сетевого уровня IP (''Internet Protocol'') является обмен между устройствами, которые, вообще говоря, не находятся в одной среде передачи данных. Для этого необходимо определить, во-первых, механизм адресации, чтобы можно было выделить среди множества компьютеров тот, которому предназначены данные, и, во-вторых, механизм маршрутизации, отвечающий за доставку пакетов между различными сетями. Рассмотрим подробнее каждую из этих двух функций протокола IP.
Строка 7: Строка 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 --- используются для мультикастинга, когда пакеты попадают некоторым адресатам, но не всем. === IP-адресация ===
 
Адрес устройства в сети, использующий протокол IP версии 4, состоит из четырёх байт, которые обычно записываются как четыре десятичных числа от 0 до 255, разделённые точками. Распределением IP-адресов в масштабах земного шара занимается организация IANA. Эта организация выделяет диапазоны адресов другим организациям, затем эти диапазоны делятся на более мелкие диапазоны и в конце концов присваиваются компьютерным сетям, и внутри сети устройствам присваиваются адреса из присвоенного этой сети диапазона.
Строка 9: Строка 13:
Как это выглядит в жизни: 127.0.0.1 --- адрес класса A, и /8 показывает количество битов, которые идентифицируют сеть. Сейас классы не исп., исп. диапазоны адресов, которые разд по мере надобности. Соответственн, под идент. сети можно отводить разное количество бит. Диапазоны IP-адресов организуются так, что у всех компьютеров одной сети первые несколько бит адреса совпадают. Таким образом, IP-адрес можно разделить на две части. Первая из них адресует сеть и одинакова для всех устройств, подключённых к данной среде передачи данных, а вторая -- хост в сети, т. е. конкретное устройство, например компьютер или сетевой принтер. Записывается это следующим образом: после собственно адреса указывается количество бит, адресующих сеть, например 127.0.0.1/8 или 192.168.200.10/24. Количество бит идентификатора хоста (k) позволяет вычислить максимально возможное количество машин в сети: оно равно 2^k-2. Кроме приведённой краткой формой записи маски, существует и другая, когда маску, подобно адресу, записывают в виде четырёх десятичных чисел. При этом равный единице двоичный разряд соответствует адресу сети, а равный нулю --- адресу хоста. Таким образом, краткой записи маски /24 соответствует полная маска 255.255.0.0.
Строка 11: Строка 15:
Сколько машин в сети? n-2, возн. два спец. адреса: если все единички в поле абонент, то пакет широковещательный. Назначение масок и адресов сети следующее: если адрес сети двух компьютеров совпадает, то они подключены к одной среде передачи данных, и передача между ними является локальной. Если адреса сети назначения отличается от адреса сети отправителя, то речь необходимо определить маршрут следования IP-пакета с данными. Для решения этой задачи существует IP-маршрутизация.
Строка 13: Строка 17:
Как настраивать сеть: ip addr add 192.168.200.117/24 dev eth0
После этого можно сказать ip addr, чтобы посмотреть, что получилсь. В числе прочего, мы научились вручную настраивать сеть. Данный адрес класса c, это значает, что все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей сети, а стальные --- другой. Дальше мжно проверить работоспособность сети, например,ЮЮ пингшануть 192.168.200.1.
Ранее использовалась несколько иная, классовая, система 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.
Строка 16: Строка 19:
Зедсь мжно вспмнить о такомпонятии как протокол. Вообще, протокол это документ, который описывает, как происх. взаим. п сети в разных случаях. Таких протоколов очен много. В частности, на каждом из уровней есть свои протоолкы. На уровне сетевом (где есть задачи пронумеровать все машины и орг. маршрут.) тже есть свои протоколы, которые позв. решать какие-то задачи. Главная задача, которая должна здесь решаться --- задача передачи диаг. сообщ. Например, невозм. организация маршрута. Причём, про это не знает ни наша мешина, ни сосдедняя, а только в середине маршрута. Тогда надо послать диаг. сообщение оттуда, что пакет не будет дост. Эт одна из чень мнгих задач, которые надо рещать, когда нам надо посл. диаг. о происх. Этот протокол называется ICMP, Internet Connection Management Protocol. Это происх. прямо на уровне ip. В частности, команда ping пользуется одиним из типов таких собщ., на посылает спец. пакет, ICMP-пакет, в котором написано "ответь мне пожалуйста". Ну, там есть ещё некая инф. о том, какой номер такого пакета. Согласно протоколу icmp получатель бязан отослать по получении ответ. Сетям класса D соответствуют адреса, начальные биты которых --- 1110. Такие сети используются для для групповой передачи данных. Существуют также сети класса E, их старшие биты --- 1111, это экспериментальные сети.
Строка 18: Строка 21:
Несмотря на очеаидный системный характер протокола ICMP --- он не несёт никаких данных, чрезвычайно вредно уроезать его. При этм действительно нужно знать, какие типы ICMP действительно нужны, а какие --- нет. Рассмотрим примеры IP-адресов с указанием маски сети и их связь с классами сетей: 127.0.0.1/8 --- IP-адрес класса А, 192.168.10.2/24 -- адрес в сети класса С, 10.1.2.15/24 --- адрес в подсети с маской /24 в сети класса А.
Строка 20: Строка 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-адреса ===
Строка 22: Строка 25:
Вторая проблема, которую надо решить --- маршрутизация. Для операций с 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
}}}
Строка 24: Строка 35:
Прежде чем переходить к марш., решим один очень важный впрос. В случае, если несколько компьютеров объединены СПД, то каждое устойство может каждому передавать каие-т устройства. Но у нас-то маршрутизация сущ. на третьем, стевом, определяющим является не IP, а MAC-адрес, более того, может так случиться, что для MAC-адреса мжет меняться IP, а для IP может меняться MAC. Поэтому не совсем понятно, как может приниматься решение, куда передавать ethernet-frame, ибо мы знаем про абонента только IP. Тут мы встречаемся с понятием сетевой службы, поскольку прежде чем передача данных, должна произойти операция по выяснению того, куда необх. отпр. данные. Как видно из вывода команды {{{ip addr}}}, вся сеть класса А 127.0.0.1/8 по стандарту распределения адресов отведена под локальный сетевой интерфейс, через который данные передаются только в пределах одного компьютера.
Строка 26: Строка 37:
Для того, чтобы в теч. некрго времени зранить данные о тм, какому IP соотв. какие MAС, служат ARP-таблицы. Если сказать ip n, то можно увидеть своих соседей. Если попинговать соседнюю тачку и после этого сказать, то можно увидеть свою ARP-таблицу. Одним из способов задания 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
}}}
Строка 28: Строка 49:
Если сказать tcpdump arp, то при пинге какой-то тачки можно увидеть, что происх. в сети. Вообще, tcpdump ввергает карточку в сост. просл. всей сети, для того, чтбы знать, что в сети происходит. Мы научились вручную настраивать IP-адрес и маску компьютера в сети. В соответствии с маской /24 все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей же сети, а с другими IP-адресами --- каким-то другим сетям. Однако, мы не указали компьютеру, как следует передавать данные, если их получатель находится в не нашей сети. Для этого нужно рассмотреть IP-маршрутизацию.
Строка 30: Строка 51:
tcpdump arp говорит. что мы слушаем arp. Когда мы пинговали 192.168.200.10, мы выяснили что:
 * Эта машина в локальной сети, и можно передавать ей данные прямо так
 * Надо выяснить ARP-адрес этой машины, псылаем широковещательный eth-фрейм, который гворит следующее: "мужики! адрес 192.168.200.10 у кого? Отвечай!"
 * Получатели принимают этот пакет, пдонимают на уровень ядра, видят, что это за запрос и отвечают: Дорогой 192.168.200.117, MAC у 192.168.200.10 такой.
 * Когда удалённая машина отвечает на пинг, т она проводит аналгичную операцию.
=== Отображение IP-адреса в MAC-адрес ===
Строка 36: Строка 53:
Этот протокол отчасти уровня интерфейсного, потму чт происх. обмен eth-фреймами. Прежде чем переходить к маршрутизации, рассмотрим вопрос передачи данных в пределах одной сети. В случае, если несколько компьютеров объединены средой передачи данных, то каждое устройство может каждому передавать некоторые данные через интерфейсный уровень, при этом определяющим является не IP-адрес хоста, а его MAC-адрес, обычно закреплённый за сетевой картой. Более того, может случиться, что MAC-адрес может связываться с различными IP-адресами с течением времени, как и IP-адрес может связываться с различными MAC-адресами. Поэтому необходимо выяснить, кому передавать фрейм протокола Ethernet, зная только IP абонента. Для этого, прежде чем начнётся передача полезных данных, следует выяснить, на какой MAC-адрес необходимо отправить данные.
Строка 38: Строка 55:
Переходим к второй задаче ip, а именно маршрутизации. Мы сейчас всё это время имели дело с локальнй машиной. Что будет, если мы захотим переслать пакет удалённой машине? Ни одной машине в лок. сети этот пакет не нужен. А кому нужен? Маршрутизатору. В сети должны быть одна или неск. машин, которые занимаются тем, что перекладывают пакеты с одного интерфейса на другой. Общий алгоритм очень простой. Сущ. некие правила, по которым в лок. сети выбирается машины, которым передаются пакеты, не адр. машинам данной сети. Эти правила и наз. маршрутизацией. И дальше написания таблички, что за пересылку пакетов в интернет отвечает эта машина, а за пересылку пакетов в жругой класс --- эта, не идёт. Для хранения данных о том, какому IP соответствуют какие MAС, служат ARP-таблицы. При выполнении команды {{{ip n}}}, то можно увидеть ARP-таблицу с адресами соседей по среде передачи данных. Обычно мы увидим там компьютер с адресом 1 в нашей же сети.
{{{
# ip n
dev eth0 lladdr 00:10:dc:63:fc:c0 REACHABLE
}}}
Строка 40: Строка 61:
Тем не менее, самих правил, связанных с усл., по которым не будет проходить маршгрутизация. По умолчанию, пользовтаелю надо только указать машину, которая является шлюзом (а в случае с DHCP вообще ничего не надо делать): ip route add default via 192.168.200.1. После чего в ip route увидим два маршрута, второй появился автоматом для локальных адресов. В таблице маршрутизации указывается, на какие машины послуать пакеты для каких адресов. Маршруты сортируются по величине маски. Если выполнить команду {{{tcpdump arp}}}, то при начале передачи данных какой-то машине можно увидеть, что происходит в сети. Для сброса ARP-таблицы перед экспериментом следует выполнить команду {{{ip n flush all}}}.
Строка 42: Строка 63:
Как в рещультате форм. маршрут пакета? Это штука вполне динамическая. В каждой точке маршрутизации принимается решение, куда пакет дальше отправить. {{{
# 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 vaio.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 vaio.local tell 192.168.200.1
18:38:07.332021 arp reply vaio.local is-at 08:00:46:43:09:11 (oui Unknown)
Строка 44: Строка 73:
Чтобы увидеть, как ходит пакет, можно сделать, например, traceroute 89.188.104.91. Как это реализовано? В принципе, в пакете ip есть флаг record route, но его никто не записывает. Вместо этого используется ttl, который уменьшается на 1 каждую секунду и при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутихзатор ttl обнкляется, о чём маршрутизатор посъылает соообщение. Далее посылается пакет с ttl=2. При этом надо понимать, что этот маршщрут не обязан быть таким, но даёт представление о маршруте. 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}}}. В ответ будут выведены адреса и имена маршрутизаторов, через которые проходит маршрут. Как же это реализовано? Для этого используется специальное поле в IP-пакете, называющееся ttl (''Time To Live''), которое уменьшается на единицу каждую секунду жизни пакета или при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутизатор ttl обнуляется, о чём маршрутизатор посылает ICMP-сообщение в связи с истечением времени жизни IP-пакета. Далее посылается пакет с ttl=2, и так далее. Это позволяет определить место разрыва сети, если проблема связана, например, с работой интернет-провайдера.
Строка 51: Строка 128:
|| 0 || 1 || 1 || 1 || || 1 || || || ||70|| 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 vaio.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 vaio.local tell 192.168.200.1
18:38:07.332021 arp reply vaio.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. В ответ будут выведены адреса и имена маршрутизаторов, через которые проходит маршрут. Как же это реализовано? Для этого используется специальное поле в IP-пакете, называющееся ttl (Time To Live), которое уменьшается на единицу каждую секунду жизни пакета или при каждом прохождении через маршрутизатор. Соответственно, сначала посылается ICMP-пакет с ttl=1, и при первом прохождении через маршрутизатор ttl обнуляется, о чём маршрутизатор посылает ICMP-сообщение в связи с истечением времени жизни IP-пакета. Далее посылается пакет с ttl=2, и так далее. Это позволяет определить место разрыва сети, если проблема связана, например, с работой интернет-провайдера.


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

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

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

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

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

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

Level

Maintainer

Start date

70

1

1

1

1

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


PspoClasses/080702/04IP (последним исправлял пользователь VsevolodKrishchenko 2008-10-04 10:24:12)