"게임에서 "핑(ping)"이라는 용어는 패킷이 기기에서 게임 서버로 왕복하는 데 걸리는 시간(왕복 시간)을 측정하는 데 일반적으로 사용되며, 이는 네트워크 지연 시간의 주요 구성 요소입니다. 핑은 네트워크 진단 및 오류 보고에 사용되는 프로토콜인 인터넷 제어 메시지 프로토콜(ICMP)에 의존합니다. ICMP 메시지는 연결을 테스트하고 네트워크 전반의 패킷 경로를 추적하는 데 사용되며, 도달할 수 없는 대상, 패킷 손실 또는 과도한 지연을 나타낼 수 있습니다.
ICMP 패킷은 특정 구조를 가지고 있으며, 여기에는 메시지 유형을 지정하는 유형 필드, 추가 정보를 제공하는 코드 필드, 오류 검사에 사용되는 체크섬 필드, 요청과 응답을 일치시키는 데 도움이 되는 식별자 필드, 패킷 순서를 추적하는 시퀀스 번호 필드, 그리고 페이로드를 포함하는 데이터 필드가 포함됩니다.
이 글에서는 Go 프로그래밍 언어를 사용하여 ICMP 메시지, 특히 각각 유형이 8과 0인 에코(Echo) 및 에코 응답(Echo Reply) 메시지를 송수신하는 방법을 보여줍니다. Go의 `icmp` 패키지는 ICMP 메시지를 위한 구조체를 제공하여 개발자가 패킷을 수동으로 생성하지 않도록 합니다.
코드를 사용하려면 클라이언트와 서버 애플리케이션을 포함하는 Docker 컨테이너를 시작해야 합니다. 클라이언트 애플리케이션은 서버에 ICMP 에코 요청을 보내고 서버는 ICMP 에코 응답으로 응답합니다. 클라이언트는 에코와 에코 응답 사이의 경과 시간을 계산하여 지연 시간을 결정합니다.
서버에 에코 요청을 보내고 ICMP 요청을 수신하여 보낸 사람에게 다시 보내는 함수를 포함하여 코드의 구현 세부 정보가 제공됩니다. 이 코드는 Go `icmp` 패키지를 사용하여 ICMP 메시지를 구문 분석하고 마샬링하며, 에코와 에코 응답 사이의 경과 시간을 계산합니다.
이 글에서는 또한 ICMP가 ICMP 플러드 공격이나 스머프 공격과 같은 네트워크 공격에 악용될 수 있으며, 이로 인해 특정 환경에서 ICMP가 제한되거나 필터링될 수 있다는 점에 유의합니다. 그러나 ICMP는 올바르게 사용하면 네트워크 상태를 이해하고 유지 관리하는 데 중요한 도구로 남아 있습니다."
dev.to
Understanding ICMP: How to Send and Receive ICMP Messages in Go
Create attached notes ...
