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

最新文章

  1. SQL语句来查询今天、昨天、7天内、30天的数据,经典!
  2. 【转】error LNK2019: 无法解析的外部符号 "__declspec(dllimport)
  3. python出输出字符串方式:
  4. Scala确实是门好语言
  5. Don't make me think 摘录与读后感
  6. C# 工程中引用出现感叹号
  7. 知道创宇CTO杨冀龙:网络安全人才决定行业格局
  8. opencv,关于物体检测
  9. Javascript闭包函数快速上手
  10. javaweb分页思想
  11. Java中ArrayList和LinkedList差别
  12. ggplot2 theme相关设置—文本调整
  13. js计算指定日期的下一年的日期
  14. 【记录】使用在线KMS激活Office系列
  15. java导出excel 浏览器直接下载或者或以文件形式导出
  16. Python_Mix*生成器,生成器函数,推导式,生成器表达式
  17. 基于python的发送邮件案例
  18. 13. pt-ioprofile
  19. vs.code调试node.js的C++扩展
  20. PAT 1089 狼人杀-简单版(20 分)(代码+测试点分析)

热门文章

  1. Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
  2. 用友时空B/S表单外挂(接口)程序操作说明文档
  3. DAY4-Flask项目
  4. P4291 [HAOI2008]排名系统
  5. winform 利用委托实现窗体传值
  6. Java考试题之七
  7. 解题:USACO13JAN Island Travels
  8. cocoaPods安装、更新第三方库
  9. No module named 'urllib.request'; 'urllib' is not a package
  10. Ansible7:Playbook常用模块