Итак, на аппаратном уровне возможна какая угодно среда передачи данных, с точки зрения Linux сеть начинается в месте подключения к этой среде, то есть на сетевом интерфейсе. Список сетевых интерфейсов и их настроек в системе можно посмотреть с помощью команды ifconfig
(от interface configuration):
methody@localhost:~ $ ifconfig
-bash: ifconfig: command not found
methody@localhost:~ $ /sbin/ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
eth0 Link encap:Ethernet HWaddr 00:0C:29:56:C1:36
inet addr:192.168.102.125 Bcast:192.168.102.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
Пример 1. Запуск ifconfig
Утилитой ifconfig
пользуется, в основном, сама система или администратор; некоторые данные ifconfig
получает, обращаясь с системным вызовом ioctl()
к открытому сетевому сокету, а некоторые считывает из /proc
. Название сетевого интерфейса состоит из его типа и порядкового номера (каким по счёту его распознало ядро). Все сетевые интерфейсы Ethernet в Linux называются ethномер
, начиная с eth0
. Параметр MTU
(Maximum Transfer Unit) определяет наибольший размер фрейма. Большинство других параметров относятся к сетевому уровню, но как минимум ещё один — HWaddr
— относится к уровню интерфесному.
- сетевой интерфейс
- Точка взаимодействия утилит Linux с реализацией TCP/IP в ядре системы. Как правило, имеет уникальный сетевой адрес. Интерфейсу может соответствовать некоторое сетевое оборудование (например, карта ethernet), в этом случае определён также и интерфейсный его адрес.
HWaddr
(от HardWare address, аппаратный адрес) — это уникальный внутри среды передачи данных идентификатор сетевого устройства. В Ethernet аппаратный адрес называется MAC-address (от Media Access Control, управление доступом к среде), и состоит из шести байтов, которые принято записывать в шестнадцатеричной системе счисления и разделять двоеточиями. Каждая ethernet-карта имеет собственный уникальный MAC-address (в примере — 00:0C:29:56:C1:36
), поэтому его легко использовать для определения отправителя и получателя в рамках одной ethernet-среды. Если идентификатор получателя неизвестен, используется аппаратный широковещательный адрес, FF:FF:FF:FF:FF:FF
. Сетевая карта, получив широковещательный фрейм или фрейм, MAC-адрес получателя в котором совпадает с её MAC-адресом, обязана отправить его на обработку системе.
Термин «Media Access Control» имеет отношение к алгоритму, с помощью которого решается задача очерёдности передачи. Алгоритм базируется на трёх принципах:
- Прослушивание среды. Каждое устройство умеет определять, идёт ли в данное время передача данных по среде. Если среда свободна, значит устройство имеет право само передавать данные.
- Обнаружение коллизий. Если решение о начале передаче данных
одновременно
приняли несколько устройств, в среде возникнет коллизия, и распознать, где чьи были данные, становится невозможно. Зато устройства всегда замечают произошедшую коллизию, и передают данные повторно. - Случайное время ожидания перед повтором. Если бы после коллизии все устройства начали одновременно повторять передачу данных, случилась бы новая коллизия. Поэтому каждое устройство выжидает некторое случайное время, и только после этого повторяет передачу. Если повторная коллизия всё-таки возникает, устройство ждёт вдвое дольше, и т. д. до тех пор, пока не превысится допустимое время ожидания, после чего системе сообщается об ошибке.
Время ожидания не удваивается а выбирается, опять-таки случайно, но из другого временного диапазона.
Приведённый алгоритм обладает двумя недостатками. Во-первых, уже на интерфейсном уровне время передачи одного пакета может быть любым, так как неопределённое промедление с передачей предусмотрено протоколом. Во-вторых, сеть ethernet считается хорошо загруженной, если на протяжении некоторого промежутка времени в среднем треть этого времени была пострачена на передачу данных, а две трети времени среда была свободна. Сеть ethernet, нагруженная наполовину, работает очень медленно и с большим числом коллизий, а сеть, нагруженная на две трети, считается неработающей. Это — плата за отсутствие синхронизации работы всех устройств в сети.