1 实验:ICMP 协议的分析与实现 [实验目的] 分析ICMP 报文,理解ICMP 协议在Internet 网中的具体应用及其实现原理,深入了解TCP/IP 网络的容错控制;学会运用网络套接字Winsock 开发网络通信程序。 [实验内容] 使用Visual Studio C++ 6.0 和网络接口套接字Socket 进行Windows 环境下的网络编程,运用原始嵌套字RAW_SOCKET 从IP 层开始构造整个ICMP 报文,通过ICMP 协议所提供的回送请求(echo request)和回送应答(echo reply)这两种报文实现检测目的站的可达性与状态。 1.IP 报头、ICMP 报文的基本描述 IP协议并不能保证绝对的可靠,所以就设计了ICMP协议,进行差错报告. ICMP 消息使用IP头作为基本控制. IP头的格式如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version=4 IHL Internet头长 Type of Service = 0 Total Length IP包的总长度 Identification, Flags, Fragment Offset 用于 IP包分段 Time to Live IP包的存活时长 Protocol ICMP = 1 Header Checksum 头校验和(检查整个IP报头) Addresses 发送Echo消息的源地址是发送Echo reply消息的目的地址,相反,发送Echo 消息的目的地址是发送Echo reply消息的源地址. 2 Echo 或 Echo Reply 消息格式如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...