厦门市住房与城乡建设局网站,网站建设需要知道什么,电子商务网站和开发新闻类网站,网站加载慢怎么办目录
8.1 引言
8.1.1 在IPv4和IPv6中的封装
8.2 ICMP 报文
8.2.1 ICMPv4 报文
8.2.2 ICMPv6 报文
8.2.3 处理ICMP报文
8.3 ICMP差错报文
8.3.1 扩展的ICMP和多部报文
8.3.2 目的不可达和数据包太大
8.3.3 重定向
8.3.4 ICMP 超时
8.3.5 参数问题
8.4 ICMP查询/信息…目录
8.1 引言
8.1.1 在IPv4和IPv6中的封装
8.2 ICMP 报文
8.2.1 ICMPv4 报文
8.2.2 ICMPv6 报文
8.2.3 处理ICMP报文
8.3 ICMP差错报文
8.3.1 扩展的ICMP和多部报文
8.3.2 目的不可达和数据包太大
8.3.3 重定向
8.3.4 ICMP 超时
8.3.5 参数问题
8.4 ICMP查询/信息类报文
8.4.1 回显请求 / 应答
8.4.2 路由器发现路由器请求RS和通告RA
8.4.3 本地代理地址发现请求/应答
8.4.4 移动前缀请求/通告
8.4.5 移动IPv6快速切换报文
8.4.6 组播侦听查询/报告/完成
8.4.7 版本2组播侦听发现
8.4.8 组播路由器发现
8.5 IPv6中的邻居发现
8.5.1 ICMPv6路由器请求和通告
8.5.2 ICMPv6邻居请求和通告
8.5.3 ICMPv6反向邻居发现请求/通告
8.5.4邻居不可达检测
8.5.5安全邻居发现
8.5.6 ICMPv6邻居发现选项
8.6 ICMPv4 和 ICMPv6 转换
8.7 与ICMP相关的攻击
8.8 总结 8.1 引言
ICMP位于网络层和传输层之间。 因为路由器缓冲区溢出的丢包不会触发任何ICMP差错报文。而由TCP等处理重传等。 黑客在大量攻击中使用ICMP。由于担心攻击通常防火墙封阻ICMP报文特别是边界路由器。此时诊断程序ping, traceroute无法正常工作。 ICMPv6包含 错误报告。 邻居请求邻居通告。 路由器请求路由器通告。 重定向优化路由。 报文过滤 引入Packet Too Big报文通知源主机包超过了链路层MTU。
8.1.1 在IPv4和IPv6中的封装
报文格式 其中ICMPv4头 字段介绍 类型指定报文类型常用8个值。 代码进一步指定报文类型。 校验和IP层没有对载荷完整性保护。所以ICMP需包含校验和。
8.2 ICMP 报文
ICMP报文分类 差错报文用于通知发送端数据包传输中的错误情况。 查询/信息类报文用于信息采集和配置。
8.2.1 ICMPv4 报文
差错报文 目的不可达类型3重定向类型5超时类型11 参数问题类型12 查询/信息类报文 回显请求类型8回显应答类型0路由器通告类型9路由器请求类型10 其中重定向报文目的指导主机或路由器改变路由决策将数据发送到更优路径上。 8.2.2 ICMPv6 报文
ICMPv6不仅包含差错和查询/信息类报文还有大量IPv6路由器和主机的配置如RSRANSNA。 ICMPv6类型字段值 从0到127是差错类报文从128到255是信息类报文。 ICMPv6也使用代码字段。
ICMPv6还支持大量标准选项而ICMPv4不支持选项。
8.2.3 处理ICMP报文
收到重定向报文会更新路由表。
目的不可达报文可用于路径MTU发现PMTUD ICMPv6报文处理规则 1. 收到未知ICMPv6差错报文须传递给上层产生差错报文的进程。 2. 收到未知ICMPv6信息类报文丢弃。 3. 发送ICMPv6差错报文时应尽可能多地包含导致差错的原始IPv6报文但不超过最小的IPv6 MTU 1280字节 4. IPv6节点须限制发送ICMPv6差错报文速率。 IPv6网络中链路层最小MTU是1280字节。IPv4中是576字节。
8.3 ICMP差错报文
请注意8.3.1到8.3.5章节都属于ICMP差错报文。 不会用ICMP差错报文响应以下报文 另一个ICMP差错报文。 头部损坏的数据报例如校验和错误。 IP层广播或组播数据。 链路层广播或组播帧数据。 无效地址零地址、环回地址、广播地址组播地址 第一个之外的分片。 发送ICMP差错报文应包含导致错误数据报的IP头副本包括IP选项和原始IP载荷生成的ICMP数据报大小不超过网络最小MTU。 差错报文包含原始IP包载荷作用 使接收ICMP差错报文主机能根据IP头中协议或下一个头部将该差错报文传递到对应传输层和应用进程。
8.3.1 扩展的ICMP和多部报文
扩展的ICMP差错报文 使ICMP差错报文包含额外信息以提供更多诊断信息。 用ICMP中代码字段指明具体原因实现扩展功能。
后续章节详解。
8.3.2 目的不可达和数据包太大
ICMPv4目的不可达差错报文 网络不可达code 0无路由信息。 主机不可达Code 1如目标主机关机等。 协议不可达Code 2目标主机无法处理数据包传输层协议。 端口不可达Code 3该端口未打开或没有对应端口的应用程序。 需要进行分片但设置了DF位Code 4 源站选路失败Code 5IP包中包含源站路由选项但无法按照指定路由转发数据包。 ICMPv6目的不可达差错报文 无路由code 0无路由信息。 目的地被管理员禁止通信code 1 源地址的范围之外code 2如访问公网时源IP地址是本地链路地址不属于全局地址。 地址不可达code 3目标主机未响应或不可达 端口不可达code 4 源地址失败进/出策略code 5如因为接口ACL导致数据报无法传递。 数据包太大差错报文 即PTBPacket Too Big 路由器转发的数据大于出接口MTU但数据IP头设置了不分片位则丢弃该数据并回复PTB差错报文。 PTB报文中会包含路由器自身 MTU值以告知源地址减小数据包。 因此该报文可用于PMTU发现PMTU是路径中MTU最小值。 net.ipv4.icmp_ratemask 6168哪些ICMP报文有速率限制对应code字段
应用程序使用如下代码接口ICMP报文 sockfd socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); 应用层收到ICMP差错报文后可进行对应操作。
8.3.3 重定向
使用不多。
主机根据ICMP重定向报文信息来更新转发表 8.3.4 ICMP 超时 IPv4头部中TTL字段表示丢弃前最多可经过的路由器跳数。
IPv6头部中同样有跳数限制Hop Limit字段表示。 超时报文差错报文 TTL超时Code 0指示数据报TTL值已减至零。 分片重组超时Code 1指示数据报片段重组未能在一定时间内完成。 traceroute原理 主机先发送IPv4 TTL1数据到达第一个路由器此时TTL到期路由器回复ICMPv4超时报文。主机下一次数据包TTL加1。导致在更远一跳路由器超时并回复ICMP超时报文重复该过程。 ICMP响应报文中包含响应路由器自身IP由此得到沿途所有路由器IP。 8.3.5 参数问题
场景IP头部存在不可修复错误。 该报文是包罗万象”的错误指示器。无法指明具体原因但会指出错误相对IP头部的偏移值。 ICMPv6中细分为三种 错误头部字段。 无法识别下一个头部。 无法识别IPv6选项。
8.4 ICMP查询/信息类报文
注意8.3 讲解的全是ICMP差错报文。 广泛使用的ICMP查询/信息类报文回显请求回显应答ping使用
8.4.1 回显请求 / 应答
即ping使用的ICMP报文类型。 回显请求报文大小任意但受限于IP数据报大小回显应答时需要将收到数据返回给发送者即使需要IP分片。 字段介绍 标识符UNIX用发送进程PID表示。方便识别同一主机多个ping程序。 序列号从0开始每个回显请求加1。方便查看丢包、重复问题。 可选数据如ping在回显请求和应答包含本地时方便计算RTT。 之前提过NAT处理ICMP时会结合标识符和序列号进行NAT转换因为ICMP报文没有端口号信息。 ping -b 10.0.0.254
ping广播地址作用 子网所有主机收到该ping包后都需要响应所以都需要知道ping主机的MAC于是都向ping主机发ARP请求最终快速广播ping主机ARP。 Linux默认允许回复CMP应答报文给广播地址的ICMP请求。
8.4.2 路由器发现路由器请求RS和通告RA
路由器发现RDRouter Discovery
RDIPv4使用少。主要用于IPv6是IPv6 SLAAC功能一部分。 IPv6 RD包括 路由器请求RSRouter Solicitation报文 路由器通告RARouter Advertisement报文 ICMP type 133表示路由器请求RS。请求网络配置如DNSIPv6网络前缀。
ICMP type 134表示路由器通告RA。要么用于回复RS要么周期多播发送。 使用场景 无状态地址配置RA中包含网络前缀信息。
8.4.3 本地代理地址发现请求/应答
允许移动网络IPv6节点在移动时保持其IPv6地址不变并且可以在外部网络上通过本地代理进行通信。
8.4.4 移动前缀请求/通告
当节点的本地地址将无效时请求更新路由前缀。
8.4.5 移动IPv6快速切换报文
改善IP层切换延迟
8.4.6 组播侦听查询/报告/完成
允许节点查询或报告本地链路上的组播组成员信息并执行组播组成员的管理。
8.4.7 版本2组播侦听发现
8.4.8 组播路由器发现
通过ICMPv6组播路由器发现报文主机确定哪些路由器支持 IPv6 组播从而决定是否启用 IPv6 组播功能。
8.5 IPv6中的邻居发现
邻居发现Neighbor DiscoveryND类似IPv4的ARP。
IPv6中没有广播地址。 ND用于在同一个链路或者网段的节点找到彼此确定一个邻居是否变得可用。
ND使用ICMPv6报文。
ND包含 邻居请求NSNeighbor SolicitationICMP type为135。 邻居通告NANeighbor AdvertisementICMP type为136。 功能地址解析邻居发现地址自动配置。
8.5.1 ICMPv6路由器请求和通告
路由器通告RA报文 通告网络前缀MTUDNSNTP服务器等配置。 通常会定期发送或者用于响应路由器请求RS报文。 RS报文目的IPff02::2所有路由器组播地址
RA报文目的IPff02::1所有节点的组播地址或者单播RS主机 结合无状态DHCPv6 SLAAC使用。
8.5.2 ICMPv6邻居请求和通告
ICMPv6中的邻居请求NS报文取代IPv4 ARP
目的 IPv6中ARP功能获取IPv6地址对应MAC。 检测附近节点是否可达。
8.5.3 ICMPv6反向邻居发现请求/通告
在帧中继网络中确定给定的MAC地址对应IPv6地址
8.5.4邻居不可达检测
Neighbor Unreachability Detection, NUD
定期检测邻居节点的存活状态
如果检测到邻居不可达更新邻居表和路由表切换到备用网络。
8.5.5安全邻居发现
安全邻居发现Secure Neighbor DiscoverySEND
安全性增强的邻居发现协议。
作用 邻居发现且解决传统IPv6邻居发现过程安全漏洞。
8.5.6 ICMPv6邻居发现选项
使用一些可选的选项Options来提供额外信息或配置。
源/目标链路层地址选项
前缀信息选项PIO
重定向头部选项
MTU 选项
通告间隔选项
源和目标地址列表选项
时间戳选项
随机数选项
证书选项
IP地址/前缀选项
链路层地址选项
邻居通告确认选项
路由信息选项
递归DNS服务器选项
切换密钥请求选项
切换密钥应答选项
8.6 ICMPv4 和 ICMPv6 转换
8.7 与ICMP相关的攻击
分为3类
泛洪floodDoS
炸弹bomb发送特殊构造报文导致IP或者ICMP的处理崩溃。
信息泄露information disclosure
8.8 总结