
Итак, нормальная установка соединения нами рассмотрена, перейдем к рассмотрению
ситуаций, когда TCP соединение невозможно установить. Для начала рассмотрим ситуацию, когда
узел, с которым необходимо установить соединение, недоступен в сети, следовательно, отправить
сегмент с флагом RST некому. Если несуществующий сервер расположен в одной сети с клиентом,
то мы, разумеется, не увидим в линии связи собственно TCP сегментов – клиент будет пытаться
разрешить МАС адрес несуществующего узла, и мы увидим только лишь работу протокола ARP.
Легко видеть, что станция отправляет три ARP запроса, после первой попытки проходит около 3
секунд до момента отправки второго ARP запроса, после этого выдерживается таймаут в 6 секунд и
отправляется третий ARP запрос, после чего клиент рапортует о невозможности установить
соединение:
C:\>sock 192.168.0.254 999
connect() error: Connection timed out
Однако с помощью анализатора протоколов нельзя понять, сколько секунд отправитель
ожидал ответа на третий ARP запрос. Действительно, когда отправитель перестает ждать ответ на
первый ARP запрос, он посылает второй ARP запрос – с помощью анализатора легко проследить
временной интервал между этими событиями, после окончания ожидания ответа на третий ARP
запрос новые пакеты не посылается, вместо этого клиентская программа сообщает о невозможности
установить соединение. Однако, измерив с помощью секундомера время от момента запуска
клиента до момента выдачи клиентом сообщения о невозможности установить соединение и вычтя
из этого времени 3 + 6 секунд (первый и второй интервалы ожидания ARP ответов) можно сделать
вывод о том, сколько времени ожидается третий ARP ответ. В данном случае измеренное время
составляет 21 секунду, следовательно, после первого ARP запроса стек ждет 3 секунды, после
второго – 6 секунд, а после третьего – 12 секунд.