透析ICMP协议(一): 协议原理
透析ICMP协议(一): 协议原理
===============================
这篇文章原创自bugfree/CSDN
平台: VC6 Windows XP
ICMP简介:
--------
对于熟悉网络的人来说, ICMP是再熟悉不过了. 它同IP协议一样工作在ISO模型的网络层, 它的全称是: Internet Control Message Protocal. 其在网络中的主要作用是:
- 主机探测
- 路由维护
- 路由选择
- 流量控制
我主要围绕主机探测来讲解如下的几篇文章:
- 透析ICMP协议(一): 基础知识
协议原理
- 透析ICMP协议(二): 函数简介
Windows Socket 简介
- 透析ICMP协议(三): 牛刀初试之一
应用篇ping(ICMP.dll)
- 透析ICMP协议(四): 牛刀初试之二
应用篇ping(RAW Socket)
- 透析ICMP协议(五):
应用篇路由追踪
对于主机探测来说有很多方法,主机某些服务的BANNER,一些使用的应用程序,或者使用工具来检测主机,如NMAP,在WEB上有www.netcraft.com来简单的估测主机。下面所讲的是使用ICMP协议来探测主机,主要也是可以了解ICMP这个协议,这里最主要的也是将这个ICMP协议,
首先我来讲一下主机探测用到的ICMP报文:(我没有一一讲全部报文,详细请参见RFC792协议)
1. 回送或回送响应
我们使用一个ICMPECHO数据包来探测主机地址是否存活(当然在主机没有被配置为过滤ICMP形式),通过简单的发送一个ICMPECHO(Type 8)数据包到目标主机,如果ICMPECHOReply(ICMPtype0)数据包接受到,说明主机是存活状态。 如果没有就可以初步判断主机没有在线或者使用了某些过滤设备过滤了ICMP的REPLY。这种机制就是我们通常所用的ping命令来检测目标主机是否可以ping到.
回送消息的源地址是回送响应消息的目的地址。若要形成一个回送响应消息,应该将源和目的地址交换,将类型代码更改为0,重新计算机校验码。
下面是这个报文的格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-
类型:
8代表回送消息;
0代表回送响应消息。
代码:0
校验码:
16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在 以后会被校验码取代。
标识符:如果代码=0,帮助匹配回送和回送响应的代码可以为0。
序列码:如果代码=0,帮助匹配回送和回送响应的序列码可以为0。
说明:
回送消息中接收到的消息应该在回送响应消息中返回。标识符和序列码由回送发送者使用帮助匹配
回送请求的响应。代码: 从主机或网关接收0
2. 超时报文
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型:11
代码:
0 = 传送超时;
1 = 分段级装超时。
校验码:
16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。
这些零在以后会被校验码取代。
Internet包头+64位源数据报数据:
Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。
如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。
说明:
如果网关在处理数据报时发现生存周期域为零,此数据报必须抛弃。网关同时必须通过超
时信息通知源主机。如果主机在组装分段的数据报时因为丢失段未能在规定时间内组装数据,
此数据报必须抛弃。网关发送超时信息。
如果段零不可用则不用发送超时信息。
代码0由网关发送,代码1由主机发送。
3. 目标主机不可达报文
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型:3
代码:
0 = 网络不可达;
1 = 主机不可达;
2 = 协议不可用;
3 = 端口不可达;
4 = 需要段和DF设置;
5 = 源路由失败;
校验码:
16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。
这些零在以后会被校验码取代。
Internet包头+源数据报:
Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。
如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。
说明:
相应于网关的路由表,如果在目的域中指定的网络不可达,如网络距离为无限远,网关会向发送
源数据的主机发送目的不可达消息。而且,在一些网络中,网关有能力决定目的主机是否可达。
如果目的地不可达,它将向发送源数据的主机发送不可达信息。
在目的主机,如果IP模块因为指定的协议模块和进程端口不可用而不能提交数据报,目的主机将
向发送源数据的主机发送不可达信息。
另外一种情况是当数据报必须被分段传送,而“不可分段”位打开,在这种情况下,网关必须抛弃
此数据报,并向向发送源数据的主机发送不可达信息。
代码0,1,4和5由网关发送,而代码2和3由主机发送。
链接:
-------
我的其它文章,<<透析ICMP协议>>, 和其它文章参见:
http://www.csdn.net/develop/author/netauthor/bugfree/
透析ICMP协议(五): 应用篇路由追踪
透析ICMP协议(四): 牛刀初试之二 应用篇ping(RAW Socket)
透析ICMP协议(三): 牛刀初试之一 应用篇ping(ICMP.dll)
透析ICMP协议(二): Windows Socket 简介
透析ICMP协议(一): 协议原理
联系方式:
-------
zhangliangsd@hotmail.com
透析ICMP协议(一): 协议原理相关推荐
- java序列化算法透析_Java序列化机制与原理的深入分析
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
- 彻底透析SpringBoot jar可执行原理
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:plz叫我红领巾 juejin.im/post/5d2d6812e51d45777b1a ...
- springboot如何盈利_彻底透析SpringBoot jar可执行原理
文章篇幅较长,但是包含了SpringBoot 可执行jar包从头到尾的原理,请读者耐心观看.同时文章是基于SpringBoot-2.1.3进行分析.涉及的知识点主要包括Maven的生命周期以及自定义 ...
- boot spring 怎么执行hql_彻底透析SpringBoot jar可执行原理
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:plz叫我红领巾 juejin.im/post/5d2d6812e51d45777b1a ...
- 透析SpringBoot jar可执行原理
spring-boot-maven-plugin SpringBoot 的可执行jar包又称fat jar ,是包含所有第三方依赖的 jar 包,jar 包中嵌入了除 java 虚拟机以外的所有依赖, ...
- 网络传输协议原理透析
网上对OSI参考模型的讲解比较多,但是看起来总还是没法有个完整的记忆. 为了全面透析网络传输,遂总结这篇笔记,留后续查阅. 名词解释: 开放式系统互联通信参考模型(英语:Open System Int ...
- 通讯协议,网络通讯协议基本原理透析
文章目录 通讯协议 TCP/IP协议 TCP/IP模型 osi版 基本版 应用层 传输层 网络层 数据链层 物理层 通讯协议 我们想要进⾏数据通讯分⼏步? 1.找到对⽅ip 2 .数据要发送到对⽅指定 ...
- 华为交换机stp原理透析及实战
转载来源 :华为交换机stp原理透析及实战 :https://mp.weixin.qq.com/s/hK2UhxssPb-ww6J0oCu1dQ 生成树协议stp,快速生成树协议rstp,多实例生成树 ...
- 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
Nginx再次回顾 也许你已经忘记了Nginx是做什么的?我来再次给你夯实一下概念. 多协议反向代理 Nginx是个高性能的Web和反向代理服务器及HTTP服务器,它能反向代理HTTP,HTTPS和邮 ...
最新文章
- linux查询首字符不是T,linux – tload输出中的不同字符是什么意思?
- 用专业的说一句情话 计算机,用电脑专业说一句情话
- linux 5556端口,在Linux系统下通过配置iptables实现自动转发报文
- 15.使用using和try/finally来做资源清理
- JavaScript 经典设计模式
- python 第三方登录_【Python web 开发】social_django 集成第三方登录
- 7月共处理钓鱼网站1921个:非CN域名达1911 个
- MSDEV.EXE-应用程序错误解决办法(转)
- 中国互联网的那些事——二十年回顾
- 银河麒麟服务器无raid驱动安装处理
- 爱立信Ericsson
- 关于如何将SQL2008 R2数据库迁移到SQL2008
- 还不知道简历如何写?就该这样写!
- flux_屏幕色温调控
- 笔记本自动打开计算机,笔记本电脑自动开机是什么原因
- redenvelope php,Red Envelope (红包)
- Gmail账号申诉成功
- 方差分析(ANOVA)简记
- Centos7最小化安装升级至图形化
- 汽车网络安全之——CAN网关测试
热门文章
- 大数据下的日志--ElasticSearch部分(一)--初识
- 这简历是你真实经历吗?拷打面试官轻松拿下30K自动化offer!
- linux上安装游戏程序,分享|如何在 Linux 中安装 2048 游戏
- poi 通过浏览器导出excel文件打不开
- 微信小程序 如何添加一条分割线
- 除了 P 站,程序员在摸鱼时还喜欢上这些网站...
- 生活就是一对反义词,你的虚惊一场,在疼你的人那里就是力挽狂澜。
- 中国考试教育网计算机一级考试成绩,2018年9月(第52次)全国计算机等级考试成绩公布啦!附查询图示...
- python计算三角函数_使用Python三角函数公式计算三角形的夹角案例
- 【转】Python 边缘检测裁切图片