Сетевой интерфейс

Материал из Xgu.ru

Перейти к: навигация, поиск


Сетевой интерфейс — физическое или виртуальное устройство, предназначенное для передачи данных между программами через компьютерную сеть.

Примеры сетевых интерфейсов:

  • Физические интерфейсы сетевых карт и телекоммуникационных устройств (коммутаторов, маршрутизаторов и так далее)
  • Петлевые интерфейсы для обмена данными между процессами на одном компьютере или управляемом сетевом устройстве. Для них выделена специальная подсеть 127.0.0.0/8
  • Туннели — для инкапсуляции протокола того же или более низкого уровня в другой протокол
  • Интерфейсы виртуальных сетей (VLAN)

Каждый интерфейс в сети может быть однозначно идентифицирован по его адресу. Разные сетевые протоколы используют разные системы адресации, например MAC-адреса в Ethernet или IP-адреса в IP.

Настройка сетевых интерфейсов в UNIX/Linux-системах традиционно выполняется с помощью команды ifconfig, а в Linux ещё и при помощи команды ip.


Содержание

[править] Сетевой интерфейс в Linux

Сетевое взаимодействие Linux-компьютера происходит через сетевые интерфейсы. Любые данные, которые компьютер отправляет в сеть или получает из сети проходят через сетевой интерфейс.

Интерфейс определён реализацией модели TCP/IP для того чтобы скрыть различия в сетевом обеспечении и свести сетевое взаимодействие к обмену данными с абстрактной сущностью.

Для каждого устройства, поддерживаемого ядром, существует сетевой интерфейс. Существует соглашение о наименовании интерфейсов, в соответствии с которым имя интерфейса состоит из префикса, характеризующего его тип, и числа, соответствующего номеру интерфейса данного типа в системе. Так, например, ppp0 соответствует первому интерфейсу PPP, а eth1 соответствует интерфейсу второго сетевого адаптера Ethernet. Обратите внимание на то, что нумерация интерфейсов начинается с 0.

[править] Наименования сетевых интерфейсов в Linux

Icon-caution.gif

Начиная с середины 2011 года (Fedora 15) в Linux используется новая схема наименования интерфейсов. Интерфейсы называются em[1234] (для интегрированных) или pci<slot>#<port>_<vf> (для навесных). Подробнее: [1], [2], [3].

lo
Интерфейс петли обратной связи.
eth
Сетевой интерфейс к карте Ethernet или картам WaveLan (Radio Ethernet).
tr
Сетевой интерфейс к карте Token Ring.
ppp
Сетевой интерфейс к каналу PPP (Point-to-Point Protocol).
sl
Сетевой интерфейс к каналу SLIP (Serial Line IP).
plip
Сетевой интерфейс к каналу PLIP (Parallel Line IP). Используется для организации сетевого взаимодействия с использованием параллельного порта.
ax
Сетевой интерфейс к устройствам любительского радио AX.25.
fddi
Сетевой интерфейс к карте FDDI
arc0e, arc0s
Сетевой интерфейс к карте ArcNet. Используется инкапсуляция пакетов в формате Ethernet или RFC 1051.
wlan
Сетевой интерфейс wi-fi адаптеров

Интерфейсы создаются автоматически для каждого обнаруженного сетевого устройства при загрузке ядра ОС.

Каждый интерфейс характеризуется определёнными параметрами, необходимыми для обеспечения его нормального функционирования, и в частности для сетевого обмена данными по протоколу IP.

[править] Параметры интерфейса

IP-адрес
Адрес IP, соответствующий данному сетевому интерфейсу. Пакеты, отправленные по этому адресу, поступят на соответствующий интерфейс
Маска подсети
Битовая маска, необходимая для вычисления маршрута передачи IP-пакета
Широковещательный адрес
Адрес, используемый при широковещательной рассылке пакетов через интерфейс.
Метрика
Условная характеристика интерфейса соответствующая уровню затрат при передаче информации через него. Используется при маршрутизации пакетов, для выбора оптимального маршрута.
MTU
Maximum Transfer Unit. Максимальный размер блока данных обрабатываемого интерфейсом. Наибольшее значение MTU определяется типом интерфейса (например, для Ethernet MTU=1500), но может быть искусственно снижено.
MAC-адрес
Аппаратный адрес сетевого устройства, соответствующего интерфейсу (для которых это имеет смысл).

Кроме этих параметров интерфейс характеризуется ещё:

  • Флагами, которые определяют состояния устройства, например такие как: включен ли интерфейс (Up/Down), находится ли он в неразборчивом режиме (promiscuous/nonpromiscuous)
  • Аппаратными характеристиками, такими как адрес памяти, номер IRQ, DMA, порт ввода/вывода;
  • Статистической информацией, характеризующей различные аспекты работы интерфейса. Например, количество переданных/полученных байтов/пакетов, число переполнений, коллизий и др. с момента создания интерфейса.

Debian. Долговременные настройки хранятся в файле /etc/network/interfaces.

[править] Программа ifconfig

Для управления интерфейсами в ОС Linux используется программа ifconfig. Команда позволяет как получать диагностическую информацию об интерфейсах системы, так и выполнять их настройку.

Формат вызова команды:

ifconfig
ifconfig interface options

Tip-icon.gif

Для получения информации, программа ifconfig может вызываться простым пользователем. Файл ifconfig находится в каталоге /sbin, поэтому, чаще всего, при вызове нужно указывать абсолютное путевое имя.

При вызове без параметров, программа выводит на экран информацию обо всех активных (up) интерфейсах. Если указано имя интерфейса, но отсутствуют options, выводится информация только о нем одном.

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:01:02:B4:61:10  
          inet addr:10.0.0.188  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1347443 errors:0 dropped:0 overruns:0 frame:0
          TX packets:865328 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:830641609 (792.1 Mb)  TX bytes:72315353 (68.9 Mb)
          Interrupt:10 Base address:0xcc00 

Формат вывода информации о интерфейсе программой ifconfig:

Характеристики канального уровня
Канальный уровень Link encap. Аппаратный MAC-адрес устройства HWaddr
Характеристики сетевого уровня
IP-адрес интерфейса inet addr; широковещательный адрес интерфейса Bcast; маска подсети интерфейса Mask
Флаги, метрика и MTU
Список установленных флагов интерфейса: включён UP; принимает широковещательные пакеты BROADCAST; принимает групповые пакеты MULTICAST. Среди списка установленных флагов может присутствовать слово PROMISC, означающее, что интерфейс работает в неразборчивом режиме. Установленный размер максимального блока, передаваемого через интерфейс MTU и метрика интерфейса Metric.
Информация о полученных пакетах RX
Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns. Такое назначение полей соответствует только сетям Ethernet. В других сетях, смысл может отличаться.
Информация об отправленных пакетах
Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns, потерь несущей carrier, коллизий collisions ; объем буфера передачи txqueuelen. Такое назначение полей соответствует только сетям Ethernet. В других сетях, смысл может отличаться.
Объем переданных данных
Количество байтов полученных RX bytes и отправленных TX bytes через интерфейс
Аппаратные параметры
Номер линии IRQ Interrupt и адрес памяти Base address

Если в командной строке ifconfig указаны options, выполняется настройка интерфейса. В процессе настройки можно изменить режим работы интерфейса, настройки IP-адреса и другие характеристики.

Перед списком опций в командной строке ifconfig следует обязательно указать имя интерфейса, к которому они применяются. В команде может быть указано имя, не больше чем одного интерфейса.

Задаваемые в командной строке options выглядят как набор ключевых слов с дополнительными параметрами. Последовательность ключевых слов в строке не имеет значения, хотя и существует общепринятый порядок.

[править] Аргументы командой строки ifconfig

interface
Имя интерфейса, к которому применяется действие программы ifconfig.
up | down
Включает/выключает интерфейс.
address
IP-адрес, который назначается интерфейсу.
netmask address
Устанавливает значение сетевой маски для интерфейса равному значению address.
[-]broadcast [address]
Устанавливает значение широковещательного адреса равному значению address. Если дополнительный аргумент address отсутствует, включает или выключает работу интерфейса в широковещательном режиме.
[-]promisc
Включает/выключает неразборчивый режим работы интерфейса.
[-]arp
Разрешает/запрещает использование протокола ARP по этому интерфейсу.
metric N
Устанавливает метрику интерфейса равной N.
mtu N
Устанавливает значение MTU интерфейса равным N
irq N
Установить IRQ устройства равным N (если позволяет драйвер устройства)
io_addr address
Установить адрес ввода-вывода, равным параметру address (если позволяет драйвер устройства)
media type
Задать тип физической среды передачи данных (если позволяет драйвер устройства)

При изменении IP-адреса интерфейса автоматически изменяются значения его маски и широковещательного адреса. Если параметры netmask и broadcast не указаны явно, соответствующие значения вычисляются исходя из класса IP-адреса. Например, для IP-адреса 200.200.200.200, который относится к диапазону адресов класса C, значения сетевой маски и широковещательного адреса будут соответственно равны 255.255.255.0 и 200.200.200.255, а для адреса 1.2.3.4 (адрес класса A), равны соответственно 255.0.0.0 и 1.255.255.255.

Более тонкую настройку интерфейса можно произвести при помощи утилиты ip


[править] Пример использования ifconfig

Просмотр информации обо всех интерфейсах

$ ifconfig

Просмотр информации об интерфейсе eth0:

$ ifconfig eth0

Назначить IP-адрес 10.0.0.1 первой Ethernet-карте:

# ifconfig eth0 10.0.0.1

Интерфейс не включается автоматически. Если необходимо включить интерфейс, в командной строке следует явно указать параметр up:

# ifconfig eth0 10.0.0.1 up

Значения широковещательного адреса и сетевой маски будут определены автоматически на основе информации о классе адреса. Если необходимо явно задать маску, например, ограничить размер сети 14 хостами (4 бита на хост), нужно использовать команду:

# ifconfig eth0 10.0.0.1 netmask 255.255.255.240 broadcast 10.0.0.15

Запретить использование ARP на интерфейсе eth0:

# ifconfig eth0 -arp

Перевести интерфейс в неразборчивый режим:

# ifconfig eth0 promisc

[править] Создание сетевого интерфейса

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

Note-icon.gif

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

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

Note-icon.gif

Не путайте интерфейсы и устройства системы. Интерфейсам не соответствуют никакие специальные файлы в каталоге /dev

Вновь созданный интерфейс является ненастроенным: он выключен и к нему не привязан никакой IP-адрес. Для того чтобы ввести интерфейс в работу, нужно провести его настройку и включить (поднять) его при помощи команды ifconfig.

При настройке интерфейса обычно настраиваются следующие параметры:

  • IP-адрес должен быть указан обязательно, поскольку без него использование интерфейса неосуществимо;
  • Сетевая маска должна указываться в том случае, если она отличается от той, которая соответствует классу IP-адреса;
  • Широковещательный адрес указывается в том случае, если он отличается от широковещательного адреса, вычисляемого на основе значений IP-адреса и сетевой маски.

Эти параметры задаются одной командой, которая при этом, как правило, сразу и включает интерфейс.

# ifconfig eth0 192.168.1.1 up
# ifconfig eth1 10.0.0.1 netmask 255.255.255.0 up

[править] Настройка интерфейсов при загрузке системы

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

Рассмотренная ниже процедура автоматической настройки сетевых интерфейсов при загрузке выглядит так только в RedHat-based системах. В Slackware и Debian сетевые интерфейсы настраиваются несколько иначе.

Настройка интерфейсов производится скриптом /etc/rc.d/init.d/network, который автоматически вызывается при переходе на 2, 3, 4 или 5 уровень выполнения. Скрипт network при вызове с параметром start поднимает интерфейсы, т.е. выполняет настройку и включение всех описанных интерфейсов, после чего настраивает статическую маршрутизацию.

Note-icon.gif

Конфигурационные файлы интерфейсов могут быть созданы вручную или при помощи псевдографических и графических инструментов настройки, таких как netconfig или neat

Описание интерфейсов находится в файлах ifcfg-* в каталоге /etc/sysconfig/network-scripts. В названии файла, за символом - следует имя интерфейса, например файл ifcfg-eth0 содержит настройки интерфейса eth0. Файл описания интерфейсов — это небольшой скрипт, содержащий только несколько команд присвоения variable=value где variable — определённый параметр настройки интерфейса, а value — необходимое значение этого параметра.

Параметры интерфейса в файле ifcfg.

DEVICE
Имя устройства
ONBOOT
Нужно ли инициализировать интерфейс при загрузке (yes | no)
BOOTPROT
При динамической настройке тип протокола, при помощи которого должен быть сконфигурирован интерфейс ( bootp | dhcp )
BOOTP
Интерфейс необходимо настроить с использованием протокола удаленной загрузки BOOTP
IPADDR
IP-адрес, который должен быть присвоен интерфейсу
NETMASK
Маска подсети IP-адреса интерфейса
NETWORK
Адрес сети интерфейса
BROADCAST
Широковещательный адрес интерфейса


Значения NETMASK, NETWORK, BROADCAST могут быть вычислены скриптом ifup автоматически при помощи программы ipcalc, поэтому, если они соответствуют классу IP-адреса, указывать явно их не обязательно

Для настройки интерфейсов во время загрузки компьютера используется скрипт ifup, который принимает в качестве аргумента командной строки имя интерфейса interface.

ifup interface

Он читает конфигурационный файл interface или, если он отсутствует, файл из каталога /etc/sysconfig/networking/default. В крайнем случае, если не найден ни один из этих файлов читается конфигурация из ifcfg-interface. После этого скрипт производит настройку интерфейсов при помощи утилиты ip. Настраиваются не только интерфейсы сами по себе, но и необходимые маршруты для обращения к сетям, непосредственно доступным через интерфейс.

Скрипты ifup и ifdown могут вызываться не только во время загрузки компьютера или при смене уровня выполнения, но и в ходе нормальной работы, когда нужно вручную поднять или опустить интерфейс.

Перезапуск интерфейса eth0:

# ifdown eth0
# ifup eth0

Файлы ifup и ifdown в каталоге /etc/sysconfig/network-scripts являются символическими ссылками на файлы ifup и ifdown в каталоге /sbin. Поэтому, при вызове вручную можно просто воспользоваться командами ifup и ifdown.

При вызове в ходе начальной загрузки, скрипту ifup передается дополнительный аргумент boot, который сообщает, что интерфейс нужно поднимать только в том случае, если в файле его конфигурации параметр ONBOOT не установлен в no.

[править] Файл конфигурации eth0

Вот пример наиболее распространённой конфигурации Ethernet-интерфейса:

DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.188
NETMASK=255.255.255.0
NETWORK=10.0.0.0
BROADCAST=10.0.0.255

В данном случае файл описывает интерфейс eth0, которому назначен IP-адрес из диапазона рекомендованного для локальных сетей 10.0.0.188. Поскольку адрес принадлежит классу A, а необходимо чтобы под сетевую часть было отведено 24 бита, явным образом задана сетевая маска NETMASK, адрес сети NETWORK и широковещательный адрес BROADCAST.

  • /etc/init.d/network — Скрипт, выполняющий настройку сетевых интерфейсов и маршрутизации при загрузке.
  • /etc/sysconfig/network — Конфигурационный файл, содержащий имя хоста, IP-адрес основного шлюза и IP-адреса основного и вспомогательного DNS-серверов
  • /etc/sysconfig/network-scripts — Каталог, содержащий конфигурационные файлы интерфейсов и скрипты, выполняющие их инициализацию
  • /etc/sysconfig/network-scripts/ifup — Скрипт, который выполняет настройку и активацию интерфейса
  • /etc/sysconfig/network-scripts/ifdown — Скрипт, который выполняет деактивацию интерфейса
  • /etc/sysconfig/network-scripts/ifcfg-* — Конфигурационные файлы, описывающие интерфейсы системы.

[править] Вопросы и ответы

[править] Как создать фиктивный сетевой интерфейс с заданным названием?

Создать tap-интерфейс:

с помощью tunctl:

 tunctl -t eth0

С помощью ip:

 ip tuntap add dev eth0 mode tap

Создать dummy-интерфейс:

 modprobe dummy0
 ip l set dev dummy0 name eth0

[править] Дополнительная информация

[править] Примечания