<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Иногда, когда сеть работает не очень хорошо (или вовсе не работает) возникает желание понять, в чем же дело. В этом могут помочь программы ping и traceroute. Хотя у них есть много ключей, обычно их указывать не требуются (к тому же они отличаются в разных версиях Unix).
Проверка наличия связи -- ping
Чтобы узнать, "жив" ли некий компьютер, используется команда ping. Ей указывается имя проверяемого:
sky:~% ping rdist PING rdist.inp.nsk.su (193.124.167.12): 56 data bytes 64 bytes from 193.124.167.12: icmp_seq=0 ttl=255 time=1.784 ms 64 bytes from 193.124.167.12: icmp_seq=1 ttl=255 time=8.971 ms 64 bytes from 193.124.167.12: icmp_seq=2 ttl=255 time=3.594 ms 64 bytes from 193.124.167.12: icmp_seq=3 ttl=255 time=3.613 ms 64 bytes from 193.124.167.12: icmp_seq=4 ttl=255 time=2.887 ms 64 bytes from 193.124.167.12: icmp_seq=5 ttl=255 time=3.543 ms ----rdist.inp.nsk.su PING Statistics---- 6 packets transmitted, 6 packets received, 0.0% packet loss round-trip min/avg/max = 1.784/4.065/8.971 ms sky:~% _ |
Ping посылает по указанному адресу пробные пакеты, на которые проверяемый должен прислать ответ. При получении ответа ping печатает информацию о нем на экране; самое интересное там -- время "хождения" пакетов туда-и-обратно. В локальных сетях оно порядка нескольких миллисекунд (хотя при сильной загрузке может зашкаливать за сотню), при связи с дальними машинами может достигать нескольких секунд.
Ping посылает пакеты "до бесконечности", чтобы прервать его, надо нажать Ctrl+C, при этом он печатает краткую статистику по временам и степень потери пакетов.
При "пинговании" компьютера, с которым нет связи (например, выключен) ping ничего не печатает (поскольку не получает ответов). Если после запуска в течение некоторого времени (в локальной сети -- несколько секунд, иначе -- секунд десять) ничего не печатается, значит связи нет.
Ping может также использоваться для проверки настроенности сетевой поддержки собственного компьютера -- если известно, что сеть работает, а ping на любой соседний адрес ничего не показывает -- значит что-то не в порядке на своем компьютере.
|
В Unix'ах клона SystemV (Solaris, Unixware) ping действует чуть иначе -- он проверяет, откликается ли запрошенный компьютер, и если да, то выдает сообщение типа "Sky.inp.nsk.su is alive". Чтобы получить тот же эффект, что в Linux, надо указать ключ "-s". |
По какому маршруту идет связь -- traceroute
Связь между компьютерами в разных подчастях Internet (в разных локальных сетях) осуществляется не напрямую, а через промежуточные узлы (они называются шлюзами (gateways)). Ping показывает только наличие или отсутствие связи, а для того, чтобы узнать, по какому маршруту идет связь, служит программа traceroute (trace route -- дословно "проследить маршрут").
|
При стандартной установке Linux программу traceroute надо запускать по полному пути -- /usr/sbin/traceroute. |
Ей, как и ping'у, указывается компьютер, связь с которым хочется проверить. Traceroute показывает последовательность шлюзов, через которые идет связь, и время, затрачиваемое в пути до каждого из них. Поскольку traceroute показывает только те из них, до которых данные доходят, то при отсутствии связи он позволяет увидеть, в каком месте "порвано".
Пример: traceroute из ИЯФ в НГУ:
sky:~% traceroute www.nsu.ru traceroute to src.nsu.ru (193.124.215.67), 30 hops max, 40 byte packets 1 nsc-gw (193.124.167.4) 4 ms 3 ms 5 ms 2 Novosibirsk-NSC-INP.nsc.ru (194.226.160.126) 6 ms 7 ms 6 ms 3 Novosibirsk-NSC-A.nsc.ru (194.226.160.123) 7 ms 8 ms 7 ms 4 NSU-Akademgorodok-2M.nsu.ru (193.124.208.9) 10 ms 9 ms 9 ms 5 src.nsu.ru (193.124.215.67) 11 ms * 18 ms sky:~% _ |
Последним в списке показывается компьютер, связь с которым проверялась.
Traceroute проверяет время до каждого шлюза три раза -- во-первых, для надежности, во-вторых -- для некоторого усреднения.
Если запускать traceroute в локальной сети, где связь идет напрямую, первым же будет проверяемый компьютер:
sky:~% traceroute rdist traceroute to rdist.inp.nsk.su (193.124.167.12), 30 hops max, 40 byte packets 1 rdist (193.124.167.12) 3 ms 2 ms 2 ms sky:~% _ |
При отсутствии связи вместо имен шлюзов и времен печатаются "*". Если из трех времен показывается хоть одно, значит связь есть; если же просто "* * *" -- то нет. Обычно это и есть место обрыва (хотя бывает и так, что где-то посередине маршрута выскакивают три "*", а дальше все нормально). Иногда на некоем этапе выдаются символы "!H" или "!N", давая понять, что связи нет, и после этого traceroute завершается.
При попытке сделать traceroute на выключенный компьютер выдаются только "*".
|
Хотя ping и traceroute и являются довольно удобными инструментами, они не обеспечивают диагностику со 100%-надежностью -- в частности потому, что возможность диагностики может быть явно закрыта администратором проверяемой сети. |
|
И ping, и traceroute надо использовать с осторожностью (в частности, не применять слишком большой размер пробных пакетов и не оставлять ping на многие часы), поскольку в некоторых случаях они способны "поставить сеть на уши". В таких случаях виновный обычно быстро обнаруживается и для него это может иметь плохие последствия. |
|
В Win95/NT тоже есть программы ping и traceroute, но последняя называется там "tracert". |
Набрав "who", можно получить список всех присутствующих на данный момент в системе пользователей:
bobby:~% who ivanov tty1 Mar 11 11:39 ivanov ttyp0 Mar 11 11:40 (:0.0) ivanov ttyp1 Mar 11 11:40 (:0.0) ivanov ttyp2 Mar 11 11:46 (:0.0) ivanov ttyp3 Mar 11 11:52 (:0.0) ivanov ttyp4 Mar 11 12:56 (:0.0) ivanov ttyp5 Mar 11 13:26 (:0.0) ivanov ttyp6 Mar 11 13:32 (:0.0) ivanov ttyp7 Mar 11 14:58 (:0.0) petrov ttyp8 Mar 11 17:28 (localhost) petrov ttyp9 Mar 11 17:27 (Sky.inp.nsk.su) bobby:~% _ |
Who показывает имя пользователя, его терминальное устройство, время входа и откуда был произведен вход. Если пользователь есть "в нескольких экземплярах", то показываются они все. К примеру, каждое окно xterm -- это отдельная сессия; для них в качестве точки входа указывается "дисплей" -- в данном примере ":0.0" (подробнее об этом -- в следующей лекции).
Команда "w" несколько более информативна: она показывает еще и "время бездействия" (idle time) и что пользователь делает:
bobby:~% w 10:54pm up 11:15, 11 users, load average: 0.08, 0.04, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ivanov tty1 11:39am 11:15m 45.60s 0.03s startx ivanov ttyp0 :0.0 11:40am 1:09m 5.43s 0.17s zsh ivanov ttyp1 :0.0 11:40am 11:14m 1:19m 0.34s sh /export/bobb ivanov ttyp2 :0.0 11:46am 7:38m 1:57 0.06s zsh /export/bob ivanov ttyp3 :0.0 11:52am 7:04m 0.31s 0.04s rlogin sky ivanov ttyp4 :0.0 12:56pm 21:16 0.28s 0.28s zsh ivanov ttyp5 :0.0 1:26pm 0.00s 0.28s 0.10s w ivanov ttyp6 :0.0 1:32pm 5:27m 0.19s 0.04s rlogin sch130.n ivanov ttyp7 :0.0 2:58pm 5:51m 0.18s 0.18s zsh petrov ttyp8 localhost 5:28pm 3:07 0.61s 0.02s sh ./r petrov ttyp9 Sky 5:27pm 3:07 4.04s 0.02s sh ./11 bobby:~% _ |
В системах с многими пользователями who и w выдают довольно большой список; обычно имеет смысл "отфильтровать" его командой grep.
Для получения информации о конкретном пользователе служит команда "finger". Будучи запущена без параметров, она выдает список имеющихся пользователей аналогично who и w. Если же указать login-имя пользователя, то выдаются данные только о нем, но зато более подробные:
bobby:~% finger petrov Login: petrov Name: Ivan S. Petrov Directory: /export/bobby/petrov Shell: /bin/zsh On since Thu Mar 11 17:28 (NOVT) on ttyp8 from localhost 8 minutes 39 seconds idle On since Thu Mar 11 17:27 (NOVT) on ttyp9 from Sky 8 minutes 39 seconds idle No mail. No Plan. bobby:~% _ |
Finger умеет давать информацию не только о локальных пользователях, но и с других компьютеров. Для этого надо указать или "пользователь@компьютер", или "@computer".
sky:~% finger bolkhov@class [class.inp.nsk.su] Login: bolkhov Name: Directory: /home/teachers/bolkhov Shell: /bin/bash Last login Thu Mar 11 01:28 (GMT+6) on ttyp2 from Sky Mail last read Fri Feb 12 17:33 1999 (GMT+6) No Plan. sky:~% _ |
Во втором варианте (без имени) аналогично просто "finger" выдается список присутствующих пользователей на указанном компьютере. Этот способ иногда не срабатывает -- из соображений безопасности он может быть запрещен и вместо списка будет фраза "Please supply a username". Иногда даже при указании имени никакой информации не появляется -- это значит, что (из тех же соображений безопасности) администратор системы закрыл доступ снаружи.
Кроме того, при попытке сделать finger на компьютер, "не понимающий его" (например, под Windows) будет выдано сообщение:
finger: connect: Connection refused
|
Системами клона SystemV вместо полной информации даже при указании имени выдается только одна строка (плюс строка заголовков полей). Для получения полной информации надо указать ключ "-l": |
Class:~% finger bolkhov@inpbox [inpbox.inp.nsk.su] Hello bolkhov@Class.inp.nsk.su Login Name TTY Idle When Where bolkhov Dmitry Yu. Bolkhovit /dev/ptsSky <Feb 17 17:29> Sky.inp.nsk.su Class:~% Class:~% finger -l bolkhov@inpbox [inpbox.inp.nsk.su] Hello bolkhov@Class.inp.nsk.su Login name: bolkhov In real life: Dmitry Yu. Bolkhovityanov Directory: /export/home/people/bolkhov Shell: /bin/shMenu Last login Wed Feb 17 17:29 on /dev/ptsSky.inp.nsk.su from Sky.inp.nsk.su No unread mail Plan: (1995 Mar21 12:41) User set new forward bolkhov@4nko.inp.nsk.su (1995 Nov 3 10:33) User set new forward bolkhov@csd.inp.nsk.su (1995 Nov 3 10:46) User set new forward bolkhov@4nko.inp.nsk.su (1996 Apr17 17:44) User set new forward bolkhov@csd.inp.nsk.su Class:~% _ |
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел