
저는 방화벽을 체크할 때 ping을 많이 사용합니다(Ping attack을 막기위해 Ping을 막아놓는 경우도 있다고 합니다.)
제가 알고 있던 Ping이란 "A가 B에게 요청했을때 네트워크에 문제가 없다면 B가 A에게 주는 응답을 통해 네트워크 통신이 가능함을 확인할 수 있다." 정도였습니다.
문득, 이걸 더 자세히 알아보고 싶다는 생각이 들어 와이어샤크를 켰습니다.
일단 터미널에서 쏴보았습니다. 목적지는 8.8.8.8 구글의 DNS 서버입니다.

맥북(m1)에서 옵션을 주지 않고 그냥 쐈더니 98byte가 나왔습니다.
맥에서의 기본 옵션은 98바이트 인가 봅니다.(프로토콜 헤더에 붙는 값들은 OS마다 같은텐데, 나머지 바디부분이 OS상에서 차이가 있는지 모르겠습니다.)
하나씩 살펴보겠습니다.

전체 패킷은 이렇게 생겼다고 합니다.
음... ;;
언뜻보니 이 위에는 ping을 송신하기 위해 사용된 프로토콜로 보이는군요.
ICMP, IPV4, 이더넷이 사용된걸로 보입니다.
ICMP(Network Layer), IPV4(Network Layer), 이더넷(Data Link Layer)
ICMP를 클릭해서 살펴보겠습니다.

친절한 와이어샤크가 클릭하니까 알아서 다 파싱해주네요.

위키피디아에 있는 ICMP 헤더를 가져와봤습니다. 처음 1바이트는 type(control message)을 나타낸다고 합니다. 그래서 와이어샤크의 파싱결과로 타입이 8(echo reqeust)이 나왔나보네요. 참고로 reply의 type은 0이라고 합니다.
그 다음 1바이트는 code,subtype(control message)를 나타낸다고 합니다.

위키를 보니 ping request의 경우 8,0으로 각 값을 세팅하는 것 같습니다.
또 그 뒤 2개의 바이트 e5 f8의 경우에는 checksum을 나타낸다고 합니다.
나머지 4개의 바이트는 위 위키피디아 그림에서와 같이 Rest of header를 나타낸다고 합니다.
이 값은 type과 code에 따라 다양하다고 하니, 다시 궁금해지는 시기가 오면 그때 알아보겠습니다.
엥? 근데 위키피디아에서 보이는 icmp 헤더는 8바이트인데 우리가 가지고 있는 데이터영역에 닿으려면 아직 8바이트가 남았는데?
와이어 샤크를 보니 Time Stamp라고 합니다.
위 request 패킷에 대한 response 패킷의 icmp 살펴보겠습니다.

우선 Type이 8 -> 0으로 바뀐것을 볼 수 있습니다. ping response에 대한 Type은 0인 것을 여기서도 알 수 있습니다.
살펴보면 Checksum과 Type을 제외하고는 아무것도 바뀌지 않았네요.

출처 : https://www.paessler.com/it-explained/ping
이걸보면 response ping의 payload는 request와 같아야한다고 되어있군요.
한번의 명령어로 ping을 여러번 날린결과 Identifier는 모두 같고 Sequence Number는 요청과 응답시에만 같은 값을 가짐을 알 수 있었습니다.
command+c로 중단하고 다시 쏘면 어떨까요?

sequence는 다시 0부터 시작하고 identifier가 달라졌네요
이를 통해 한번의 ping명령어로 발생된 request, response 아래의 ICMP 패킷들은 모두 같은 Identifier를 가짐을 알 수 있었습니다.
Ping을 분석하는데 생각보다 오랜 시간이 걸리네요.
나머지는 Ping 2탄에서 분석해보겠습니다.