ICMP,原始套接字,ping实现

这篇博客详细介绍了ICMP协议,特别是如何利用ICMP协议实现ping命令。作者通过解释ping命令的工作流程,强调了ICMP在其中的作用,并探讨了ICMP报文的头部结构。此外,还讨论了使用原始套接字发送和接收ICMP数据的过程,以及如何通过GetTickCount()计算响应时间。博客最后提供了一个简单的示例Demo链接。
摘要由CSDN通过智能技术生成

ICMP学习笔记

          最近一直在看网络编程方面的书,对ping命令有了一些认识,在此写下来,已帮助自己记忆,同时也和大家一起分享学习。

         

    用一个ping实例来讲解ICMP协议。Ping命令是测试到另一端的线路是否能连通。

首先了解一下Ping命令的过程:

1.Ping命令加上一个主机地址或者域名

2.等待对方主机应答。

3.统计发送接收次数,是否有丢包。

这样一个ping过程就完成了。但是它是如果实现的呢。首先我们需要了解ICMP协议,因为ping其实就是遵循ICMP协议的。

Internet Control Message Protocol(ICMP)译为:互联网控制报文协议。ICMP不能单独传输,它需要封装在IP数据报里。如下图所示

     

    发送ICMP数据报需要填充ICMP头部信息,头部+发送的数据部分组成一个ICMP报文。填充头部的意义是设置你想要的结果。ICMP头部占8个字节。类型一个字节,代码一个字节,校验和两个字节,标识符两个字节,序列号两个字节。类型和代码的组合可以表达不同的意义。这里我们会用到类型8代码0表示的是ECHO请求。当对方主机返回是类型为0,代码0表示ECHO应答。IP首部占20个字节下面给出ICMP头部和IP头部的定义。

    IP头部定义:

             
typedef struct IPHeader {
								UCHAR   iph_verlen;  // Version and length 版本和首部长度
								UCHAR   iph_tos;  // Type of service 服务类型
								USHORT  iph_length;  // Total datagram length 总长度 
								USHORT  iph_id;  // Identification 标识符
								USHORT  iph_offset;  // Flags, fragment offset 片偏移
								UCHAR   iph_ttl;  // Time to live 生存时间
								UCHAR   iph_protocol;  // Protocol 协议
								USHORT  iph_xsum;  // Header checksum 首部校验和
								UL
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值