Differences between revisions 43 and 45 (spanning 2 versions)
Revision 43 as of 2008-07-06 13:32:08
Size: 21949
Comment:
Revision 45 as of 2008-07-06 14:04:34
Size: 22526
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
С развитием концепции глобальной сети в сетевой уровень стека TCCP/IP были внесены дополнительные возможности по передаче из любой сети в любую сеть, независимо от протоколов нижнего уровня. Задачей протокола сетевого уровня IP (''Internet Protocol'') является передача данных между устройствами, которые, вообще говоря, не находятся в одной среде передачи данных. Для этого необходимо определить, во-первых, механизм адресации, чтобы можно было выделить среди множества компьютеров тот, которому предназначены данные, и, во-вторых, механизм маршрутизации, позволяющий доставку пакетов между различными сетями. Рассмотрим подробнее каждую из этих двух функций протокола IP. С развитием концепции глобальной сети в сетевой уровень стека TCP/IP были внесены дополнительные возможности по передаче из любой сети в любую сеть, независимо от протоколов нижнего уровня. Задачей протокола сетевого уровня IP (''Internet Protocol'') является передача данных между устройствами, которые, вообще говоря, не находятся в одной среде передачи данных. Для этого необходимо определить, во-первых, механизм адресации, чтобы можно было выделить среди множества компьютеров тот, которому предназначены данные, и, во-вторых, механизм маршрутизации, позволяющий доставку пакетов между различными сетями. Рассмотрим подробнее каждую из этих двух функций протокола IP.
Line 34: Line 34:
Одним из способов задания IP-адреса сетевому интерфейсу является использование команды {{{{ip}}}. Дадим следующую команду.
{{{
ip addr add 192.168.200.117/24 dev eth0
}}}

П
осле этого введем {{{ip addr}}}, чтобы посмотреть, что получилсь.
Одним из способов задания IP-адреса сетевому интерфейсу является использование команды {{{{ip}}}. Дадим команду {{{ip addr add 192.168.200.117/24 dev eth0}}}, после этого введем {{{ip addr}}}, чтобы посмотреть, что получилось.
Line 51: Line 46:
В числе прочего, мы научились вручную настраивать сеть. Данный адрес класса C, это значит, что все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей сети, а остальные --- другой. Дальше нужно проверить работоспособность сети, например, сделать {{{ ping 192.168.200.1}}}. Мы научились вручную настраивать IP-адрес и маску компьютера в сети. В соответствии с маской /24 все компьютеры с адресами 192.168.200.xxx будут считаться принадлежащим нашей же сети, а с другими IP-адресами --- каким-то другим сетям. Однако, мы не указали компьютеру, как следует передавать данные, если их получатель находится в не нашей сети. Для этого нужно рассмотреть IP-маршрутизацию.
Line 53: Line 48:
Здесь необходимо вспомнить о таком понятии, как протокол. Протокол --- это документ, который описывает, как происходит взаимодействие в сети в различных ситуациях. Таких протоколов очень много. В частности, на каждом из уровней есть свои протоколы. Так, на сетевом уровне существуют протоколы, которые позволяют решать определенный круг задач. Прежде чем переходить к маршрутизации, рассмотрим один очень важный вопрос. В случае, если несколько компьютеров объединены средой передачи данных, то каждое устройство может каждому передавать некоторые данные. Но в нашем случае маршрутизация существует на третьем, сетевом уровне, а в СПД определяющим является не IP-адрес, а MAC-адрес, обычно связанный с сетевой картой. Более того, может так случиться, что для MAC-адрес может связываться с различными IP-адресами с течением времени, и IP-адрес может связываться с различными MAC-адресами. Поэтому необходимо рассмотреть, кому передавать фрейм протокола Ethernet, зная только IP абонента. Для этого, прежде чем начнётся передача полезных данных, следует выяснить, на какой MAC-адрес необходимо отправить данные.
Line 55: Line 50:
Одна из них --- передача диагностических сообщений. Например, невозможна организация маршрута (до получателя). Более того, про это не знает ни наша машина, ни ближайший маршрутизатор, а только некая машина в середине маршрута. В таком случае оттуда необходимо послать диагностическое сообщение о том, что пакет не будет доставлен. Это одна из многих задач, которые надо решать, когда нам нужно выслать сведения о сложившейся ситуации. Протокол, решающий эти задачи прямо на уровне 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-таблицу.
Для хранния данных о том, какому IP соответствуют какие MAС, служат ARP-таблицы. Если дать команду {{{ip n}}}, то можно увидеть ARP-таблицу с адресами соседей по среде передачи данных. Обычно мы увидим там компьютер с адресом 1 в нашей же сети.
Line 72: Line 55:
Line 99: Line 81:


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

Очевидно, что пронумеровать все компьютеры адресами практически невозможно. Например, есть большое количество компьютеров, которым внешние адреса не нужны. С одной стороны, есть преобразование адресов, с другой --- есть список адресов, которые не уникальны в интернете. В частности, у каждого сетевого интерфейса есть loopback и адрес 127.0.0.1. Диапазон адресов класса A, который начинается на 10., также не уникален. Кроме того, адреса в диапазоне, 192.168.0.0/16 тоже можно раздавать без трудностей. Другое дело, что любой маршрутизатор вам скажет, что компьютеров с такими адресами быть не может. Более того, локальными являются адреса 127.0.0.0/8, 172.16.0.0/12.

Вторая проблема, которую надо решить --- маршрутизация.

Line 102: Line 93:


Дальше нужно проверить работоспособность сети, например, дать команду {{{ping 192.168.200.1}}}.

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

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

Проблема: tcpdump в текущем ALJ отсутствует. Проясняю ситуацию. VsevolodKrishchenko.

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

С развитием концепции глобальной сети в сетевой уровень стека TCP/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-маршрутизация.

Ранее использовалась несколько иная, классовая, система 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. Примерный вывод этой команды имеет следующий вид:

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, чтобы посмотреть, что получилось.

[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

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

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

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

[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-фреймами.

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

Очевидно, что пронумеровать все компьютеры адресами практически невозможно. Например, есть большое количество компьютеров, которым внешние адреса не нужны. С одной стороны, есть преобразование адресов, с другой --- есть список адресов, которые не уникальны в интернете. В частности, у каждого сетевого интерфейса есть loopback и адрес 127.0.0.1. Диапазон адресов класса A, который начинается на 10., также не уникален. Кроме того, адреса в диапазоне, 192.168.0.0/16 тоже можно раздавать без трудностей. Другое дело, что любой маршрутизатор вам скажет, что компьютеров с такими адресами быть не может. Более того, локальными являются адреса 127.0.0.0/8, 172.16.0.0/12.

Вторая проблема, которую надо решить --- маршрутизация.

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

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

Дальше нужно проверить работоспособность сети, например, дать команду ping 192.168.200.1.

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

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

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

Чтобы проследить путь пакет, можно сделать, например, 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)