PMTU Black Hole Detection Algorithm Change for Windows NT 3.51

This article was previously published under Q136970
This article has been archived. It is offered "as is" and will no longer be updated.
Transferring large amounts of data from a Windows NT 3.5 or 3.51 computerto another computer using TCP/IP over intermediate devices may fail.
Some intermediate devices are incapable of handling large packet sizes,and don't respond correctly when receiving them.
To correct this problem, install the fix mentioned below.

PMTU Discovery Overview

Windows NT 3.5 and 3.51 use PMTU discovery as described in RFC1191. Whena connection is established, the two hosts involved exchange their TCPmaximum segment size (MSS) values. The smaller of the two MSS values isused for the connection. The MSS for a system is usually the MTU (MaximumTransfer Unit) at the link layer minus 40 bytes for the IP and TCP headers.

When TCP segments are destined to a non-local network, the Don't Fragmentbit is set in the IP header. Any router or media along the path may havean MTU that differs from that of the two hosts. If a media is encounteredwith an MTU that is too small for the IP datagram being routed, the routerwill attempt to fragment the datagram accordingly. Upon attempting to doso, it will find that the Don't Fragment bit in the IP header is set. Atthis point, the router should inform the sending host with an ICMPdestination unreachable message that the datagram can't be forwardedfurther without fragmentation.

Most routers will also specify the MTU that is allowed for the next hop byputting the value for it in the low-order 16 bits of the ICMP header fieldthat is labeled "unused" in the ICMP specification. See RFC1191, section 4,for the format of this message. Upon receiving this ICMP error message, TCPadjusts its MSS for the connection to the specified MTU minus the TCP andIP header size, so that any further packets sent on the connection will beno larger than the maximum size that can traverse the path withoutfragmentation.

Using The Largest Possible MTU For Each Path Optimizes Efficiency

PMTU discovery is enabled by default, but can be controlled by adding thefollowing value to the registry:

\EnablePMTUDiscovery (REG_DWORD, 0=disabled, 1=enabled)

When PMTU discovery is disabled, an MTU of 576 bytes is used for allnon-local destination IP addresses. (The TCP MSS=536).

PMTU Black Hole Detection in Windows NT 3.5 and 3.51

A number of vendors sell routers and other intermediate devices that arenot compliant. Instead of returning ICMP destination unreachable messagesto the originating host, they may silently discard IP datagrams that aretoo large to be passed on to the next media in a path. These devices arereferred to as "Black Hole Routers."

Windows NT 3.5 and 3.51 TCP/IP can be configured to attempt to discoverthese Black Hole Routers, and adapt the PMTU to be small enough to passthrough them. A registry value can be added to enable PMTU Black Holedetection:
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\tcpip\parameters \EnablePMTUBHDetect (REG_DWORD, 0=disabled, 1=enabled)

If this value is not present (default), then PMTU Black Hole detection isnot enabled.

When PMTUBHDetect is enabled, after a TCP segment is retransmitted 1/2 ofTCPMaxDataRetransmissions (another registry parameter, default=5) timeswithout being acknowledged, the Don't Fragment bit will be cleared on theremainder of the retransmission attempts. If the segment is acknowledged asa result, the MSS will be decreased, and the Don't Fragment bit will be setin future IP datagrams sent on that connection.
Microsoft Product Support engineers have encountered a number of routersand other intermediate devices that silently drop large frames, even whenthe Don't Fragment bit is not set. Because the existing Windows NT 3.5 and3.51 TCP/IP PMTU Black Hole Detection algorithm does not detect and adaptfor these devices, customers who encountered problems had no choice but todisable PMTU detection. Therefore, Microsoft has made the following change:
When PMTUBHDetect is enabled, after a TCP segment is retransmitted 1/2 of TCPMaxDataRetransmissions (default=5 still) times without being acknowledged, an MSS of 536 bytes (MTU=576) will be used on the remainder of the retransmission attempts. The Don't Fragment bit will not be set on any of these 536 byte segments. 536 bytes is the smallest MTU normally encountered, and since the Don't Fragment bit is not set, the packet can be further fragmented if necessary.

This change should result in more reliable transfer of large files overwide-area networks with a mixture of intermediate devices, such as theInternet. The modified TCPIP.SYS file is available from Microsoft ProductSupport.

NOTE: PMTUBHDetect still defaults to 0 (disabled), so in order to takeadvantage of this feature the value must be added to the registry shownabove, and set to 1.

For a complete list of TCP/IP configuration parameters and their possiblesettings, see Knowledge Base article 120642.

This problem has been corrected in the latest U.S. Service Pack for WindowsNT version 3.51 and Windows NT 4.0. For information on obtaining theService Pack, query on the following word in the Microsoft Knowledge Basewithout the spaces):

Article ID: 136970 - Last Review: 02/28/2014 07:58:34 - Revision: 3.1

  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Server 3.5
  • Microsoft Windows NT Server 3.51
  • kbnosurvey kbarchive kbnetwork KB136970