發送 ICMP Echo Request(類型 8),目標回應 Echo Reply(類型 0)。測量往返時間(RTT)、TTL、序列號。屬於網絡層協議,無端口概念,使用原始套接字(`SOCK_RAW, IPPROTO_ICMP`)。
unsigned short checksum(void *b, int len) {
unsigned short *buf = b;
unsigned int sum = 0;
for (; len > 1; len -= 2) sum += *buf++;
if (len == 1) sum += *(unsigned char*)buf;
sum = (sum >> 16) + (sum & 0xFFFF);
sum += (sum >> 16);
return ~sum;
}
手寫 Ping 是理解網絡協議、原始套接字、校驗和、時間測量的絕佳實踐,代碼約 200 行即可實現核心功能,適合網絡編程教學與面試準備。