码迷,mamicode.com
首页 > 其他好文 > 详细

TCP/IP协议之ping和traceroute

时间:2017-07-26 10:46:52      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:返回   设置ip   路由器   一半   命令   显示   com   主机   nbsp   

Ping程序就是调用的就是ICMP报文。利用的是ICMP的应答和回显请求。来看下具体的ping报文。 Request的报文类型为8

技术分享

Reply的类型为0

技术分享

通过具体的ping报文可以看到ping报文的大小为84字节。其中ICMP报文56个字节,再加上20个字节的IP首部和8个字节的ICMP首部。因此IP报文的总长度为84字节

技术分享

我们也可以改变ICMP的报文大小,通过-s命令。Ping www.sina.com.cn –s 32. 将ICMP报文大小设置为32字节。加上20字节的IP首部以及8字节的ICMP首部,总共60个字节

技术分享

Ping程序中还可以通过设置ping的次数,通过-c。ping www.sina.com.cn –c 3.在ping了3次以后,ping程序自动停止

技术分享

其他ping的字段设置可以通过man ping查看,一般用的最多的就是-s和-c。

IP记录路由选项:ping程序还可以记录所经过路径的IP地址。这个通过-R的方法来实现。Ping程序在发送出去的IP数据报中设置IP RR选项。这样每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据包达到目的端时,IP地址清单就复制到ICMP回显应答中。当ping程序收到回显应答时,它就打印出这份IP地址清单。

数据格式如下:由于IP首部中的首部长度字段只有4bit,因此IP首部最长只能包含15个32bit的字=60字节。IP首部为20个字节。RR选项用去3个字节。这样只剩下37个字节来存放IP地址清单,一个IP地址为4个字节,因此最大也就只能存放9个IP地址。在当前的互联网场景下,9个IP地址太少了。一半情况下都满足不了要求

技术分享

结果显示如下,我们用ping局域网192.168.0.1的例子来看,首先显示的是去的路径192.168.0.8->192.168.0.1然后是回来的路径192.168.0.1->192.168.0.8

技术分享

Traceroute:

前面讲到IP可以记录路由选项。但是IP首部中留给选项空间有限,不可能存放太多的路径,最多只能存放9个地址,对于现在的网络来说远远不够,那么如果我们想探究网络路径可以用traceroute命令。

Traceroute主要运用的是ttl原理

1 首先第一个包发出,ttl为1. 由于目的路由器为将ttl减一,因此返回ICMP超时给主机,记录返回的路由地址

2 然后主机继续发出ICMP报文,设置ttl为2,这样在经过第二个路由器的时候,返回ICMP超时给主机。记录返回的路由地址

.。。。。。。

一直重复这个过程,每次都将ttl在上一次的基础上加一,直到达到目的地。这样就可以记录所有经过的路由地址

但是在windows和linux下命令名称不一样,而且实现方式也不太一样

Windows下用的命令是tracert,linux下用的是traceroute

实现方式来说:

Windows下使用的是ICMP报文,而linux下使用的是UDP报文。这个有什么区别呢

看下windows下的结果:

技术分享

Linux下的结果:

技术分享

从最终的执行结果来看,看不出什么差异,

继续看下报文的结果,首先来看windows下的

从报文中可以看出ttl不断的在增长。

技术分享

而且主机发出的报文全都是ICMP报文。

技术分享

Linux下的报文可以看到主机发出的报文都是UDP报文,而且每个报文都带有一个目的端口,端口每次都在增长。

技术分享

带的是一个UDP报文,而非ICMP报文

技术分享

但是从对端反馈回的报文都是ICMP报文。且最终目的地址反馈一个port unreachable的报文。这个端口不可达的报文在windows系统中并没有找到。

技术分享

从上面的报文对比可以看到windows下和linux下的traceroute报文是不一样的。Windows下是纯粹使用ICMP报文。直到找到目的地址,并记录经过的路径

而linux下是发出一个UDP报文。且同样也设置TTL时长,但选择一个不可能的值作为UDP端口(大于30000),使目的主机的任何一个应用程序都不可能使用这个端口。最终目的主机会产生一份端口不可达的错误。此时就判断结束。具体流程参考下图

技术分享

 

TCP/IP协议之ping和traceroute

标签:返回   设置ip   路由器   一半   命令   显示   com   主机   nbsp   

原文地址:http://www.cnblogs.com/zhanghongfeng/p/7238100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!