В первой части этой статьи, я рассказал о структурном подходе при устранении сетевых неполадок, связанных с TCP/IP, в сетях Windows. Основой этого структурного подхода являлись три вещи:
Я отобразил эти три пункта в виде обычного списка, а не в виде нумерованного списка, т.к. устранение неполадок с сетью обычно не так просто, как 1-2-3. Другими словами, гораздо чаще это больше интуиция, чем методология.
Если вы хотите ознакомиться с остальными частями статьи, то, пожалуйста, пройдите по ссылкам:
В основе устранения сетевых неисправностей, связанных с TCP/IP лежит маршрутная таблица, участвующая в передачи данных на каждый компьютер в сети TCP/IP. Маршрутные таблицы служат следующим трем целям:
Понимание принципа работы маршрутных таблиц очень важно, если вы хотите иметь возможность эффективно устранять неисправности, связанные с маршрутизацией в сетях TCP/IP network. Давайте посмотрим, как работают маршрутные таблицы, как они выглядят в различных сценариях, и какие этапы по отладке необходимо выполнить в различных сценариях. Мы начнем изучение маршрутных таблиц с сервера single-homed server (сервер с одним сетевым интерфейсом), которому назначен один IP адрес. Я выбрал этот пример, т.к. он наиболее прост для понимания, а в будущих статьях мы увидим более сложные сценарии, включая сервера с несколькими IP адресами (например web сервера) и сервера с несколькими сетевыми интерфейсами (например, сервера, которые подключены как к LAN, так и отдельной сети, используемой для выполнения работ по резервному копированию).
Следующая маршрутная таблица предназначена для сервера, у которого один IP адрес 172.16.11.30 в сети 172.16.11.0/24:
C:\>route print
IPv4 Route Table
===========================================================================
Interface List
0x1 ……………………… MS TCP Loopback interface
0x10003 …00 03 ff 25 88 8c …… Intel 21140-Based PCI Fast Ethernet Adapter
(Generic)
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.11.1 172.16.11.30 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.11.0 255.255.255.0 172.16.11.30 172.16.11.30 20
172.16.11.30 255.255.255.255 127.0.0.1 127.0.0.1 20
172.16.255.255 255.255.255.255 172.16.11.30 172.16.11.30 20
224.0.0.0 240.0.0.0 172.16.11.30 172.16.11.30 20
255.255.255.255 255.255.255.255 172.16.11.30 172.16.11.30 1
Default Gateway: 172.16.11.1
===========================================================================
Persistent Routes:
None
Для того, чтобы увидеть маршрутную таблицу, вы должны открыть командную строку и напечатать в ней route print. Давайте разобьем эту таблицу на части, чтобы лучше понять, как она работает.
Каждая запись в маршрутной таблице разбивается на пять полей:
Для нашего первого примера предположим, что наш сервер (172.16.11.30) должен послать пакет на другой компьютер с IP адресом 172.16.11.80, который находится в той же самой подсети. Поэтому этот пакет будет иметь адрес источника (source address) 172.16.11.30 и адрес приемника (destination address) 172.16.11.80. Ниже приведено описание, как Windows использует маршрутную таблицу для определения используемого маршрута:
Route (маршрут) | Netmask (маска сети) | 172.16.11.80 AND Netmask |
0.0.0.0 | 0.0.0.0 | 0.0.0.0 |
127.0.0.0 | 255.0.0.0 | 172.0.0.0 |
172.16.11.0 | 255.255.255.0 | 172.16.11.0 |
172.16.11.30 | 255.255.255.255 | 172.16.11.80 |
172.16.255.255 | 255.255.255.255 | 172.16.11.80 |
224.0.0.0 | 224.0.0.0 | 160.0.0.0 |
255.255.255.255 | 255.255.255.255 | 172.16.11.80 |
Network Destination Netmask Gateway Interface Metric
172.16.11.0 255.255.255.0 172.16.11.30 172.16.11.30 20
Далее Windows использует следующий алгоритм, чтобы определить, что делать дальше:
A. Если поле Gateway (шлюз) в маршруте соответствует адресу одного из сетевых интерфейсов (network interface) на сервере (или если шлюз на задан), то Windows посылает пакет напрямую в место назначения, используя интерфейс, указанный в маршруте.
B. Если поле Gateway (шлюз) в маршруте не соответствует адресу ни одного из сетевых интерфейсов на сервере, то Windows посылает пакет по адресу, который указан в поле Gateway в маршруте.
Понятно, что в нашем случае будет использоваться вариант A, т.к. поле Gateway (шлюз) в маршруте (172.16.11.30) – это адрес, назначенный единственной сетевой карте сервера. Поэтому Windows определяет, что адрес места назначения принадлежит локальной подсети, а это значит, что Windows может послать пакет напрямую, не пересылая его никаким маршрутизаторам. Поэтому в этом случае, Windows просто посылает пакет на адрес 172.16.11.80 с помощью сетевого интерфейса сервера 172.16.11.30 network interface, а получающий компьютер получает его.
Теперь давайте проведем тот же самый эксперимент, только в этот раз предположим, что сервер пытается послать пакет на компьютер, который находится в другой подсети, например, компьютер имеет адрес 172.16.10.200. Другими словами, у пакета адрес источника (source address) 172.16.11.30, а адрес приемника (destination address) 172.16.10.200. Ниже представлено, как Windows использует маршрутную таблицу для определения маршрута для пакета:
Route (маршрут) | Netmask (маска сети) | 172.16.11.80 AND Netmask |
0.0.0.0 | 0.0.0.0 | 0.0.0.0 |
127.0.0.0 | 255.0.0.0 | 172.0.0.0 |
172.16.11.0 | 255.255.255.0 | 172.16.10.0 |
172.16.11.30 | 255.255.255.255 | 172.16.10.200 |
172.16.255.255 | 255.255.255.255 | 172.16.10.200 |
224.0.0.0 | 224.0.0.0 | 160.0.0.0 |
255.255.255.255 | 255.255.255.255 | 172.16.10.200 |
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.11.1 172.16.11.30 20
Что же может случиться в описанном выше процессе? Во-первых, есть вероятность того, что Windows не сможет выбрать маршрут, у которого поле Network Destination (место назначения) соответствует результату побитового сравнения AND поля Netmask (маска сети) маршрута и места назначения в пакте. Если такое произойдет, то у вас возникнет ошибка маршрутизации, результатом которой, вероятно, будет ошибка в сетевом приложении, запущенном на вашем сервере. Это происходит обычно, когда Windows использует TCP для уведомления верхнего уровня сетевого стека, что пакет не может быть послан.
В такой ситуации, у вас, вероятно, поврежденная маршрутная таблица (corrupt routing table) или несуществующий маршрут, который находится в вашей маршрутной таблице. Постоянные маршруты – это маршруты, которые вы добавляете в таблицу с помощью команды route —p add, и который остается после перезагрузки, т.к. эго параметры хранятся в реестре. Если вы добавляете неправильный маршрут, то могут появляться весьма странные ошибки, в результате которых трафик может загадочным образом исчезать.
С другой стороны, если пункт назначения находится в удаленной сети, а Windows передает пакет маршрутизатору (адрес шлюза по умолчанию), а этот маршрутизатор не может выбрать маршрут, то в этом случае маршрутизатор вернет ошибку ICMP «Destination Unreachable – Host Unreachable» (компьютер не найден) компьютеру, который послал пакет. В этом случае, TCP уведомит верхние слои (upper layers) и возникнет сообщение об ошибке.
В любой ситуации лучшим способом для устранения ошибки будет проверка маршрутных таблиц на передающем компьютере, а также на промежуточных маршрутизаторах, вдоль всего пути следования пакета на место назначения. Поврежденные маршрутные таблицы можно восстановить (по крайней мере на компьютерах с Windows) путем перезапуска стека TCP/IP с помощью команды netsh int ip reset. Обратите внимание, что эта операция перезапуска не удаляет постоянные маршруты, которые вы добавили в маршрутную таблицу.
Теперь, когда вы немного знаете о маршрутных таблицах, о том, как они работают, и как устранять возникающие в них неисправности, мы можем перейти к следующей статье, в которой мы рассмотрим более сложные примеры работы серверов с несколькими адресами и несколькими сетевыми картами.
www.windowsnetworking.com
Tags: nat