Опубликован: 13.05.2011 | Уровень: для всех | Доступ: свободно
Лекция 15:

Сетевое администрирование Linux. Протокол IP

< Лекция 14 || Лекция 15 || Лекция 16 >
Аннотация: Структура пакета IP. Структура IP-адреса. Подсети. ifconfig и настройка протокола IP. Маршрутизация. Автономные области. М9. Команда route.

Ход занятия

1. IP (Internet Protocol) – протокол сетевого уровня, который содержит информацию об адресации и некоторую управляющую информацию для маршрутизации пакетов. Протокол описан в запросе на комментарий 791 (RFC 791).


Версия – Версия используемого протокола IP

IHL (IP header length ) –длина IP-заголовка. Длина заголовка в 32-разрядных блоках

Тип службы – определяет управление протоколом верхнего уровня (TCP или UDP) и присваивает важность пакету.

Общая длина Длина всего ip-пакета в байтах, включая данные и заголовок.

Идентификация – целое уникальное число, определяющее пакет. Используется при сборке фрагментированных пакетов.

Флаги – Состоит из 3-х бит. Первый бит определяет, может ли пакет быть фрагментирован, а второй – является ли пакет последним в серии фрагментированных. Третий бит не используется.

Смещение флагов – содержит значение позиции данных фрагмента относительно начала данных. Используется только в фрагментированных пакетах.

Время жизни – Счетчик, который постепенно уменьшается до нуля (на единицу при прохождении каждого маршрутизатора), после чего пакет уничтожается во избежание бесконечной передачи по сети.

Протокол – Протокол верхнего уровня (TCP или UDP)

Контрольная сумма заголовка – Помогает убедиться в целостности пакета.

Адрес источника – определяет узел-отправитель

Адрес приемника – определяет узел-получатель

Свойства – Позволяет IP определять различные свойства, например безопасность

Данные Информация верхнего уровня.

Протокол IP как протокол сетевого уровня неразрывно связан с понятием адресации. Адрес IP – это 32-разрядный адрес, который содержит 4 группы по одному байту, обычно записываемых в 10-тичном виде через точку. Каждая группа называется октетом. Минимальное значение октета – 0, максимальное – 255.

Протокол IP определяет также понятие подсети. Это группа ip-адресов, имеющая общую маршрутизацию.

Подсети определяются масками. Маска – это часть сетевого адреса, определяющая какие биты адреса относятся к сети, а какие – к хосту. Биты маски, установленные в 1 определяют сеть, а в 0 – хост.

Например:

192.168.2.31/255.255.255.0

Маска подсети 255.255.255.0 в двоичном виде будет выглядеть:

11111111 11111111 11111111 00000000

Отсюда можно сделать вывод, что для того чтобы найти адрес 192.168.2.31 нужно найти сеть 192.168.2.0, а в ней хост 31.

IP-адреса делятся на пять классов – A, B, C, D и E. Для коммерческого использования предназначены только первые 3.

Таблица 5.1.
Класс Маска Количество битов, сеть/хост Максимально количество хостов
A 255.0.0.0 8 бит на сеть/24 бита на хост 16777214 (224-2)*
B 255.255.0.0 16 бит на сеть/16 бит на хост 65534 (216-2)
C 255.255.255.0 24 бит на сеть/8 бит на хост 254 (28-2)

* - один адрес зарезервирован как широковещательный, и один – для сети.

Существуют также специально выделенные диапазоны сетей для использования в локальных сетях. Это так называемые фэйковые сети (от англ. fake – обманывать, также их называют приватными, серыми адресами). Эти сети не маршрутизируются в сети интернет. Выделены диапазоны для 3 классов сетей:

Таблица 5.2.
Класс Диапазон
A 10.0.0.0 – 10.255.255.255 (1 сеть класса А)
B 172.16.0.0 – 172.31.255.255 (16 сетей класса B)
C 192.168.0.0 – 192.168.255.255 (255 сетей класса С)

2. Настройка протокола IP в Linux может выполняться как с помощью встроенных средств, таких как netconf от RedHat, так и вручную.

Для отображения параметров протокола IP используется команда /sbin/ifconfig. С помощью этой же команды можно настроить устройство или добавить второй ip для карты:

bash-2.05b#  /sbin/ifconfig eth0 192.168.2.31 netmask 255.255.255.0  
 bash-2.05b# /sbin/ifconfig 
 eth0      Link encap:Ethernet  HWaddr 00:C0:26:2C:AC:D1 
           inet addr:192.168.2.31  Bcast:192.168.2.255  Mask:255.255.255.0 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
           RX packets:147329 errors:0 dropped:0 overruns:0 frame:0 
           TX packets:47207 errors:0 dropped:0 overruns:0 carrier:0 
           collisions:0 
           RX bytes:96478376 (92.0 Mb)  TX bytes:8043931 (7.6 Mb) 
  
 lo        Link encap:Local Loopback 
           inet addr:127.0.0.1  Mask:255.0.0.0 
           UP LOOPBACK RUNNING  MTU:16436  Metric:1 
           RX packets:10514 errors:0 dropped:0 overruns:0 frame:0 
           TX packets:10514 errors:0 dropped:0 overruns:0 carrier:0 
           collisions:0 
           RX bytes:9712961 (9.2 Mb)  TX bytes:9712961 (9.2 Mb) 
 bash-2.05b# /sbin/ifconfig eth0 add 192.168.2.253 netmask 255.255.255.0 
 bash-2.05b# /sbin/ifconfig 
 eth0      Link encap:Ethernet  HWaddr 00:C0:26:2C:AC:D1 
           inet addr:192.168.2.31  Bcast:192.168.2.255  Mask:255.255.255.0 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
           RX packets:148126 errors:0 dropped:0 overruns:0 frame:0 
           TX packets:47781 errors:0 dropped:0 overruns:0 carrier:0 
           collisions:0 
           RX bytes:96843116 (92.3 Mb)  TX bytes:8103494 (7.7 Mb) 
  
 eth0:0    Link encap:Ethernet  HWaddr 00:C0:26:2C:AC:D1 
           inet addr:192.168.2.253  Bcast:192.168.2.255  Mask:255.255.255.0 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
           RX packets:148126 errors:0 dropped:0 overruns:0 frame:0 
           TX packets:47781 errors:0 dropped:0 overruns:0 carrier:0 
           collisions:0 
           RX bytes:96843116 (92.3 Mb)  TX bytes:8103494 (7.7 Mb) 
  
 lo        Link encap:Local Loopback 
           inet addr:127.0.0.1  Mask:255.0.0.0 
           UP LOOPBACK RUNNING  MTU:16436  Metric:1 
           RX packets:10514 errors:0 dropped:0 overruns:0 frame:0 
           TX packets:10514 errors:0 dropped:0 overruns:0 carrier:0 
           collisions:0 
           RX bytes:9712961 (9.2 Mb)  TX bytes:9712961 (9.2 Mb)

Однако в RedHat-системах принято настраивать протокол IP с помощью системы стартовых скриптов на основе файлов настроек:

/etc/sysconfig/network – основной конфигурационный файл сети. В нем описан сам факт использования сети, имя хоста, маршрут по умолчанию и адреса DNS:

bash-2.05b# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=WebMedia
GATEWAY=192.168.2.2
DNS1=192.168.2.2
DNS2=192.168.2.4

/etc/sysconfig/network-scripts/ifcfg-<псевдоним устройства> - описывает параметры сетевого устройства:

bash-2.05b# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.2.31
NETMASK=255.255.255.0
NETWORK=192.168.2.0
BROADCAST=192.168.2.255
или, при использовании протокола динамической конфигурации:
bash-2.05b# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp

Нужно учесть, что в выводе команды ifconfig вы будете видеть название устройства, указанного в названии файла, а реально будет использовано устройство, указанное в файле. Причем эти названия не обязательно должны совпадать. Например, в вывод ifconfig можно установить ppp0, хотя реально будет использоваться eth0.

3. Маршрутизация в интернет построена на данных о IP-подсетях, а также о группах подсетей, принадлежащих крупным магистральным провайдерам. Такие группы адресов называются автономными областями. Маршрутизация может быть статической, на основе заранее созданных человеком маршрутов и динамической, когда маршруты создаются протоколами маршрутизации, такими как RIP (Routing Information Protocol – протокол информации и маршрутизации), OSPF (Open Short Path First – использовать короткий путь сначала), BGP (Border Gateway Protocol – протокол граничного шлюза) и др. Их рассматривать мы не будем. У маршрутизатора есть набор правил, определяющих сетевой интерфейс, на который может быть отправлен пакет в зависимости от адреса получателя, а также маршрут по умолчанию, куда отправляются пакеты, не соответствующие общим правилам, например:

  • для сети 192.168.2.0/255.255.255.0 отправить в eth0
  • для сети 214.54.0.0/255.255.0.0 отправить в eth1
  • маршрут по умолчанию wan0

Таким образом, когда маршрутизатор получит пакет с адресом получателя 192.168.2.31, то он отправит его в интерфейс eth0, а если он получит пакет для 80.92.30.1, то отправит его в интерфейс wan0. Может быть также, что вместо маршрута-устройства задан адрес сетевого шлюза. В этом случае маршрутизация пакетов будет осуществляться с помощью шлюза, а хост, у которого указан шлюз сможет напрямую адресовать только хосты собственной подсети. Совсем другой тип маршрутизации применяется в автономных областях. В этом случае на магистральных развязках пакеты для всех подсетей области отправляются на граничный маршрутизатор области, а он уже выполняет внутриобластную маршрутизацию. Как центральная магистральная развязка в России используется группа маршрутизаторов магистральных провайдеров, таких как РосТелеКом, ТрансТелеКом, МТУ Интел, географически расположенная на международной телефонной станции М9 в г. Москве. Именно из этой точки осуществляется трансляция потоков данных между крупными российскими магистральными провайдерами, а также за рубеж. Для настройки статической маршрутизации в Linux используется команда /sbin/route .

[gserg@WebMedia gserg]$ /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         ns.edu.vologda. 0.0.0.0         UG    0      0        0 eth0

Введенная без параметров она показывает таблицу маршрутизации, используемую на ПК/сервере. Использование команды описано подробно в man-странице. Я же приведу несколько примеров:

1) Просмотр установленных маршрутов

bash-2.05b# /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         ns.edu.vologda. 0.0.0.0         UG    0      0        0 eth0

2) Добавление маршрутов

bash-2.05b# /sbin/route add 192.168.1.0 gw 192.168.2.1
bash-2.05b# /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     192.168.2.1     255.255.255.255 UGH   0      0        0 eth0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         ns.edu.vologda. 0.0.0.0         UG    0      0        0 eth0

3)Удаление маршрутов

bash-2.05b# /sbin/route del 192.168.1.0
bash-2.05b# /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         ns.edu.vologda. 0.0.0.0         UG    0      0        0 eth0
bash-2.05b#_

Для создания маршрутов, которые впоследствии будут использоваться при загрузке Вы можете использовать в RedHat-based системах файл /etc/sysconfig/static-routes:

eth0 net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.4
 eth0 net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1

Формат файла следующий:

интерфейс пробел параметры_команды _/sbin/route

< Лекция 14 || Лекция 15 || Лекция 16 >
Ярослав Горлов
Ярослав Горлов

Было бы хорошо если бы изучая Ленкцию можно было скачать файлы, используемые для тренировки в терминале. (lesson6_st.txt и т.п.)

Max Akt
Max Akt

Начиная с восьмого урока резко возросла сложность. Почему? Если первые семь уроком у нас было ознакомление с базовыми функциями, а с восьмого начались сценарии, переменные, функции. Как так? Неужели человек, который только начал изучать Linux, будет в курсе того, о чем говорится уже на восьмом уроке?