互联网控制协议ICMP


为什么需要ICMP?

  • IP分组传送不可靠,可能遭遇各种问题:丢包,可能发生拥塞,产生很大延迟、抖动等
  • ICMP用来向源(通常)报告这些问题或状况
  • ICMP也常用来测试网络

一般来说,ICMP 消息仅送给源机,ICMP数据传输方式和其他数据传输方式一样,也可能遇到同样的错误

  • 规定:ICMP消息不生成自己的差错报告


ICMP消息格式

ICMP消息整个作为载荷封装到IP分组的数据域里边,这个时候IP分组的头部Protocol的值是等于1的

同时ICMP消息本身也包含了头部和数据两大部分


ICMP类型表:https://blog.csdn.net/noooooorth/article/details/51636482

例如其中的超时类型:当TTL=0的时候路由器会丢弃分组,并且它会向分组的源头发出一个ICMP超时消息(分组被丢弃, 并且并没有到达目的机)

代码:子类型,例如类型为"目标不可达",但是目标不可达也有很多情形,这就用代码区分


ICMP的应用:ping

工作原理:

使用ping命令(即调用ping过程)时,将向目的站点发送一个ICMP回声请求报文(包括一些任选的数据)

如目的站点接收到该报文,必须向源站点发回一个ICMP回声应答报文,源站点收到应答报文(且其中的任选数据与所发送的相同),则认为目的站点是可达的,否则为不可达


一个测试样例:


发出4个包,收到0个,100%丢失


tracert命令

例如上面的样例,为什么不通,在哪里不通呢?这个时候就需要tracert命令了

tracert过程是通过ICMP数据报超时报文来得到一张途经的路由器列表,方法非常暴力

步骤

  1. 源主机向目的主机发一个IP报文,并置TTL为1,到达第一个路由器时,TTL减1,为0,则该路由器回发一个ICMP数据报超时报文,源主机取出路由器的IP地址即为途经的第一个路由端口地址
  2. 接着源主机再向目的主机发第二个IP报文,并置TTL为2,然后再发第三个、第四个IP数据报……(一般最多30跳),直至到达目的主机或者源机收到一个目的机发出的端口不可达消息时终止trace过程

但互联网的运行环境状态是动态的,每次路径的选择有可能不一致,所以只有在相对较稳定(相对变化缓慢)的网络中,tracert才有意义

一个测试样例:


注意红色箭头处的超时并不是端口不可达,而是“那一跳禁PING”或“那一跳不对TTL超时做响应处理,直接丢弃”等原因, 所以对于该路由器禁仍然能正常转发数据


PMTU

是一种动态发现互联网上任意一条路径的最大传输单元的技术

  • 每个网络都有一个最大传输单元MTU也就是这个网络的承载能力,例如以太网的MTU是1500个字节,当一个报文的长度超过了网络的MTU,超过了它的载重能力的时候,网络将无法承载这个数据,这时就需要分段或者分片,但是分片带来的负担比较重 而且也不安全,所以最好源机一开始就知道从源到目标中间穿越的网络的MTU

PMTU算法/PMTU技术:


PMTU利用的是type=3,code=4的ICMP消息


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值