卷2 第11章 ICMP:Internet控制报文协议
11.1 引言
ICMP传递差错和管理报文,是IP的必要部分。
11.2 代码介绍
netinet/ip_icmp.h:ICMP结构netinet/ip_icmp.c:ICMP处理
11.3 icmp结构
struct icmp {
u_char icmp_type;
u_char icmp_code;
u_short icmp_cksum;
union {
// 各种类型专用
} icmp_hun;
};11.4 ICMP的protosw结构
类型:SOCK_RAW
协议:IPPROTO_ICMP(1)
输入:icmp_input
11.5 输入处理:icmp_input函数
验证步骤 验证长度
验证检验和
检查类型
差错处理 映射到PRC_常量
调用协议控制输入函数
请求处理 回显:转换为回显应答
时间戳:记录时间戳
地址掩码:检查配置
11.6 重定向处理
更新路由表
通知所有协议
icmp_redirect处理 验证重定向
查找匹配路由
更新网关
11.7 输出处理
icmp_error函数 构造ICMP差错
包含原始数据报首部+8字节
检查不产生差错的条件
icmp_reflect函数 交换源/目的地址
逆转源路由
发送应答
11.8 小结
ICMP处理差错和查询报文。内核处理回显、时间戳和地址掩码请求。