TCP/IP学习(五)ICMP、Ping、Tracerout和Telnet

时间:2020-12-08 15:21:33

ICMP

ICMP协议经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP使用)。一些ICMP报文把差错报文返回给用户进程。ICMP是在IP数据报内被传输的,协议代码为1。所有ICMP报文的前4个字节都是一样的,第一个字节为类型(常见的有0,ping的回显应答。3,目的不可达。8,ping请求回显。11,超时)第二个字节为代码(常见的有3类型目的不可到达的3代码-端口不可到达,1代码-主机不可到达)

Ping

最常见的使用ICMP协议的为ping程序了,该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。ping这能测试服务器是否不可到达,使用的只是IP数据报,并不能检测某个端口是否可用(如web服务器的80端口),ping针对的只是一个IP没有涉及到传输层的端口。

Traceroute

Traceroute(windows上为tracert)程序可以让我们看到IP数据报从一台及其传到另一台主机所经过的路由。Traceroute程序使用ICMP报文和IP首部中的TTL字段(一般为64).TTL字段的目的是防止数据报在选路时候无休止的在网络中流动(当路由故障的时候,可能在两个路由循环)。当路由器收到一份IP数据报的时候,如果其TTL字段是0或1,则路由器不转发该数据报,路由器将该数据报丢弃,并给信源主机发送一份ICMP“超时”信息。

Tracerout的工作工程,它发送一份TTL字段为1的IP数据报给目的主机(为ICMP的请求回显Type为8),处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后在发送一份TTL值为2的数据报,这样我们可以得到第二个路由器的地址。继续这个过程直到该数据报到达主机。目的主机如果接收到ICMP报文(这个时候不会发送ICMP“超时”差错报文),为了判断已经到达主机,这个时候在发送一份UDP数据报给主机,并且数据报的端口很大(应用程序不会占用),这个时候目的主机会产生一份“端口不可到达”的错误的ICMP报文。traceroute程序所要做的是区分接收到的ICMP报文是超时还是端口不可到达,以判断什么时候结束。

关于这个程序还有几点要说明:
(1)并不能确保现在的路由也是将来所要采用的路由,甚至两份连续的数据报都可能采用不同的路由。
(2)不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由。这表明打印出来的往返时间可能并不能真正体现数据报发送和返回的时间差。
(3)返回的ICMP报文中的信源IP地址是UDP数据报到达的路由的接口的IP地址。接受这个报文的接入接口地址,并不是发送接口的地址。

Telnet
Telnet为(telecommunication network protocol)的缩写,它为标准的提供远程登录的功能的应用,它使用TCP连接,能够运行在不同操作系统主机之间。telnet的使用方法是 telent host port的方式,这个命令有个特殊的应用,就是测试远程主机是否开启某个端口,例如 telent baidu.com 80,可以测试百度的web服务。用抓包器抓了下包,当telent baidu.com 80的时候,就会和百度一台服务器的80端口建立一个tcp连接,这个连接可以维持一会,就会自动断开。