Внутреннее устройство Linux
Шрифт:
Как ядро Linux различает эти два типа назначений? Чтобы выбрать для себя образ действий, оно использует конфигурацию назначений, которая называется таблицей маршрутизации. Чтобы отобразить таблицу маршрутизации, применяйте команду route -n. Вот что вы могли бы увидеть для простого хоста, такого как хост с адресом 10.23.2.4:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.23.2.1 0.0.0.0 UG 0 0 0 eth0
10.23.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
Две
Различие между назначениями заложено в комбинации значений столбцов Gateway и Flags. Для адреса 0.0.0.0/0 в столбце Flags указан флаг G, который означает, что для данной сети связь должна проходить через шлюз, указанный в столбце Gateway (в данном случае 10.23.2.1). Однако для сети 10.23.2.0/24 в столбце Flags нет символа G, это говорит о том, что данная сеть подключена напрямую каким-либо способом. Здесь 0.0.0.0 используется в качестве заместителя значения в столбце Gateway. Не обращайте пока внимания на остальные столбцы вывода.
Есть некоторая хитрость: допустим, хост собирается отправить что-либо по адресу 10.23.2.132, который соответствует обоим правилам таблицы маршрутизации, 0.0.0.0/0 и 10.23.2.0/24. Как ядро узнает о том, что необходимо применить второй адрес? Оно выбирает самый длинный совпадающий префикс назначения. Именно здесь нотация CIDR становится чрезвычайно удобной: адрес 10.23.2.0/24 годится, и длина его префикса равна 24 битам; адрес 0.0.0.0/0 тоже подходит, но его префикс — нулевой длины (то есть у него нет префикса), поэтому берет верх правило для адреса 10.23.2.0/24.
примечание
Параметр -n просит команду route отобразить IP-адреса вместо имен хостов и сетей. Следует помнить об этом важном параметре, поскольку вы сможете использовать его в других командах, относящихся к работе с сетью, таких как netstat.
Шлюз по умолчанию. Запись для адреса 0.0.0.0/0 в таблице маршрутизации имеет особое значение, поскольку она соответствует любому адресу в Интернете. Это маршрут по умолчанию, и адрес, который указан в столбце Gateway (в результате вызова команды route -n) для маршрута по умолчанию, является шлюзом по умолчанию. Когда остальные правила не подходят, маршрут по умолчанию всегда годится, а в шлюз по умолчанию отправляются сообщения, если нет другого выбора. Можно настроить хост без шлюза по умолчанию, но он будет неспособен подключиться к тем хостам, назначения которых отсутствуют в таблице маршрутизации.
примечание
В большинстве сетей с маской 255.255.255.0 маршрутизатор обычно расположен по адресу подсети 1 (например, 10.23.2.1 в сети 10.23.2.0/24). Поскольку это просто договоренность, возможны исключения.
9.5. Основные
Теперь пришло время рассмотреть некоторые основные утилиты, помогающие взаимодействовать с хостами. Эти инструменты используют два протокола, представляющих особый интерес: ICMP (Internet Control Message Protocol, протокол управляющих сообщений в Интернете), который может помочь в искоренении проблем с подключением и маршрутизацией, и систему DNS (Domain Name Service, служба доменных имен), которая сопоставляет имена с IP-адресами, чтобы вам не приходилось запоминать уйму чисел.
9.5.1. Команда ping
Команда ping (см. является одним из главнейших инструментов для сетевой отладки. Она отправляет пакеты эхо-запроса по протоколу ICMP какому-либо хосту-адресату и просит вернуть его отправителю. Если принимающий хост получает пакет и настроен на ответ, он отправляет эхо-ответ по протоколу ICMP.
Допустим, например, что вы запустили команду ping 10.23.2.1 и получили такой результат:
$ ping 10.23.2.1
PING 10.23.2.1 (10.23.2.1) 56(84) bytes of data.
64 bytes from 10.23.2.1: icmp_req=1 ttl=64 time=1.76 ms
64 bytes from 10.23.2.1: icmp_req=2 ttl=64 time=2.35 ms
64 bytes from 10.23.2.1: icmp_req=4 ttl=64 time=1.69 ms
64 bytes from 10.23.2.1: icmp_req=5 ttl=64 time=1.61 ms
Первая строка говорит о том, что вы отправляете пакеты из 56 байт (если учитывать заголовки, то из 84 байтов) по адресу 10.23.2.1 (по умолчанию один пакет в секунду); остальные строки приводят отклик от хоста с адресом 10.23.2.1. Самыми важными частями вывода являются порядковый номер (icmp_req) и время прохождения в прямом и обратном направлениях (time). Количество возвращенных байтов равно размеру отправленного пакета плюс 8. Содержимое пакетов не имеет значения.
Разрывы в порядковых номерах (такие как между 2 и 4) обычно свидетельствуют о каких-либо неполадках с подключением. Возможно также, что пакеты будут приходить в неправильном порядке. Если это так, то это тоже говорит о проблеме, так как команда ping отправляет только один пакет в секунду. Если на доставку ответа требуется больше секунды (1000 мс), то подключение является крайне медленным.
Время прохождения — это интервал времени с момента отправки пакета-запроса до момента прибытия пакета-ответа. Если достичь назначения не представляется возможным, конечный маршрутизатор, который видит данный пакет, возвращает команде ping ICMP-пакет host unreachable («хост недоступен»).
В проводной локальной сети следует ожидать полное отсутствие потери пакетов и очень малое значение времени прохождения. Приведенный выше пример взят из беспроводной сети. Следует также ожидать отсутствие потери пакетов и устойчивую величину времени прохождения при передаче между вашей сетью и поставщиком интернет-услуг.
примечание
Из соображений безопасности не все хосты в Интернете отвечают на пакеты эхо-запросов, поэтому вы можете подключиться к какому-либо сайту на хосте, но не получить ответа на команду ping.