다음을 통해 공유


Azure에서 가상 머신에 대한 MTU(최대 전송 단위) 구성

MTU(최대 전송 단위)는 네트워크 디바이스나 인터페이스가 전송하는 가장 큰 크기의 이더넷 프레임(패킷)을 나타내는 측정 단위입니다. 패킷이 디바이스에서 허용하는 최대 크기를 초과하는 경우 패킷은 여러 개의 작은 패킷으로 조각화된 다음 나중에 대상에서 리어셈블됩니다.

조각화와 리어셈블리로 인해 성능과 순서 문제가 발생할 수 있으며, 결과적으로 최적이 아닌 환경이 제공될 수 있습니다. 솔루션에 맞게 MTU를 최적화하면 데이터 세트를 전송하는 데 필요한 총 패킷 수가 줄어들어 네트워크 대역폭 성능 이점이 제공됩니다. 더 큰 MTU 크기를 구성하면 데이터 세트를 전송하는 데 필요한 패킷 수와 헤더 오버헤드가 줄어들므로 네트워크 처리량이 잠재적으로 개선될 수 있습니다.

MTU는 가상 머신의 운영 체제에서 구성 가능한 설정입니다. Azure의 MTU 설정 기본값은 1500바이트입니다.

Azure의 VM은 가상 네트워크 내에 있는 트래픽에 대해서만 기본값인 1,500바이트보다 큰 MTU를 지원할 수 있습니다.

다음 표는 Azure에서 사용 가능한 Azure 네트워크 인터페이스에서 지원되는 가장 큰 MTU 크기를 보여 줍니다.

운영 체제 네트워크 인터페이스 가상 네트워크 간 트래픽을 위한 최대 MTU
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Set-NetAdapterAdvancedProperty로 MTU 값을 설정할 경우 4088 값을 사용합니다. 다시 부팅을 지속하려면 Test-Connection에서 반환된 값도 Set-NetIPInterface로 설정해야 합니다.
Windows Server (미리 보기) Microsoft Azure 네트워크 어댑터 MANA 9000
Set-NetAdapterAdvancedProperty로 MTU 값을 설정할 경우, 9014 값을 사용합니다. 다시 부팅을 지속하려면 Test-Connection에서 반환된 값도 Set-NetIPInterface로 설정해야 합니다.
Linux Mellanox Cx-3, Cx-4, Cx-5 3900
Linux (미리 보기) Microsoft Azure 네트워크 어댑터 9000

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정 만들기

  • Azure의 동일한 가상 네트워크에 있는 두 개의 Linux Virtual Machines. Linux 가상 머신을 만드는 방법에 대한 자세한 내용은 Azure Portal에서 Linux 가상 머신 만들기를 참조하세요. 문서를 완료하려면 가상 머신에 대한 원격 액세스가 필요합니다. Azure Virtual Machines에 안전하게 연결하는 방법에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.

    • 이 문서의 목적을 위해 가상 머신은 vm-1vm-2로 명명됩니다. 이러한 값을 원하는 값으로 바꿉니다.

리소스 예

이 문서에서는 다음 리소스를 예로 사용했습니다. 이러한 값을 원하는 값으로 바꿉니다.

리소스 속성 IP 주소
가상 머신 1 vm-1 10.0.0.4
가상 머신 2 vm-2 10.0.0.5

주의 사항

  • Azure의 가상 머신은 가상 네트워크 내에 머무르는 트래픽에 대해서만 1,500바이트 기본값보다 더 큰 MTU를 지원할 수 있습니다. 가상 네트워크 내 VM 간 트래픽이 아닌 시나리오에서는 더 큰 MTU가 지원되지 않습니다. 게이트웨이, 피어링을 트래버스하거나 인터넷으로 이동하는 트래픽은 지원되지 않을 수 있습니다. 더 큰 MTU를 구성하면 조각화가 발생하고 성능이 저하될 수 있습니다. 이러한 시나리오를 활용하는 트래픽의 경우 테스트용으로 기본 1,500바이트 MTU를 활용하여 전체 네트워크 경로에서 더 큰 MTU가 지원되는지 확인합니다.

  • 최적의 MTU는 운영 체제, 네트워크 및 애플리케이션에 따라 다릅니다. 지원되는 최대 MTU가 사용자의 사용 사례에 최적이 아닐 수 있습니다.

  • 광범위하게 또는 중요한 환경에 적용하기 전에, 항상 중요하지 않은 환경에서 MTU 설정 변경을 먼저 테스트합니다.

경로 MTU 검색

애플리케이션이나 컴퓨터가 사용하는 네트워크 경로에서 지원되는 MTU를 이해해야 합니다. 경로 MTU 검색은 원본 주소와 대상 주소 사이에서 지원되는 가장 큰 MTU를 찾아내는 수단입니다. 원본 및 대상 주소 간에 지원되는 것보다 더 큰 MTU를 사용하면 조각화가 발생하여 성능에 부정적인 영향을 미칠 수 있습니다.

이 문서에서는 두 가상 머신 간의 MTU 경로를 테스트하는 예를 사용합니다. 이후 테스트는 가상 머신에서 라우팅 가능한 모든 대상으로 수행할 수 있습니다.

다음 단계에 따라 원본 및 대상 가상 머신에서 더 큰 MTU 크기를 설정합니다. Linux의 셸 스크립트나 Windows의 PowerShell을 사용하여 경로 MTU를 확인합니다. 더 큰 MTU가 지원되지 않는 경우 경로 MTU 검색 테스트에 표시되는 결과는 원본 또는 대상 가상 머신 인터페이스에 구성된 설정과 다릅니다.

셸 스크립트는 Azure 샘플 갤러리에서 사용할 수 있습니다. 다음 링크에서 Linux용 스크립트를 다운로드하여 vm-1vm-2에 저장합니다.

Linux 가상 머신에서 MTU 크기를 변경하려면 다음 단계를 따릅니다.

  1. vm-1에 로그인

  2. ip 명령을 사용하여 현재 네트워크 인터페이스와 해당 MTU 설정을 표시하고 후속 단계를 위해 IP 주소를 기록합니다. 이 예에서 IP 주소는 10.0.0.4이고 이더넷 인터페이스는 eth0입니다.

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  3. vm-1의 MTU 값을 네트워크 인터페이스에서 지원하는 가장 높은 값으로 설정합니다. 이 예에서 네트워크 인터페이스의 이름은 eth0입니다. 이 값을 원하는 값으로 바꿉니다.

    • Mellanox 어댑터의 경우 다음 예를 사용하여 MTU 값을 3900으로 설정합니다.
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Microsoft Azure 네트워크 어댑터의 경우 다음 예를 사용하여 MTU 값을 9000으로 설정합니다.
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Important

    이전 단계에서 변경한 MTU는 다시 부팅 중에는 유지되지 않습니다. 변경 내용을 영구적으로 적용하려면 해당 Linux 배포판에 대한 해당 설명서를 참조합니다.

  4. ip 명령을 사용하여 MTU 설정이 네트워크 인터페이스에 적용되었는지 확인합니다.

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  5. vm-2에 로그인하여 이전 단계를 반복하여 네트워크 인터페이스에서 지원하는 가장 높은 값으로 MTU 값을 설정합니다.

  6. vm-1에 로그인합니다.

  7. 다음 예를 사용하여 Linux 셸 스크립트를 실행하여 특정 네트워크 경로에 사용할 수 있는 가장 큰 MTU 크기를 테스트합니다. 대상 호스트의 값을 vm-2의 IP 주소로 바꿉니다.

    ./GetPathMtu.sh 10.0.0.5
    
  8. 다음 예제와 유사하게 출력됩니다. 스크립트 출력에 네트워크 인터페이스 설정이 표시되지 않으면 MTU 크기가 올바르게 설정되지 않았음을 나타냅니다. 또는 경로상의 네트워크 디바이스가 GetPathMTU 스크립트에서 반환된 MTU 크기만 지원한다는 의미일 수도 있습니다.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. PING을 사용하여 네트워크 인터페이스의 MTU 크기를 확인합니다. Linux의 경우 -M, -s, -c 플래그를 사용합니다. -M 옵션은 ping을 조각내지 않도록 지시하고, -s는 패킷 크기를 설정하고, -c는 보낼 ping 횟수를 설정합니다. 패킷 크기를 확인하려면 MTU 설정인 3900에서 28을 빼세요.

    ping 10.0.0.5 -c 10 -M do -s 3872
    
    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.5: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.5: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.5: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.5: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.5: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.5: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    원본과 대상 간 설정이 일치하지 않는다는 표시는 출력에 오류 메시지로 표시됩니다. 이 경우에는 원본 네트워크 인터페이스에 MTU가 설정되지 않았습니다.

    azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872
    PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.5 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    
  10. vm-2에 로그인합니다.

  11. 다음 예를 사용하여 특정 네트워크 경로에 사용할 수 있는 가장 큰 MTU 크기를 테스트하는 Linux 셸 스크립트를 실행합니다.

    ./GetPathMtu.sh 10.0.0.4
    
  12. 다음 예제와 유사하게 출력됩니다. 스크립트 출력에 네트워크 인터페이스 설정이 표시되지 않으면 MTU 크기가 올바르게 설정되지 않았음을 나타냅니다. 또는 경로상의 네트워크 디바이스가 GetPathMTU 스크립트에서 반환된 MTU 크기만 지원한다는 의미일 수도 있습니다.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. PING을 사용하여 네트워크 인터페이스의 MTU 크기를 확인합니다. Linux의 경우 -M, -s, -c 플래그를 사용합니다. -M 옵션은 ping을 조각내지 않도록 지시하고, -s는 패킷 크기를 설정하고, -c는 보낼 ping 횟수를 설정합니다. 패킷 크기를 확인하려면 MTU 설정인 3900에서 28을 빼세요.

    ping 10.0.0.4 -c 10 -M do -s 3872
    
    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    3880 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=3.70 ms
    3880 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.08 ms
    3880 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=1.51 ms
    3880 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.25 ms
    3880 bytes from 10.0.0.4: icmp_seq=5 ttl=64 time=1.29 ms
    3880 bytes from 10.0.0.4: icmp_seq=6 ttl=64 time=1.05 ms
    3880 bytes from 10.0.0.4: icmp_seq=7 ttl=64 time=5.67 ms
    3880 bytes from 10.0.0.4: icmp_seq=8 ttl=64 time=1.92 ms
    3880 bytes from 10.0.0.4: icmp_seq=9 ttl=64 time=2.72 ms
    3880 bytes from 10.0.0.4: icmp_seq=10 ttl=64 time=1.20 ms
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9014ms
    rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
    

    원본과 대상 간 설정이 일치하지 않는다는 표시는 출력에 오류 메시지로 표시됩니다. 이 경우에는 원본 네트워크 인터페이스에 MTU가 설정되지 않았습니다.

    azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872
    PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data.
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    ping: local error: message too long, mtu=1500
    
    --- 10.0.0.4 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
    

변경 내용 되돌리기

이 문서에서 변경한 내용을 되돌리려면 다음 단계를 따릅니다.

  1. vm-1에 로그인합니다.

  2. 다음 예를 사용하여 MTU 값을 기본값인 1500으로 설정합니다.

    echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Important

    이전 단계에서 변경한 MTU는 다시 부팅 중에는 유지되지 않습니다. 변경 내용을 영구적으로 적용하려면 해당 Linux 배포판에 대한 해당 설명서를 참조합니다.

  3. ip 명령을 사용하여 MTU 설정이 네트워크 인터페이스에 적용되었는지 확인합니다.

    ip address show
    
    azureuser@vm-1:~$ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000
        link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff
        altname enP46433p0s2
        inet6 fe80::20d:3aff:fec5:f314/64 scope link 
           valid_lft forever preferred_lft forever
    
  4. vm-2에 로그인하여 이전 단계를 반복하여 MTU 값을 기본값인 1500으로 설정합니다.