리눅스에서 네트워크 어댑터의 MTU(Maximum Transmission Unit)를 변경하는 방법(Adapter MTU 변경)
- 최대 전송 단위(maximum transmission unit, MTU)
- TCP/IP 네트워크에서 전송될 수 있는 최대 프로토콜 데이터 단위의 크기(바이트)이며 기본적으로 MTU값을 1500으로 설정이 되어 있다.
- MTU란 네트워크 패킷의 최대 크기를 의미하며, 더 큰 MTU 값은 대역폭 사용을 효율적으로 하고 네트워크 성능을 향상시킬 수 있습니다. 하지만 모든 네트워크 장비가 큰 MTU를 지원하는 것은 아니며, 가장 작은 MTU를 지원하는 링크의 크기에 맞춰 설정하는 것이 중요합니다.
1. ifconfig를 사용하여 MTU 변경
ifconfig 명령은 일반적으로 대부분의 리눅스 배포판에서 사용되지만, 최신 리눅스 시스템에서는 대부분 ip 명령으로 대체되는 경향이 있습니다.
sudo ifconfig {인터페이스_이름} mtu {새로운_MTU_값}
예를 들어, 이더넷 인터페이스의 MTU를 1500에서 9000으로 변경하려면 다음과 같이 실행합니다.
sudo ifconfig eth0 mtu 9000
2. ip 명령으로 MTU 변경
ip 명령은 더 많은 기능과 옵션을 제공하는 향상된 네트워크 유틸리티입니다.
sudo ip link set mtu {인터페이스_이름} {새로운_MTU_값}
예를 들어, 이더넷 인터페이스의 MTU를 1500에서 9000으로 변경하려면 다음과 같이 실행합니다.
sudo ip link set eth0 mtu 9000
MTU를 변경한 후에는 변경 사항이 즉시 적용되지 않을 수 있으므로 네트워크 인터페이스를 다시 활성화하는 것이 좋습니다. 이는 ifconfig 또는 ip 명령을 사용하여 인터페이스를 다시 활성화하면 됩니다.
sudo ifconfig eth0 down
sudo ifconfig eth0 up
또는
sudo ip link set eth0 down
sudo ip link set eth0 up
네트워크 인터페이스의 MTU를 변경할 때 주의해야 할 점은 해당 네트워크에 연결된 모든 장비들이 변경된 MTU를 지원해야 합니다. 그렇지 않으면 통신에 문제가 발생할 수 있습니다. 특히 네트워크 장비가 라우터, 스위치 등일 경우, MTU 크기를 협의하여 설정하는 것이 중요합니다. 변경 사항을 적용하기 전에 테스트를 실시하고 문제가 없는지 확인하는 것이 좋습니다.
이더넷 어댑터의 MTU를 변경하는 방법
- 어댑터 MTU 확인
ifconfig interface
ip link show interface
netstat -i
$ ifconfig enp3s0f0
enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx broadcast xxx.xxx.xxx.xxx
ether 68:b5:99:c5:9f:7c txqueuelen 1000 (Ethernet)
RX packets 19830334 bytes 2131229219 (1.9 GiB)
RX errors 0 dropped 191 overruns 0 frame 0
TX packets 6674041 bytes 1432109996 (1.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ ip link show enp3s0f0
2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 68:b5:99:c5:9f:7c brd ff:ff:ff:ff:ff:ff
$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 0 0 0 0 0 0 0 0 BMU
enp3s0f0 1500 19829671 0 191 0 6673821 0 0 0 BMRU
enp3s0f1 1500 0 0 0 0 0 0 0 0 BMU
enp4s0f0 1500 0 0 0 0 0 0 0 0 BMU
enp4s0f1 1500 0 0 0 0 0 0 0 0 BMU
lo 65536 40658 0 0 0 40658 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
wg0 1420 0 0 0 0 0 0 0 0 OPRU
- 어댑터 MTU 설정
ip link set interface mtu 9000
interface(ifcfg-enp3s0f0) 파일 편집
vim /etc/sysconfig/network-scripts/ifcfg-enp3s0f0
$ vim /etc/sysconfig/network-scripts/ifcfg-enp3s0f0
TYPE=Ethernet
HWADDR=68:b5:99:c5:9f:7c
BOOTPROTO=static
DEVICE=enp3s0f0
ONBOOT=yes
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
MTU=9000
systemctl restart network
MTU ping test
MTU를 테스트하려면 "패킷 분할 없음(Don't Fragment, DF)" 플래그를 설정하여 ICMP 패킷(포함된 Ping 요청 패킷)의 크기를 조정하여 패킷의 최대 크기를 찾는 방법을 사용합니다. 이 테스트를 통해 네트워크에서 지원하는 최대 MTU를 찾을 수 있습니다.
1. DF 플래그 설정으로 MTU 테스트
Linux에서는 ping 명령어를 사용하여 DF 플래그를 설정하면서 패킷을 보낼 수 있습니다.
ping -M do -s {패킷_크기} {대상_IP_주소}
-M do: DF 플래그를 설정하는 옵션입니다.
-s {패킷_크기}: 보낼 ICMP 패킷의 크기를 지정합니다. 여기서 {패킷_크기}는 원하는 크기를 바이트 단위로 입력합니다.
{대상_IP_주소}: 테스트하려는 대상의 IP 주소를 입력합니다.
예를 들어, MTU를 1400으로 테스트하려면 다음과 같이 실행합니다.
ping -M do -s 1400 8.8.8.8
위 명령어를 실행하면, ICMP 패킷의 크기를 1400바이트로 설정하여 대상 IP 주소로 패킷을 보냅니다. 만약 대상 네트워크에서 해당 크기의 패킷을 처리할 수 있다면 응답이 올바르게 돌아올 것입니다. 그러나 MTU 크기보다 작은 값으로 설정한 경우에는 정상적인 응답을 받을 수 있습니다.
MTU 테스트를 위해 보낸 패킷의 크기를 증가시켜가면서(예: 1400, 1450, 1500 등) 가장 큰 크기에서 응답을 받지 못하는 값까지 확인하면, 해당 네트워크에서 지원하는 최대 MTU를 알아낼 수 있습니다.
2. DF 플래그를 사용할 수 없는 경우
일부 네트워크 라우터나 방화벽 등에서 DF 플래그를 거부하는 경우가 있을 수 있습니다. 이 경우에는 ICMP 패킷이 크기를 초과하면 라우터가 패킷을 분할하여 전송하게 됩니다. 이러한 경우에는 MTU 테스트를 정확하게 하기 어려울 수 있으며, 네트워크 관리자와 협의하여 다른 방법으로 테스트를 진행해야 할 수도 있습니다.
- linux
ping -c 2 -M do -s 1472 google.com
- mac
ping -c 2 -D -s 1472 google.com
$ ping -c 2 -M do -s 1472 google.com
PING google.com (172.217.24.78) 1472(1500) bytes of data.
76 bytes from sin10s06-in-f14.1e100.net (172.217.24.78): icmp_seq=1 ttl=112 (truncated)
76 bytes from sin10s06-in-f14.1e100.net (172.217.24.78): icmp_seq=2 ttl=112 (truncated)
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 81.100/81.106/81.113/0.284 ms
$ ping -c 2 -M do -s 1500 google.com
PING google.com (172.217.24.78) 1500(1528) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
--- google.com ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms
참고URL
- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/network_mtu.html
- https://access.redhat.com/solutions/2440411
'리눅스' 카테고리의 다른 글
File Browser를 Docker 컨테이너로 올리고 사용하는 방법(File Browser 설치) (0) | 2023.08.02 |
---|---|
Squid의 액세스 로그(access_log)에 사용자 정의 포맷으로 설정하는 방법 (0) | 2023.08.02 |
리눅스 스왑 메모리(Swap Memory) (0) | 2023.07.29 |
리눅스 메모리 스와핑(swapping) (0) | 2023.07.29 |
[draft] MySQL Login Path 설정하는 방법 (0) | 2023.07.29 |