본문 바로가기

네트워크

네트워크 진단 핑(ping) 하나면 충분하다. 모르고 있었던 핑의 모든것

연결성을 분석할 수 있는 프로그램이 몇 가지 있지만 의심할 필요 없이 ping을 가장 많이 사용한다.
IP RFC에서도 요구되듯이 ping은 어떤 시스템과 함께 공급되는 네트워킹 소프트웨어의
일부분으로 항상 존재한다.
ping은 기본적으로는 간단한 아이디어에 기반을 둔 프로그램이다.
한 네트워크 장치가 다른 장치로 응답을 기다리기 위해 요청을 보낸다.
그리고 요청을 보낸 시각을 기록한다. 응답을 수신하면 패킷 전판에 소용된 왕복여행시간(round trip time)을
계산할 수 있다. 응답을 수신했다는 것은 연결이 동작한다는 것을 뜻한다.
경과 시간은 경로의 길이를 나타낸다.
이렇게 ping으로 두 가지 기본적 질문에 답을 알 수 있다.
연결되어 있는가? 연결이 얼마나 잘 동작하는가?
동작하는 프로그램의 네트워킹 프로토콜은 이런 질의/응답 메커니즘을 제공해야한다.
ping프로그램은 TCP/IP 프로토콜의 일부인 ICMP(Internet Control Message Protocol)에 기반을 두고 있다.
ICMP는 네트워크 장치사이의 네트워크 성능 정보를 교환하기 위해 그리고 에러 메세지를
교환하기 위해 설계되었다. 그것은 매우 많은 메시지 종류를 지원하는 질의/응답 매커니즘을 사용한다.
정상적으로 동작하는 ping은 두 가지 특정한 ICMP 메시지인 ECHO_REQUEST와 ECHO_REPLY를 사용한다.
그러나 ping은 필요하다면 ECHO_REPLY가 아닌 ICMP메시지에도 응답한다.
이론적으로 모든 TCP/IP기반의 네트워크 장비는 소스주소로 패킷을 되돌려 보내기 위해
ECHO_REQUEST에 응답해야 하지만 실제로는 항상 그렇게 동작하지는 않는다.

ex) 필자는 openbsd이다.
# ping www.daum.net
PING www.daum.net (211.233.28.114): 56 data bytes
64 bytes from 211.233.28.114: icmp_seq=0 ttl=248 time=22.910 ms
64 bytes from 211.233.28.114: icmp_seq=1 ttl=248 time=12.324 ms
64 bytes from 211.233.28.114: icmp_seq=2 ttl=248 time=12.359 ms
64 bytes from 211.233.28.114: icmp_seq=3 ttl=248 time=11.300 ms
--- www.daum.net ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 11.300/14.723/22.910/4.746 ms

ping의 응답 메세지를 이용하여 문제의 증상을 알수 있다.
-Destination Host Unreachable
:라우터가 그 네트워크를 위한 경로를 가지지 않기 때문에 위와 같은 메세지를 보낸다.

ping의 여러가지 옵션
# ping -f 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
..
--- 192.168.1.1 ping statistics ---
39459 packets transmitted, 39455 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.202/0.238/8.012/0.083 ms
-f옵션은 수신 호스트가 다룰 수 있는 한 가장 빠른 속도로 패킷을 전송할 것을 지정한다.
경로에 대한 부하 시험을 하거나 인터페이스의 속도를 비교하기 위한 지표를 구할때 사용된다.


# ping -c5 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=128 time=0.358 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=128 time=0.301 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=0.312 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=128 time=0.306 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=128 time=0.318 ms
--- 192.168.1.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.301/0.319/0.358/0.020 ms
-c옵션은 갯수를 조절할수 있다.


# ping -s1024 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 1024 data bytes
1032 bytes from 192.168.1.1: icmp_seq=0 ttl=128 time=0.881 ms
1032 bytes from 192.168.1.1: icmp_seq=1 ttl=128 time=0.823 ms
1032 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=0.838 ms
1032 bytes from 192.168.1.1: icmp_seq=3 ttl=128 time=0.925 ms
1032 bytes from 192.168.1.1: icmp_seq=4 ttl=128 time=0.787 ms
1032 bytes from 192.168.1.1: icmp_seq=5 ttl=128 time=0.817 ms
--- 192.168.1.1 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.787/0.845/0.925/0.048 ms
-s옵션은 data의 크기를 조절할수 있다.


# ping -l100 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=128 time=1.938 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=3.533 ms
64 bytes from 192.168.1.1: icmp_seq=34 ttl=128 time=3.387 ms
64 bytes from 192.168.1.1: icmp_seq=66 ttl=128 time=2.999 ms
64 bytes from 192.168.1.1: icmp_seq=101 ttl=128 time=0.286 ms
^C64 bytes from 192.168.1.1: icmp_seq=102 ttl=128 time=0.302 ms
64 bytes from 192.168.1.1: icmp_seq=103 ttl=128 time=0.326 ms
--- 192.168.1.1 ping statistics ---
104 packets transmitted, 7 packets received, 93% packet loss
round-trip min/avg/max/std-dev = 0.286/1.824/3.533/1.398 ms
-l옵션은 카운트를 받아서 가능한 빠르게 많은 패킷을 송신한다.
그리고 평상모드로 되돌아 온다. 이것으로 라우터가 패킷의 넘침을 어떻게 처리하는지 볼수 있다.
이 명령은 관리자만 사용할 수 있다.


# ping -i5 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=128 time=0.367 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=128 time=0.341 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=0.331 ms
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.331/0.346/0.367/0.021 ms
-i옵션은 패킷을 연속적으로 보낼 때 각 송신 사이에서 기다려야 할 시간을 초 단위로 지정할 수 있다.

단 위의 옵션들은 BSD계열에서만 지원될수도 있다.
윈도우의 도스창이나 솔라리스같은경우는 옵션이 다를수 있으니 참고하시기 바랍니다.



TTL
핑을 써보면 핑을 쏜 서버의 운영체제를 알수 있습니다.

윈도우 계열
# ping 192.168.1.34
PING 192.168.1.34 (192.168.1.34): 56 data bytes
64 bytes from 192.168.1.34: icmp_seq=0 ttl=128 time=1.418 ms
64 bytes from 192.168.1.34: icmp_seq=1 ttl=128 time=0.814 ms
64 bytes from 192.168.1.34: icmp_seq=2 ttl=128 time=0.802 ms
64 bytes from 192.168.1.34: icmp_seq=3 ttl=128 time=0.810 ms
64 bytes from 192.168.1.34: icmp_seq=4 ttl=128 time=0.809 ms
64 bytes from 192.168.1.34: icmp_seq=5 ttl=128 time=0.807 ms
--- 192.168.1.34 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.802/0.910/1.418/0.227 ms
#


유닉스 계열

# ping 192.168.1.32
PING 192.168.1.32 (192.168.1.32): 56 data bytes
64 bytes from 192.168.1.32: icmp_seq=0 ttl=255 time=1.649 ms
64 bytes from 192.168.1.32: icmp_seq=1 ttl=255 time=0.657 ms
64 bytes from 192.168.1.32: icmp_seq=2 ttl=255 time=0.632 ms
64 bytes from 192.168.1.32: icmp_seq=3 ttl=255 time=0.635 ms
64 bytes from 192.168.1.32: icmp_seq=4 ttl=255 time=0.627 ms
64 bytes from 192.168.1.32: icmp_seq=5 ttl=255 time=0.634 ms
--- 192.168.1.32 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.627/0.805/1.649/0.378 ms
#

제가 핑을 쏘아 봤습니다.
34번의 경우는 윈도우 계열의 서버
32번은 리눅스 서버입니다.

어떻게 구별 할 수 있냐하면 ... 바로 TTL (Time To Live)

ttl 값이 255 는 유닉스 계열
ttl 값이 128 은 윈도우 계열입니다.
ttl값은 라우터를 하나 지날때 마다 1씩 감소 합니다.
그러므로 ttl값이 100번때이면 윈도우 계열
ttl값이 200번때면 유닉스 계열 이겠지요!
그럼 다음 서버에 한번 핑을 쏘야 봅시다.

다음
# ping www.daum.net
PING www.daum.net (211.233.28.115): 56 data bytes
64 bytes from 211.233.28.115: icmp_seq=0 ttl=247 time=24.399 ms
64 bytes from 211.233.28.115: icmp_seq=1 ttl=247 time=24.827 ms
64 bytes from 211.233.28.115: icmp_seq=2 ttl=247 time=28.171 ms
64 bytes from 211.233.28.115: icmp_seq=3 ttl=247 time=14.305 ms
--- www.daum.net ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 14.305/22.925/28.171/5.189 ms

ttl값이 247인것 으로 보아 유닉스 계열 이겠지요!
아마 프리비나 리눅스를 쓰는 것 같군요!