Сетевой интерфейс
Материал из 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
Начиная с середины 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
Для получения информации, программа 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
[править] Создание сетевого интерфейса
Интерфейс создается ядром автоматически при обнаружении устройства. Для того чтобы устройство было доступно, необходимо включить его драйверную поддержку в состав ядра. Это может быть сделано в момент сборки ядра или при работе системы с использованием механизма загружаемых модулей.
|
Если устройств, обеспечивающих одинаковый тип интерфейса, несколько, их автоматическое определение не производится. |
При использовании нескольких устройств одного типа нужно произвести их ручную настройку, то есть явным образом назначить интерфейс каждому из них. Это необходимо, поскольку при автоматическом определении устройств порядок привязки к интерфейсам непредсказуем, что недопустимо.
|
Не путайте интерфейсы и устройства системы. Интерфейсам не соответствуют никакие специальные файлы в каталоге /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 поднимает интерфейсы, т.е. выполняет настройку и включение всех описанных интерфейсов, после чего настраивает статическую маршрутизацию.
|
Конфигурационные файлы интерфейсов могут быть созданы вручную или при помощи псевдографических и графических инструментов настройки, таких как 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
[править] Дополнительная информация
[править] Примечания
|
---|