您的位置  > 互联网

ICMP和TCP层面的网络连通性测试工具

阅读本文大约需要 10 分钟。 您可以先关注我们,以免下次找不到。

01 前言

无论你是写代码、做运维、还是管理项目,哪怕你只是想在家上网,你很可能都会使用程哥总结的网络连接工具。

程哥打算用两篇文章给大家讲解一下下图总结的工具。

在上一篇文章中,我将向您介绍ICMP和TCP级别的网络连接测试工具。

02 ICMP

ICMP()是IP层的一个组成部分,用于传输错误消息和其他错误信息。 简单来说,ICMP协议用于确认网络是否正常,并在出现异常时诊断问题。

PING和PING是ICMP协议的经典实用场景。

ICMP 消息格式非常简单。 所有 ICMP 消息的前 4 个字节都是相同的。 格式如下图:

通过类型和代码字段值的组合,可以确认ICMP报文的类型以及是查询报文还是错误报文。 如果是错误信息,则可以进一步分析导致错误的原因。

代码和类型的组合如下图所示:

这里再提一下,当发送ICMP错误消息时,消息中总是包含IP头和生成ICMP错误消息的IP数据报的前8个字节(即可以包含IP地址的源端口号和目的端口号)。 TCP/UDP)。 这样,接收到ICMP错误消息的模块就会将其与特定的协议关联起来。

03 平

PING ( ) 是最常用的网络连通性检测工具。 。

通过向对端主机发送 ICMP ECHO 请求消息(类型 8,代码 0)并接收对端主机发送的 ICMP ECHO 响应消息(类型 0,代码 0)来确定网络的可达性。

PING ECHO请求和响应截图如下:

例如,使用ping 8.8.8.8来检测源主机到目标地址的可达性。

可见PING命令简单易用。 PING 默认发送四个数据包。 每个数据包都有一个回显,可以看到包括时间、TTL等信息。 截图如下:

PING除了直接PING地址外,还有一些常用的参数,如下:

(1)次

ping –t xxxx 继续 ping

ping –n xxxx PING 特定 n 次

(2) 数据大小

ping –l xxx 设置每个PING数据包的数据大小

(3)PING域名

ping 可以直接ping通域名

04/

和 都是跟踪路由工具,用于确定 IP 数据包到达目标的路径。

虽然两者的功能相同,但实现原理却不同。

(1)

是系统中用来实现路由追踪的工具。

实现方法是发送ICMP ECHO数据包,与PING工具原理相同(使用ICMP报文类型8和代码0,以及类型0和代码0)。

例如,我们检测到路径8.8.8.8。 截图如下:

从抓包中可以看出,该工具通过发送ICMP ECHO报文,利用ICMP报文和IP头中的TTL字段来实现路径记录功能。

通过原理,沿途每个处理数据报的网络设备都需要将TTL值减1。当网络设备收到IP数据报时,如果其TTL字段为0或1,则网络设备不会转发该数据报。 相反,网络设备会丢弃该数据包并向源发送“ICMP 超时”消息。 发送ICMP超时的源地址是该跳上网络设备的IP地址。

(2)

它是一个用于在Linux系统上实现路由追踪的工具。

虽然也是基于沿途每一个处理数据报的网络设备都需要将TTL值减1的原理。但是它并不是使用ICMP ECHO数据包来实现的。

默认情况下,使用类型 11 和代码 0 的错误消息。 过程如下:向目的主机IP和较大的UDP端口号(一般大于30000,通常初始端口为33434)发送UDP数据包,以使得目的主机上的任何应用程序无法使用这个端口。 因为当数据报到达时,目的主机的UDP模块会产生一条带有“端口不可达”错误的ICMP报文,这意味着目的地已经到达。

同时需要注意的是,程哥刚才说了,默认的错误消息是使用11和0,发送UDP消息。 但也可以使用ICMP ECHO报文来检测路径,原理是一样的。 另外,检测协议也可以从UDP改为TCP。 截图如下:

05 TCP会话建立过程

TCP提供面向连接的、可靠的字节流服务。 面向连接是指两个使用TCP的应用程序在相互交换数据之前必须首先建立TCP连接。

和/或正在使用 TCP 连接建立过程来检测网络连接。

我们看一下TCP连接的建立过程,如下图所示:

(一)第一次握手

客户端执行主动打开(open)连接,并发送一个SYN段,指示客户端打算连接的服务器的端口,以及初始序列号(ISN)。 该SYN段为报文段1,发送的内容包括:SYN=1,Seq=J

(2)第二次握手

服务器收到SYN,执行被动打开(open)连接,服务器发回包含服务器初始序列号的SYN报文段作为响应。 同时将确认序列号(Ack)设置为客户的ISN加1,以确认客户的SYN报文段。 一个SYN会占用一个序列号。 发送的内容包括:SYN=1、ACK=1、Seq=K、Ack=J+1

(3)第三次握手

客户端收到服务器的ACK包后,首先进入该状态,然后向服务器发送ACK,最后服务器也进入该状态。 发送的内容包括:ACK=1、Seq=J+1、Ack=K+1

06

它是远程登录服务的标准协议和主要方法。

通过使用工具与目标主机建立 TCP 会话,您可以验证目标主机上的特定端口是否打开。

我们通过端口来验证端口的开放情况,如下图:

07/

/命令的原理是一样的。 它与目标主机的特定端口建立TCP会话以验证网络开放性。

接下来详细介绍该平台的安装和使用。 Linux平台的使用方法相同,不再赘述。

(1)下载.exe工具

(2)存放.exe工具

.exe是可执行文件,无需安装即可直接运行。

这里程哥已经放到了e盘下,所以需要切换到e盘才能使用命令。

(3) 使用示例

注意这里使用了-d、-h、-t这三个参数,如下图,可以看到时间间隔和连续检测。

我们通过抓包来看看每次检测的状态。

可以看到源主机和目标主机建立了TCP会话,然后立即释放了TCP会话。

常用参数如下:

-t 持续发送数据包。 您可以通过按 Ctrl+C 停止发送数据包。

-n 5 一次发送5个数据包,默认一次4个数据包: -n 5 会百度5次,也可以后面跟其他数字。

-d 在每行的开头显示详细的日期和时间。

-g 5 失败5次后放弃(注意默认是80端口,如果该端口没有开放,就会认为失败)