핑(Ping) 명령어는 리눅스에서 네트워크 관리에 필수적인 도구입니다. 기본 문제 해결을 위해 이전에 ping
을 사용해 본 적이 있을 수 있지만, 이 명령은 무엇을 하는 것일까요?
ping
명령은 원격 또는 로컬 호스트로 인터넷 제어 메시지 프로토콜(ICMP) 요청을 보내 응답을 기다립니다. 응답이 없을 경우 연결이나 호스트 자체에 문제가 있을 수 있습니다.
리눅스에서 ping 명령어를 실제로 사용하는 방법을 읽어보고 탐구해 보세요!
전제 조건
이 튜토리얼은 실습으로 진행됩니다. 따라오고 싶다면 인터넷 연결이 있는 리눅스 컴퓨터가 있어야 합니다. 이 튜토리얼에서는 우분투 20.04 컴퓨터를 사용합니다.
또한, 리눅스 컴퓨터에서 터미널 세션을 이미 열어 두었는지 확인하세요.
로컬 네트워크 연결 상태 확인하기
웹 애플리케이션을 개발 중이라고 상상해보세요. 호스트의 루프백 주소(127.0.0.1)를 통해 애플리케이션에 접근하려고 하면 테스트가 실패합니다. 애플리케이션을 문제 해결하기 전에 내부적으로 TCP/IP 프로토콜이 작동하는지 ping
명령을 사용하여 확인하세요.
기본 루프백 주소는 IPv4와 IPv6에 각각 127.0.0.1과 0:0:0:0:0:0:0:1 (또는 ::1)입니다.
루프백 주소의 연결 상태를 확인하려면 아래의 ping
명령을 터미널에서 루프백 주소 뒤에 입력하세요. 이 명령은 리눅스에서 ping
명령의 가장 기본적인 사용법을 보여줍니다.
그리고 루프백이 정상적으로 작동한다면 아래 스크린샷과 유사한 출력을 볼 수 있어야 합니다.

또는 localhost
호스트명에 핑을 보내면 기본적으로 루프백 주소로 해석되어 동일한 결과를 얻어야 합니다.

ping
명령을 종료하려면 터미널에서 CTRL+C
를 누르세요. 그렇지 않으면 ping 명령이 계속해서 실행됩니다.
참고: ping 명령을 중지하려면 CTRL+Z를 누르지 마세요. 이렇게 하면 명령이 중지되지만 프로세스는 백그라운드에서 계속 실행됩니다.

Ping 명령의 리눅스 출력 이해하기
더 나아가기 전에 “작동한다”고만 해석하는 대신 출력을 명확하게 이해하는 것이 도움이 될 것입니다. 아래 이미지와 이어지는 값들의 분석을 참조하세요.

- A (
bytes
) – Shows the ICMP echo request (packet) size in bytes. - B (
from
) – Shows the target host’s IP addressfrom
where theping
command receives the response. - C (
icmp_seq
) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value showsicmp_seq=N
, whereN
is the order number. - D (
TTL
) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255. - E (
time
) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that thetime
values are less than 0.1 milliseconds in this example since the target is the same machine. Thetime
value increases naturally when theping
destinations are remote or have an internet address. - F (
statistics
) – Shows the summary and statistics of theping
command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.
인터넷 프로토콜 버전 강제하기
ping 명령은 기본적으로 IPv4를 사용합니다. 그러나 애플리케이션의 IPv6 호환성을 테스트하는 경우에는 어떻게 해야 할까요? Linux에서 ping 명령을 IPv6를 사용하도록 강제하려면 아래 코드에서 볼 수 있는 것처럼 ping 명령에 -6 옵션을 지정해야 합니다.
아래에서 볼 수 있듯이 응답이 IPv6 루프백 주소(::1)에서 왔음을 보여주는 from 응답이 나타납니다.

-6 옵션 대신 -4 옵션을 사용하면 ping을 IPv4로 사용하도록 강제합니다. 그러나 ping은 기본적으로 IPv4를 사용하므로 보통 -4 옵션을 지정할 필요가 없습니다.
응답 횟수 제한
이전 예제에서는 ping 명령을 계속 실행되게 하려면 CTRL+C를 눌러야 했습니다.
-c 옵션을 사용하면 ping 명령이 멈추기 전에 받을 응답의 수를 지정할 수 있습니다. 이 옵션을 사용하는 이유는 무엇일까요? 경우에 따라 시스템이 10, 100, 1000개의 ICMP 패킷에 대해 어떻게 응답하는지 테스트하고 싶을 수 있습니다.
다음 명령을 사용하여 대상 호스트로 다섯 개의 ICMP 패킷을 보내보세요. 멈출 때까지 받을 ICMP 응답의 수를 5로 바꿔주세요.
아래에서 볼 수 있듯이, ping 명령은 다섯 번째 요청(icmd_seq=5) 후에 멈추었고 CTRL+C를 누를 필요가 없습니다.

요청 간격 조정
두 장치 간의 네트워크 연결을 테스트하고 한 장치가 대역폭이 낮은 경우에는 각 요청 사이의 간격을 늘려서 두 번째 장치가 현재 ICMP 패킷을 처리하는 데 충분한 시간을 확보할 수 있습니다.
ping
명령은 기본적으로 이전 요청을 완료한 후에 1초 후에 다음 ICMP 요청을 보냅니다. 지연을 조정하려면 초 단위로 딜레이 값을 지정해야 합니다. 이를 위해 -i
옵션을 지정한 다음 지연 값을 초 단위로 입력해야 합니다.
예를 들어, 아래의 ping
명령을 실행하여 요청 간에 2초 간격으로 다섯 개의 ICMP 요청을 보내보세요.
또 다른 예로, 아래의 ping
명령을 실행하여 각 요청 사이에 0.5초 간격으로 다섯 개의 ICMP 요청을 보내보세요.
다른 간격을 가진 두 명령의 결과를 비교하면 총 time
값의 차이를 확인할 수 있습니다.

플러딩 공격 시뮬레이션
A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.
공격에 시스템이 어떻게 응답하는지 테스트하기 위해 플러드 공격을 시뮬레이션할 수 있습니다. 걱정하지 마세요. 핑 플러드 시뮬레이션은 제어되며, 언제든지 CTRL+C를 눌러 중지할 수 있습니다.
로컬 머신에서 다음 명령을 실행하여 기기가 초당 처리할 수 있는 요청 수를 확인해 보세요. -f
옵션은 여러 핑 패킷을 빠르게 전송하고 임의의 제한 없이 보내는 것을 의미합니다.
로컬호스트 대신 테스트하려는 앱의 IP 주소나 호스트 이름을 입력하세요. 이 예제는 로컬 호스트에서만 핑 플러드를 시뮬레이션합니다. 핑 명령을 약 5초간 실행한 다음 CTRL+C
를 눌러 종료하세요.
핑 -f 명령을 실행하려면 root 사용자이거나 sudo 권한이 필요합니다.
아래에서 볼 수 있듯이 ping 명령은 124,685
개의 ICMP 패킷을 4276
밀리초 내에 송수신하여 0%
의 패킷 손실로 성공했습니다. 꽤 좋죠? 그러나 실제 사용 시에는 일부 패킷 손실이 발생할 것입니다. 네트워크가 완벽하지 않기 때문에 패킷 손실은 피할 수 없습니다.

인터넷 연결 확인
모든 사람이 어떤 방식으로든 인터넷을 사용합니다, 맞죠? 브라우저를 사용하여 웹 사이트를로드하려고 시도하면 페이지로드 시간이 느린 것으로 느껴집니다. 이 증상은 DNS 해결이 작동하고 있지만 네트워크 속도에 영향을 미치는 것이라고 나타납니다.
제 3 자 도구없이 문제를 진단하려면 ping
명령을 사용해야합니다. 명령 사용법은 로컬 네트워크 연결을 테스트 할 때와 동일합니다. 그러나 루프백 주소를 대상으로하는 대신 공용 IP 또는 웹 주소를 지정해야합니다.
아래 명령을 실행하여 외부 공용 웹 사이트에 ping을 보냅니다. adamtheautomator.com을(를) 원하는 다른 웹 주소로 교체하십시오.
즉시 주목할 점은 localhost에 ping하는 것보다 시간 값이 비교적 더 높다는 것입니다. 이 추가된 시간은 대상 주소 adamtheautomator.com이 동일한 호스트 내에 있지 않으며 심지어 동일한 네트워크에도 없기 때문입니다.
이전 단계에서 ping 명령이 성공적이지만 실제 세계에서는 다양한 이유로 ping 명령이 실패할 때가 있습니다.
다음은 일반적인 오류 및 문제 해결 방법입니다.
- 목적지 호스트에 도달할 수 없음 – 이 오류는 목적지 호스트로의 경로가 없음을 의미합니다. 호스트 또는 도메인이 다운되어있을 경우 발생할 수 있습니다.
- 요청 시간이 초과되었습니다 – 이 오류는 목적지 호스트로의 요청이 너무 오래 걸려(4초 또는 4000밀리초 이상 소요됨) 연결 시간이 초과되었음을 의미합니다. 이 오류는 목적지 호스트가 응답하기에 너무 바쁜 경우, 방화벽이 연결을 차단하는 경우, 또는 네트워크 하드웨어(케이블, 라우터 등)에 결함이 있는 경우 발생할 수 있습니다.
- 알 수 없는 호스트 – 이 오류는 DNS가 호스트 이름을 IP 주소로 해석할 수 없음을 의미합니다. 올바른 호스트 이름을 입력했는지 확인하십시오. 라우터가 제대로 작동하지 않을 수 있다고 의심되면 라우터를 다시 시작해 보십시오.
- 전송 중에 TTL이 만료되었습니다 – 이 오류는 ICMP 요청이 목적지에 도달하기 전에 만료되었음을 의미합니다. 핑 패킷이 목적지 호스트에 도달하기 전에 제로(0)로 줄어들었습니다. 대부분의 경우 라우팅 테이블의 잘못된 구성으로 이 오류가 발생할 수 있습니다. 문제가 있는지 확인하려면 라우팅 테이블을 확인해 보십시오.
잘 알려지지 않은 사실: 게임 커뮤니티에서 플레이어들은 핑을 게임 서버와의 연결로 언급합니다. 낮은 핑은 반응이 빠른 연결을 의미하며 특히 고속 게임에서 더 중요합니다. 높은 핑은 반응이 덜한 연결을 나타내며 게임이 느린 것처럼 느껴질 수 있습니다.
일부 인터넷 서비스 제공업체(ISP)는 존재하지 않는 웹사이트에 연결하려고 할 때 오류 메시지 대신 검색 페이지를 반환합니다. 오류 대신 응답을 받기 때문에 오류가 아닌 것처럼 잘못된 양성 결과를 받을 수 있습니다.
파일로 핑 출력 저장
대부분의 명령어는 결과를 화면에만 반환하는데, 리눅스의 ping
명령어도 그렇습니다. 리눅스 터미널에는 출력을 파일로 리디렉션할 수 있게 해주는 내장 출력 리디렉션 연산자가 있습니다.
이 리디렉트 연산자는 다음과 같습니다:
(>
) 문자는 파일의 내용을 덮어쓸 것이고, 그리고;
(>>
) 문자는 출력을 기존 내용에 추가할 것입니다.
그러나 핑 결과를 파일에 저장하려는 이유는 무엇일까요? 주로 기록 유지 및 텍스트 편집기 또는 로그 파서를 사용하여 후속 분석을 위해서입니다.
또한 시간이 지남에 따라 핑 시간이 어떻게 변하는지 보여주는 그래프를 생성하기 위해 스프레드시트 프로그램을 사용할 수도 있습니다.
다음 명령어를 실행하여 핑 출력을 파일에 저장합니다. 이 명령어는 ping
명령어의 모든 표준 출력을 디스크에 있는 log.txt 파일에 작성합니다.
ping
명령어가 실행되는 동안 화면에는 출력이 표시되지 않습니다.
이제 텍스트 편집기(예: nano
)에서 log.txt 파일을 엽니다. 또는 cat
명령어를 실행하여 파일 내용을 표시하세요.


결론
이 튜토리얼에서는 리눅스에서 ping 명령어를 사용하는 방법과 다양한 실용적인 예제를 배웠습니다. 또한 나중에 분석할 수 있도록 ping 출력을 디스크에 파일로 저장하는 방법도 배웠습니다.
이 시점에서 ping 명령이 작동하는 방식과 어떻게 도움이 될 수 있는지에 대해 이해했을 것입니다. 그러나 주변의 모든 것을 피하고 시작하기 전에 ICMP 트래픽을 허용하기 위해 보안 그룹에서 몇 가지 규칙을 활성화해야 합니다
읽어 주셔서 감사합니다. 행복한 학습되세요!