前言
打算从新整理网络这一块,那么我先把概念整理下来。
正文
ICMP是ip的一个组成。他传递差错报文以及其他需要注意的信息。主要用于反馈一些网络传输的问题。因为ip协议很容易丢包,那么icmp可以告诉我们的进程到底为什么丢。
然后再细看一下icmp内部:
8位类型表示什么类型的icmp。
然后代码位是在前面类型的细分。
判断是什么样的icmp,需要去查询icmp表。
icmp 有两种报文,一种是查询类,比如说ping就是查询类,判断有没有通。
那么icmp包括什么内容呢?icmp包括原来发送包的ip首部和ip首部后面的8个字节。
ip首部是为了告诉到底是哪个包出现问题了,然后8个字节是因为tcp或者udp,他们的前面8个字节存放了他们应用程序端口的信息,这个时候操作系统才能给那个应用程序去处理。
icmp什么时候不会产生差错报文?
1.icmp报文如果出错了不会产生差错报文,所以不要完全指望icmp一定会给我们写的程序信息。
2.目的地址是广播地址。
3.作为链路层的广播的数据报。
4.不能作为ip的第一分片。因为如果不是ip的第一分片,里面是没有端口号的,那么发给原主机没有用。
5.源地址不能是本身主机。
然后后面16位是验证icmp有没有损失,这个校验损失不仅校验头部,同样校验数据,和ip协议那个16位不同,ip协议只校验头部有没有丢。
好的,看个例子吧。
上面类型是3,代码类型是3。类型是3是不可达,代码类型是端口不可达,事实上你查表即可。
看下icmp里面的内容是什么。
上面包含了原来发送的ip头部和udp的端口号。
icmp就是这么回事,在工作中我们多用用查查自然就明白了。