ICMP综述 【任刚的博客/资源分享/tcp/ip/icmp综述 http://blog.rengang.org http://rengang.org 】
ICMP是一个三层的协议,是IP层的一个组成部分。它通常为IP层或者高层协议如(UDP,TCP)使用,为它们传递差错报文以及其它信息。比如,为IP层提供网络不可达等差错信息,为UDP协议提供端口不可到消息,此外,还能为TCP返回差错消息。比如在一个路由器telnet另一台路由的时候由于ACL而被拒绝,此时,ICMP会为TCP提供差错消息。
r1#telnet 1.1.1.2
Trying 1.1.1.2 …
% Destination unreachable; gateway or host down
r1#
固定链接: http://blog.rengang.org/icmp综述.html
*Mar 1 00:21:45.695: ICMP: dst (1.1.1.1) administratively prohibited unreachable rcv from 1.1.1.2
红字部分为ICMP差错消息。
ICMP在IP数据报内传输,所有的ICMP不通类型的报文前4个字节都是一样的,其余根据类型不同而不同。报文格式如下:
当发送一份ICMP差错报文的时候,这份差错报文的ICMP数据部分始终包含着导致产生这份差错报文的源报文的整个IP首部与源报文IP数据的前8个字节部分。因为源报文的IP数据的前8个部分包括了TCP或者UDP的源目端口号,所以当这份差错报文在返回给源主机的时候,源主机能够将这份差错报文与相对应的引起这份差错报文的用户进程联系起来(通过IP的协议号与TCP/UDP的端口号)。从而让用户进程知道网络上有什么样的故障,从而停止它的尝试。下面是上个实验中抓的ICMP差错消息的包:
从抓的包可以验证上面的说法。
ICMP差错报文在下面的几种情况下不会产生:
1 ICMP差错报文,ICMP差错报文不可能在引起另一个差错报文而产生循环
2 目的地址是广播地址或者多播地址
3 链路层广播的数据报
4 不是IP分片的第一片
5 源地址不是单个的数据报,也就是说要产生ICMP差错报文,源地址必须是单个,不能为环回接口。
这些规则是为了防止引起广播风暴。
下面做实验验证几个ICMP的类型与代码
主机不可达
端口不可达
需要分片但设置了不分片位
源站选路失败
由于过滤,通讯被强制终止
主机不可达验证
配置如图,在R1上ping 一个地址,R2中没有去这个地址的路由。
r1#debug ip packet detail
IP packet debugging is on (detailed)
r1#debug ip icmp
ICMP packet debugging is on
r1#ping 2.2.2.2
固定链接: http://blog.rengang.org/icmp综述.html
*Mar 1 00:03:08.395: IP: tableid=0, s=1.1.1.2 (FastEthernet0/0), d=1.1.1.1 (FastEthernet0/0), routed via RIB
*Mar 1 00:03:08.399: IP: s=1.1.1.2 (FastEthernet0/0), d=1.1.1.1 (FastEthernet0/0), len 56, rcvd 3
*Mar 1 00:03:08.403: ICMP type=3, code=1
*Mar 1 00:03:08.403: ICMP: dst (1.1.1.1) host unreachable rcv from 1.1.1.2
可以看出ICMP显示主机不可达,而ICMP的类型为3,代码为1
此外,使用UDP,TCP的协议目的不可达时,ICMP也会返回主机不可达的差错消息。
端口不可达
当连接一台服务器,但是这个服务器并不提供这个服务的时候,它会用ICMP返回端口不可达消息,前提是这个服务是一个UDP的服务,而不是TCP,如果使用TCP协议连接一台服务器,而服务器不提供这个服务的话,那么TCP会发送reset,通知用户进程,不要在继续尝试。下面使用TFTP协议来验证,TFTP使用UDP的69端口。
r1#copy tftp: 1.1.1.2
Address or name of remote host []? 1.1.1.2
Source filename []? ss
Destination filename [1.1.1.2]?
Accessing tftp://1.1.1.2/ss…
*Mar 1 00:02:06.919: ICMP: dst (1.1.1.1) port unreachable rcv from 1.1.1.2
ICMP端口不可达的目的是为了通知进程,目的主机没有提供所需要访问的服务,让源主机停止尝试连接。但在TFTP的连接中,当源主机受到了ICMP端口不可达消息后,还会发出几个TFTP报文,这时与TFTP的设计有关。
需要分片但设备了DF位
在左边的路由器上针对目的2.2.2.3发出201字节的ping波包,ICMP会回复差错报文如下:
r1#ping
Protocol [ip]:
Target IP address: 2.2.2.3
Repeat count [5]: 1
Datagram size [100]: 201
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface:
Type of service [0]:
Set DF bit in IP header? [no]: y
Type escape sequence to abort.
Sending 1, 201-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:
Packet sent with the DF bit set
M
Success rate is 0 percent (0/1)
r1#
r1#
*Oct 8 20:38:27.207: ICMP: dst (1.1.1.1) frag. needed and DF set unreachable rcv from 1.1.1.2
源站选路失败
重定向
ICMP重定向只对主机起作用,主机当收到重定向报文的时候,改变它的网关为报文中的地址。当是路由器接收到重定向的时候,它不会将重定向中的IP加入到路由表。因此重定向对路由器不起作用。
在R3上关闭路由功能后查看R3路由表
r3#sho ip rou
Default gateway is 10.1.1.2
Host Gateway Last Use Total Uses Interface
ICMP redirect cache is empty
可以看到网关是配置的10.1.1.2,最下面的一行显示ICMP重定向的缓存为空。也就是没收到关于ICMP重定向的报文。
r3#ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/443/1152 ms
r3#
*Oct 1 11:15:09.475: ICMP: redirect rcvd from 10.1.1.2- for 2.2.2.2 use gw 10.1.1.1
r2#
*Oct 1 11:15:11.627: ICMP: redirect sent to 10.1.1.3 for dest 2.2.2.2, use gw 10.1.1.1
R2给R3发了重定向的消息,查看R3路由表,已经改变:
r3#sho ip rou
Default gateway is 10.1.1.2
Host Gateway Last Use Total Uses Interface
2.2.2.2 10.1.1.1 0:01 8 FastEthernet0/0
去2.2.2.2的路由已经改变为重定向的10.1.1.1
当把R3的路由功能开启后,当R3每次ping 2.2.2.2的时候,都会把ICMP数据包发到R2,而且R2每次都会回复ICMP重定向的消息,但是R3不会把重定向的地址加入到路由表中。已经验证。
NAT-PT的局限性
Posted by Ren Gang | Posted in 资源共享 | Posted on 24-07-2010-05-2008
0
NAT-PT的局限性【任刚的博客】资源共享/tcp/ip http://blog.rengang.org
* 单点失败,NAT-PT是有状态的设备,若NAT-PT出错,则IPv6单协议网络域和IPv4单协议网络域的会话都将丢失;
* 阻止了端到端的安全,NAT-PT转换过程中修改了数据包头,使IP包头的完整性检查失败;
* 非NAT友好,NAT-PT没能解决动态端口分配应用和内嵌IP地址的应用,当出现新的非NAT友好应用时必须升级NAT;
* PMTUD失败,不能进行路径最大传输单元发现;
* 多播,不支持多播;
* DNS,不支持RFC 2535中定义的DNSSEC,还未解决IPv4和IPv6间的区域传输








