다른 뜻에 대해서는 핑 (동음이의) 문서를 참고하십시오.
원저자마이크 무스
개발자여러 오픈 소스 소프트웨어상용 소프트웨어 개발자
발표일1983년(43년 전)(1983)
플랫폼크로스 플랫폼
종류명령어
라이선스퍼블릭 도메인 소프트웨어, BSD, GPL, MIT

(영어: ping)은 인터넷 프로토콜(IP) 네트워크 상에서 특정 호스트의 도달 가능성을 테스트하는 데 사용되는 네트워크 관리 유틸리티 소프트웨어이다. 다양한 운영체제에서 이용할 수 있다.

핑은 발신 호스트에서 전송된 메시지가 대상 컴퓨터에 도달한 뒤 다시 발신지로 반향(echo)되어 돌아오는 왕복 시간을 측정한다. 이름은 수중 물체를 감지하기 위해 음파를 쏘고 메아리를 듣는 소나 용어에서 유래했다.[1]

핑은 인터넷 제어 메시지 프로토콜(ICMP) 패킷을 통해 작동한다. 핑을 보낸다는 것은 대상 호스트에 ICMP 에코 요청을 보내고 ICMP 에코 응답을 기다리는 과정을 포함한다. 이 프로그램은 오류, 패킷 손실, 그리고 결과에 대한 통계 요약을 보고하는데, 일반적으로 최소, 최대, 평균 왕복 시간 및 평균에 대한 표준 편차를 포함한다.

명령줄 옵션단말기 출력은 구현 방식에 따라 다르다. 옵션에는 페이로드 크기, 테스트 횟수, 프로브가 통과하는 네트워크 홉 제한(TTL), 요청 간격, 응답 대기 시간 등이 포함될 수 있다. 많은 시스템은 인터넷 프로토콜 버전 6(IPv6) 네트워크 테스트를 위해 ICMPv6를 사용하는 ping6라는 보조 유틸리티를 제공한다.

역사

DOS용 핑

핑(Ping) 유틸리티는 1983년 12월, 당시 탄도 연구소(현재의 미국 육군 연구소)에 근무하던 마이크 무스가 작성했다. 데이비드 밀스가 IP 네트워크 진단 및 측정을 위해 ICMP 에코 패킷을 사용하는 것에 대해 언급한 것이 무스가 네트워크 문제를 해결하기 위한 유틸리티를 만들게 된 계기가 되었다.[1] 저자는 소나의 방법론이 에코로케이션과 유사하기 때문에 소나가 내는 소리에서 이름을 따왔다.[1][2] ping에 대한 역두문자어인 'Packet Internet Groper'는 30년 넘게 사용되어 왔다. 무스는 자신의 관점에서 ping은 두문자어로 의도된 것이 아니었으나, 밀스가 확장한 명칭에 대해서는 인정했다.[1][3] 최초로 출시된 버전은 퍼블릭 도메인 소프트웨어였으며, 이후의 모든 버전은 BSD 허가서에 따라 라이선스가 부여되었다. Ping은 4.3BSD에 처음 포함되었다.[4] 프리도스 버전은 에릭 엥겔케가 개발했으며 GPL에 따라 라이선스가 부여된다.[5] 팀 크로포드가 ReactOS 버전을 개발했다. 이는 MIT 허가서에 따라 라이선스가 부여된다.[6]

모든 호스트는 ICMP 에코 요청을 처리하고 이에 대한 에코 응답을 반환해야 한다.[7]

실행 예시

다음은 리눅스에서 대상 호스트 www.example.com으로 5개의 프로브(기본값은 1초 간격, -i 옵션으로 설정 가능)를 보내는 ping 실행 결과이다.

$ ping -c 5 www.example.com

PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=9.674 ms
64 bytes from 93.184.216.34: icmp_seq=4 ttl=56 time=11.127 ms

--- www.example.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.674/10.968/11.726/0.748 ms

출력에는 각 프로브 메시지와 얻은 결과가 나열된다. 마지막으로 전체 테스트에 대한 통계가 나열된다. 이 예시에서 가장 짧은 왕복 시간은 9.674ms, 평균은 10.968ms, 최대값은 11.726ms였다. 측정값의 표준 편차는 0.748ms였다.

오류 표시

대상 호스트로부터 응답이 없는 경우, 대부분의 구현체는 아무것도 표시하지 않거나 타임아웃에 대한 알림을 주기적으로 출력한다. 문제를 나타내는 가능한 ping 결과는 다음과 같다.

  • H, !N 또는 !P – 호스트, 네트워크 또는 프로토콜에 도달할 수 없음
  • S – 소스 경로 실패
  • F – 단편화 필요
  • U 또는 !W – 목적지 네트워크/호스트 알 수 없음
  • I – 소스 호스트가 격리됨
  • A – 목적지 네트워크와의 통신이 관리적으로 금지됨
  • Z – 목적지 호스트와의 통신이 관리적으로 금지됨
  • Q – 이 ToS에 대해 목적지 네트워크에 도달할 수 없음
  • T – 이 ToS에 대해 목적지 호스트에 도달할 수 없음
  • X – 통신이 관리적으로 금지됨
  • V – 호스트 우선순위 위반
  • C – 우선순위 차단 적용됨

오류가 발생하면 대상 호스트나 중간 라우터는 호스트 도달 불가 또는 전송 중 TTL 초과와 같은 ICMP 오류 메시지를 반환한다. 또한, 이러한 메시지에는 원래 메시지의 처음 8바이트(이 경우 퀀치 값을 포함한 ICMP 에코 요청 헤더)가 포함되므로 ping 유틸리티가 응답을 원래 쿼리와 일치시킬 수 있다.[8]

메시지 형식

IPv4로 전송되는 ICMP 패킷

IPv4로 전송되는 ICMP 패킷의 구조는 다음과 같다.

IPv4 데이터그램
오프셋 옥텟 0 1 2 3
옥텟 비트 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 버전 (4) IHL (5) DSCP (0) ECN (0) 전체 길이
4 32 식별자 플래그 단편화 오프셋
8 64 타임 투 리브 프로토콜 (1) 헤더 체크섬
12 96 소스 주소
16 128 목적지 주소
ICMP 에코 요청 패킷
20 160 유형 (8) 코드 (0) 체크섬
24 192 식별자 시퀀스 번호
28 224 (페이로드)
32 256
유형: 8 비트
'에코 요청'임을 나타내기 위해 8로 설정.[9]
체크섬: 16 비트
체크섬은 유형 필드에서 시작하는 ICMP 패킷의 1의 보수 합에 대한 16비트 1의 보수이다.[10] 페이로드를 포함한다. IP 헤더는 포함되지 않는다.
식별자: 16 비트
클라이언트가 응답을 요청과 일치시키는 데 사용할 수 있다.
시퀀스 번호: 16 비트
클라이언트가 응답을 요청과 일치시키는 데 사용할 수 있다.
페이로드: 가변 길이
선택 사항. 다양한 종류의 응답을 위한 페이로드이며, 임의의 길이일 수 있고 구현 세부 사항에 따라 달라진다.

대부분의 리눅스 시스템은 모든 ping 프로세스에 대해 고유한 식별자를 사용하며, 시퀀스 번호는 해당 프로세스 내에서 증가하는 숫자이다. 윈도우는 고정된 식별자를 사용하는데 이는 윈도우 버전에 따라 다르며, 시퀀스 번호는 부팅 시에만 초기화된다.

에코 응답은 다음과 같이 반환된다:

ICMP 에코 응답 패킷
20 160 유형 (0) 코드 (0) 체크섬
24 192 식별자 시퀀스 번호
28 224 (페이로드)
32 256
유형: 8 비트
'에코 응답'임을 나타내기 위해 0으로 설정.[9]
식별자: 16 비트
에코 요청에서 복사되어 반환된다.
시퀀스 번호: 16 비트
에코 요청에서 복사되어 반환된다.
페이로드: 가변 길이
선택 사항. 페이로드는 에코 요청에서 복사되어 반환된다.

IPv6로 전송되는 ICMPv6 패킷

IPv6로 전송되는 ICMP 패킷의 구조는 다음과 같다.

IPv6 데이터그램
오프셋 옥텟 0 1 2 3
옥텟 비트 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 버전 (6) 트래픽 클래스 흐름 레이블
4 32 페이로드 길이 다음 헤더 (58) 홉 제한
8 64 소스 주소
12 96
16 128
20 160
24 192 목적지 주소
28 224
32 256
36 288
ICMPv6 에코 요청 패킷
40 320 유형 (128) 코드 (0) 체크섬
44 352 식별자 시퀀스 번호
48 384 (페이로드)
52 416
유형: 8 비트
'에코 요청'임을 나타내기 위해 128로 설정.
식별자: 16 비트
클라이언트가 응답을 요청과 일치시키는 데 사용할 수 있다.
시퀀스 번호: 16 비트
클라이언트가 응답을 요청과 일치시키는 데 사용할 수 있다.
체크섬: 16 비트
체크섬은 IPv6 의사 헤더가 앞에 붙은 ICMP 메시지(유형 필드부터 시작)에서 계산된다.[11]
페이로드: 가변 길이
선택 사항. 다양한 종류의 응답을 위한 페이로드이며, 임의의 길이일 수 있고 구현 세부 사항에 따라 달라진다.

대부분의 리눅스 시스템은 모든 ping 프로세스에 대해 고유한 식별자를 사용하며, 시퀀스 번호는 해당 프로세스 내에서 증가하는 숫자이다. 윈도우는 고정된 식별자를 사용하는데 이는 윈도우 버전에 따라 다르며, 시퀀스 번호는 부팅 시에만 초기화된다.

에코 응답은 다음과 같이 반환된다:

ICMPv6 에코 응답 패킷
40 320 유형 (129) 코드 (0) 체크섬
44 352 식별자 시퀀스 번호
48 384 (페이로드)
52 416
유형: 8 비트
'에코 응답'임을 나타내기 위해 129로 설정.
식별자: 16 비트
에코 요청에서 복사되어 반환된다.
시퀀스 번호: 16 비트
에코 요청에서 복사되어 반환된다.
페이로드: 가변 길이
선택 사항. 페이로드는 에코 요청에서 복사되어 반환된다.

페이로드

패킷의 페이로드는 일반적으로 ASCII 문자로 채워지며, Tcpdump 유틸리티의 출력 예시에서 마지막 32바이트(0x0800으로 시작하는 8바이트 ICMP 헤더 이후)를 통해 확인할 수 있다:

16:24:47.966461 IP (tos 0x0, ttl 128, id 15103, offset 0, flags [none],
proto: ICMP (1), length: 60) 192.168.146.22 > 192.168.144.5: ICMP echo request,
id 1, seq 38, length 40
       0x0000:  4500 003c 3aff 0000 8001 5c55 c0a8 9216  E..<:.....\U....
       0x0010:  c0a8 9005 0800 4d35 0001 0026 6162 6364  ......M5...&abcd
       0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
       0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

페이로드에는 전송 시간과 시퀀스 번호를 나타내는 타임스탬프가 포함될 수 있으나, 이 예시에서는 찾을 수 없다. 이를 통해 ping은 각 패킷의 전송 시간을 기록할 필요 없이 비상태성 방식으로 왕복 시간을 계산할 수 있다.

페이로드에는 웨이크 온 랜 프로토콜을 위한 매직 패킷이 포함될 수 있지만, 이 경우 최소 페이로드는 표시된 것보다 길다. 호스트가 최대 절전 모드일 경우 에코 요청은 일반적으로 응답을 받지 못하지만, 인터페이스가 웨이크업 요청을 수락하도록 구성된 경우 호스트는 절전 모드에서 깨어난다. 호스트가 이미 활성화되어 있고 들어오는 ICMP 에코 요청 패킷에 대한 응답을 허용하도록 구성된 경우, 반환된 응답에는 동일한 페이로드가 포함되어야 한다. 이는 호스트가 네트워크 서비스를 재개할 시간을 주기 위해 잠시 대기한 후 새로운 요청을 반복함으로써 원격 호스트가 실제로 깨어났는지 감지하는 데 사용될 수 있다. 호스트가 저전력 활성 상태로 수면 중이었다면, 서비스가 활성화된 경우 단일 요청만으로도 호스트를 에코 응답 서비스가 즉시 응답할 수 있을 정도로 깨울 수 있다. 호스트는 모든 장치를 완전히 깨울 필요가 없으며 짧은 지연 후 저전력 모드로 돌아갈 수 있다. 이러한 구성은 호스트가 저전력 활성 모드에서 일정 시간 경과 후 재개 시간이 훨씬 긴 최대 절전 모드로 들어가는 것을 방지하는 데 사용될 수 있다.

IP 및 ICMP 헤더를 포함하는 패킷은 네트워크의 최대 전송 단위보다 커서는 안 되며, 그렇지 않으면 IP 단편화의 위험이 있다.

보안 취약점

서비스 거부 공격을 수행하기 위해 공격자는 핑 요청을 최대한 빠르게 보내 피해자를 ICMP 에코 요청으로 압도할 수 있다. 이 기술을 핑 플러드라고 한다.[12]

여러 주소로 핑 요청을 보내는 핑 스윕은 네트워크에 있는 모든 호스트의 목록을 얻는 데 사용될 수 있다.

같이 보기

각주

  1. Mike Muuss. “The Story of the PING Program”. U.S. Army Research Laboratory. 2019년 10월 25일에 원본 문서에서 보존된 문서. 2010년 9월 8일에 확인함. My original impetus for writing PING for 4.2a BSD UNIX came from an offhand remark in July 1983 by Dr. Dave Mills ... I named it after the sound that a sonar makes, inspired by the whole principle of echo-location ... From my point of view PING is not an acronym standing for Packet InterNet Grouper, it's a sonar analogy. However, I've heard second-hand that Dave Mills offered this expansion of the name, so perhaps we're both right. 
  2. Salus, Peter (1994). 《A Quarter Century of UNIX》. Addison-Wesley. ISBN 978-0-201-54777-1. 
  3. Mills, D.L. (December 1983). Internet Delay Experiments. IETF. RFC 889. https://tools.ietf.org/html/rfc889. Retrieved 26 November 2019. 
  4. “man page ping section 8”. 《www.manpagez.com》. 
  5. “ibiblio.org FreeDOS Package -- ping (Networking)”. 《www.ibiblio.org》. 
  6. “GitHub - reactos/reactos: A free Windows-compatible Operating System.”. 2019년 8월 8일 – GitHub 경유. 
  7. R. Braden, ed. (October 1989). Requirements for Internet Hosts -- Communication Layers. Network Working Group. STD 3. RFC 1122. https://tools.ietf.org/html/rfc1122.  Internet Standard 3. Updated by RFC 1349, 4379, 5884, 6093, 6298, 6633, 6864, 8029 and 9293. Every host MUST implement an ICMP Echo server function that receives Echo Requests and sends corresponding Echo Replies.
  8. “ICMP: Internet Control Message Protocol”. 《repo.hackerzvoice.net》. 2000년 1월 13일. 2016년 8월 4일에 원본 문서에서 보존된 문서. 2014년 12월 4일에 확인함. 
  9. J. Postel (September 1981). INTERNET CONTROL MESSAGE PROTOCOL - DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION. Network Working Group. STD 5. RFC 792. https://tools.ietf.org/html/rfc792.  Internet Standard 5. Updates RFC 760, 777, IENs 109, 128. Updated by RFC 950, 4884, 6633 and 6918.
  10. “RFC Sourcebook's page on ICMP”. 2018년 7월 6일에 원본 문서에서 보존된 문서. 2010년 12월 20일에 확인함. 
  11. A. Conta; S. Deering (March 2006). M. Gupta. ed. Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification. Network Working Group. STD 89. RFC 4443. https://tools.ietf.org/html/rfc4443.  Internet Standard 89. Obsoletes RFC 2463. Updates RFC 2780. Updated by RFC 4884.
  12. “What is a Ping Flood | ICMP Flood | DDoS Attack Glossary | Imperva” (미국 영어). 《Learning Center》. 2021년 7월 26일에 확인함. 

추가 문헌

외부 링크

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.