Computer Science/Network

[Network] 네트워크 확인을 위한 명령어(1) - ping

soro.k 2024. 8. 22. 09:16

 

Ping

IP 네트워크를 통해 특정 목적지까지 네트워크가 잘 동작하는지 확인하는 명령어이다.

 

기본 문법

ping [option] [target_name]

 

option은 선택적으로 사용할 수 있으며, target_name에는 목적지 Host의 IP 주소 혹은 도메인을 적는다. 해당 명령어를 사용할 때는 먼저 localhost에서 실행해서 로컬 네트워크 인터페이스가 작동 중인지 확인한 후에 점점 더 멀리 있는 Host와 Gateway에 ping 명령어를 수행해야 한다. 그래야 네트워크의 어느 부분에 문제가 있는지 단계적으로 파악해 나갈 수 있기 때문이다. 기본적으로 송신되는 인터페이스에서 설정된 IP가 출발지 IP로 지정되지만 출발지 옵션을 통해 루프백 인터페이스 IP, 즉 127.0.0.1(IPv4) 혹은 ::1(IPv6)이나 다른 인터페이스의 IP를 출발지 IP로 지정해 명령을 수행할 수 있다.

 

네트워크 통신을 확인해 보기 위해 ping 명령어를 사용해 보자.

ping google.co.kr

위의 스크린샷의 시작 행을 보면 56바이트의 데이터가 google.co.kr로 패킷에 담겨 보내진다는 것을 알 수 있다. 하지만 출력되는 데이터를 보면 56바이트가 아닌 64바이트인 것을 볼 수 있는데 이것은 패킷의 크기인 56바이트에 ICMP 헤더 8바이트가 추가됐기 때문이다. 참고로 해당 명령어는 패킷이 4번만 보내지는 윈도우가 아닌 linux에서 수행됐기 때문에  Ctrl + C를 통해 중지해줬다.

 

그 다음은 통계 영역이다. 세 개의 패킷이 전송되었으며 손실 없이 수신된 사실을 알 수 있다. 마지막 행의 정보들은 rtt(round-trip time) 중 min(응답을 받기까지 최소 시간), avg(평균 시간), max(최대 시간), mdev(평균 편차)이다.

 

ping 명령어를 수행하면 알 수 있는 정보를 정리해 보자면 다음과 같다.

  • 패킷 왕복 시간 
  • 패킷 손실 통계

 

OS 별 명령어 옵션

주요 옵션은 배경색을 다르게 표시했다.

 

Windows

 

옵션 설명
-t 중단될 때까지 ping이 목적지 주소에 Echo Request 메시지를 계속 보내도록 지정한다.
통계를 중단하고 표시하려면 Ctrl + Enter를 누른다. 명령을 중단하고 종료하려면 Ctrl + C를 누른다.
-a 대상 IP 주소에서 도메인 이름을 확인한다.
-n count ping을 보내는 패킷(Echo Request) 수를 지정한다. 기본 값은 4이다.
-l size 패킷의 크기를 지정한다. 기본 값은 32바이트이며, 최대 크기는 65,500이다.
-f <<IPv4>> Flags에 DF(Don’t fragment)가 1로 설정된 Echo Request 메시지를 보내도록 지정한다. PMTU(최대 전송 단위) 문제 해결에 유용하다.
-i TTL IP 헤더의 TTL(Time To Live) 필드 값을 지정한다. 기본 값은 호스트의 기본 TTL 값이며 최대 TTL은 255이다.
-v TOS <<IPv4>> IP 헤더의 *TOS(서비스 유형) 필드 값을 지정한다. 기본 값은 0이며, TOS는 0에서 255까지 설정 가능하나 더 이상 사용하지 않는다.
-r count <<IPv4>> 홉의 경로를 기록한다. 최대 9홉까지 설정 가능하다.
-s count <<IPv4>> IP 헤더의 인터넷 타임스탬프 옵션을 사용하여 Echo Request 메시지의 도착 시간과 각 홉에 해당하는 Echo Response 메시지를 기록하도록 지정한다. 개수는 최소 1, 최대 4이다.
-j host-list <<IPv4>> 데이터를 전송할 경로를 지정할 수 있다. 지정한 중간 목적지는 꼭 거치되, 그 사이에 다른 경로를 거쳐도 상관없음을 의미한다.(느슨한 원본 경로 지정)
-k host-list <<IPv4>> 데이터를 전송할 경로를 지정할 수 있다. 지정한 중간 목적지를 꼭 거치되, 그 사이에 다른 경로를 거치면 안됨을 의미한다. (엄격한 원본 경로 지정)
-w timeout Echo Response를 기다리는 시간을 지정한다. 기본 제한 시간은 4000(4초)이다.
-R <<IPv6>> 라우팅 헤더를 사용해 왕복 경로를 추적한다. RFC 5095에 따라 더 이상 사용되지 않는다.
-S srcaddr 출발지 주소를 지정한다. 기본 값은 라우팅 테이블에 의해 송신 인터페이스(Outgoing-Interface)의 IP 주소가 출발지 주소가 된다.
-c compartment 지정한 *라우팅 컴파트먼트에서 패킷을 보내 대상 주소로 ping을 수행한다.
-p Hyper-V를 사용한 가상화 환경에서 특정 네트워크 가상화 공급자 주소에 대해 ping을 수행한다.
-4 IPv4를 지정한다.
-6 IPv6를 지정한다.

*TOS(Type of Service): 패킷이 네트워크를 통해 전달될 때 어떤 종류의 서비스를 요청하는지 나타내는 필드로 우선순위나 요구사항을 표현한다.

*라우팅 컴파트먼트: 윈도우 운영체제에서 네트워킹 스택에서 라우팅 테이블을 구분하기 위한 논리적인 컨테이너

 

 

Linux

 

옵션 설명
-c count ping을 보내는 패킷(Echo Request)을 몇 번 보내고 종료할 것인지 지정한다.
기본 설정은 강제로 정지(Ctrl + C)할 때까지 지속적으로 보내게 되어있다.
-i interval 패킷을 보내는 시간 간격이다. 기본 설정 값은 1초 이며 슈퍼 유저의 경우 0.2 이하로 설정할 수 있다.
-I interface 출발지 주소를 지정한다. 기본 값은 라우팅 테이블에 의해 송신 인터페이스(Outgoing-Interface)의 IP 주소가 출발지 주소가 된다.
-m mark 특정 라우팅 마크를 설정한다.
-M pmtudisc_option 패킷의 최대 전송 단위를 결정한다.
-l preload 응답을 기다리지 않고 패킷을 보낸다. 루트 사용자는 이 값을 3보다 크게 설정할 수 있다.
-p pattern 특정 데이터로 ping 패킷을 채운다.
-Q TOS ICMP 데이터그램에 포함된 *서비스 품질(QoS) 관련 비트를 설정하는 데 사용된다. 패킷의 우선순위 또는 서비스 요구사항을 지정하여 네트워크 트래픽을 제어하거나 최적화하는 데 유용하다. 실제로는 *RFC 1349의 *TOS 필드를 사용하는 것이 아니라, *RFC 2474에 따른 DSCP 필드를 사용하고 있다.
-q 요약 정보만 출력한다.
-s packetsize 패킷의 크기를 지정한다. 기본 값은 56바이트(ICMP 헤더(8바이트)가 추가되어 최종 64바이트)를 송신한다.
-S sndbuf 소켓 송신 버퍼 크기를 지정한다.
-t TTL IP 헤더의 TTL(Time To Live) 필드 값을 지정한다.
-T timestamp_option 타임스탬프 옵션을 지정한다.
1. tsonly: 타임스탬프만
2. tsandaddr: 타임스탬프 및 주소,
3.tsprespec: 여러 호스트에 대해 미리 지정된 타임스탬프
-w deadline 전체 ping 작업을 수행할 최대 시간(초)을 설정한다.
-W timeout 응답을 기다리는 시간을 초 단위로 설정한다.
-4 IPv4를 지정한다.
-6 IPv6를 지정한다.

*서비스 품질(Qos, Quality of Service): 네트워크 트래픽을 제어하여 특정 유형의 트래픽(예: 비디오 스트리밍, 음성 녹화)에게 더 높은 우선순위를 부여하고, 지연시간, 대역폭 등을 최적화하는 기술

*RFC 1349: IPv4에서 패킷의 우선순위와 서비스 유형(예: 최소 지연, 최대 처리량 등)을 지정하기 위한 TOS(Type of Service) 필드를 정의한 문서

*RFC 2474: 기존의 TOS 필드를 재정의하여, 패킷의 우선순위와 서비스 수준을 더 세밀하게 제어할 수 있는 DSCP(Differentiated Services Code Point)를 도입하여 정의한 문서

*TOS 필드: 기존의 TOS 필드는 10진수나 16진수로 지정한다. 예를 들어, 0x10은 "low delay" (낮은 지연 시간)를 요청하는 패킷으로 설정하는 것이다. 재정의된 TOS 필드는 상위 6비트는 DSCP(트래픽 분류, 우선순위 지정), 하위 2비트는 ECN(혼잡 제어 지원)으로 지정한다. 

 

예제

Linux 환경에서 ping 명령어와 옵션을 활용해 실습해 보자.

 

1️⃣ ping version 확인하기

ping -v

 

2️⃣ 패킷을 보낼 횟수 지정하기

google.co.kr로 패킷을 2번 보내는 명령어이다.

ping -c 2 google.co.kr

 

기본 값으로 ping 명령어를 사용했을 때는 Ctrl + C로 중지하지 않을 때까지 계속해서 패킷을 전송한다.

 

-c 옵션을 사용해 횟수를 지정해 주면 해당 횟수만큼만 행이 출력된다.

 

3️⃣ 패킷의 크기 지정하기

패킷의 크기를 40으로 지정하고 추가 옵션으로 패킷을 보내는 횟수를 2번으로 지정했다.

ping -s 40 -c 2 google.co.kr

 

처음에 설명했던 것처럼 기본 값은 56 바이트이다.

 

-s 옵션을 사용해 크기를 지정해 주면 해당 크기를 가진 패킷을 전송하는 것을 확인할 수 있다.

 

4️⃣ 패킷 전송 시간 간격 지정하기

-i 옵션을 사용해 패킷 전송 시간 간격을 3초로 지정하고 추가 옵션으로 패킷을 보내는 횟수를 4번으로 지정했다.

ping -i 3 -c 4 google.co.kr

 

실제로 한 행씩 결과가 출력될 때 각 행 사이에 텀이 생긴다.

 

5️⃣ 요약 정보만 출력하기

-q 옵션과 함께 패킷을 보내는 횟수를 5번으로 지정했다.

ping -c 5 -q google.co.kr

 

5번 보낸 결과를 각 행으로 출력하는 게 아니라 마지막 통계 정보만 출력한다.

 

6️⃣ 수행 시간 지정하기

-w 옵션으로 전체 수행 시간을 3초로 지정하면 해당 시간이 지난 뒤 명령어 수행이 종료된다.

ping -w 3 google.co.kr

 

7️⃣ 타임스탬프 추가하기

-T 옵션으로 타임스탬프만 추가하면 화면에서 22230510와 같은 타임스탬프 값을 확인할 수 있다.

ping -T tsonly 127.0.0.1

 

-T 옵션으로 타임스탬프와 주소를 추가하면 화면에서 타임스탬프 값과 주소 값이 출력된다.

ping -T tsandaddr 127.0.0.1

 

 

 

정리

  • ping은 IP 네트워크를 통해 특정 목적지까지 네트워크가 잘 동작하는지 확인하는 명령어이다.
  • 네트워크에 문제가 생긴 구간을 단계적으로 파악하기 위해 로컬부터 점점 멀리 있는 목적지 정보를 테스트해야 한다.
  • ping 명령어로 패킷을 전송했을 때 왕복 시간과 패킷 손실 통계를 확인할 수 있다.
  • ping 명령어의 다양한 옵션으로 조건을 지정해 패킷을 전송할 수 있다.

 

참고