ping程序 发送回显请求。是一种对icmp报文的应用。
通过ping来确定与对方主机的通达性。(也可能可以通信却ping不通,因为防火墙的屏蔽)
ping通过在ICMP报文数据总存放请求时间来计算往返时间。应答返回时,用当前时间减去存放在ICMP报文中的时间值,即往返时间。(分辨率不高)。
ping的选项功能:
1.ip记录路由选项 -R
每个处理该数据报的路由器把它的ip地址放入选项字段中,当数据到达目的端时,ip地址清单应该复制到icmp回复应答中,这样返回途中的路由也会加入清单,但是
ip首部只有有限空间,只可以记录9个ip地址清单。
2.ip时间戳选项
同理,但是记录的是ip地址和时间戳。
下面看一下ping客户端程序的基本功能实现
主要结构 IpHeader、IcmpHeader
主要函数 HandleError(); 出错处理
FillPackage(); 填写以太网帧
checksum(); 校验和算法
FlagDiv(); 分析输入的参数结构
从输入参数获取 目的ip地址和选项
例如 ping -R 192168.0.2
1.分析输入参数,存放于内存中
2建立套接字(创建原始套接字,手动填写报文首部,选用tcmp协议)
3更改套接字的属性 (选用关键字 IP_HDRINCL,禁止自动填写)
4填写结构体sockaddr_in
5填写package(对照以太网帧格式),计算校验和
6sendto发送数据包
7等待接收,显示
(服务端应该有一个守护进程等待请求)