다음 핑을 수행하기 전에 핑이 1초 동안 기다리는 이유는 무엇입니까?

다음 핑을 수행하기 전에 핑이 1초 동안 기다리는 이유는 무엇입니까?

pingUbuntu 20.04.4에서 다음 명령을 실행했습니다.

sudo ping -l 2000 -c 200  domain.com

처음 12개의 핑을 즉시 수행하지만 1초 지연 후 다른 핑 후에 1개의 핑만 수행합니다.

정확하게 말하면 다음과 같이 출력됩니다.

64 bytes from my.domain.com (1.2.3.4): icmp_seq=65 ttl=62 time=0.392 ms
64 bytes from my.domain.com (1.2.3.4): icmp_seq=66 ttl=62 time=0.398 ms

각 줄( icmp_seq)은 1초 간격입니다. 그래서 핑 200개를 완료하려면 20분 정도 기다려야 합니다. 200초.

localhostMac에서 이 명령을 실행했을 때 핑 사이에 대기 시간 없이 200개의 핑이 모두 1초 내에 실행되는 것을 확인했습니다 .

이 행동의 이유는 무엇입니까? ping 명령을 더 빠르게 실행할 수 있는 방법이 있습니까?

답변1

이 행동의 이유는 무엇입니까?

핑 속도의 기본적인 문제는 다음과 같습니다.홍수해당 연결을 통해 연결하면 DOS가 발생합니다. 이러한 문제를 완화(방지)하려면 ping생성(전송)만 수행하세요.하나기본적으로 초당 패킷 수입니다.

-l옵션은 패킷을 보내는 데 걸리는 시간을 제어하기 위한 것이 아닙니다. 그것은 사용됩니다앞으로회로망. 즉, 응답을 기다리지 않고 처음에 네트워크로 전송된 패킷 수입니다. 그 후, 다시(응답) 수신된 각(감지된) 패킷에 대해 1초의 기본 시간을 사용하여 패킷이 전송됩니다. 그러나 일반 사용자에게는 사전 로드가 제한됩니다. 일반 사용자의 경우 사전 로드되는 데이터 패키지 수는 3개로 제한됩니다. iputils-ping 버전을 사용하면 각 패킷이 언제 전송되는지 확인하기 위해 20210202하나를 추가할 수 있습니다 .-D

$ sudo ping -c 5   -l 3   -D   127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
[1655501483.063447] 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.134 ms
[1655501483.063488] 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.019 ms
[1655501483.063510] 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.017 ms
[1655501484.094896] 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.156 ms
[1655501485.065238] 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.153 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.017/0.095/0.156/0.063 ms, pipe 3

이는 가능한 한 빨리 3개의 패킷만 전송되고 나머지는 1초 동안 대기함을 나타냅니다.

로컬 주소를 사용하고 있습니다 127.0.0.1. 이 주소는 정확히 일치하므로 사용할 수 있는 가장 빠른 주소입니다.현지의.

다른 주소를 확인하거나 더 나쁜 경우 도메인을 확인하면 추가 지연이 발생할 수 있습니다.

200개 패킷보다 2000개 패킷을 미리 로드하면 모든 패킷이 미리 로드되어 전송 지연이 발생하지 않으며 응답 지연만 문제가 됩니다.

ping 명령을 더 빠르게 실행할 수 있는 방법이 있습니까?

그러나 위의 어느 것도 패킷 전송 속도를 제어하는 ​​올바른 방법은 아닙니다.

-나

이를 수행하려면 다음 두 가지 옵션이 있습니다 -i.

$ sudo ping -D -c 5 -i 0.2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
[1655501954.082366] 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.131 ms
[1655501954.286594] 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.151 ms
[1655501954.490564] 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.127 ms
[1655501954.694608] 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.147 ms
[1655501954.898607] 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.151 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 816ms
rtt min/avg/max/mdev = 0.127/0.141/0.151/0.010 ms

이것은 일정한 속도의 ping 명령입니다. 로컬 주소의 경우에도 응답을 받는 데 0.13밀리초 이상 소요됩니다. 일반적으로 0.1초 미만의 핑 시간은 권장되지 않습니다.

-에프

이 옵션은 -f정확히 다음 용도로 사용됩니다.홍수네트워크는 가능한 한 빠릅니다. 그러나 이렇게 하면 이를 사용하는 다른 프로세스가 확실히 차단됩니다.

실제로 질문은 다음과 같습니다. 왜 빠른 핑을 원하는가?

가장 빠른 답변을 얻으려면?

ping이는 네트워크가 안정적이고 유용한지 확인하기 위해 합리적인 기간 동안 네트워크를 테스트하는 것이 목적이므로 실제로 유용하지 않습니다 . "너무 빠른" 테스트는 특정 시점(네트워크가 작동 중)에만 네트워크를 테스트하지만 시간이 지나도 문제를 발견하지 못합니다(네트워크가 오작동할 수 있음). 또한 동일한 네트워크의 다른 사용자에게도 영향을 미칩니다. "한 번만" 테스트를 원하는 경우 카운트 패킷이 수신된 후 또는 지연 후에 종료되는 옵션과 함께 이 옵션을 사용하십시오 -c count.-w delay

$ sudo ping -D -c 3 -w 5 example.com ; echo "$?"

$ sudo ping -D -c 3 -w 5 examples.com ; echo "$?"

첫 번째는 3개의 패킷을 계산하고 성공적으로 종료됩니다. 두 번째는 5초 후에 실패합니다.

이는 연결을 테스트하는 적절한 방법입니다.

관련 정보