ICMP
ICMP (Internet Control Message Protocol)支持主机或路由器发送两类报文:
- 差错(或异常)报告
- 网络探询
差错报告报文共有5种:
目的不可达
源抑制(Source Quench)
超时/超期
参数问题
重定向 (Redirect)
网络探询报文共2种:
回声(Echo)请求与应答报文(Reply)
时间戳请求与应答报文
举例一些ICMP报文:
也存在几种不会发送ICMP报文的情况:
- 对ICMP差错报告报文不再发送 ICMP差错报告报文
- 除第1个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文
- 对所有多播IP数据报均不发送 ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的IP数据报不发送ICMP 差错报告报文
以下几种 ICMP 报文已不再使用:
- 信息请求与应答报文
- 子网掩码请求和应答报文
- 路由器询问和通告报文
ICMP报文的格式
- ICMP报文封装到IP数据报中传输
其中数据部分包含了发生差错的报文的首部信息及后8字节信息:
ICMP的应用举例:Traceroute
可以利用ICMP的性质来检测跟踪报文到达目的主机的路由器路径
(短时间内数据发送的路由路径不会变化)
-
源主机向目的主机发送一系列UDP数据报
第1组IP数据报TTL =1,探测第一个路由
第2组IP数据报TTL=2, etc,探测第二个,往后······
目的端口号为不可能使用的端口号,一般大于60000 -
当第n组数据报(TTL=n)到达第n个路由器时:
路由器丢弃数据报
向源主机发送ICMP报文(type=11, code=0)
ICMP报文携带路由器名称和IP地址信息 -
当ICMP报文返回到源主机时,记录RTT
停止准则:
UDP数据报最终到达目的主机
目的主机返回“目的端口不可达”ICMP报文 (type=3, code=3)
源主机停止
IPv6简介
IPv6 产生的最初动机: 32位IPv4地址空间已分配殆尽
其他动机: 改进首部格式、快速处理/转发数据报、支持QoS
IPv6数据报格式:
- 固定长度的40字节基本首部
- 不允许分片
优先级(priority): 标识数据报的优先级
==流标签(flow Label): ==标识同一“流”中的数据报
==下一个首部(next header): ==标识下一个选项首部或上层协议首部(如TCP首部)
-
相对于IPv4的其他改变:
校验和(checksum) 彻底移除,以减少每跳处理时间
选项(options) 允许,但是从基本首部移出,定义多个选项首部,通过“下一个首部”字段指示
ICMPv6: 新版ICMP 附加报文类型,e.g. “Packet Too Big”、多播组管理功能 -
IPv6地址表示形式
IPv6地址共128位,采用8个16进制数用冒号隔开表示,中间有多个0可用::表示,但是只能使用一次;
同时支持将IPv4嵌入使用;
IPv6不再使用掩码,使用前缀;
在URLs中用 [ ] 隔开,后加端口号
IPv6基本地址类型:
单播(unicast):一对一
多播(multicast):一对多,只能是服务端对客户端
任意播(anycast):一对一组之一(最近一个)通信
- IPv4向IPv6过渡
不可能在某个时刻所有路由器同时被更新为IPv6,因为主机数量太大
隧道(tunneling)技术: IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络
————————————————————————————————————————————————————————
由于水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错