Linux ethtool 을 사용한 네트워크 인터페이스 설정 검사

CompTIABeginner
지금 연습하기

소개

이 실습에서는 Linux 환경에서 네트워크 인터페이스 설정을 검사하고 관리하기 위해 ethtool 명령줄 유틸리티를 사용하는 방법을 배웁니다. 먼저 도구를 설치하고 기본 네트워크 인터페이스를 식별하는 것부터 시작합니다. 그런 다음 현재 인터페이스 속도 및 이중화 모드를 확인하고, 이러한 매개변수를 10Mbps 반이중화와 같은 특정 구성으로 수동 설정한 다음, 인터페이스를 기본 자동 협상 상태로 되돌리는 연습을 합니다.

이러한 단계를 완료함으로써 물리 계층 네트워크 문제를 진단하는 실질적인 기술을 습득하게 됩니다. 실습은 네트워크 카드의 지원되는 링크 모드를 분석하는 방법을 가르치면서 마무리됩니다. 이는 네트워크 장치 간의 속도 또는 이중화 불일치로 인한 잠재적인 성능 문제를 해결하는 데 필수적입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 98%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

ethtool 설치 및 네트워크 인터페이스 식별

이 단계에서는 네트워크 인터페이스 컨트롤러 (NIC) 매개변수를 검사하고 수정하는 데 중요한 명령줄 유틸리티인 ethtool을 설치하는 것부터 시작합니다. 도구를 사용할 수 있는지 확인한 후, 추가 네트워크 분석을 위한 전제 조건인 시스템의 기본 네트워크 인터페이스 이름을 식별하는 방법을 배웁니다.

먼저 패키지 목록을 업데이트하고 ethtool을 설치합니다. 저장소에서 사용 가능한 최신 버전을 가져오도록 새 패키지를 설치하기 전에 apt update를 실행하는 것이 좋습니다.

터미널을 열고 (이미 ~/project 디렉토리에 열려 있어야 함) 다음 명령을 실행합니다.

sudo apt update
sudo apt install ethtool -y

-y 플래그는 설치 프롬프트에 자동으로 "yes"로 응답하여 프로세스를 비대화형으로 만듭니다. 패키지 목록이 읽히고 ethtool이 설치되고 있음을 나타내는 출력이 표시됩니다.

이제 ethtool이 설치되었으므로 검사하려는 네트워크 인터페이스를 결정해야 합니다. 시스템에는 루프백 인터페이스 (lo), 유선 이더넷 인터페이스 (eth0 또는 enp0s3) 등 여러 인터페이스가 있을 수 있습니다. ip 명령은 네트워크 장치, 주소 및 경로를 표시하고 조작하는 최신 표준입니다.

모든 네트워크 인터페이스와 해당 구성을 나열하려면 ip a 명령 ( ip addr의 약어) 을 사용합니다.

ip a

그러면 모든 네트워크 인터페이스 목록이 표시됩니다. lo(루프백 인터페이스) 가 아니고 상태가 UP인 인터페이스를 찾으십시오. 이것이 일반적으로 기본 네트워크 연결입니다. 이름은 보통 eth0이거나 enp로 시작하는 이름입니다.

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:16:3e:01:b1:ae brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.232/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159922sec preferred_lft 1892159922sec
    inet6 fe80::216:3eff:fe01:b1ae/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:da:5e:55:d4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

위의 예시 출력에서 기본 네트워크 인터페이스 이름은 eth0입니다. docker0와 같은 다른 인터페이스도 볼 수 있지만, 이 실습에서는 eth0에 집중할 것입니다. 다음 단계에서 필요하므로 인터페이스 이름을 기록해 두십시오. 이제 필요한 도구를 성공적으로 설치하고 대상 네트워크 인터페이스를 식별했습니다.

ethtool 로 현재 인터페이스 속도 및 이중화 (Duplex) 보기

이 단계에서는 방금 설치한 ethtool 유틸리티를 사용하여 네트워크 인터페이스의 현재 작동 상태를 검사합니다. 특히 **속도 (Speed)**와 **이중화 (Duplex)**라는 두 가지 중요한 매개변수에 초점을 맞출 것입니다.

네트워크 인터페이스 카드 (NIC) 는 특정 속도 (예: 10Mbps, 100Mbps, 1000Mbps) 와 두 가지 이중화 모드 중 하나로 작동합니다.

  • 반이중화 (Half-duplex): 인터페이스는 주어진 시간에 데이터를 보내거나 받을 수 있지만, 동시에 둘 다 할 수는 없습니다.
  • 전이중화 (Full-duplex): 인터페이스는 동시에 데이터를 보내고 받을 수 있어 처리량을 크게 향상시킵니다.

현대 네트워크는 거의 항상 **자동 협상 (auto-negotiation)**이라는 프로세스를 사용합니다. 이를 통해 NIC 와 연결된 네트워크 장치 (예: 스위치) 가 자동으로 통신하여 둘 다 지원하는 가장 높은 속도와 이중화 모드를 결정합니다.

이제 이전 단계에서 식별한 네트워크 인터페이스의 설정을 확인해 보겠습니다 (예시로 eth0을 사용합니다). 터미널에서 다음 명령을 실행합니다. 인터페이스 이름이 다른 경우 eth0을 실제 인터페이스 이름으로 바꾸는 것을 잊지 마십시오.

ethtool eth0

Enter를 누르면 인터페이스에 대한 자세한 정보가 표시됩니다. 일부 가상 환경에서는 "Not reported" 또는 "Unknown" 값이 많이 표시될 수 있으며, 이는 가상 네트워크 인터페이스의 기능이 제한적임을 나타냅니다. 이 실습 환경에서는 정상입니다.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: Unknown!
        Duplex: Unknown! (255)
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

출력을 주의 깊게 관찰하십시오. 이 단계에서 중요한 줄은 다음과 같습니다.

  • Speed: Unknown!: 현재 속도가 드라이버에서 보고되지 않았습니다.
  • Duplex: Unknown! (255): 이중화 모드도 보고되지 않았습니다.
  • Auto-negotiation: off: 이것이 중요합니다. 인터페이스가 자동 협상으로 설정되어 있지 않음을 보여주므로 다음 단계에서 속도와 이중화를 수동으로 설정할 수 있습니다.
  • netlink error: Operation not permitted: 이 오류는 권한이 제한된 컨테이너화되거나 가상화된 환경에서 흔히 발생합니다. 이 오류는 실습을 완료하는 데 방해가 되지 않습니다.

Link detected: yes 줄은 네트워크에 대한 물리적 연결이 활성화되어 있음을 확인합니다. 이러한 설정은 물리 계층 (Layer 1) 의 작동 방식에 기본이 됩니다.

인터페이스 속도를 10Mbps Half-Duplex 로 수동 설정

이 단계에서는 자동 협상 설정을 수동으로 재정의하는 방법을 배웁니다. 자동 협상은 현대 네트워크의 표준이지만, 오래된 레거시 하드웨어에 연결하거나 특정 링크 문제를 해결하는 것과 같이 드물게 특정 속도와 이중화 모드를 강제로 설정해야 하는 경우가 있습니다.

중요 참고 사항: 이러한 매개변수를 수동으로 설정하면 올바르게 수행되지 않을 경우 네트워크 연결 문제가 발생할 수 있습니다. 케이블의 반대편 장치 (예: 스위치 포트) 와 일치하지 않는 설정을 강제하면 **이중화 불일치 (duplex mismatch)**가 발생하여 네트워크 성능이 심각하게 저하되거나 링크가 완전히 실패할 수 있습니다. 이 가상 환경에서는 변경을 시도해도 안전합니다.

설정을 변경하려면 "-s" 플래그 ( "settings"를 의미) 와 함께 ethtool 명령을 사용합니다. 이 작업에는 관리자 권한이 필요하므로 sudo를 사용해야 합니다.

인터페이스 속도를 10Mbps 로, 이중화 모드를 반이중화로 설정해 보겠습니다. 인터페이스 이름이 다른 경우 eth0을 해당 인터페이스 이름으로 바꾸는 것을 잊지 마십시오.

sudo ethtool -s eth0 speed 10 duplex half

이 명령은 성공 시 아무런 출력을 생성하지 않습니다. 변경 사항이 적용되었는지 확인하려면 이전 단계의 명령을 사용하여 인터페이스 설정을 다시 검사해야 합니다.

ethtool eth0

이제 출력을 검토하십시오. SpeedDuplex 줄을 찾으십시오. 초기 오류에도 불구하고 속도와 이중화를 설정하는 명령이 성공했음을 알 수 있습니다.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 10Mb/s
        Duplex: Half
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

이제 Speed: 10Mb/sDuplex: Half가 표시되어야 합니다. 또한 Auto-negotiation이 여전히 off인 것을 알 수 있습니다. 이는 매개변수를 수동으로 설정했기 때문에 예상된 결과입니다. 이를 통해 네트워크 인터페이스 설정을 성공적으로 수정할 수 있음을 확인할 수 있습니다.

ethtool -k로 오프로드 기능 보기 및 수정

이 단계에서는 네트워크 오프로드 기능을 검사하고 수정하는 방법을 배웁니다. 오프로드 기능은 체크섬 계산 또는 데이터 분할과 같이 CPU 가 처리해야 하는 작업을 하드웨어가 수행하도록 허용하는 고급 NIC 기능입니다. 이러한 작업을 오프로드하면 네트워크 성능을 향상시킬 수 있습니다.

먼저 -k (또는 --show-features) 플래그를 사용하여 인터페이스의 현재 오프로드 설정을 확인합니다.

ethtool -k eth0

일부는 on이고 일부는 off인 기능 목록이 표시됩니다. [fixed] 상태는 사용자가 설정을 변경할 수 없음을 의미합니다.

Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: on
        tx-scatter-gather: on
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: on
        tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
... (출력이 길고 다를 수 있습니다)

이제 이러한 설정 중 하나를 수정하는 연습을 해보겠습니다. TX 체크섬을 일시적으로 비활성화합니다. 이 작업에는 관리자 권한이 필요하므로 sudo-K (또는 --features) 플래그를 사용해야 합니다.

sudo ethtool -K eth0 tx-checksumming off

이제 명령이 수행한 변경 사항을 보고합니다. tx-checksumming을 비활성화하면 다른 관련 기능도 자동으로 비활성화되었음을 알 수 있습니다. 이는 일부 기능이 다른 기능에 의존하기 때문입니다.

Actual changes:
tx-checksum-ip-generic: off
tx-tcp-segmentation: off [not requested]
tx-tcp-ecn-segmentation: off [not requested]
tx-tcp6-segmentation: off [not requested]

전체 목록에서 변경 사항을 확인하려면 ethtool -k eth0을 다시 실행할 수 있습니다.

이제 기본 성능 향상 동작을 복원하기 위해 다시 활성화해 보겠습니다.

sudo ethtool -K eth0 tx-checksumming on

다시 말하지만, 출력은 실제 변경 사항을 보여줍니다. 기능을 on으로 요청했더라도 하드웨어에서 해당 기능을 고정 (fixed) 한 경우 off로 유지될 수 있습니다. 또한 관련 기능이 자동으로 다시 활성화되었음을 보여줍니다.

Actual changes:
tx-checksum-ipv4: off [requested on]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [requested on]
tx-tcp-segmentation: on [not requested]
tx-tcp-ecn-segmentation: on [not requested]
tx-tcp6-segmentation: on [not requested]
tx-checksum-fcoe-crc: off [requested on]
tx-checksum-sctp: off [requested on]

이 단계를 완료함으로써 네트워크 카드의 하드웨어 오프로드 기능을 검사하고 수정하는 방법을 배웠으며, 기능 종속성과 하드웨어 제한이 결과에 어떻게 영향을 미치는지 확인했습니다.

ethtool -S로 인터페이스 통계 확인

이 마지막 단계에서는 네트워크 인터페이스의 상세 통계를 확인하는 방법을 배웁니다. 이는 일상적인 네트워크 문제 해결을 위해 ethtool을 가장 흔하게 사용하는 방법 중 하나입니다. 이 도구는 송수신된 패킷 수, 바이트 수, 그리고 아마도 가장 중요한 오류 수를 포함한 풍부한 정보를 제공합니다.

이러한 통계를 보려면 -S (또는 --statistics) 플래그를 사용합니다. 인터페이스 이름을 eth0으로 바꾸는 것을 잊지 마십시오.

ethtool -S eth0

출력은 긴 카운터 목록이 될 것입니다. 이 환경에서는 NIC 가 여러 큐를 사용하므로 통계가 큐별로 보고됩니다. rx_queue_tx_queue_ 패킷 카운터에 집중해 보겠습니다.

NIC statistics:
     rx_queue_0_packets: 63768
     rx_queue_0_bytes: 93307801
     ...
     rx_queue_1_packets: 77180
     rx_queue_1_bytes: 111222183
     ...
     tx_queue_0_packets: 14363
     tx_queue_0_bytes: 4229599
     ...
     tx_queue_1_packets: 5287
     tx_queue_1_bytes: 1262219
     ... (기타 많은 통계)

참고: 숫자는 인터페이스가 활성화된 이후의 모든 트래픽을 반영하므로 다를 수 있습니다.

이제 네트워크 트래픽을 생성하여 이러한 카운터가 변경되는 것을 보겠습니다. 루프백 주소 (127.0.0.1), 즉 로컬 머신 자체로 몇 개의 패킷을 보내기 위해 ping 명령을 사용합니다. -c 4 플래그는 ping 에게 정확히 4 개의 패킷을 보내도록 지시합니다.

ping -c 4 127.0.0.1

4 개의 패킷이 송수신되는 것을 보여주는 출력이 표시됩니다.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.037 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.037/0.038/0.040/0.001 ms

트래픽을 생성했으므로 다시 통계를 확인해 보겠습니다.

ethtool -S eth0

rx_queue_*_packetstx_queue_*_packets 값을 다시 검토하십시오.

NIC statistics:
     rx_queue_0_packets: 63879
     ...
     rx_queue_1_packets: 77227
     ...
     tx_queue_0_packets: 14460
     ...
     tx_queue_1_packets: 5328
     ... (기타 많은 통계)

송수신 큐의 총 패킷 수가 증가했음을 알 수 있습니다. 백그라운드 시스템 활동으로 인해 ping 명령의 4 개 패킷보다 증가량이 더 많을 수 있지만, 이 변경 사항은 인터페이스가 데이터를 올바르게 송수신하고 있음을 확인시켜 줍니다. 이는 링크 상태를 확인하는 기본적인 기술입니다. 문제를 해결하는 중에 오류 카운터가 증가하는 것을 보았다면, 이는 문제의 명확한 신호가 될 것입니다.

요약

이 실습에서는 Linux 에서 ethtool 유틸리티를 사용하여 네트워크 인터페이스 설정을 관리하는 방법을 배웠습니다. ethtool 패키지를 설치하고 ip a 명령으로 기본 네트워크 인터페이스 이름을 식별하는 것부터 시작했습니다. 그 후 ethtool을 사용하여 인터페이스의 현재 작동 매개변수를 검사하고 속도 및 이중화 모드를 수동으로 설정했습니다.

이어서 실습에서는 더 고급 기능을 탐색했습니다. -k-K 플래그를 사용하여 tx-checksumming과 같은 하드웨어 오프로드 설정을 보고 수정하는 방법을 배웠습니다. 마지막으로 ethtool -S로 상세 인터페이스 통계를 검사하고 ping으로 트래픽을 생성하여 해당 통계가 실시간으로 변경되는 것을 확인하는 방법을 배웠으며, 이는 링크 상태를 확인하고 연결 문제를 해결하는 실용적인 방법을 제공합니다.