В главе 5 мы видели, что сетевых интерфейсов Ethernet существует великое множество и что различным картам Ethernet обычно соответствуют различные имена интерфейсов. Как правило, определить используемые имена интерфейсов можно, обратившись к отображаемым при загрузке системы сообщениям. Во многих системах изучить эти сообщения можно при помощи команды dmesg. В следующем примере показан вывод команды для двух различных систем:
|
Oct 1 13:07:23 crab gld: [ID 944156 kern.info] dnet0: DNET 21x4x: type "ether" mac address 00:00:c0:dd:d4:da
|
ethO: SMC EtherEZ at 0x240, 00 00 CO 9A 72 CA,assigned IRQ 5 programmed-1/0 mode.
Первая команда dmesg отображает сообщение, поступившее от системы Sola-ris 8 в момент, когда при загрузке был определен интерфейс Ethernet. Строка type "ether' делает очевидным тот факт, что dnet0 - интерфейс Ethernet. Кроме того, она содержит Ethernet-адрес (00:00:c0:dd:d4:da).
Второй пример dmesg, принадлежащий системе PC под управлением Linux, дает нам еще больше информации. В системах Linux имена интерфейсов Enternet начинаются с подстроки «eth», поэтому мы ищем сообщение, содержа-щее такую подстроку. Сообщение системы Linux включает Ethernet-адрес (00:00:с0:9а:72:са), информацию об изготовителе и модели (SMC EtherEZ) сетевой карты.
По выводу команды dmesg не всегда просто определить все доступные интер-фейсы. Сообщения информируют лишь о физических интерфейсах обнару-женных в системе устройств. В архитектуре протоколов TCP/IP все функ-ции, расположенные ниже уровня Internet, принадлежат к уровню доступа к сети. Этот уровень может объединять три нижних уровня стандартной мо-дели OSI: физический, канальный и сетевой. Протоколу IP необходимы дан-ные о конкретном интерфейсе уровня доступа к сети, чтобы передать пакеты, подлежащие доставке в определенную сеть. И этот интерфейс не ограни-чивается драйвером физического устройства. Он может быть представлен программным интерфейсом сетевого уровня другого семейства протоколов. Какие же методы могут применяться для определения доступных сетевых интерфейсов? Можно воспользоваться командами netstat и ifconfig. Например, чтобы получить данные обо всех уже настроенных сетевых интерфейсах, наберите:
# netstat -in Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue loO 8232 127.0.0.0 127.0.0.1 4504 0 4504 0 0 0 dnetO 1500 172.16.12.0 172.16.12.1 366 0 130 0 0 0
Ключ -i предписывает программе netstat отображать состояние всех настро-енных сетевых интерфейсов, а ключ -n - использовать при выводе числовой формат. В приведенном примере для Solaris 8 команда netstat -in выводит следующие поля:
Name - Поле имени интерфейса отражает фактическое имя интерфейса. Именно это имя передается команде ifconfig. Символ звездочки (*) в этом поле по-казывает, что интерфейс не задействован, то есть «закрыт».
Mtu - Максимальный размер передаваемого блока (Maximum Transmission Unit) отражает максимальную длину фреймов (пакетов), которая не тре-бует разбиения при передаче через этот интерфейс. Значение MTU отобра-жается в байтах, и позже в этой главе мы поговорим о нем более подробно.
Net/Dest - Поле Network/Destination (Сеть/Пункт назначения) отражает сеть (или конечный узел), доступную посредством интерфейса. В наших примерах для Ethernet это поле содержит адрес сети. Адрес сети определяется по IP-адресу интерфейса и маске подсети. Если интерфейс настроен на работу с конкретным узлом по принципу точка-точка, поле содержит адрес узла. Конечный адрес - это адрес удаленного узла, то есть второй стороны канала точка-точка. Канал точка-точка - прямое соединение между двумя компьютерами. Для создания подобного канала можно использовать команду ifconfig. Далее в тексте главы будет приведен соответствующий пример.
Address - Поле IP-адреса содержит Интернет-адрес, назначенный интерфейсу.
Ipkts - Поле Input Packets (Входящие пакеты) отражает число пакетов, получен-ных через этот интерфейс.
Ierrs - Поле Input Errors (Входящие ошибки) отражает число поврежденных па-кетов, полученных через этот интерфейс.
Opkts - Поле Output Packets (Исходящие пакеты) отражает число пакетов, оправленных через этот интерфейс.
Oerrs - Поле Output Errors (Исходящие ошибки) отражает число пакетов, от-правк а которых привела к возникновению ошибок.
Collis - Поле Collisions отражае т число конфликтов (collisions, коллизий) Ethernet, обнаруженных этим интерфейсом. Конфликты Etherne t - нормальное явление, вызываемое соревновательными особенностями трафика Enternet . Дл я интерфейсов других типов это поле не имеет смысла.
Queue - Поле Packet s Queued (Ожидающие пакеты) отражает число пакетов, помещенных в очередь и ожидающи х передачи через интерфейс. Обычно поле имеет нулевое значение.
Вывод команд ы netstat -in в случае системы Linux внешне существенно отличается:
|
Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-ORP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Fig ethO 1500 0 2234 280 0 0 1829 0 0 0 BRU lo 16436 0 10 0 0 0 10 0 0 0 LRU
Внешние различия в данном случае - лиш ь повод вспомнить, что внешность бывает обманчива. Здесь мы видим им я интерфейса, значение MTU и статис-тику для пакетов. RX-OK - общее число полученных пакетов, тогда как RX-ERR (ошибки), RX-DRP (отброшенные) и RX-OVR (переполнения) вместе дают общее число ошибок приема. Общее число отправленных пакетов - ТХ-ОК, а счетчики TX-ERR, TX-DRP и TX-OVR в сумме дают общее число ошибок передачи. Из полей, представленных дл я системы Solaris, здесь отсутствуют лишь два: Net/Des t и Address. С другой стороны, вывод для Linux содержит два поля , которых не было в Solaris. Поле Met содержит метрику маршрути-зации, назначенную интерфейсу. Поле Fig отражает флаги интерфейса:
- R означает, что интерфейс действует (running).
- U означает, что интерфейс функционален (up).
- В означает, что интерфейс может передавать широковещательные сооб-щения.
- L означает, что интерфейс являетс я кольцевым (loopback).
Итак, мы видим, что у данной рабочей станции лиш ь два сетевых интерфейса. В данном случае можн о легко понять, о каки х интерфейсах речь. 1о0 - это кольцевой интерфейс, существующий в каждо й системе с TCP/IP . Именно об этом кольцевом устройстве шла речь в главе 5. ethO - интерфейс Ether-net, с которым мы тоже успели познакомиться. В большинстве систем кольцевой интерфейс - часть стандартной настройки, так что нет необходимости его настраивать. А чтобы настроить интерфейс 1о0 в системе Solaris, воспользуйтесь командой:
|
Данный пример верен только для Solaris, поскольку содержит параметр plumb. Этот параметр буквально предписывает «подвести трубы» к интерфейсу, что необходимо только при первой настройке. Последующая перена-стройка интерфейса уже не требует параметр plumb, а в других системах, та-ких как Linux, этот параметр не используется.
Настройка интерфейса Ethernet требует более скрупулезного подхода. Во многих системах Unix существуют специальные сценарии установки. Сце-нарий запрашивает адрес узла, который используется для настройки интерфейса. Чуть позже мы изучим эти сценарии и возможные действия пользо-вателя в ситуациях, когда сценарии установки не справляются с поставлен-ной задачей.
Для обнаружения существующих в системе сетевых интерфейсов также мо-жет применяться команда ifconfig. Команда netstat перечисляет только на-строенные интерфейсы. В некоторых системах команда ifconfig может использоваться для обнаружения всех интерфейсов, даже еще не прошедших настройку. В случае системы Solaris 8 результат достигается командой if-config -а; для системы Linux 2.0.0 перечень всех сетевых интерфейсов досту-пен по команде ifconfig без аргументов.
Несмотря на то что на большинстве узлов существует лишь один «физический» сетевой интерфейс, на некоторых узлах и на всех без исключения шлюзах интерфейсов несколько. Интерфейсы узла вполне могут иметь один тип: скажем, шлюз, соединяющий две Ethernet-cera, может иметь два интерфейса Ethernet. Команда netstat на подобном шлюзе может перечислить интерфейсы 1о0, eth0 и eth1 . Расшифровка вывода netstat для нескольких однотипных интерфейсов - задача предельно простая. Однако расшифровка для системы с многочисленными разнообразными типами сетевых интерфейсов может оказаться существенно сложнее. При выборе нужного интерфейса следует полагаться на документацию, поставляемую в составе дополнительного программного обеспечения. Прежде чем устанавливать новые сетевые программы, внимательно прочтите документацию.
Столь длинный рассказ, посвященный обнаружению сетевых интерфейсов, не должен затмить важности таких функций ifconfig, как назначение IP-адреса, маски подсети и широковещательного адреса. Так что мы возвращаем-ся к этим важным темам.