1.IMCP协议介绍

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)

目的地址是广播地址或多播地址的IP数据报。

作为链路层广播的数据报。

不是IP分片的第一片。

源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

ping查询

子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

2.ICMP的应用--ping

ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Ping statistics for 10.4.24.1:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。

ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的应用--Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了。

icmp协议 主机探测 java 网盘_ping 原理与ICMP协议相关推荐

  1. java网盘_和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 网盘项目. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列. 今天给大家带 ...

  2. 基于java网盘搜索的设计与实现

    该网盘搜索的毕业设计使用了最基本的servlet+jsp技术,采用eclipse开发,对于还未学习框架技术的同学有很大学习参考价值, 该系统核心部分通过调用bing.google等搜索引擎的接口,实现 ...

  3. 简述tcp协议三报文握手过程_华为原理 | 传输层协议amp;交换转发原理

    Interface GigabitEthernet0/0/0 ip address 12.1.1.2 255.255.255.0 arp-proxy enable \\华为接口下默认没有开启代理ARP ...

  4. 7 ida pro 网盘_IDA分析iOS网络协议

    开始前先进行如下步骤 1.app砸壳后用IDA加载 2.配置抓包工具charles ok 开始前不会使用Charles的可以搜索关键字"Charles ios https" 首先开 ...

  5. 【白嫖系列】免费永久45G大容量WebDAV协议免费日本老牌网盘InfiniCLOUD(原TeraCloud)

  6. java 上传源码_和付费网盘说再见,跟着本文自己起个网盘(Java)

    项目源码获取:关注转发之后私信回复[源码]即可免费获取到 一.项目介绍 一款开源.使用简单.功能完整的 Java 网盘/云盘系统.支持在线视频播放.文档在线预览.音乐播放.图片查看等功能的文件云存储平 ...

  7. 和付费网盘说再见,自己起个网盘不香吗?| Java 开源项目

    作者 | HelloGitHub-秦人 来源 | HelloGitHub 责编 | 王晓曼 本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 网盘项目. 今天给大家带来一款开源 J ...

  8. docker实践第二版pdf 网盘_和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 网盘项目. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列. 今天给大家带 ...

  9. python 在线网盘源码_和付费网盘说再见,跟着本文自己起个网盘(Java 开源项目)...

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 网盘项目. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列. 今天给 ...

最新文章

  1. 开发函数计算的正确姿势 —— 爬虫
  2. Angular路由--模块预加载
  3. 数字断路器获得商用认证
  4. 验证身份证和中文名字
  5. 为什么我们需要volatile关键字?
  6. 全球及中国偶联单克隆抗体行业深度调研及项目风险评估报告2021-2027年
  7. linux dd devzero,makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令
  8. 多域名下Mvc的Http缓存冲突的问题
  9. php实现excel单元格合并,字体加粗居中等操作
  10. Linux php.ini设置date.timezone=XXX为什么不生效?
  11. [密码学]对称密钥加密、非对称密钥加密和混合加密的基本原理
  12. 大学计算机考试常用函数,大学计算机二级考试 ExceL表格函数
  13. java myeclipse的好处,关于MyEclipse_MyEclipse用途_MyEclipse优势
  14. 计算机网络的三个基本拓扑结构类型,计算机网络拓扑结构的分类
  15. Android Manager之AudioManager(音频管理器)
  16. D3D9利用顶点缓冲区绘制三角形
  17. Kali Linux入门
  18. CMD窗口下进入PowerShell和退出PowerShell
  19. golang 打桩,mock 数据怎么玩?
  20. 【Python自制工具分享】PySimpleGUI实现桌面翻译神器

热门文章

  1. AI视频智能平台EasyCVR点击播放,播放器毫无反应且无拉流日志是什么原因?
  2. FileZilla使用手册(MAC版)
  3. Burpsuite专题学习指南
  4. 商品分类列表功能实现php,【图片】B2B2C系统如何实现商品分类功能【thinkphp吧】_百度贴吧...
  5. java 银联接口_银联接口测试——详细(JAVA)
  6. IJCAI 2023顶会将改在中国澳门举办!三位中国学者任本地主席!
  7. 钉盘空间不够用怎么办?
  8. Jenkins 流水线语法 06 options 运行时选项和 parameters参数化构建
  9. 修改Mysql数据库的用户名
  10. OGEM Bentonite mud treatment system for Russian client