您的位置:首页 > 理论基础 > 计算机网络

Linux 网络协议栈开发番外篇(四)—— Wireshark-ICMP数据报分析

2018-01-24 23:17 1411 查看
ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。 

  ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议,属于网络层协议。 

  ICMP报文是在IP数据报内被传输的。在实际传输中的数据包结构:20字节IP首部 + 8字节ICMP首部+ 1472字节<数据大小>38字节。 

  ICMP报文格式:IP首部(20字节)+8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)。下面即为ICMP报文格式: 

   



ICMP报文的类型

不同类型由报文中的类型字段和代码字段来共同决定,简单的可以分为两种:即ICMP差错报告报文和ICMP询问报文。

ICMP请求与应答报文 ping

通过ping程序可以发送请求报文,在ping的服务器收到报文后会返回应答报文。 

下面是请求应答的报文格式:



让wireshark开始抓包,用icmp过滤,打开cmd窗口,输入ping www.youku.com,就会发现wireshark开始抓取报文,ping默认发4个请求报文,所有这里会抓取到8个报文(请求和应答各4个)。下面查看一个请求报文结构:



再来看一看实际的数据域:



Traceroute工具

  Traceroute程序可以让我们看到 I P数据报从一台主机传到另一台主机所经过的路由,它是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。

  Traceroute基本原理:这个程序利用报文的TTL信息实现路由的获取。首先主机向目的主机发送一个TTL=1的数据报,当数据报到达第一个路由器时,TTL=0,这时路由器会发送一个ICMP报文返回给主机,说明数据报超时。由此得到第一个路由地址,然后令TTL=2,再次发送一个数据报,会得到第二个路由返回的ICMP,由此一次次增加TTL就可以得到主机到目的主机之间所经过的路由信息。

  


windows cmd中运行结果



在linux中traceroute是可以选则数据包的类型(-I,-U,-T)分别代表ICMP,UDP,TCP数据包类型。而在windows的cmd中tracert用的是ICMP数据包。实际测试中可能会出现一些问题。

附:

wireshark与对应的OSI七层模型



TCP包的具体内容

 从下图可以看到wireshark捕获到的TCP包中的每个字段。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐