TCPIP详解--ICMP报⽂分析
⼀.概述:
1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特⽹的标准协议,但ICMP不是⾼层协议,⽽是IP层的协议。通常ICMP报⽂被IP层或更⾼层协议(TCP或UDP)使⽤。⼀些ICMP报⽂把差错报⽂返回给⽤户进程。
2. ICMP报⽂作为IP层数据报的数据,加上数据报的⾸部,组成数据报发送出去。
3. ICMP报⽂的种类有两种,即ICMP差错报告报⽂和ICMP询问报⽂。
⼆.ICMP报⽂的格式
1. 类型:占8位
2. 代码:占8位
3. 检验和:占16位
说明:ICMP所有报⽂的前4个字节都是⼀样的,但是剩下的其他字节则互不相同。
4. 其它字段都ICMP报⽂类型不同⽽不同。
1> ICMP报⽂的前4个字节是统⼀的格式,共有三个字段:即类型,代码和检验和。
2> 8位类型和8位代码字段⼀起决定了ICMP报⽂的类型。
类型8,代码0:表⽰显请求(ping请求)。
类型0,代码0:表⽰回显应答(ping应答)
类型11,代码0:超时
3>16位的检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算⽅法和IP头部检验和的计算⽅法⼀样的。
ICMP报⽂具体分为查询报⽂和差错报⽂(对ICMP差错报⽂有时需要做特殊处理,因此要对其进⾏区分。如:对ICMP差错报⽂进⾏响应时,永远不会⽣成另⼀份ICMP差错报⽂,否则会出现死循环)
.ICMP差错报⽂(56字节)
1. ICMP差错报告报⽂共有5种
1> 终点不可达:终点不可达分为:⽹络不可达,主机不可达,协议不可达,端⼝不可达,需要分⽚但DF⽐特已置为1,以及源路由失败等六种情况,其代码字段分别置为0⾄5。当出现以上六种情况时就向源站发送终点不可达报⽂。
说明:
端⼝不可达:UDP的规则之⼀是:如果收到UDP数据报⽽且⽬的端⼝与某个正在使⽤的进程不相符,那么UDP返回⼀个ICMP不可达报⽂。
2> 源站抑制:当路由器或主机由于拥塞⽽丢弃数据报时,就向源站发送源站抑制报⽂,使源站知道应当将数据报的发送速率放慢。
3> 时间超过:当路由器收到⽣存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报⽂。当⽬的站在预先规定的时间内不能收到⼀个数据报的全部数据报⽚时,就将已收到的数据报⽚都丢弃,并向源站发送时间超过报⽂。
4> 参数问题:当路由器或⽬的主机收到的数据报的⾸部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报⽂。
5> 改变路由(重定向)路由器将改变路由报⽂发送给主机,让主机知道下次应将数据报发送给另外
的路由器。
说明:
以下⼏种情况都不会导致产⽣ICMP差错报⽂
1>ICMP差错报⽂(但是,ICMP查询报⽂可能会产⽣ICMP差错报⽂)
2>⽬的地址是⼴播地址或多播地址的IP数据报
3>作为链路层⼴播的数据报
4>不是IP分⽚的第⼀⽚
5>源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、⼴播地址或多播地址。
这些规则是为了防⽌过去允许ICMP差错报⽂对⼴播分组响应所带来的⼴播风暴。
2.所有的ICMP差错报告报⽂中的数据字段都具有同样的格式。将收到的需要进⾏差错报告IP数据报的⾸部和数据字段的前8个字节提取出来,作为ICMP报⽂的数据字段。再加上响应的ICMP差错报告报⽂的前8个字节,就构成了ICMP差错报告报⽂。提取收到的数据报的数据字段的前8个字节是为了得到运
输层的端⼝号(对于TCP和UDP)以及运输层报⽂的发送序号(对于TCP)。
注:⼀下情况不发送ICMP差错报告报⽂
三.ICMP询问报⽂(40字节)
1.ICMP询问报⽂有四种回送请求和回答,时间戳请求和回答,掩码地址请求和回答,以及路由器询问和通过。
1>ICMP回送请求报⽂是由主机或路由器向⼀个特定的⽬的主机发出的询问。收到此报⽂的机器必须给源主机发送ICMP回送应答报⽂。这种询问报⽂⽤来测试⽬的站是否可达以及了解其有关状态。
2>ICMP时间戳请求允许系统向另⼀个系统查询当前的时间。该ICMP报⽂的好处是它提供了毫秒级的分辨率,⽽利⽤其他⽅法从别的主机获取的时间只能提供秒级的分辨率。请求端填写发起时间,然后发送报⽂。应答系统收到请求报⽂时填写接收时间戳,在发送应答时填写发送时间戳。⼤多数的实现是把后⾯两个字段都设成相同的值。
3>主机使⽤ICMP地址掩码请求报⽂可向⼦⽹掩码服务器得到某个接⼝的地址掩码。系统⼴播它的ICMP请求报⽂。ICMP报⽂中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回,这样,发送端就可以把应答与请求进⾏匹配。
4>主机使⽤ICMP路由器询问和通过报⽂可了解连接在本⽹络上的路由器是否正常⼯作。主机将路由器询问报⽂进⾏⼴播(或多播)。收到询问报⽂的⼀个或⼏个路由器就使⽤路由器通过报⽂⼴播其路由选择信息
四.Ping程序
1.概述
1>Ping程序是为了测试另⼀台主机是否可达。该程序发送⼀份ICMP回显请求报⽂给主机,并等待返回ICMP回显应答。
2>Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有多远。
2.我们将发送回显请求的ping程序为客户,⽽称被ping的主机为服务器。
3.ICMP回显请求和回显应答报⽂格式:
1>Unix系统在实现ping程序时把ICMP报⽂中的标识符字段置成发送进程的ID号。这样即使在同⼀台主机上同时运⾏了多个ping程序实例,ping程序也可以识别出返回的信息。
2>序列号从0开始,每发送⼀次新的回显请求就加1。ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失,失序或重复。.
3>ping程序通过在ICMP报⽂中存放发送请求的时间值来计算往返时间。当应答返回时,⽤当前时间减去存放在ICMP报⽂中的时间值,即是往返时间。
4>当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间。TTL位于IP⾸部的⽣存时间字段。ping程序通过在ICMP报⽂数据段中存放发送请求的时间值来计算往返时间。当应答返回时,⽤当前时间减去存放在ICMP报⽂中的时间值,即是往返时间。tcpip协议pdf
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论