목차
핑(Ping)이란?
핑(Ping) 명령어는 네트워크 장치 간의 연결 상태와 통신 속도를 검사하는 데 주로 사용되는 도구입니다. 핑은 인터넷 제어 메시지 프로토콜(ICMP) 에코 요청 메시지를 목적지 컴퓨터에 보내고 응답을 기다리는 방식으로 작동합니다. 이 과정을 통해 두 가지 주요한 정보를 얻을 수 있습니다: 응답이 얼마나 반환되었는지, 그리고 그 응답이 반환되기까지 얼마나 걸렸는지입니다.
1. 시간 초과(Timeouts)와 패킷 손실(Packet Loss)
- 응답이 없거나 지연되는 경우, 이를 '시간 초과'라고 합니다. 이는 대상 장치가 오프라인이거나, 네트워크 경로에 문제가 있음을 나타낼 수 있습니다.
- 패킷 손실은 보낸 패킷 중 일부가 목적지에 도달하지 못하는 경우를 말합니다. 이는 네트워크 혼잡, 하드웨어 문제, 또는 잘못된 구성 등 다양한 원인으로 발생할 수 있습니다.
2. 라운드트립 시간(Round-Trip Time, RTT)
- 핑이 응답을 받는 데 걸리는 시간을 RTT라고 합니다. 이 시간은 네트워크의 지연 시간을 나타내며, 일반적으로 밀리초(ms) 단위로 표시됩니다.
- 높은 RTT 값은 네트워크 지연이 크다는 것을 의미하며, 이는 데이터 전송 속도가 느림을 나타냅니다.
3. 핑을 사용하는 이유
- 네트워크 연결 문제 해결: 네트워크 문제 해결 시, 핑은 기본적인 진단 도구로 사용됩니다. 예를 들어, 인터넷이 작동하지 않을 때 라우터나 웹사이트 서버에 핑을 보내 연결 상태를 확인할 수 있습니다.
- 네트워크 성능 모니터링: 네트워크 관리자는 핑을 사용하여 네트워크의 성능과 안정성을 지속적으로 모니터링합니다.
4. 핑의 한계
- 일부 서버나 장치는 보안상의 이유로 ICMP 요청을 차단할 수 있습니다. 이 경우, 핑은 응답을 받지 못하더라도 해당 서버나 장치가 오프라인인 것은 아닙니다.
- 핑은 네트워크의 전반적인 성능을 측정하지 않습니다. 예를 들어, 대역폭(bandwidth) 문제나 고급 네트워크 문제를 진단하는 데는 적합하지 않습니다.
핑은 네트워크 진단과 모니터링에서 기본적이지만 필수적인 도구로, 네트워크의 상태와 연결성을 빠르게 확인할 수 있는 간편한 방법을 제공합니다.
참고로 /?을 사용해서 help와 같이 각종 option의 정보를 아래와 같이 받을 수 있다.
C:\Users\forgo>ping /?
Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
[-4] [-6] target_name
Options:
-t Ping the specified host until stopped.
To see statistics and continue - type Control-Break;
To stop - type Control-C.
-a Resolve addresses to hostnames.
-n count Number of echo requests to send.
-l size Send buffer size.
-f Set Don't Fragment flag in packet (IPv4-only).
-i TTL Time To Live.
-v TOS Type Of Service (IPv4-only. This setting has been deprecated
and has no effect on the type of service field in the IP
Header).
-r count Record route for count hops (IPv4-only).
-s count Timestamp for count hops (IPv4-only).
-j host-list Loose source route along host-list (IPv4-only).
-k host-list Strict source route along host-list (IPv4-only).
-w timeout Timeout in milliseconds to wait for each reply.
-R Use routing header to test reverse route also (IPv6-only).
Per RFC 5095 the use of this routing header has been
deprecated. Some systems may drop echo requests if
this header is used.
-S srcaddr Source address to use.
-c compartment Routing compartment identifier.
-p Ping a Hyper-V Network Virtualization provider address.
-4 Force using IPv4.
-6 Force using IPv6.
핑(Ping) 윈도우 환경에서 실습
참고로 아래에 사용한 명령어에 대한 옵션들은 윈도우(Window)에서 적용되는 Option 값입니다. Linux와 같은 환경에서는 다른 옵션을 사용하셔야 합니다.
C:\Users\forgo>ping -n 1 -w 1 192.168.100.100
Pinging 192.168.100.100 with 32 bytes of data:
Reply from 192.168.100.100: bytes=32 time=19ms TTL=64
Ping statistics for 192.168.100.100:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 19ms, Maximum = 19ms, Average = 19ms
명령을 설명하면 -n에서 1은 한번의 패킷만을 보내겠다는 의미입니다. -w에서 1은 1초간 응답을 기다리겠다는 의미입니다.
결과는 위와 같이 정상적으로 응답이 들어왔습니다.
핑(Ping) 파이썬에서 실습
import subprocess
def ping_ip(ip_address):
try:
# Ping the specified IP address
response = subprocess.run(["ping", "-n", "1", "-w", "1", ip_address], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Check if the ping was successful
if response.returncode == 0:
print("Okay")
else:
print("Ping failed")
except FileNotFoundError:
print("Ping command not found. Please ensure you have ping available in your environment.")
# Replace with the IP address you want to ping
ip_address = "192.168.100.100"
ping_ip(ip_address)
위 코드는 앞서 CMD에서 실행한 명령을 subprocess 함수를 사용해서 동일하게 실행하였습니다.
정상적인 응답이 들어올 경우 Okay를 출력하고 아닐 경우 Ping failed이 출력되게 작성하였습니다.
예제 코드 다운 로드>>
'아두이노 Arduino > 파이썬(Python)' 카테고리의 다른 글
아두이노 온도, 습도 값 파이썬으로 그래프 출력하기, 일정 개수만 출력, 버튼으로 그래프 만들기 (0) | 2024.01.18 |
---|---|
아두이노 온도, 습도 값 파이썬으로 그래프 출력하기(Arduino, Python, Serial, Graph) (1) | 2024.01.14 |
[Python] 파이썬 실행파일(exe) 만들기(Pyinstaller, Batch file) (0) | 2022.11.14 |
[아두이노] 파이썬 threading timer 로 주기적으로 LED 켜고 끄기(타이머, 인터럽트, Interrupt) (0) | 2022.05.18 |
[아두이노] 파이썬 threading 함수로 통신하기 (threading, target, daemon (0) | 2022.05.17 |