WEB开发网
开发学院软件开发VC TCP/IP学习笔记(2) 阅读

TCP/IP学习笔记(2)

 2010-04-03 20:34:40 来源:WEB开发网   
核心提示:七、ICMP地址掩码请求与应答:ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,系统广播它的ICMP请求报文,TCP/IP学习笔记(2)(3),ICMP地址掩码请求和应答报文格式如下: 类型(17或18) 代码(0)

七、ICMP地址掩码请求与应答:

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,系统广播它的ICMP请求报文。ICMP地址掩码请求和应答报文格式如下:

类型(17或18) 代码(0) 检验和
标识符 序列号
32位子网掩码

ICMP报文中的标识符和序列号由发送端任意选择设定,这些值在应答中将被返回。

struct icmp_mask{
 unsigned char icmp_type; //类型
 unsigned char icmp_code; //代码
 unsigned short icmp_checksum; //检验和
 unsigned short icmp_id; //标识符
 unsigned short icmp_sequence; //序列号
 unsigned long icmp_mask; //32位子网掩码
};

说明:RFC规定,除非是地址掩码的授权代理,否则不能发送地址掩码应答。

向本机IP地址和环回地址发送地址掩码请求结果是一样的。

八、ICMP时间戳请求与应答:

ICMP时间戳请求允许系统向另一个系统查询当前时间,返回的是自午夜开始记算的毫秒数。调用者必须通过其他方法获取当前时间。

ICMP时间戳请求与应答报文格式如下:

类型(13或14) 代码(0) 检验和
标识符 序列号
发起时间戳
接收时间戳
传送时间戳

请求端填写发起时间戳,然后发送报文。应答系统收到报文填写接收时间戳,发送应答时填写发送时间戳。实际上,大多数实现将后两个字段一般设置为一样的。

struct icmp_time{
 unsigned char icmp_type; //类型
 unsigned char icmp_code; //代码
 unsigned short icmp_checksum; //检验和
 unsigned short icmp_id; //标识符
 unsigned short icmp_sequence; //序列号
 unsigned long icmp_request_time; //发起时间戳
 unsigned long icmp_receive_time; //接收时间戳
 unsigned long icmp_send_time; //传送时间戳
};

九、ICMP端口不可达差错

主机如果收到一份UDP数据报而目的端口与某个正在使用的进程,那么UDP返回一个ICMP不可达报文。报文格式如下:

类型3 代码(0-15) 检验和
保留(必须为0)
IP首部+原始IP数据报中数据的前8个字节

当代码为4时,路径MTU发现机制允许路由器把外出接口的MTU填在这个32bit的低16bit中。

struct icmp_unreach{
 unsigned char icmp_type; //类型
 unsigned char icmp_code; //代码
 unsigned short icmp_checksum; //检验和
 unsigned long icmp_zero; //保留
 unsigned char icmp_ip[28]; //IP首部+原始IP数据报中前8个字节,也就是地址信息
}

上一页  1 2 3 

Tags:TCP IP 学习

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接