ping - ICMP ECHO_REQUEST를 네트워크 호스트로 보냅니다.
ping host
터미널에서 실행 하면 ping
ICMP 클라이언트인가요?
ping
에서 실행 중인 ICMP 서버에 연결하고 있습니까 host
? ICMP 서버 프로그램이란 무엇입니까?
ping
의 포트에 연결하고 있습니까 host
? 포트 번호가 ICMP 서버의 포트 번호입니까?
답변1
PING은 실제로 클라이언트입니다.
ping 명령은 ICMP 프로토콜의 일부인 echo-reply(ICMP 유형 0 메시지) 및 echo-request(ICMP 메시지 유형 8)도 사용합니다.
많은 전문가와 네트워크 모니터링 소프트웨어는 에코 요청/응답 성공적인 ICMP 메시지 처리를 시스템 작동/중단을 나타내는 지표로 사용합니다. 그러나 이는 계약일 뿐 엄격하게 시행되는 것은 아닙니다. 예를 들어, Linux 서버를 모니터링하기 위해 PING을 사용하는 대신 SSH TCP/22 포트를 사용하도록 Nagios에서 정의할 수 있습니다.
TCP 연결 내에는 설정된 연결 자체에 대한 개념이 없습니다. ICMP는 연결 지향 프로토콜이 아닙니다.
앞에서 언급했듯이 포트 개념도 존재하지 않습니다. Linux 커널은 ICMP 패킷을 처리하고 그에 따라 응답을 던진 다음 해당 동작을 잊어버립니다(예: 속도 제한과 같은 다른 메커니즘 무시).
Ping은 특별한 권한이 없는 사용자도 사용할 수 있거나 RAW 소켓을 사용하여 ICMP 패킷을 생성하므로 setuid 바이너리여야 합니다.
sysctl/proc 설정을 사용하여 커널이 ICMP 에코 요청 메시지에 응답하는지 여부를 정의할 수도 있습니다.
ICMP 핑에 대한 응답을 비활성화하려면:
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
아니면 다시 활성화하세요.
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
ICMP 메시지 처리를 담당하는 커널 부분은 icmp.c
아래와 같이 Linux 커널 소스 코드에서 찾을 수 있습니다.https://github.com/torvalds/linux/blob/master/net/ipv4/icmp.c
ICMP 패킷에 대해서는 아래 그림을 참조하십시오.
더 많은 커널 정의에 관해서는:
리눅스/icmp.h
#define ICMP_ECHOREPLY 0 /* Echo Reply */
#define ICMP_ECHO 8 /* Echo Request */