Windows XP에서 사용중인 MTU를 확인하는 방법


21

웹 페이지에 액세스하려고 할 때 무작위로 "서버에 대한 연결이 재설정되었습니다"오류가 발생하는 정말 이상한 문제로 고통 받고 있습니다 (Windows 네트워크 진단 도구에 따라 HTTP 오류 12031). 이것은 웹 페이지 여부에 관계없이 발생합니다 외부 인터넷에 있거나 로컬 호스트에서 실행되는 로컬 Apache 인스턴스의 경우에도 액세스하려고합니다. Windows XP를 실행하는 로컬 네트워크 (무선이 아닌 이더넷)의 모든 컴퓨터에 영향을줍니다.

네트워크 트래픽에 사용되는 MTU와 관련이 있다고 제안되었습니다. Ping Test 를 수행 하여 조각화되지 않은 가장 큰 패킷을 찾으려면 1492 바이트 패키지 (로컬 헤더의 경우 + 28 바이트)로 localhost를 핑하고 1462 바이트 패키지로 라우터를 핑 (ping) 할 수 있습니다 (28 바이트 헤더를 포함 할 때 1490 바이트). Google과 같은 외부에서 무언가를 핑하려고하면 1430 (헤더가있는 1458)보다 큰 것을 얻을 수 없습니다.

이 MTU 설정으로 업데이트하여 Windows XP 레지스트리를 업데이트하는 다양한 지침을 따르려고했습니다 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterID}\MTU. 대체 값의 끝을 시도하지 않았습니다. 가장 명백한 정확한 값은 1490 인 것 같지만 1462, 1458, 1430 등도 시도했습니다. 변경 사항을 적용하기 위해 컴퓨터를 재부팅하면 몇 분 동안 작동하는 것 같습니다 (일관성이 아니라 항상 무작위이기 때문에 확실하게 말하기는 어렵지만).

처음에 1430을 값으로 시도했을 때 몇 분 동안 잘 작동하면 Ping Test의 결과가 28 바이트 줄어 들었습니다. 갑자기 Google을 통해 1402 바이트의 패키지 만 가져올 수 있음을 알게되었습니다. MTU 레지스트리 설정을 1402로 업데이트 한 경우, 재부팅하고 몇 분 기다린 후 1374, 1346 등이됩니다. 네트워크의 다른 컴퓨터는 영향을받지 않고 (여전히 1430) MTU 설정을 제거했습니다. 레지스트리에서 항목을 정상 상태로 복원합니다 (아직 손상됨).

이 모든 것을 진단하는 데 가장 어려운 점은 올바른 레지스트리 설정을 사용하고 있는지조차 말하기가 매우 어렵다는 것입니다. 그래서 가장 간단한 질문은 다음과 같습니다. Windows가 어떤 MTU 설정을 사용하려고하는지 어떻게 알 수 있습니까?

또한 MTU가 왜 28 년까지 계속 하락 하는지를 아는 사람이 있다면 유용 할 것입니다 (예 : 값이 변경되는 시점에 무언가를 기록 할 Windows 로그 파일이 있습니까?).

마지막으로, 누군가 내가 사용하려고하는 MTU 설정을 알려주는 방법을 분명히 말해 줄 수 있다면 좋을 것입니다!


FWIW, 결국 그것은 문제가 된 은밀한 전화선이었습니다. 전화를 꽂았을 때 발신음이 없었습니다.
andygeers

답변:


58

Windows 7, Windows Vista 및 Windows XP의 경우 다양한 인터페이스의 MTU를 Windows를 통해 사용할 수 있습니다 netsh.

윈도우 7, 윈도우 비스타

명령 프롬프트에서 Windows 7 또는 Windows Vista에 현재 MTU 를 표시하려면 다음과 같이하십시오.

C:\Users\Ian>netsh interface ipv6 show subinterfaces

       MTU  MediaSenseState   Bytes In  Bytes Out  Interface
----------  ---------------  ---------  ---------  -------------
      1280                1   24321220    6455865  Local Area Connection
4294967295                1          0    1060111  Loopback Pseudo-Interface 1
      1280                5          0          0  isatap.newland.com
      1280                5          0          0  6TO4 Adapter

그리고 IPv4 인터페이스의 경우 :

C:\Users\Ian>netsh interface ipv4 show subinterfaces

       MTU  MediaSenseState   Bytes In  Bytes Out  Interface
----------  ---------------  ---------  ---------  -------------
      1500                1  146289608   29200474  Local Area Connection
4294967295                1          0      54933  Loopback Pseudo-Interface 1

참고 : 이 예제에서 로컬 영역 연결 IPv6 인터페이스는 터널 서비스를 사용하여 IPv6 연결을 사용하기 때문에 MTU (1280)가 낮습니다 .

MTU (Windows 7, Windows Vista)를 변경할 수도 있습니다 . 에서 상승 된 명령 프롬프트 :

>netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent
Ok.

Windows 7 서비스 팩 1에서 테스트

윈도우 XP

netshWindows XP 의 구문은 약간 다릅니다.

C:\Users\Ian>netsh interface ip show interface

Index:                                  1
User-friendly Name:                     Loopback
Type:                                   Loopback
MTU:                                    32767
Physical Address:                       

Index:                                  2
User-friendly Name:                     Local Area Connection
Type:                                   Etherenet
MTU:                                    1500
Physical Address:                       00-03-FF-D9-28-B7

참고 : Windows XP에서는 인터페이스 (MTU 포함)에 대한 세부 정보를 보려면 라우팅 및 원격 액세스 서비스를 시작해야합니다.

C:\Users\Ian>net start remoteaccesss

Windows XP는에서 MTU 설정을 변경하는 방법을 제공하지 않습니다 netsh. 이를 위해 다음을 수행 할 수 있습니다.

Windows XP 서비스 팩 3에서 테스트

참조


28 바이트가 어디에서 오는 MTU가 무엇인지에 대한 짧은 토론.

네트워크 카드 (이더넷)의 최대 패킷 크기는 1,500 bytes다음 과 같습니다.

+---------+
| 1500    |
| byte    |
| payload |
|         |
|         |
|         |
+---------+

TCP / IP 의 IP 부분 에는 20 바이트 헤더 (12 바이트 플래그, 소스 IP 주소 4 바이트, 대상 IP 주소 4 바이트)가 필요합니다. 따라서 패킷에서 사용 가능한 공간이 줄어 듭니다.

+------------------------+
| 12 bytes control flags | \
| 4 byte from address    | |- IP header: 20 bytes
| 4 byte to address      | /
|------------------------|
| 1480 byte payload      |
|                        |
|                        |
|                        |
+------------------------+

이제 ICMP (ping) 패킷에는 8 바이트 헤더 (1 바이트 type, 1 바이트 code, 2 바이트 checksum, 4 바이트 추가 데이터)가 있습니다.

+------------------------+
| 12 bytes control flags | \
| 4 byte from address    | |
| 4 byte to address      | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header     | /
|------------------------|
| 1472 byte payload      |
|                        |
|                        |
|                        |
+------------------------+

"결측"28 바이트가있는 곳입니다. 핑 패킷을 보내는 데 필요한 헤더의 크기입니다.

핑 패킷을 보낼 때 포함 할 추가 페이로드 데이터의 양을 지정할 수 있습니다. 이 경우 1472 바이트를 모두 포함하는 경우 :

>ping -l 1472 obsidian

그러면 이더넷 패킷이 아가미에 가득 차게됩니다. 1500 바이트 패킷의 모든 마지막 바이트가 채워집니다.

+------------------------+
| 12 bytes control flags | \
| 4 byte from address    | |
| 4 byte to address      | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header     | /
|------------------------|
|........................|
|........................|
|. 1472 bytes of junk....|
|........................|
|........................|
|........................|
|........................|
+------------------------+

바이트를 하나 더 보내려고하면

>ping -l 1473 obsidian

네트워크는 1501 바이트 패킷을 여러 패킷으로 분할해야합니다.

Packet 1 of 2
+------------------------+
| 20 bytes control flags | \
| 4 byte from address    | |
| 4 byte to address      | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header     | /
|------------------------|
|........................|
|........................|
|..1472 bytes of payload.|
|........................|
|........................|
|........................|
|........................|
+------------------------+

Packet 2 of 2
+------------------------+
| 20 bytes control flags | \
| 4 byte from address    | |
| 4 byte to address      | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header     | /
|------------------------|
|.                       |
| 1 byte of payload      |
|                        |
|                        |
|                        |
|                        |
|                        |
+------------------------+

이 조각화는 장면 뒤에서 발생하며 이상적으로는 알지 못합니다.

그러나 의미가있을 수 있으며 네트워크에 패킷 조각화가 허용되지 않는다고 알려주십시오.

>ping -l 1473 -f obsidian

-f 플래그 수단은 단편화하지 않습니다 . 이제 네트워크에 맞지 않는 패킷을 보내려고하면 오류가 발생합니다.

>ping -l 1473 -f obsidian  

Packet needs to be fragmented but DF set.

패킷은 조각화되어야하지만 조각화 안함 플래그가 설정되었습니다.

라인 어디에서나 패킷 조각화가 필요한 경우 네트워크는 실제로 조각화가 발생했음을 알리는 ICMP 패킷을 보냅니다. 컴퓨터에서이 ICMP 패킷을 가져 와서 가장 큰 크기를 알려주고 너무 큰 패킷 전송을 중지해야합니다. 불행히도 대부분의 방화벽은 이러한 "경로 MTU 발견"ICMP 패킷을 차단하므로 컴퓨터는 패킷이 조각화되고 있다는 것을 인식하지 못합니다 (또는 조각화 할 수 없어서 삭제됨).

이것이 웹 서버가 작동하지 않는 이유입니다. 초기 작은 (<1280 바이트) 응답을 얻을 수 있지만 더 큰 패킷은 통과 할 수 없습니다. 그리고 웹 서버의 방화벽이 잘못 구성되어 ICMP 패킷을 차단합니다. 따라서 웹 서버는 패킷을 얻지 못했다는 것을 인식하지 못합니다.

IPv6에서는 패킷 조각화가 허용되지 않으며 모든 사람이 ICMP mtu 감지 패킷을 (올바르게) 허용 해야 합니다.


8

@ian netsh실제로 현재 사용중인 MTU를 보여줄지 잘 모르겠습니다 . Windows XP Pro SP3 컴퓨터에서 실행 netsh interface ip show interface한 결과 관련 인터페이스의 MTU 값이로보고되었습니다 1500. 그런 다음 다음 레지스트리 키를 추가했습니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnablePMTUDiscovery
    value: 0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{ID}\MTU 
    value: various (e.g. 1200)

Microsoft는EnablePMTUDiscovery 0으로 설정 하면 MTU가 576으로 설정 될 것이라고 말합니다 .

설정 MTU레지스트리 항목은 수동으로 MTU를 설정합니다. MTU항목에 대해 몇 가지 값을 시도했습니다 (매번 재부팅).

두 경우 모두-첫 번째 항목을 추가 한 다음 두 번째 항목을 추가하면 netsh여전히 MTU가 1500으로보고됩니다. ping을 사용한 테스트를 통해 레지스트리에 구성된 MTU 값이 실제로 사용되고 있음을 확인했습니다.

또한 내 컴퓨터에서 처음 시도했을 때 라우팅 및 원격 액세스 서비스가 비활성화되었으므로 지침을 사용하여 시작할 수 없습니다. 제어판> 관리 도구> 컴퓨터 관리> 서비스 및 응용 프로그램> 서비스로 이동하여 활성화했습니다. "Startup type"을 Disabled에서 Manual로 변경했습니다. 그런 다음 해당 대화 상자에서 서비스를 시작했습니다.

또한 KB283165가 반드시 MTU를 변경하기위한 올바른 지침인지 확실하지 않습니다. 이 지침은 Windows PPPoE 클라이언트를 실행할 때만 관련이 있습니까? 라우터가 PPPoE 클라이언트 인 라우터를 통해 인터넷에 연결하는 경우 (내 경우와 같이) 해당 지침이 적절하지 않습니까?

내가 수행 한 지침에 따라 레지스트리를 위와 같이 변경 한 결과 KB900926 : MTU 크기가 576보다 작은 WAN 링크에 권장되는 TCP / IP 설정 (방법 2 및 3)이있었습니다.


@ian에 의해 편집

당신이 옳은 것 같습니다. 1,200으로 구성하지만 netsh보고서는 1500.

여기에 이미지 설명을 입력하십시오

>ping -l 1173 -f obsidian

Packet needs to be fragmented but DF set.

따라서 원래 질문에 대한 대답은 Windows XP에서 보낼 수있는 가장 큰 패킷을 찾으려면 조각화하지 않음 플래그 와 함께 시행 착오를 사용해야 한다는 것입니다. 그런 다음 MTU가 있습니다.


2

시행 착오 접근법과 함께 핑을 사용하여 MTU를 찾을 수 있습니다.

ping <address> -f -l nnnn

:

-f : IP 헤더의 조각화 안함 플래그와 함께 에코 요청 메시지가 1로 설정되도록 에코 요청 메시지가 전송되도록 지정합니다. 에코 요청 메시지는 대상 경로에있는 라우터가 조각화 할 수 없습니다. 이 매개 변수는 경로 최대 전송 단위 (PMTU) 문제를 해결하는 데 유용합니다.

-l Size : 전송 된 에코 요청 메시지에서 데이터 필드의 길이를 바이트 단위로 지정합니다. 기본값은 32입니다. 최대 크기는 65,527입니다.

길이가 너무 길면 "패킷을 조각화해야하지만 DF 세트"메시지가 표시됩니다.


이것은 내가 "핑 테스트"라고 할 때보다 무엇을하고 있었는지입니다
andygeers

1

AdapterWatch 참조 :

AdapterWatch는 IP 주소, 하드웨어 주소, WINS 서버, DNS 서버, MTU 값, 수신 또는 전송 된 바이트 수, 현재 전송 속도 등 네트워크 어댑터에 대한 유용한 정보를 표시합니다. 또한 로컬 컴퓨터의 일반 TCP / IP / UDP / ICMP 통계를 표시합니다.


1

Microsoft KB314496 : 다른 네트워크 토폴로지에 대한 기본 MTU 크기 .
일반 네트워크 설정에서는 MTU 구성을 사용하여 재생하지 마십시오.

여기에 VB 코드 참조가 있습니다 . DrTCP
라는 도구도 있습니다 .

대체 텍스트


레지스트리에서

  • 로 이동 HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCards
  • 관심있는 어댑터를여십시오
  • ServiceName문자열을 복사
  • 해당 문자열을 검색하십시오 HKLM\System. 당신은 NetCfgInstanceId키 와 일치합니다
  • 그보다 조금 위가 MaxFrameSize열쇠 가 될 것입니다 (광산은 1514를 보여줍니다)

netsh명령을 사용하여이를 변경하는 방법도 있습니다 .

또한 Path MTU Discovery 구성을 확인하십시오 .


고마워하지만 이상적으로는 Windows가 기본값을 기대하는 것보다 실제로 사용 하는 MTU 를 실제로 알려주 도록 할 수 있다면 더 안심 입니다. 어쩌면 이것이 :-( 가능하지만 아니다
andygeers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.