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数据报给主机,并且数据报的端口很大(应用程序不会占用),这个时候目的主机会产生一份“端