Проблема с отправкой файлов ("Черные дыры" TCP/IP)

Обсуждение работы программы Агент передачи файлов TCPFOSS


Ответить
mmm
Разработчики Tcpfoss
Сообщения: 51
Зарегистрирован: 29 дек 2008, 14:27

Проблема с отправкой файлов ("Черные дыры" TCP/IP)

Сообщение mmm » 27 май 2010, 12:03

Из за неверных настроек MTU маршрутизаторов в сети могут возникать проблемы с отправкой файлов:

- файлы совсем не передаются;

- передается небольшой кусок файла, потом передача останавливается, а через минуту обмен прерывается;

- Низкая скорость передачи файлов.

При этом прием файлов может быть нормальным.

Проблема возникает когда MTU передающего компьютера, больше, чем MTU маршрутизатора, или принимающего компьютера. Если ICMP протокол в сети не заблокирован, то а этом случае пакеты фрагментируются, что может существенно снизить скорость обмена. При наличии в сети маршрутизатора с заблокированным ICMP ( "black hole"), передача файлов вообще может прекратиться.

При наличии "black hole" команда:
ping имя_компьютера или IP-адрес -f -l 1472
отобразит сообщение, "Превышено время ожидания".

Более подробно о MTU написано на странице http://ru.wikipedia.org/wiki/MTU

Как обнаруживать и исправлять проблему с MTU написано на странице http://support.microsoft.com/kb/314825:

В этой статье термин «черными дырами» определяет и описывает способ обнаружения маршрутизаторов «черная дыра предлагает три способа предотвращения потери данных, которая может возникнуть из-за маршрутизатором черная дыра.
Перейти к началу страницы | Отправить отзыв
Дополнительная информация
В сетях на основе TCP/IP (WAN), связь через некоторые маршруты может завершиться сбоем, если сегмент промежуточной сети имеет максимальный размер пакета меньше, чем максимальный размер пакета взаимодействующих узлов, и, если, маршрутизатор не посылает соответствующий ответ протокола управляющих сообщений интернета (ICMP) на это условие или, если, брандмауэр на пути обрезает такой ответ. Подобные роутеры иногда называют маршрутизатор «чёрная дыра».

Вы можете обнаружить маршрутизатор "чёрная дыра" при помощи утилиты Ping, которая является стандартной утилитой и устанавливается вместе с протоколом Microsoft Windows TCP/IP. Вы можете использовать один из трёх методов для решения этой проблемы или работы в обход маршрутизаторов "чёрная дыра".

Когда сетевой маршрутизатор получает пакет, размер которого превышает размер максимальной единицы передачи (MTU) следующего сегмента сети и этот пакет помечен флагом "не фрагментировать", маршрутизатор должен отправить сообщение ICMP "пункт назначения недоступен" обратно на узел-отправитель.

Если маршрутизатор не отправляет это сообщение, пакет может быть отклонен, вызывая различные ошибки, которые варьируются, в зависимости от программы, которая обменивается данными через неудачный маршрут. (Эти ошибки не возникают, если программа подключается к компьютеру локальной сети). Такая ситуация может показаться эпизодической, но, при ближайшем рассмотрении, видно, что ситуация может быть воспроизведена, например, при наличии клиента, считывающего большой файл, который отправляется с удалённого хоста.
Ошибка на стороне клиента
Клиенту не удалось установить подключение к удаленному компьютеру. Ниже перечислены наиболее вероятные причины этой ошибки:
Удаленные подключения не разрешены на удаленном компьютере.
Превышено максимальное число подключений к удаленному компьютеру.
Произошла сетевая ошибка при установке подключения.
Ошибка на стороне сервера: событие с кодом 1004
Источник: TermService
Описание: "сервер терминалов не удалось выдать клиентскую лицензию. Невозможно выдать лицензию в связи с изменением (несоответствием) клиентской лицензии, недостаточностью памяти или внутренней ошибкой. Дополнительные сведения об этой проблеме может быть передана на клиентский компьютер."
Обнаружение маршрутизатора черная дыра
Вы можете использовать утилиту Ping, задав параметры -f и -l, при вводе команды ping.
Параметр -f предписывает утилите Ping отправлять пакеты, с установленным флагом "не фрагментировать".
Параметр -l задаёт буфер, или полезную нагрузку, т.е. размер пакета. Этот размер задается, вводом числа после параметра -l .
Наибольший размер буфера, который может быть отправлен нефрагментированным, равен наименьшему значению MTU, которое существует на маршруте, минус размер заголовков IP и ICMP (другими словами, минимальное значение MTU минус 28). Например, Ethernet имеет значение MTU 1500 байт, поэтому, при лучших условиях, утилита Ping сможет отправить нефрагментированный пакет размером 1472 байт (1500 минус 28). Синтаксис подобной команды ping приведен ниже:
ping имя_компьютера или IP-адрес -f -l 1472
Для всех локальных IP-адресов ожидаемые результаты следующие:
Если значение MTU для каждого сегмента маршрутизируемого подключения равно, по крайней мере, 1500 - пакет успешно возвращен.
Если существуют промежуточные сегменты, которые имеют меньшее значение MTU и маршрутизаторы возвращают соответствующий ICMP пакет "назначение недоступно", утилита Ping выводит сообщение «требуется фрагментация пакета, но установлен запрещающий флаг»
Если существуют промежуточные сегменты, которые имеют меньшее значение MTU, и маршрутизаторы не возвращают соответствующий ICMP пакет "назначение недоступно", утилита Ping отобразит сообщение, "Превышено время ожидания".
Увеличивая параметр -l в последующих командах ping, вы можете определить размер наибольшего нефрагментированного пакета, который может быть отправлен по указанному маршруту. Наименьшее значение MTU (обычно используемое) - это 576 байт, поэтому вы можете безопасно начинать с буфера ICMP в 548 байт и, затем, повышать его от этого значения. Например команда Ping имя_компьютера или IP-адрес -f-l 972 возвращает пакеты, пакеты Ping имя_компьютера или IP-адрес -f-l 973 не возвращает наибольшее значение MTU на данном маршруте равно 1000 (972 плюс 28). Размер MTU по умолчанию для различных сетевых топологий описан в следующей статье базы знаний Майкрософт:
314496 Размер MTU по умолчанию для различных сетевых топологий
Решение проблемы или работа в обход маршрутизатора "чёрная дыра"
Важно Этот раздел, метод или задача содержит действия, о том, как внести изменения в реестр. Однако при неправильном изменении реестра могут возникнуть серьезные проблемы. Поэтому точно выполняйте следующие действия. Для дополнительной защиты создайте резервную копию реестра перед внесением изменений. Затем при возникновении неполадок можно восстановить реестр. Для дополнительных сведений о способах создания резервной копии и восстановлении реестра щелкните следующий номер статьи базы знаний Майкрософт:
322756 Как провести резервное копирование и восстановление реестра Windows

Следующие три метода способны решить проблему или обойти маршрутизатор "чёрная дыра".
Способ 1
Включение PMTU обнаружения "чёрной дыры" на узлах Windows, которые будут устанавливать связь через соединение WAN. Выполните следующие действия.
Запустите редактор реестра (Regedit.exe).
Найдите следующий раздел реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip\parameters
В меню Правка выберите пункт Добавить значение и затем добавьте следующий параметр реестра:
Название: EnablePMTUBHDetect
Тип данных: REG_DWORD
Значение: 1
Закройте редактор реестра и перезагрузите компьютер.
Способ 2
Настройка промежуточных маршрутизаторов для отправки ICMP сообщений тип 3 код 4 ("назначение недоступно, отсылка бита не фрагментировать (DF) и требуется фрагментация"). Для этого может потребоваться специальное программное обеспечение маршрутизатора или обновление прошивки, реконфигурация маршрутизатора или его замена.
Способ 3
Наибольшее значение MTU на хост-интерфейсе должно быть таким, которое может обрабатывать маршрутизатор "чёрная дыра", чтобы гарантировать передачу по линии максимально возможного размера пакета. Однако, обратите внимание на то, что локальный трафик использует пакеты меньшего размера, чем это необходимо, как и трафик, использующий маршрутизируемые беспроблемные соединения.

Этот способ предполагает, что вы определили MTU и состояние всех возможных связей, которые может использовать хост. После определения наибольшего поддерживаемого размера MTU установите его значение вручную. Выполните следующие действия.
Нажмите кнопку Пуск и выберите пункт Панель управления.
Дважды щелкните значок Сеть и подключения к Интернету, а затем откройте папку Сетевые подключения.
Если в папке присутствует несколько подключений, дважды щелкните каждое подключение и перейдите на вкладку Поддержка в окне Состояние. Соединение, которое показывает запись Шлюз по умолчанию, вероятнее всего, является сетевым подключением, используемым для подключения к Интернету. Запомните имя подключения (например, "Подключение по локальной сети 2").
Запустите редактор реестра (Regedit.exe).
Под деревом HKEY_LOCAL_MACHINE перейдите в следующий раздел:
{4D36E972-E325-11CE-BFC1-08002BE10318} SYSTEM\CurrentControlSet\Control\Network\ \
В данном разделе существуют один или несколько разделов с цифровыми идентификаторами. Каждый из этих разделов содержит подраздел Connection. Рассмотрим каждый из разделов, которые выглядят следующим образом:
ID_for_Adapter\Connection
Значение Name в подразделе Connection содержит имя сетевого подключения, которое используется в папке «Сетевые подключения». Обнаружив соответствующее имя, найденное на шаге 3, запомните имя сетевого подключения под ID_for_Adapter.
Вернитесь в HKEY_LOCAL_MACHINE и найдите следующий раздел
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID_for_Adapter
где ID_for_Adapter — число, записанное на шаге 6. Если выбрать данный раздел, то в правой части окна появится несколько параметров, включая DefaultGateway и EnableDHCP.
Щелкните правой кнопкой мыши в правой части экрана, нажмите кнопку Создать и затем щелкните Значение DWORD. Имя значения MTU.
Дважды щёлкните на значении, так, что бы его можно было редактировать, измените Базовое на Десятичное, а, затем, введите наибольший приемлемый размер MTU, которым является размер, определённый вами с помощью Ping тестов.
Закройте редактор реестра.
Обратите внимание, что, если вы по-прежнему испытываете проблемы с некоторыми серверами, может потребоваться установить значение MTU меньшее, чем показали Ping тесты, из-за других маршрутизаторов на этом конкретном пути. Постепенно Понижайте значение MTU на 10 до успешного доступа к этим узлам.

Для получения дополнительной информации по ручной установке параметров MTU, просмотрите следующую статью базы знаний Майкрософт:
314053 Параметры конфигурации TCP/IP и NBT для Windows XP

Для получения дополнительной информации, см. Internet RFC 1191 и RFC 1435, которые доступны на следующем сайте:
http://www.InterNIC.NET/


This article defines the term "black hole" router, describes a method of locating black hole routers, and suggests three ways to avoid the data loss that can occur because of a black hole router.

MORE INFORMATION
On a TCP/IP-based wide area network (WAN), communication over some routes may fa...
On a TCP/IP-based wide area network (WAN), communication over some routes may fail if an intermediate network segment has a maximum packet size that is smaller than the maximum packet size of the communicating hosts--and if the router does not send an appropriate Internet Control Message Protocol (ICMP) response to this condition or if a firewall on the path drops such a response. Such a router is sometimes known as a "black hole" router.

You can locate a black hole router by using the Ping utility, which is a standard utility that is installed with the Microsoft Windows TCP/IP protocol. You can then use one of three methods of fixing or working around black hole routers.

When a network router receives a packet that is larger than the size of the Maximum Transmission Unit (MTU) of the next segment of a communications network, and that packet's IP layer "don't fragment" bit is flagged, the router is expected to send an ICMP "destination unreachable" message back to the sending host.

If the router does not send a message, the packet might be dropped, causing a variety of errors that vary with the program that is communicating over the unsuccessful link. (These errors do not occur if a program connects to a computer on a local subnet.) The behavior may seem intermittent, but closer examination shows that the behavior can be reproduced, for example, by having a client read a large file that is sent from a remote host.

Client-side Error
The client could not establish a connection to the remote computer. The most likely causes for this error are:
Remote connections cannot be enabled at the remote computer.
The maximum number of connections is exceeded at the remote computer.
A network error occurs while establishing the connection.
Server-side Error: Event ID 1004
Source: TermService
Description: "The terminal server cannot issue a client license. It was unable to issue the license due to a changed (mismatched) client license, insufficient memory, or an internal error. Further details for this problem may have been reported at the client's computer."

Locating a Black Hole Router
You can use the Ping utility to locate a black hole router, by setting the -f and -l parameters when you type the ping command.
The -f parameter causes the Ping utility to send an ICMP echo packet that has the IP "do not fragment" bit set.
The -l parameter sets the buffer, or payload, size of the ICMP echo packet. You specify this size by typing a number after the -l parameter.
The largest buffer that can be sent unfragmented is equal to the smallest MTU that exists along a route, minus the IP and ICMP headers (in other words, the smallest MTU minus 28). For example, Ethernet has an MTU of 1,500 bytes, so under the best circumstances, the Ping utility can echo an unfragmented packet, plus an ICMP buffer, of 1,472 bytes (1,500 minus 28). The syntax for the ping command in this case is:
ping computer_name or IP_address -f -l 1472
For all local IP addresses, the expected results are as follows:
If the MTU of every segment of a routed connection is at least 1,500, the packet is successfully returned.
If there are intermediate segments that have smaller MTUs, and the routers return the appropriate ICMP "destination unreachable" packet, the Ping utility displays the message, "Packet needs to be fragmented but DF set."
If there are intermediate segments that have smaller MTUs, and the routers do not return the appropriate ICMP "destination unreachable" packet, the Ping utility displays the message, "Request timed out."
By increasing the -l parameter on successive pings, you can identify how large an unfragmented packet can travel a specific route. The smallest MTU that is in general use is 576 bytes, so you can safely start with an ICMP buffer of 548 and then work up from there. For example, if the command Ping computer_name or IP_address -f -l 972 returns packets but Ping computer_name or IP_address -f -l 973 does not return packets, the largest MTU on that route is 1,000 (972 plus 28). The default MTUs of common network media are described in the following article in the Microsoft Knowledge Base:
314496 (http://support.microsoft.com/kb/314496/EN-US/ ) Default MTU Size for Different Network Topology

Fixing or Working Around a Black Hole Router
Important This section, method, or task contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base:
322756 (http://support.microsoft.com/kb/322756/ ) How to back up and restore the registry in Windows

The following three methods are ways to either fix or work around a black hole router.
Method 1
Enable PMTU Black Hole Detection on the Windows-based hosts that will be communicating over a WAN connection. Follow these steps:
Start Registry Editor (Regedit.exe).
Locate the following key in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip\parameters
On the Edit menu, click Add Value, and then add the following registry value:
Value Name: EnablePMTUBHDetect
Data Type: REG_DWORD
Value: 1
Quit Registry Editor, and then restart the computer.
Method 2
Configure intermediate routers to send ICMP Type 3 Code 4 messages ("destination unreachable, don't fragment (DF) bit sent and fragmentation required"). This might require a router software or firmware upgrade, router reconfiguration, or router replacement.
Method 3
Set the MTU of the host interface to be the largest size that the black hole router can handle, to guarantee that the largest possible packet size is sent over that connection. However, note that local traffic then uses smaller packets than necessary, as will traffic that uses the routed connections without problems.

This workaround assumes that you have identified the MTU and the state of all possible links that the host might use. After you identify the largest MTU size that is supported, manually set the MTU. Follow these steps:
Click Start, and then click Control Panel.
Double-click Network and Internet Connections, and then click to open the Network Connections folder.
If more than one network connection is listed, for each connection, double-click the connection and then click the Support tab of the Status interface that opens. The connection that shows a Default Gateway entry is probably the network connection that is used to connect to the Internet. Note the name of the connection (for example, "Local Area Connection 2").
Start Registry Editor (Regedit.exe).
Under the HKEY_LOCAL_MACHINE tree, go to the following key:
SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\
Under that key are one or more keys that have numeric identifiers. Each of these keys has a Connection subkey. Examine each of the keys that look like this:
ID_for_Adapter\Connection
The Name value in the Connection subkey provides the network connection name that is used in the Network Connections folder. When you find the one that matches the name that you found in step 3, make a note of the ID_for_Adapter that the network connection name is under.
Return to HKEY_LOCAL_MACHINE, and then locate the following key

SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID_for_Adapter
where ID_for_Adapter is the number that you noted in step 6. When you highlight this key, several values appear on the right side of the screen, including DefaultGateway and EnableDHCP.
Right-click the right side of the screen, click New, and then click DWORD Value. Name the value MTU.
Double-click the value so that you can edit the value, change Base to Decimal, and then enter the largest acceptable MTU size, which is the size that you identified by using the Ping tests.
Quit Registry Editor.
Note that if you still encounter problems with some servers, you might need to set the MTU lower than the Ping tests indicate because of other routers in that specific path. Repeatedly lower the MTU by 10 until access to those sites is successful.

For additional information manually setting the MTU, click the article number below to view the article in the Microsoft Knowledge Base:
314053 (http://support.microsoft.com/kb/314053/EN-US/ ) TCP/IP and NBT Configuration Parameters for Windows XP

For additional information, see Internet RFC 1191 and RFC 1435, which are available from the following Internic Web site:
http://www.internic.net/ (http://www.internic.net/)

--------------------------------------------------------------------------------

APPLIES TO
Microsoft Windows XP Home Edition
Microsoft Windows XP Professional

Ответить

Вернуться в «TCPFOSS»