У різних ОС існують свої набори утиліт. Порівняємо їх для двох систем, наприклад, Microsoft Windows NT і Sun Solaris. Якими б різними не були ці ОС, в кожній з них реалізована модель OSI. Природно, програмна і апаратна реалізація стека цієї моделі у них різниться, але взаємодія всіх рівнів здійснюється за встановленим стандартом.
Існує два типи записів в ARP-таблиці - статичний і динамічний. Статична запис вноситься вручну і існує до тих пір, поки вручну ж потрібно стерти, або комп'ютер (маршрутизатор) не перезавантажений.
Для виявлення різних неполадок в мережі існує кілька утиліт, які дозволяють визначити, на якому рівні моделі OSI стався збій, або вказані неправильні настройки мережевих протоколів. Одна з таких утиліт - ping.
Протокол ICMP знаходиться на стику двох рівнів - мережевого і транспортного. Основний принцип дії цього протоколу - формування ICMP ехо-запиту (echo-request) і луна-відповіді (echo-reply). Запит луни і відповідь на нього може використовуватися для перевірки досяжності хоста- одержувача і його здатності відповідати на запити. Також проходження луна-запиту і луна-відповіді перевіряє працездатність основної частини транспортної системи, маршрутизацію на машині джерела, працездатність і коректну маршрутизацію на роутерах між джерелом і одержувачем, а також працездатність і правильність маршрутизації одержувача.
Таким чином, якщо на посланий echo-request повертається коректний echo-reply від машини, якій був посланий запит, можна сказати, що транспортна система працює коректно. І якщо браузер не може відобразити web-сторінку, то проблема, як видно, не в перших трьох рівнях моделі OSI.
З прикладу видно, що за замовчуванням розмір посилається пакета - 32 байта, далі виводиться час затримки відповіді і TTL. Цей приклад демонструє успішне виконання команди ping. У випадках, коли запити echo request надсилаються, але echo reply не повертаються, виводиться повідомлення про закінчення часу очікування відповіді.
Утиліта traceroute також використовує протокол ICMP для визначення маршруту проходження пакету. При надсиланні traceroute встановлює значення TTL послідовно від 1 до 30. Кожен маршрутизатор, через який проходить пакет на шляху до призначеного хосту, збільшує значення TTL на одиницю. За допомогою TTL відбувається запобігання зациклення пакета в "петлях" маршрутизації, інакше "заблукали" пакети остаточно перевантажили би мережу. Однак, при виході маршрутизатора або лінії зв'язку з ладу потрібно кілька додаткових переходів для розуміння, що даний маршрут втрачений і його необхідно обійти. Щоб запобігти втраті датаграми, поле TTL встановлюється на максимальну величину.
Розглянемо приклад виконання утиліти traceroute.
traceroute to netserv1.chg.ru (193.233.46.3), 30 hops max, 38 byte packets
1 n3-core.mipt.ru (194.85.80.1) 1.508 ms 0.617 ms 0.798 ms
2 mipt-gw-eth0.mipt.ru (193.125.142.177) 2.362 ms 2.666 ms 1.449 ms
3 msu-mipt-atm0.mipt.ru (212.16.1.1) 5.536 ms 5.993 ms 10.431 ms
4 M9-LYNX.ATM6-0.11.M9-R2.msu.net (193.232.127.229) 12.994 ms 7.830 ms 6.816 ms
5 Moscow-BNS045-ATM4-0-3.free.net (147.45.20.37) 12.228 ms 7.041 ms 8.731 ms
6 ChgNet-gw.free.net (147.45.20.222) 77.103 ms 75.234 ms 92.334 ms
7 netserv1.chg.ru (193.233.46.3) 96.627 ms 94.714 ms 134.676 ms
У кожній з операційних систем мережева частина утиліти реалізована практично однаково, але реалізація на рівні додатків різниться.
В ОС Windows утиліта називається tracert. Використовується вона так само, як і в ОС Solaris (tracert netserv1.chg.ru). Принципової різниці між утилітами tracert і traceroute немає. Особливістю traceroute є наявність більшої кількості функцій (наприклад, можна вказати, починаючи з якого TTL виводити інформацію).
У разі будь-якої неполадки виводиться відповідне повідомлення. Наприклад, при недоступності мережі на маршрутизаторі видається повідомлення! N (net unreachable):
947.327 ms! N 996.548 ms! N 995.257 ms
Це означає, що 147.45.20.37 - маршрутизатор, починаючи з якого, наступний маршрут недоступний. Якщо недоступний сам хост, то повідомлення буде виглядати так:
5.536 ms! H 5.993 ms! H 10.431 ms! H.
Помилка! P означає недоступність протоколу (protocol unreachable).
У таблиці маршрутизації вказується мережу, маска мережі, маршрутизатор, через який доступна ця мережа, інтерфейс і метрика маршруту. З наведеної таблиці видно, що маршрут за замовчуванням доступний через маршрутизатор 192.168.1.1. Мережа 192.168.1.0 з маскою 255.255.255.0 є локальною мережею.
При додаванні маршруту можна використовувати наступну команду.
route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1
157.0.0.0 - дистанційна мережу, 255.0.0.0 - маска віддаленої мережі, 157.55.80.1 - маршрутизатор, через який доступна ця мережа. Приблизно такий же синтаксис використовується при видаленні маршруту: route DELETE 157.0.0.0.
TCP mycomp: 3687 www.ru:http ESTABLISHED
У проведеному прикладі перше значення - TCP - тип протоколу (може бути TCP або UDP), далі йде ім'я локальної машини і локальний порт, www.ru:http - ім'я віддаленого хоста і порту, до якого здійснюється звернення (оскільки використовувався порт за замовчуванням для протоколу HTTP, то відображається не його числове значення 80, а ім'я протоколу), ESTABLISHED - показує, що TCP-з'єднання встановлено.
В ОС Solaris для отримання інформації про вибір потрібного порту також застосовується утиліта netstat. Формат виведення практично однаковий.
В додаток розглядаються засоби Java для роботи з найбільш поширеними мережевими проколами.
Перейдемо до розгляду засобів Java для роботи з мережею.
Класи, що працюють з мережевими протоколами, розташовуються в пакеті java.net, і найпростішим з них є клас URL. З його допомогою можна сконструювати uniform resource locator (URL), який має такий вигляд:
public class Net
public static void main (String args [])
> Catch (UnknownHostException e)
> Catch (IOException e)
Після запуску сервера, а потім клієнта, можна побачити результат - отримане число, 10, після чого обидві програми закриються.
По-друге, можна скористатися методом setSoTimeout (int timeout) класу ServerSocket, щоб вказати час в мілісекундах, протягом якого потрібно очікувати підключення клієнта. Це дозволяє серверу не «зависати", якщо ніхто не намагається почати з ним працювати. Тайм-аут задається в мілісекундах, нульове значення означає нескінченне час очікування.
Важливо підкреслити, що після встановлення з'єднання з клієнтом сервер виходить з методу accept (), тобто перестає бути готовим приймати нові запити. Однак, як правило, бажано, щоб сервер міг працювати з декількома клієнтами одночасно. Для цього необхідно при підключенні чергового користувача створювати новий потік виконання, який буде обслуговувати його, а основний потік знову увійде в метод accept (). Наведемо приклад такого рішення:
public class NetServer
public static final int PORT = 2500;
private static final int TIME_SEND_SLEEP = 100;
private static final int COUNT_TO_SEND = 10;
private ServerSocket servSocket;
public static void main (String [] args)
NetServer server = new NetServer ();