运维开发网

内网***系列教程二(ping和tracertroute命令的使用)

运维开发网 https://www.qedev.com 2020-03-13 15:37 出处:51CTO 作者:江江砍柴人
一、ICMP协议ICMP是在RFC792定义的互联网协议,通常用于返回错误信息和分析路由。为了有效的提好转发IP数据报和提高交付的机会。ICMP是IP层协议,ICMP的报文包含在IP数据包中,作为其中的数据部分。当其加上了IP数据包的首部(20字节)便组成了IP数据报发送出去。他通常不由网络程序直接使用,除了ping和tracetroute这两个特别的例子。ICMP数据包报文:ICMP报文分成了两

一、ICMP协议

ICMP是在RFC792定义的互联网协议,通常用于返回错误信息和分析路由。为了有效的提好转发IP数据报和提高交付的机会。

ICMP是IP层协议,ICMP的报文包含在IP数据包中,作为其中的数据部分。当其加上了IP数据包的首部(20字节)便组成了IP数据报发送出去。他通常不由网络程序直接使用,除了ping和tracetroute这两个特别的例子。

ICMP数据包报文:

ICMP报文分成了两类,分别是ICMP差错报告报文和ICMP询问报文。前4个字节是统一的格式。共三个字段:类型、代码和检验和。接着是4个字节的内容与ICMP报文的类型有关。最后是ICMP的数据字段,其长度取决于ICMP的类型。

内网***系列教程二(ping和tracertroute命令的使用)

参考:1.https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E6%8E%A7%E5%88%B6%E6%B6%88%E6%81%AF%E5%8D%8F%E8%AE%AE

2.计算机网络(第七版)-144页

二、PING

1、前言

ping命令通常用来测试网络可用性的检查,ping命令可以对一个网路地址发送测试数据包,看该网络是否有响应,并统计响应时间,以此测试网络。

2、原理

向指定的网络地址发送一定长度的数据包(ICMP)。按照约定,如果存在,会返回一个相同大小的数据包。如果在特定的时间没有返回一个数据包,则会被认为是“超时”,会被认为指定的网络地址不存在(并不是绝对,有些服务器通过防火樯禁止了ping或者在内核参数中禁止了ping)。

ping 发送数据包时使用的是ICMP协议。

3、参数

-c :发送包的数量

-t:设置存活数的ttl值。

-s:设置数据报的大小

-R:记录路由信息

-n:只显示数值

-I :指定设备

-i :设置时间间隔。

-b : 允许ping网关(先通过route命令查看设备)

三、TRACERTROUTE

1、用途

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。

2、原理

Traceroute程序使用ICMP报文和和IP首部中的TTL字段(生存周期)。

每个处理数据报的路由器都要把TTL的值减去1或者减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的延时都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减1.

TTL字段的目的是防止数据报在选路时无休止的在网络中流动。例如,当路由器瘫痪或者两个路由器之间的连接丢失时,选路协议有时回去检查丢失的路由器并一直进行下去。TTL字段就是在这些寻暖传递的数据报上加上一个生存上限。

当路由器收到一份IP数据报,如果TTL字段是0或者1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是,在通常情况下系统不应该接收TTL字段为0的数据报)。通常情况下是,路由器将该数据报丢弃,并给信源主机发送一份ICMP超时信息。Tracerouter程序的关键在于,这份ICMP超时信息包含了该路由器的地址。

那么,Tracerouter就通过发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值减去1,丢弃该数据报,并回发一份超时ICMP报文。这样就得到了该路径中的第一个路由器的IP地址。然后Tracerouter发送一份TTL为2的数据报,这样就得到了第二个路由器的IP地址。那么,继续这个过程,直到达到目的主机。即使目的主机接收到一份TTL值为1的数据报也不会丢弃该数据报并产生一份ICMP报文,因为已经到达最终目的地。这个时候,Tracerouter程序发送一份UDP数据报给目的主机,但选择一个不可能的值作为目的端口号(大于30000),使得目的主机的任何一个程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文,这样Tracerouter程序要做的就是区分搜到的ICMP报文是是超时还是端口不可达,以判断什么时候结束。

来源:https://blog.csdn.net/lyhDream/article/details/41594605

3、参数

-f :设置第一个TTL值的大小。

-p : 设置UDP的通信端口。

-x :开启或者关闭数据包的正确性检验。

本人实菜,理解能力上有限。日后理解学会了再补充。

4、注意事项

有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n参数来避免DNS解析,以IP格式输出数据。

0

精彩评论

暂无评论...
验证码 换一张
取 消