Ping程序的实现

Ping程序的实现

在windows系统下进行cmd可以进行ping操作。

ping命令是用来确定本地主机与网络中其他主机的网络通信情况,或者查看是否是为效IP

ping的工作原理:网络另一主机发送ICMP报文,通过返回信息判断网络连接状况。没有通过运输层的TCP或者UDP

  

  可以看到ping的返回信息中有一个值为TTL(time to live)表示ping程序发送的ICMP数据包的生存周期,没经过一个网段,TTL减1,当其值被减到0时,改数据包将被丢弃,该数据包的源地址被告知的情况下,以重新发送数据包。不同的操作系统TTL值不同,Linux64,Windows??(不确定)

ping的流程:

  •  创建通信套接字
  •  将地址、端口信息于套接字绑定
  •  构建IP包头与ICMP包头
  •  发送构建数据包
  •  接收对方主机回应
  •  给出程序反馈信息

补充

ICMP协议:

  即网际控制报文协议,可在网络中实现主机探测,路由维护、路由选择和流量控制。

  由于IP协议没有机制来获取网络错误信息以及对错误进行处理,所以需要一个协议—ICMP协议来解决这个问题,ICMP是IP层的一部分,用于传输差错报文及控制报文遇到错误时能把错误报告给源发送方,ICMP报文是封装在IP数据报内部。

ICMP包头格式:

ICMP报文分为两种,一是差错报告报文,二是查询报文。每个ICMP报头均包含类型(8B)、编码(8B)、校验(16B)三项内容。其余选项岁ICMP功能不同而不同。

    ping命令只适用众多ICMP报文中的两种:“回送请求(ICMP_ECHO)”和“回送回答报文(ICMP_ECHOREPLY)”,往返的ICMP报文中都有时间戳。

参考:http://blog.csdn.net/petershina/article/details/8571562

   http://blog.chinaunix.net/uid-20321537-id-1966835.html

原文地址:https://www.cnblogs.com/zhuzhu2016/p/5804299.html