今天一个朋友说他自己实现一个ping程序。要过他的代码看了一看。通常的ping程序都是通过icmp协议实现,但是icmp协议却不同于tcp与udp。tcp与udp协议首部包含着源端口号和目的端口号,所以当一个tcp或udp协议应答返回时,我们可以根据对应的端口号,定位到相应的处理进程。但是icmp的协议里面并不包含端口号,ping程序是如何定位到应答包属于自己发出的呢?
icmp 报文首部
// ICMP header for both IPv4 and IPv6.
//
// The wire format of an ICMP header is:
//
// 0 8 16 31
// +---------------+---------------+------------------------------+ ---
// | | | | ^
// | type | code |