Differences between revisions 40 and 41
Revision 40 as of 2008-07-06 01:59:34
Size: 21265
Comment:
Revision 41 as of 2008-07-06 01:59:48
Size: 21264
Comment:
Deletions are marked like this. Additions are marked like this.
Line 11: Line 11:
Диапазоны IP-адресов организуются так, что у всех компьютеров сети первые несколько бит адреса совпадают, то есть адрес можно разделить на две части. Первая из них адресует сеть и одинакова для всех устройств в данной среды передачи данных, а вторая --- хост в сети, т. е. конкретное устройство, например компьютер или сетевой принтер. Записывается это следующим образом: после собственно адреса указывается количество бит, адресующих сеть, например 127.0.0.1/8 или 192.168.200.10/24. Количество бит идентификатора хоста (k) позволяет вычислить количество машин в сети: оно равно 2^k-2. Кроме приведенной краткой формой записи маски, существует и другая, когда маску записывают так же в виде четырех десятичных чисел, при этом равный единице двоичный разряд соответствует адресу сети, а равный нулю --- адресу хоста. Таким образом, краткой записи маски /24 соответствует полная маска 255.255.0.0. Если адрес сети двух компьютеров совпадает, то передача между ними является локальной, иначе необходимо выяснить, какой маршрутизатор может передать эти данные. Диапазоны IP-адресов организуются так, что у всех компьютеров сети первые несколько бит адреса совпадают, то есть адрес можно разделить на две части. Первая из них адресует сеть и одинакова для всех устройств в данной среды передачи данных, а вторая -- хост в сети, т. е. конкретное устройство, например компьютер или сетевой принтер. Записывается это следующим образом: после собственно адреса указывается количество бит, адресующих сеть, например 127.0.0.1/8 или 192.168.200.10/24. Количество бит идентификатора хоста (k) позволяет вычислить количество машин в сети: оно равно 2^k-2. Кроме приведенной краткой формой записи маски, существует и другая, когда маску записывают так же в виде четырех десятичных чисел, при этом равный единице двоичный разряд соответствует адресу сети, а равный нулю --- адресу хоста. Таким образом, краткой записи маски /24 соответствует полная маска 255.255.0.0. Если адрес сети двух компьютеров совпадает, то передача между ними является локальной, иначе необходимо выяснить, какой маршрутизатор может передать эти данные.

Проблема: tcpdump в ALJ отсутствует.

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

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

IP-адресация

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

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

Ранее использовалась несколько иная, классовая, система 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-адресами машины в системе Linux можно использовать команду 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 addr add 192.168.200.117/24 dev eth0

После этого введем ip addr, чтобы посмотреть, что получилсь.

[root@vaio ~]# ip addr add 192.168.200.117/24 dev eth0
 [root@vaio ~]# ip a
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

В числе прочего, мы научились вручную настраивать сеть. Данный адрес класса C, это значит, что все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей сети, а остальные --- другой. Дальше нужно проверить работоспособность сети, например, сделать  ping 192.168.200.1. 

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

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

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

Напомним, что основная задача на сетевом уровне --- пронумеровать все машины и организовать маршрутизацию.

Очевидно, что пронумеровать все компьютеры адресами практически невозможно. Например, есть большое количество компьютеров, которым внешние адреса не нужны. С одной стороны, есть преобразование адресов, с другой --- есть список адресов, которые не уникальны в интернете. В частности, у каждого сетевого интерфейса есть 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, то можно увидеть своих соседей. Если сделать ping соседней машины и после этого сказать ip n, то мы увидим свою ARP-таблицу.

[root@vaio ~]# ip n
192.168.200.1 dev eth0 lladdr 00:10:dc:63:fc:c0 REACHABLE

Если сделать tcpdump arp, то при пинге какой-то машины можно увидеть, что происходит в сети. Вообще, tcpdump переводит карточку в состояние прослушивания всей сети (promiscous mode), для того, чтобы узнать, что в сети происходит.

[root@vaio ~]# 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.10 tell vaio.local
18:38:02.331257 arp reply 192.168.200.10 is-at 00:a0:c9:b2:ef:c4 (oui Unknown)
18:38:07.331993 arp who-has vaio.local tell 192.168.200.10
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. Так, когда мы сделали  ping 192.168.200.10, мы выяснили, что:

  • Эта машина находится в локальной сети, и можно передавать ей данные очень просто;
  • Если необходимо выяснить MAC-адрес этой машины, посылаем широковещательный eth-фрейм (ARP-запрос), который сообщает всем остальным машинам примерно следующее: "кому принадлежит адрес 192.168.200.10? Отвечайте!"
  • Получатели принимают этот пакет, понимают на уровень ядра, видят, что это за запрос и отвечают, какой MAC у 192.168.200.10.
  • Когда удалённая машина отвечает на пинг, то она проводит аналогичную операцию.

Отметим, что этот протокол отчасти уровня интерфейсного, потому что происходит обмен eth-фреймами.

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

Для указания маршрутизатора по умолчанию, пользователю необходимо только указать машину, которая является шлюзом (а в случае с DHCP вообще ничего не надо делать): ip route add default via 192.168.200.1. После чего, сделав ip route, мы увидим два маршрута; второй, для локальных адресов, появился автоматически. В таблице маршрутизации указывается, на какие машины для каких адресов посылать пакеты. Маршруты сортируются по величине маски, т.е. количеству бит в ней.

Как в результате формируется маршрут пакета? Это выполняется динамически. В каждой точке маршрутизации принимается решение, куда пакет дальше отправить.

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


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

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

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

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

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

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

Level

Maintainer

Start date

55

1

1

1

1

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


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