Linux 네트워크 테스트

LinuxBeginner
지금 연습하기

소개

이 랩에서는 ping 명령어를 사용하여 Linux 에서 네트워크 테스트를 수행하는 방법을 배웁니다. 네트워크 테스트는 연결 문제를 진단하고, 네트워크 성능을 측정하며, 장치가 서로 제대로 통신할 수 있는지 확인하는 데 필수적입니다.

ping 명령어는 Linux 시스템에서 사용할 수 있는 가장 기본적인 네트워크 테스트 도구 중 하나입니다. 이 명령어는 ICMP (Internet Control Message Protocol) 에코 요청 패킷을 대상 호스트로 전송하고 ICMP 에코 응답 패킷을 기다리는 방식으로 작동합니다. 이 간단한 메커니즘을 통해 원격 호스트에 도달할 수 있는지 확인하고, 패킷이 대상까지 이동했다가 다시 돌아오는 데 걸리는 왕복 시간 (round-trip time) 을 측정할 수 있습니다.

이 랩을 완료하면 네트워크 테스트 도구를 직접 사용해보고 네트워크 문제 해결에 필요한 필수 기술을 습득하게 됩니다.

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

ping 명령어를 사용한 기본적인 네트워크 테스트

이 단계에서는 ping 명령어를 사용하여 컴퓨터와 네트워크의 다른 호스트 간의 연결을 테스트하는 방법을 배웁니다. ping 명령어는 대상 주소로 에코 요청을 보내고 응답을 기다려 호스트에 도달할 수 있는지 확인합니다.

먼저, 터미널을 열고 프로젝트 디렉토리에 있는지 확인합니다.

cd ~/project

테스트하려는 IP 주소를 저장할 텍스트 파일을 만들어 보겠습니다. 이렇게 하면 네트워크 테스트를 정리하는 데 도움이 됩니다.

echo "8.8.8.8" > ~/project/ping_hosts.txt

이 명령어는 Google 의 공용 DNS 서버인 IP 주소 8.8.8.8을 포함하는 ping_hosts.txt라는 파일을 생성합니다.

이제 다음 명령어를 사용하여 첫 번째 ping 테스트를 수행해 보겠습니다.

ping -c 4 $(cat ~/project/ping_hosts.txt)

위 명령어는 다음을 수행합니다.

  • ping: ping 유틸리티를 호출합니다.
  • -c 4: ping 을 4 개의 패킷으로 제한합니다 (기본적으로 ping 은 Ctrl+C 로 중지할 때까지 계속됩니다).
  • $(cat ~/project/ping_hosts.txt): 파일에서 IP 주소를 읽습니다.

이 명령어를 실행하면 다음과 유사한 출력을 볼 수 있습니다.

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=14.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=13.7 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.676/13.963/14.513/0.329 ms

이 출력은 다음을 나타냅니다.

  • 시스템이 대상 호스트로 4 개의 패킷을 성공적으로 보냈습니다.
  • 대상 호스트가 4 개의 모든 패킷에 응답했습니다.
  • 패킷 손실이 0% 였습니다.
  • 왕복 시간 (rtt) 은 평균 약 14 밀리초였습니다.

도달할 수 없는 호스트를 ping 하면 다음과 같은 내용이 표시될 수 있습니다.

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.

--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms

이는 대상 호스트로부터 응답을 받지 못했음을 나타내며, 호스트가 오프라인 상태이거나, 도달할 수 없거나, ICMP 에코 요청을 차단하고 있음을 시사합니다.

다른 IP 주소로 다른 예를 시도해 보겠습니다. 이번에는 일반적인 로컬 네트워크 게이트웨이 주소를 사용합니다.

ping -c 4 192.168.1.1

응답은 네트워크 구성에 따라 다릅니다. 이 IP 가 게이트웨이인 경우 매우 낮은 대기 시간 (일반적으로 1ms 미만) 으로 성공적인 ping 응답을 볼 수 있습니다. 그렇지 않은 경우, 시간 초과 또는 "Destination Host Unreachable" 메시지를 볼 수 있습니다.

ping 출력 이해 및 분석

이제 기본적인 ping 명령어를 사용하는 방법을 배웠으므로, 출력을 자세히 해석하는 방법을 살펴보겠습니다. ping 결과를 이해하는 것은 네트워크 문제를 진단하는 데 필수적입니다.

먼저, ping_hosts.txt 파일에 다른 호스트를 추가해 보겠습니다.

echo "1.1.1.1" >> ~/project/ping_hosts.txt

이 명령어는 Cloudflare 의 DNS 서버 IP 주소를 파일에 추가합니다. >> 연산자는 내용을 덮어쓰는 대신 파일에 추가합니다 ( >가 수행하는 작업).

파일의 내용을 확인해 보겠습니다.

cat ~/project/ping_hosts.txt

다음과 같은 내용이 표시되어야 합니다.

8.8.8.8
1.1.1.1

이제 두 번째 주소를 ping 하고 출력을 분석해 보겠습니다.

ping -c 4 $(tail -n 1 ~/project/ping_hosts.txt)

tail -n 1 명령어는 파일에서 마지막 줄을 추출하며, 이는 Cloudflare DNS 서버 IP 입니다.

다음과 유사한 출력이 표시되어야 합니다.

PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=8.76 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=8.92 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.08 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms

이 출력을 자세히 분석해 보겠습니다.

  1. 헤더 (Header): PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

    • 대상 IP 주소와 ping 패킷 크기를 보여줍니다 (데이터 56 바이트, 헤더 포함 84 바이트).
  2. 개별 에코 응답 (Individual Echo Replies):

    • 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
    • bytes from: 응답 크기를 나타냅니다.
    • icmp_seq: 패킷의 시퀀스 번호입니다.
    • ttl: Time To Live, 패킷이 무한정 순환하는 것을 방지하는 값입니다.
    • time: 왕복 시간 (밀리초) 입니다.
  3. 요약 통계 (Summary Statistics):

    • 4 packets transmitted, 4 received, 0% packet loss, time 3005ms
    • 전송된 패킷 수, 수신된 패킷 수, 패킷 손실률 및 총 시간을 보여줍니다.
    • rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms
    • 왕복 시간의 최소값, 평균값, 최대값 및 평균 편차입니다.

ping 과 함께 몇 가지 추가 옵션을 사용하여 더 많은 정보를 얻어 보겠습니다.

ping -c 4 -i 0.5 -s 100 1.1.1.1

이 명령어는 다음을 수행합니다.

  • -c 4: 4 개의 패킷을 보냅니다.
  • -i 0.5: 패킷 간 간격을 0.5 초로 설정합니다 (기본값은 1 초).
  • -s 100: 패킷 크기를 100 바이트로 변경합니다 (기본값은 56).

더 큰 패킷 크기와 더 빠른 간격으로 출력이 표시되어야 합니다.

PING 1.1.1.1 (1.1.1.1) 100(128) bytes of data.
108 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.33 ms
108 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=9.19 ms
108 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=9.11 ms
108 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.20 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1503ms
rtt min/avg/max/mdev = 9.108/9.205/9.326/0.079 ms

ping 결과를 분석할 때 다음 주요 지표에 유의하십시오.

  1. 패킷 손실 (Packet Loss): 0% 를 초과하는 모든 비율은 네트워크 문제를 나타냅니다.
  2. 대기 시간 (Latency): 높은 시간 (특히 100ms 이상) 은 네트워크 정체를 나타낼 수 있습니다.
  3. 불일치 시간 (Inconsistent times): 최소 및 최대 시간 간의 큰 변동은 네트워크 불안정성을 나타냅니다.

예를 들어, 높은 패킷 손실은 다음을 나타낼 수 있습니다.

  • 네트워크 정체
  • 하드웨어 문제
  • 방화벽 제한
  • 라우팅 문제

높은 대기 시간은 다음을 나타낼 수 있습니다.

  • 서버까지의 물리적 거리
  • 네트워크 정체
  • 열악한 품질의 연결
  • 라우팅 비효율성

ping 고급 옵션 및 실용적인 활용

ping 의 기본 사항과 출력을 해석하는 방법을 이해했으므로, 네트워크 진단을 위해 ping 이 유용한 몇 가지 고급 옵션과 실용적인 시나리오를 살펴보겠습니다.

먼저 호스트를 지속적으로 모니터링하고 결과를 기록하는 간단한 쉘 스크립트를 만들어 보겠습니다.

nano ~/project/monitor_host.sh

편집기에 다음 스크립트를 입력합니다.

#!/bin/bash

## Simple network monitoring script
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt

echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE

while true; do
  ping -c 1 $HOST | grep "time=" >> $LOG_FILE
  sleep $INTERVAL
  echo "---" >> $LOG_FILE
done

Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고 Ctrl+X로 종료합니다.

스크립트를 실행 가능하게 만듭니다.

chmod +x ~/project/monitor_host.sh

이제 Google 의 DNS 서버를 모니터링하기 위해 몇 초 동안 스크립트를 실행해 보겠습니다.

~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!

이것은 다음을 수행합니다.

  1. 백그라운드에서 모니터링 스크립트를 시작합니다.
  2. 10 초 동안 대기합니다.
  3. 스크립트를 중지합니다.

로그를 검토해 보겠습니다.

cat ~/project/ping_log.txt

타임스탬프와 함께 여러 ping 결과를 볼 수 있습니다.

이제 몇 가지 더 고급 ping 옵션을 살펴보겠습니다.

  1. TTL (Time To Live) 설정:
ping -c 4 -t 64 8.8.8.8

-t 옵션은 TTL 값을 설정하며, 이는 패킷이 폐기되기 전에 통과할 수 있는 네트워크 홉 수를 정의합니다.

  1. 플러드 ping (sudo 필요):
sudo ping -c 10 -f 8.8.8.8

-f 옵션은 가능한 한 빠르게 패킷을 보냅니다. 이는 스트레스 테스트에 유용하지만 주의해서 사용해야 합니다.

  1. 가청 ping:
ping -c 4 -a 8.8.8.8

-a 옵션은 호스트가 응답할 때 가청 벨 소리를 생성하며, 화면을 보지 않고 문제를 해결할 때 유용합니다.

  1. 데드라인으로 타이밍:
ping -c 4 -w 2 8.8.8.8

-w 옵션은 ping 이 전송된 패킷 수에 관계없이 중지될 데드라인을 초 단위로 설정합니다.

실용적인 문제 해결 시나리오를 살펴보겠습니다. traceroute 를 사용하여 대상에 대한 네트워크 경로를 간단하게 시각화해 보겠습니다 (ping 과 유사하게 작동하지만 패킷이 거치는 경로를 보여줍니다).

traceroute 8.8.8.8

이 명령어는 대상에 도달하기 위해 패킷이 통과하는 각 홉 (라우터) 을 보여줍니다. 다음과 같은 내용이 표시됩니다.

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  _gateway (10.0.2.2)  0.113 ms  0.087 ms  0.083 ms
 2  * * *
 3  * * *
 4  8.8.8.8  14.080 ms  13.849 ms  14.399 ms

별표 (*) 는 시간 초과 또는 traceroute 요청에 응답하지 않는 라우터를 나타냅니다.

이제 다양한 호스트에 대한 ping 결과를 문서화하기 위해 간단한 테이블을 만들어 보겠습니다.

echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt

Google 의 DNS 를 테이블에 추가해 보겠습니다.

result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

그리고 Cloudflare 의 DNS 를 추가합니다.

result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

결과 테이블을 살펴보겠습니다.

cat ~/project/ping_results.txt

두 DNS 서버에 대한 ping 통계가 포함된 형식화된 테이블이 표시되어 성능을 비교하는 데 사용할 수 있습니다.

요약

이 랩에서는 Linux 에서 네트워크 테스트를 위해 ping 명령어를 사용하는 방법을 배웠습니다. 다음 사항에 대한 실질적인 경험을 얻었습니다.

  • 기본 ping 명령어를 사용하여 원격 호스트에 대한 연결을 확인합니다.
  • ping 출력을 해석하여 네트워크 문제를 진단합니다.
  • 다양한 ping 옵션을 사용하여 네트워크 테스트를 사용자 정의합니다.
  • 네트워크 연결을 모니터링하는 스크립트를 만듭니다.
  • ping 통계를 분석하여 네트워크 성능을 평가합니다.
  • traceroute 와 같은 관련 도구를 사용하여 네트워크 경로를 시각화합니다.

이러한 기술은 네트워크 문제 해결에 필수적이며, 단순한 실패에서 복잡한 성능 문제에 이르기까지 광범위한 연결 문제를 진단하는 데 도움이 될 수 있습니다.

Linux 시스템으로 계속 작업하면서 ping이 사용 가능한 많은 네트워크 진단 도구 중 하나임을 기억하십시오. 다른 유용한 도구로는 traceroute, netstat, nmap, tcpdumpwireshark가 있으며, 이들은 함께 포괄적인 네트워크 문제 해결 도구 키트를 형성합니다.

네트워크 연결을 효과적으로 테스트하는 방법을 이해함으로써 이제 다양한 환경에서 네트워크 시스템을 유지 관리하고 문제를 해결하는 데 더 적합하게 되었습니다.