二层三层网络协议-ICMP和ping

 

ICMP协议
Internet Control Message Protocol 互联网控制报文协议网络

协议类型以下tcp

 

ping程序主要是使用了ICMP协议里面的 echo request,echo reppply类型.net



查询和应答报文,会有一个标示符,标识本次的ping程序的id
还有一个序列号,表示发送报文的序号,好比发送一个2号探测包,那么就要收到一个2号回复包
ping程序里面还有时间戳,用来计算这个报文从发送到收到用了多长时间


此外还有差错报文,根据不一样的类型区分
终点不可达3,终点不可达还能够细分为
1)网络不可达,找不到地方
2)主机不可达,找不到对应的主机
3)协议不可达,目标主机的支持的协议不对应
4)端口不可达,目标端口没开放
5)须要进行分片但设置了不分片位


源站抑制,也就是让源站放满发送速度
超时,也就是超过网络包的生存时间但还没达到
路由重定向3d

ping协议的截图以下:blog

 

ping协议的接收和发送过程ip

这是最简单的状况,若是跨网段,通过了路由器,还会继续转发
但对于ping程序来讲,就是一个发送,收到的过程,中间通过了那些地方他并不知道
可使用 tcpdump -i ech0 icmp 来查看icmp的收发过程路由

 

 

traceroute协议
这个协议利用了icmp的规则,故意制造了一些可以产生错误的场景
ping程序从A -> B,中间通过了哪些他是不知道的,而traceroute将TTL设置成了1,icmp数据包通过了路由以后就会变成TTL=0,产生一个错误,因而就返回了,这样就能够知道中间某个路由的了
接着继续设置TTL=2,TTL=3
traceroute每次发送的探测包的时候,故意将端口设置成很大,这个数据包若是真的达到了目标主机后,就会返回一个端口不可达的错误,因而traceroute就知道到目的地了get

若是数据包没达到,这多是超时了class

 

traceroute还有一个做用是 故意设置不分片,从而肯定路径的MTUroute

traceroute第一个分组长度正好跟出口的MTU相等,若是中间遇到窄的关口被卡主,就会返回ICMP网络差错包,因而traceroute就减少分组的长度,直到能到大目标主机为止

 

traceroute  baidu的结果

 

tcpdump  traceroute 的结果

 

 

 

 

 

 

参考

维基百科ICMP协议

ICMP详解