Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab.MIT.04

.pdf
Скачиваний:
9
Добавлен:
19.02.2016
Размер:
409.5 Кб
Скачать

Лабораторная работа № 4

Конфигурирование сетевых интерфейсов. Диагностические утилиты TCP/IP

Краткие теоретические сведения

В настоящее время стек TCP/IP является самым популярным средством организации составных сетей. В стеке TCP/IP определены 4 уровня (рисунок 1). Каждый из этих уровней несет на себе некоторую нагрузку по решению основной задачи – организации надежной и производительной работы составной сети, части которой построены на основе разных сетевых технологий.

Уровень 1

Прикладной уровень

Уровень 2

Транспортный уровень

Уровень 3

Уровень межсетевого взаимодействия

Уровень 4

Уровень сетевых интерфейсов

 

Рисунок 1.

1. Прикладной уровень.

Прикладной уровень – верхний уровень стека TCP/IP, в основном соответствует двум уровням эталонной модели OSI: прикладному и представления данных. Существует 2 категории протоколов прикладного уровня: пользовательские протоколы, которые предоставляют сервис непосредственно пользователям и протоколы поддержки, которые обеспечивают реализацию общих функций системы. Самые популярные пользовательские протоколы прикладного уровня: FTP, HTTP, IMAP, NNTP, POP, SMTP, Telnet, TFTP. Самые популярные протоколы поддержки прикладного уровня: BGP, DHCP, DNS, NTP, RIP, SNMP, TLS/SSL.

2. Транспортный уровень.

Транспортный уровень обеспечение информационную связь между двумя конечными приложениями. На этом уровне функционируют протокол управления передачей TCP (Transmission Control Protocol) и протокол дейтаграмм пользователя UDP (User Datagram Protocol). Протокол TCP обеспечивает надежную передачу сообщений между удаленными прикладными процессами за счет образования логических соединений. Этот протокол позволяет равноранговым объектам на компьютере-отправителе и компьютере-получателе поддерживать обмен данными в дуплексном режиме. TCP позволяет без ошибок доставить сформированный на одном из компьютеров поток байт в любой другой компьютер, входящий в составную сеть. TCP делит поток байт на части – сегменты, и передает их ниже лежащему уровню межсетевого взаимодействия. После того как эти сегменты будут доставлены средствами уровня межсетевого взаимодействия в пункт назначения, протокол TCP снова соберет их в непрерывный поток байт.

2.1. Протокол TCP.

Описание протокола TCP дано в RFC 793. Его основные характеристики:

-реализует взаимодействие в режиме с установлением логического (виртуального) соединения;

-обеспечивает двунаправленную дуплексную связь;

-организует потоковый (с точки зрения пользователя) тип передачи данных;

-дает возможность пересылки части данных, как «экстренных»;

-для идентификации партнеров по взаимодействию на транспортном уровне использует 16-битовые номера

портов;

-реализует принцип скользящего окна (sliding window) для управления скоростью передачи;

-поддерживает ряд механизмов для обеспечения надежной передачи данных.

2.2. Протокол UDP.

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

Описание протокола UDP дано в RFC 768. Его основные характеристики:

-реализует взаимодействие в режиме без установления логического (виртуального) соединения;

-организует поблочный (дэйтаграммный, пакетный) тип передачи данных;

-для идентификации партнеров по взаимодействию на транспортном уровне использует 16-битовые номера

портов;

-не гарантирует надежной передачи данных (возможна как потеря UDP-пакетов, так и их дублирование);

-не имеет средств уведомления источника UDP-пакета о правильности/ошибочности в его приеме адресатом;

-не обеспечивает правильный порядок доставки UDP-пакетов от источника к приемнику;

1

-может гарантировать целостность данных в UDP-пакете за счет использования контрольной суммы;

-очень прост (особенно, по сравнению с протоколом TCP).

3. Уровень межсетевого взаимодействия.

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

Основным протоколом уровня межсетевого взаимодействия (в терминах модели OSI) в стеке является протокол IP (Internet Protocol). Этот протокол изначально проектировался как протокол передачи пакетов в составных сетях, состоящих из большого количества локальных сетей, объединенных как локальными, так и глобальными связями. Поэтому протокол IP хорошо работает в сетях со сложной топологией, рационально используя наличие в них подсистем и экономно расходуя пропускную способность низкоскоростных линий связи. Так как протокол IP является дейтаграммным протоколом, он не гарантирует доставку пакетов до узла назначения, но старается это сделать.

Межсетевой протокол IP специфицирован в RFC 791. Его основные характеристики:

-реализует обмен информации пакетами (максимальный размер пакета - 65535 байт);

-является протоколом взаимодействия без установления логического соединения;

-для адресации узлов сети используется адрес длиной 4 (16) байта (ов);

-обеспечивает в случае необходимости фрагментацию пакетов;

-пакеты имеют конечное время жизни в сети;

-не гарантирует надежность доставки пакетов адресату;

-не имеет средств управления интенсивностью передачи пакетов посылающей стороной (flow control);

-не гарантирует правильную последовательность пакетов на принимающей стороне.

К уровню межсетевого взаимодействия относятся также протокол ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol).

4. Уровень сетевых интерфейсов.

Протоколы уровня сетевых интерфейсов должны обеспечивать интеграцию в составную сеть других сетей, причем задача ставится так: сеть TCP/IP должна иметь средства включения в себя любой другой сети, какую бы внутреннюю технологию передачи данных эта сеть не использовала. Для каждой технологии, включаемой в составную сеть подсети, должны быть разработаны собственные интерфейсные средства. К таким интерфейсным средствам относятся протоколы инкапсуляции IP-пакетов уровня межсетевого взаимодействия в кадры локальных технологий. Например, документ RFC 1042 определяет способы инкапсуляции IP-пакетов в кадры технологий IEEE 802.

Уровень сетевых интерфейсов в протоколах TCP/IP не регламентируется, но он поддерживает все популярные стандарты физического и канального уровней для локальных сетей: Ethernet, Token Ring, FDDI, Fast Ethernet, Gigabit Ethernet, 10 Gigabit Ethernet, для глобальных сетей: РРР, протоколы территориальных сетей с коммутацией пакетов Х.25, frame relay. Разработана также специальная спецификация, определяющая использование технологии АТМ в качестве транспорта канального уровня. Обычно при появлении новой технологии локальных или глобальных сетей она быстро включается в стек TCP/IP за счет разработки соответствующего RFC, определяющего метод инкапсуляции IP-пакетов в ее кадры.

Конфигурирование сетевых интерфейсов в ОС FreeBSD UNIX

Сетевым интерфейсом с точки зрения ОС является устройство (программное и/или аппаратное), через которое система получает и передает IP-пакеты. Роль интерфейса может выполнять одно из следующих устройств: Ethernet-карта, ISDN-адаптер или модем. Каждое устройство имеет свой IP-адрес. Для подключения к локальной сети используется, как правило, Ethernet-карта, что и будет предполагаться в данной работе.

1. Поиск подходящего драйвера.

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

Если карта поддерживается, потребуется определить подходящий драйвер. В файлах

/usr/src/sys/conf/NOTES (опции ядра, общие для всех архитектур) и /usr/src/sys/arch/conf/NOTES

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

Драйверы для широко распространенных карт представлены в ядре GENERIC, так что карта должна определиться при загрузке, примерно так:

2

fxp0: <Intel 82559 Pro/100 Ethernet> port 0xb800-0xb83f mem 0xf7e9f000- 0xf7e9ffff,0xf7d00000-0xf7dfffff irq 19 at device 11.0 on pci2

miibus0: <MII bus> on fxp0

inphy0: <i82555 10/100 media interface> on miibus0

inphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto fxp0: Ethernet address: 00:02:b3:1d:70:4c

fxp1: <Intel 82559 Pro/100 Ethernet> port 0xb400-0xb43f mem 0xf7e9e000- 0xf7e9efff,0xf7b00000-0xf7bfffff irq 16 at device 12.0 on pci2

miibus1: <MII bus> on fxp1

inphy1: <i82555 10/100 media interface> on miibus1

inphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto fxp1: Ethernet address: 00:02:b3:15:85:ed

В этом примере две карты используют имеющийся в системе драйвер fxp.

Если драйвер сетевой карты отсутствует в GENERIC, для ее использования потребуется загрузить подходящий драйвер. Это может быть сделано одним из двух способов:

1)загрузить модуль ядра сетевой карты с помощью kldload(8) (не все драйверы доступны в виде модулей);

2)статически включить поддержку карты, скомпилировав собственное ядро.

2. Настройка сетевого интерфейса.

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

Для вывода информации о настройке сетевых интерфейсов системы, используется следующая команда:

# ifconfig

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet autoselect (100baseTX <full-duplex>) status: active

fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet 10.18.49.1 netmask 0xffffff00 broadcast 10.18.49.255 ether 00:02:b3:15:85:ed

media: Ethernet 10baseT/UTP status: no carrier

lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

inet 127.0.0.1 netmask 0xff000000

tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

В этом примере были показаны следующие устройства:

-fxp0: первый Ethernet интерфейс;

-fxp1: второй Ethernet интерфейс;

-lp0: интерфейс параллельного порта;

-lo0: устройство loopback;

-tun0: туннельное устройство, используемое ppp.

Для присвоения имени сетевой карте FreeBSD использует имя драйвера и порядковый номер, в котором карта обнаруживается при инициализации устройств. Например, sis2 это третья сетевая карта, использующая драйвер sis(4).

В этом примере, устройство fxp0 включено и работает. Ключевые признаки таковы:

1)UP означает, что карта настроена и готова;

2)у карты есть Internet (inet) адрес (в данном случае 10.18.51.1);

3)установлена маска подсети (netmask; 0xffffff00, то же, что и 255.255.255.0);

4)широковещательный адрес (в данном случае, 10.18.51.255);

5)значение MAC адреса карты (ether) 00:02:b3:1d:70:4c;

6)физическая среда передачи данных в режиме автовыбора (media: Ethernet autoselect (100baseTX <full-duplex>)); видно, что fxp1 была настроена для работы с 10baseT/UTP;

7)статус соединения (status) active, т.е. несущая обнаружена; для fxp1 status: no carrier, это нормально, когда Ethernet кабель не подключен к карте.

Если ifconfig(8) показывает примерно следующее:

fxp0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500

ether 00:02:b3:1d:70:4c

это означает, что карта не была настроена.

3

Для настройки карты потребуются привилегии пользователя root.

2.1. Изменение настроек физического уровня.

В общем случае, для конфигурирования физических параметров интерфейса надо предварительно изучить справку по соответствующему драйверу. Далее приводятся примеры для драйвера к чипсету Intel 8255x. (man fxp.) Для этого драйвера можно изменять скорость передачи данных (10 или 100 Mbps) и режим передачи (half-duplex – одновременная передача пакетов в обе стороны не поддерживается; или full-duplex – поддерживается одновременная передача пакетов в обе стороны).

$ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet autoselect (100baseTX <full-duplex>) status: active

2.1.1. Изменение скорости интерфейса на 10 мегабит в секунду (Mbps):

# ifconfig fxp0 media 10baseT/UTP $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet 10baseT/UTP status: active

Теперь можно вручную выставить обратно 100baseTX, командой ifconfig fxp0 media 100baseTX либо включить назад автоопределение.

# ifconfig fxp0 media autoselect $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet autoselect (100baseTX <full-duplex>) status: active

2.1.2. Переключение дуплекса:

# ifconfig fxp0 media 100baseTX $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet 100baseTX status: active

В настоящий момент интерфейс пребывает в режиме half-duplex, потому что это режим по умолчанию. Соответственно никакой опции для его включения нет, и при попытке задать её получится ошибка:

# ifconfig fxp0 mediaopt half-duplex

ifconfig: SIOCSIFMEDIA (mediaopt): Device not configured

Для перевода интерфейса в full-duplex, можно использовать следующую команду:

# ifconfig fxp0 mediaopt full-duplex $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet 100baseTX <full-duplex> status: active

4

2.2. Изменение настроек канального уровня.

2.2.1. Изменение MAC-адреса: $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet 100baseTX <full-duplex> status: active

# ifconfig fxp0 lladdr 40:02:b3:1d:70:4c $ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 40:02:b3:1d:70:4c

media: Ethernet 100baseTX <full-duplex> status: active

Здесь для смены аппаратного адреса применяется ключевое слово lladdr, объясняющее, что речь идёт об адресе канального уровня (link-layer address = lladdr), т.е. о MAC-адресе. Во FreeBSD действуют так же синонимы link и ether – смысл тот же.

2.2.2. Смена флагов канального уровня.

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

up/down

Поднять/опустить интерфейс. Переключается флаг UP promisc/-promisc

Включить/выключить «неразборчивый» (promiscuous) режим работы интерфейса. Переключается флаг PROMISC. monitor/-monitor

Интерфейс переводится/выводится в/из режим мониторинга. В режиме мониторинга пакеты не передаются, а все полученные пакеты уничтожаются после обработки bpf(4). Переключается флаг MONITOR.

link[0-2]/-link[0-2]

Переключаются флаги LINK0, LINK1 и LINK2. При помощи них можно включить сжатие в интерфейсе SLIP или переключить тип коннектора на некоторых Ethernet картах.

arp/-arp

Включение/выключение поддержки протокола ARP на интерфейсе. По умолчанию ARP включён. Переключает флаг NOARP.

staticarp/-staticarp

Переключает флаг STATICARP. При включённом флаге интерфейс использует только статическую таблицу ARP. debug/-debug

Включение/выключение отладочного режима в драйвере устройства. Обычно приводит к дополнительным сообщениям в syslog(3). Переключает флаг DEBUG.

Пример:

$ ifconfig fxp0

fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet autoselect (100baseTX <full-duplex>) status: active

# ifconfig fxp0 -arp $ ifconfig fxp0

fxp0: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU>

inet6 fe80::250:22ff:feb0:7f39%fxp0 prefixlen 64 scopeid 0x1 inet 10.18.51.1 netmask 0xffffff00 broadcast 10.18.51.255 ether 00:02:b3:1d:70:4c

media: Ethernet autoselect (100baseTX <full-duplex>) status: active

5

2.3. Изменение настроек сетевого уровня.

2.3.1. MTU.

MTU переключается опцией mtu. Ограничение сверху на MTU накладывает природа передающей среды. В сетях

Fast Ethernet MTU не может превышать 1500 байт.

2.3.2. IP, маска подсети, широковещательный адрес.

Адрес интерфейса и маску подсети можно задавать в традиционном формате, в шестнадцатеричном, а так же в формате CIDR (ifconfig(8). Следующие команды эквивалентны:

#ifconfig fxp0 172.16.0.0 netmask 255.255.0.0

#ifconfig fxp0 172.16.0.0 netmask 0xffff0000

#ifconfig fxp0 0xac100000 netmask 0xffff0000

#ifconfig fxp0 172.16.0.0/16

Во всех случаях широковещательный адрес вычисляется автоматически (172.16.255.255). Если требуется явно указать широковещательный адрес, то это можно сделать:

# ifconfig 172.16.0.0 netmask 255.255.0.0 broadcast 172.16.255.253

Во всех приведённых примерах неявно подразумевается перед IP ключевое слово inet. (По умолчанию действует оно, а не lladdr, например).

Ключевое слово alias (или add) позволяет добавить к сетевому интерфейсу ещё один адрес, возможно в другой

сети.

2.3.3. IPv6.

Аналогично добавляются адреса в нотации IPv6, с использованием ключевого слова inet6.

2.4. Сохранение установленных сетевых параметров.

Во FreeBSD все настройки собраны в единый файл /etc/rc.conf, в том числе это касается и настроек сетевых интерфейсов. В файле /etc/rc.conf для каждого сетевого интерфейса должна быть строка вида ifconfig_fxp0="...". Если для интерфейса нужны дополнительные имена (алиасы), применяется строка вида: ifconfig_fxp0_alias0="...", ifconfig_fxp0_alias1="...".

Следующая строка объясняет, что интерфейс fxp0 надо настроить с использованием DHCP: ifconfig_fxp0="DHCP"

Все настройки связанные с функционированием IPv6, ppp, gif(4) и проч. так же должны находиться в файле /etc/rc.conf. С этими настройками можно ознакомиться в справочной системе man rc.conf.

3. Настройка DNS клиента.

Когда узлу необходимо обратиться к некоторому адресу в Internet, она должна преобразовать символьное имя машины (такое, как example.com), в IP (или IPv6) адрес. Осуществляется это при помощи библиотечной функции gethostbyname(3). Типичное поведение этой функции выглядит так: 1) просматривается файл /etc/hosts в котором перечислено какие имена соответствуют некоторым адресам; 2) затем, если поиск не дал результатов, при помощи resolver(3) осуществляются запросы к серверам DNS. На порядок этих действий можно влиять при помощи файла /etc/nsswitch.conf.

За работу resolver'а отвечает настроечный файл /etc/resolv.conf.

Файл /etc/resolv.conf является настроечным файлом для клиентской части системы DNS – resolver'а. Синтаксис файла предельно прост: в нём перечисляются DNS сервера в порядке убывания приоритета. Перед IP адресом сервера DNS указывается ключевое слово nameserver.

nameserver 127.0.0.1 nameserver 10.18.49.102 search somewhere.ua ua org

В примере сказано, что для разрешения имён в IP-адреса, нужно сперва обратиться к локальному узлу (предполагается, что на нем запущен свой собственный named(8)), а если обратиться к нему не удастся (если он не запущен), обратиться к DNS на узле 10.18.49.102. Здесь сервер DNS на узле 127.0.0.1 называется первичным DNSсервером (primary), а 192.168.0.1 – вторичным (secondary). Если первичный сервер DNS не сможет разрешить имя, он вернёт отрицательный ответ и запрос к вторичному серверу выполнен не будет (ведь ответ пришёл, просто он отрицательный).

Если необходимо разрешить имя host, а в файле /etc/resolv.conf имеются только записи типа nameserver. В этом случае resolver попытается найти узел host., такого узла нет, следующее действие resolver'а будет таким: он возьмёт имя домена в котором находится текущий узел и допишет этот домен. Если текущий узел имеет имя client.somewhere.ua,

то resolver попытается разрешить имя host.somewhere.ua.

На это поведение можно влиять двумя способами: 1) с помощью директивы domain указать какой-нибудь другой домен и тогда поиск будет осуществляться в нём.

2) при помощи директивы search явно перечислить через пробел домены в которых следует производить поиск, как это показано в листинге выше. В этом примере если resolver не сможет разрешить имя host, то он допишет к нему

6

домен somewhere.ua и попробует разрешить имя host.somewhere.ua, затем будет осуществлена попытка разрешить имя host.ua и host.org.

После редактирования файла /etc/resolv.conf никаких специальных действий не требуется, изменения немедленно вступают в силу.

Диагностические утилиты в ОС FreeBSD UNIX

1. Утилита ping(8).

Утилита ping(8) предназначена для того, чтобы при помощи отправки ICMP пакетов убедиться в работоспособности узла. Не все узлы обязаны отвечать на запросы утилиты ping(8). Обычно утилита ping(8) посылает пакеты, которые называются ECHO_REQUEST и ожидает получить пакет ECHO_REPLY. Однако варианты ответов могут быть разными. Ниже показан вариант с ответом «Destination Port Unreachable».

$ ping -c1 192.168.25.24

PING 192.168.25.24 (192.168.25.24): 56 data bytes

92 bytes from 192.168.25.24: Destination Port Unreachable

Vr

HL

TOS

Len

ID

Flg

off

TTL

Pro

cks

Src

Dst

4

5

00

5400

f8d6

0

0000

40

01

fcfe

192.168.25.158

192.168.25.24

--- 192.168.25.24 ping statistics ---

1 packets transmitted, 0 packets received, 100% packet loss

Необходимо различать ответы «Destination Port Unreachable» и «Destination Host Unreachable». Последний генерируется маршрутизатором (или, в частном случае узлом отправителем), если он не знает куда послать пакет:

$ ping -c1

192.168.25.1

 

 

 

data bytes

 

PING 192.168.25.1 (192.168.25.1): 56

 

36

bytes from gateway (172.16.0.1): Destination Host Unreachable

Vr

HL TOS

Len

ID Flg

off TTL Pro

cks

Src

Dst

4

5

00

5400

9514

0

0000

40

01

5fd9

172.16.0.2

192.168.25.1

--- 192.168.25.1 ping statistics ---

1 packets transmitted, 0 packets received, 100% packet loss

2. Утилита traceroute(1).

Утилита traceroute(1) в некоторых случаях позволяет выяснить маршрут от одного узла к другому. Для этого она посылает пакеты на целевую машину последовательно увеличивая параметр TTL (time to live). В норме TTL должен уменьшаться на единицу на каждом маршрутизаторе, пока не станет равным нулю. Если он обнулится, пакет будет отброшен, а отославшей его стороне вернётся пакет ICMP TIME_EXCEEDED. В этом пакете будет присутствовать IP маршрутизатора, который его послал. По этой информации traceroute(1) сможет перечислить машины, через которые идут пакеты до целевой машины. Не все маршрутизаторы уменьшают TTL. Некоторые из них могут оказаться прозрачными для traceroute(1).

Для примера, определяется маршрут к несуществующей сети: $ traceroute -n 10.0.0.1

traceroute to 10.0.0.1 (10.0.0.1), 64 hops max, 40 byte packets

1

172.16.0.1

0.418

ms

0.781 ms

0.228

ms

2

172.16.0.1

1.703

ms

!H 0.585

ms !H

0.491 ms !H

Утилита traceroute(1) была выполнена на узле 172.16.0.2. Узел не знает маршрута к 10.0.0.1 и пересылает пакет на 172.16.0.1 – свой маршрутизатор по умолчанию, а тот вернул ответ «Destination Host Unreachable», о чём свидетельствует флаг !H. Эта строка появилась потому, что брандмауэр на маршрутизаторе 172.16.0.1 не выпускает пакеты предназначенные для приватных сетей на свой шлюз по умолчанию, возвращая ICMP пакет с сообщением об ошибке. Строка с номером 1 это результат работы первого пакета ICMP, в котором TTL был выставлен в 1. Этот пакет достиг машины 172.16.0.1, но дальнейшей маршрутизации не претерпел, так как у него истёк срок жизни, поэтому сообщение об ошибке сгенерировано не было. И только следующий пакет ICMP с TTL=2, породил сообщение об ошибке.

Примеры ответов утилиты traceroute(1). $ traceroute -n 192.168.2.1

traceroute to 192.168.5.1 (192.168.5.1), 64 hops max, 40 byte packet

1

172.16.0.1

0.418 ms

39

0.781 ms

0.228 ms

2

192.168.0.1

39

ms

ms

19

ms

3

192.168.0.1

39

ms

39

ms

19

ms

4

192.168.1.1

39

ms

40

ms

39

ms

5

192.168.2.1

39

ms

39

ms

39

ms

Строки 2 и 3 совпадают – это происходит потому, что на втором маршрутизаторе имеются ошибки в ядре – система 4.3BSD маршрутизирует пакет с нулевым TTL.

$ traceroute -n 192.168.9.1

traceroute to 192.168.9.1 (192.168.9.1), 64 hops max

7

1

172.16.0.1

0.418 ms

39

0.781 ms

ms

0.228 ms

2

192.168.0.1

39

ms

ms

19

 

3

192.168.0.1

39

ms

39

ms

19

ms

 

4

192.168.1.1

39

ms

40

ms

39

ms

 

5

192.168.2.1

39

ms

39

ms

39

ms

 

6

* * *

259 ms

499 ms

279

ms

7

192.168.4.1

8* * *

9* * *

10* * *

11* * *

12192.168.9.1 339 ms 279 ms 279 ms

Шлюзы 6, 8, 9, 10 и 11 либо не высылают нам ICMP с сообщением «time exceeded», либо у их сообщений слишком маленький TTL и оно нас не достигает. В точности нельзя сказать, что происходит на маршрутизаторе 12. Например, это может быть следствием ошибок в ядре 4.[23]BSD: BSD 4.x (x меньше либо равен 3) высылали сообщение об ошибке используя TTL оригинального пакета. Таким образом, ICMP «time exceeded» принципиально не мог до нас добраться.

Утилита traceroute(1) имеет ещё один полезный аргумент: -P [TCP|UDP|ICMP|...], с помощью которого можно задать используемый протокол. По умолчанию в системах BSD (и в Linux тоже) traceroute(1) высылает пакеты UDP направленные на абстрактный верхний порт. Такие пакеты могут резать брандмауэры, поэтому и предусмотрена возможность выбора протокола. Опция -I включает протокол ICMP. С её помощью traceroute(1) работает так же, как утилита tracert в Windows.

3. Утилиты telnet(1), nc(1).

Основное назначение программы telnet(1) заключается в том, что она предоставляет удалённый терминал, позволяя управлять машиной на расстоянии. К сожалению, программа telnet(1) не шифрует трафик и даже пароли передаёт в открытом виде. Использовать программу telnet(1) по назначению – дурной тон. Это крайне небезопасно! Вместо неё следует использовать программу ssh(1).

Однако программу telnet(1) можно использовать для того, чтобы провести диалог с удалённым сервером, проверить работу сервиса прослушивающего соответствующий порт. Например, при передаче почты, устанавливается связь с 25-м портом почтового сервера и далее идут команды SMTP протокола. Ниже приведён короткий пример такого диалога. Здесь символ | означает, что на этой строке приведено служебное сообщение программы telnet(1), > – строка, которая вводится с клавиатуры, т.е. её клиент отсылает серверу, < – ответ сервера.

$ telnet mxs.mail.ru 25 | Trying 194.67.23.20...

| Connected to mxs.mail.ru. | Escape character is '^]'.

<220 mail.ru ESMTP > HELO somewhere.org

<250 mx8.mail.ru ready to serve > QUIT

<221 mx8.mail.ru closing connection | Connection closed by foreign host.

Если по каким-то причинам не можно дождаться ответа сервера и надо разорвать соединение, необходимо нажать

клавиши Ctrl+] и появится командная строка telnet(1). В ней можно набрать команду quit и завершить сеанс: $ telnet mxs.mail.ru 25

Trying 194.67.23.20...

Connected to mxs.mail.ru. Escape character is '^]'. 220 mail.ru ESMTP

^]

telnet> quit Connection closed.

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

Чтобы преодолеть эти недостатки, вместо telnet(1) можно использовать программу nc(1) (netcat). В следующем примере, делается тоже, что и в предыдущем, но две команды SMTP (HELO example.org и QUIT) посылаются на стандартный ввод команде nc(1), а на STDOUT выводятся ответы почтового сервера (вместо команды echo, использована команда printf(1), для того, чтобы напечатать команды HELO и QUIT на двух разных строках):

$ printf 'HELO example.org\nQUIT' | nc mxs.mail.ru 25 220 mail.ru ESMTP

250 mx19.mail.ru ready to serve

Конечно программой nc(1) можно пользоваться и интерактивно, если не назначить ей STDIN, она, как и положено любой UNIX программе, будет брать STDIN с клавиатуры:

8

$ nc msx.mail.ru 25

<220 mail.ru ESMTP > HELO somehere.ru

<250 mx18.mail.ru ready to serve > QUIT

<221 mx18.mail.ru closing connection

4. Утилита arp(8).

Назначение протокола ARP заключается в связи между сетевым и канальным уровнем модели OSI, обеспечивая преобразование IP адресов в аппаратные (MAC) адреса.

Утилита arp(8) используется для того, чтобы управлять ARP кешем. Когда системе надо послать пакет на адрес IP, сперва необходимо узнать какому аппаратному адресу он соответствует, для того, чтобы сформировать Ethernet-кадр. Система посылает широковещательный ARP запрос «кто имеет данный IP?». Получив ответ, система помещает его в кеш и хранит его там около двух минут. При помощи утилиты arp(8) можно просмотреть содержимое этого кеша:

$ arp -an

?(10.18.51.1) at 00:02:b3:1d:70:4c on fxp1 permanent [ethernet]

?(10.18.51.222) at 00:50:04:af:06:19 on fxp1 [ethernet]

?(10.18.51.254) at (incomplete) on fxp1 [ethernet]

?(10.18.51.255) at ff:ff:ff:ff:ff:ff on fxp1 permanent [ethernet]

?(10.18.49.1) at 00:02:b3:15:85:ed on fxp0 permanent [ethernet]

?(10.18.49.10) at 00:04:27:fd:3c:d0 on fxp0 [ethernet]

Утилита arp(8) позволяет так же управлять кешем ARP: удалять из него записи при помощи аргумента -d, или наоборот, при помощи аргумента -s заводить новые записи (временные или постоянные). При помощи аргумента -f можно импортитовать таблицу ARP из внешнего файла.

5. Утилита ndp(8).

В протоколе IPv6 отменён протокол ARP. Вместо него используется своя процедура поиска соседей при помощи протокола NDP: Neighbor Discovery Protocol. Для управления им служит утилита ndp(8). Её синтаксис напоминает синтаксис команды arp(8).

6. Утилита netstat(1).

Утилита netstat(1) предназначена для диагностики работы TCP/IP стека. Она выводит разнообразную информацию о работе сетевых интерфейсов на сетевом и транспортном уровнях:

-таблицу маршрутизации системы;

-статистику о трафике в целом, попротокольно, поинтерфейсно;

-список работающих в данный момент сетевых сервисов и открытых сокетов.

6.1. Таблица маршрутизации. $ netstat -nr Routing tables

Internet:

Gateway

Flags

Refs

Use

Netif Expire

Destination

default

xxx.yyy.zzz.254

UGS

0

1056785

fxp0

 

127.0.0.1

127.0.0.1

UH

0

39839

lo0

 

172.16/30

link#2

UC

0

0

fxp1

1045

172.16.0.2

4c:00:10:54:dd:8e

UHLW

0

30428

fxp1

xxx.yyy.zzz.128/25

link#1

UC

0

0

fxp0

1189

xxx.yyy.zzz.254

00:50:8b:5c:98:4f

UHLW

1

1888

fxp0

Аргумент -r заставил утилиту netstat(1) напечатать таблицу маршрутизации, а -n заставил не заменять IPадреса узлов на их имена.

Втретьем столбце таблицы находятся флаги. Во всех строках стоит флаг U, это значит, что все маршруты в настоящий момент активны (Up). В строках посвящённых адресам 127.0.0.1, 172.16.0.2 и xxx.yyy.zzz.254 имеется флаг H, это значит, что данный адрес относится не к сети, а к узлу (Host). Такие маршруты имеют приоритет перед маршрутом к сети, таким образом, можно жёстко прописать маршрут к некоторой машине, даже если маршрут к сети в которой она находится – иной. Флаг G означает, что данная машина является шлюзом, поэтому при обращении к ней надо при инкапсулировании пакета в кадр заменить MAC-адрес машины которой предназначен пакет, на MAC-адрес шлюза (если MAC-адрес назначения почему-то известен). Дальнейшей маршрутизацией этого пакета будет заниматься шлюз.

Встолбце Use указывается количество пакетов, которые прошли по тому или иному маршруту.

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

9

packets 51 46 49 51
bytes colls 178 0 178 0 178 0 178 0
(Total) output bytes packets errs 4077 1 0 3676 1 0 3794 1 0 3779 1 0

6.2. Статистика.

 

 

 

 

 

 

 

 

 

$netstat -ni

 

Address

Ipkts Ierrs

 

Opkts Oerrs

 

Coll

Name

Mtu Network

0

0

fxp0

1500

<Link#1>

00:02:b3:1d:70:4c 51129385

 

1081628

 

0

fxp0

1500

xxx.yyy.zzz.1

xxx.yyy.zzz.180

459392

 

-

421556

 

-

-

fxp1

1500

<Link#2>

00:02:b3:15:85:ed

4116747

 

0

7617322

 

1

0

fxp1

1500

172.16/30

172.16.0.1

1604297

0

-

6705688

0

-

-

pflog 33208

<Link#3>

 

0

 

0

 

0

pfsyn

2020

<Link#4>

 

0

0

 

0

0

 

0

lo0

16384

<Link#5>

127.0.0.1

39988

0

 

39988

0

 

0

lo0

16384

your-net

39863

-

 

39863

-

 

-

Аргумент -n подавляет преобразование адресов в имена. Из этой таблицы можно определить сколько пакетов было передано через тот или иной сетевой интерфейс в ту или иную сторону. Чтобы измерить трафик в байтах можно добавить ещё два аргумента: -b чтобы выводить информацию в байтах и -d чтобы сообщать об отброшенных (droped)

пакетах: $ netstat -nibd.

Можно смотреть как меняется статистика во времени. Если указать утилите netstat(1) в аргументе -w период обновления в секундах.

$ netstat -w2 input errs

0

0

0

0

^C

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

6.3. Работающие сетевые сервисы и открытые сокеты.

Аналогичную информацию можно получить так же при помощи программы sockstat(1).

При запуске утилиты netstat(1) без каких либо аргументов, можно получить информацию об открытых

сокетах. Ключ -n заставляет утилиту netstat(1) не преобразовывать в имена номера сервисов и адреса:

$ netstat -n

 

 

 

 

Active Internet connections

Foreign Address

(state)

Proto Recv-Q Send-Q

Local Address

tcp4

0

52

194.87.141.180.22

62.117.108.7.1833

ESTABLISHED

tcp4

0

0

194.87.141.180.22

62.117.108.7.64544

ESTABLISHED

tcp4

0

0

172.16.0.1.53882

172.16.0.2.22

ESTABLISHED

tcp4

0

0

194.87.141.180.22

62.117.108.7.64344

ESTABLISHED

tcp4

0

0

194.87.141.180.22

62.117.108.7.64286

ESTABLISHED

tcp4

0

0

194.87.141.180.22

62.117.108.7.64242

ESTABLISHED

udp4

0

0

127.0.0.1.123

*.*

 

udp4

0

0

172.16.0.1.123

*.*

 

udp4

0

0

127.0.0.1.53

*.*

 

udp4

0

0

172.16.0.1.53

*.*

 

udp4

0

0

194.87.141.180.53

*.*

 

udp4

0

0

172.16.0.1.706

172.16.0.2.2049

 

udp4

0

0

172.16.0.1.743

172.16.0.2.2049

 

udp4

0

0

172.16.0.1.690

172.16.0.2.2049

 

udp4

0

0

172.16.0.1.633

172.16.0.2.2049

 

Active UNIX domain sockets

 

Inode

Conn

Refs

Nextref Addr

 

Address

Type

Recv-Q Send-Q

 

c10897a8

stream

0

0

0

0

c1089af0

0

0

0

c1088834

stream

0

 

 

0

c1089a64

0

/var/run/dovecot/login/default

0

 

0

c1089c94

0

0

 

c1089604

stream

0

0

0

c1089e38

stream

0

 

 

0

c10887a8

0

/var/run/dovecot/login/default

0

 

0

c1089460

0

0

 

c10891a4 stream

0

0

0

c1209000

stream

0

 

 

0

c108894c

0

/var/run/dovecot/login/default

 

0

c1867738

0

0

0

c10893d4

stream

0

 

/var/run/dovecot/auth-worker.53422

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]