学习网络编程之ping

ping命令通常被用来检查网络连接是否是通的,如我们的电脑接在局域网的路由器下面,我们可以用ping来测试跟路由器或其它局域网内的某台主机的连接情况,又或者我们想测试是否连接外网正常,我通常会ping的一些网站如www.baidu.com,www.jd.com等。这个命令行工具相信很多人都用过,应该也有不少人和我一样一直想它到底是怎么实现的,或它的过程是怎样的。

1 ping测试

测试设备:电脑一台,android手机一台(^_^手上只有一台电脑),无线路由器一台。
测试方式:电脑用网线连接在路由器下,手机通过WiFi连接上路由器,用android手机ping电脑。
测试准备:电脑上需安装豌豆荚+adbtool,这样电脑可以通过USB线进入android手机调试模式并进入手机shell,我们就可以在电脑上敲手机上的命令,还没安装或还不会使用的去百度一下;电脑上还需安装网络抓包工具,如Wireshark,Omnipeek等,Wireshark挺有名的,而由于工作需要我装的是Omnipeek,两款软件差不多,还没安装或还不会使用的去百度一下。
开始测试:打开电脑上的抓包软件开始抓包


电脑打开cmd输入ipconfig /all查看电脑有线网络获得的ip地址(如192.168.1.100),利用adbtool进入手机shell模式,然后输入ping 192.168.1.100,这样手机就开始ping电脑了。


2 ping分析

通过过滤抓取到的网络封包来分析ping的过程。


从上面的封包protocol这栏我们可以看到"PING Req","PING Reply"这已经说明了这些封包就是ping的请求和响应包。

1) ping请求包分析


封包48的十六进制数据如上,借助Omnipeek工具自动分析展开结果如下:




从上面可知ping请求包是基于IP协议的ICMP消息的,ICMP的数据结构可以查询rfc792,这里[ICMP Type] 为 8 Echo Request。

2) ping响应包分析


封包49的十六进制数据如上,借助Omnipeek工具自动分析展开结果如下:


这里[ICMP Type] 为 0 Echo Reply。

3) 有关ping目标机器mac地址

数据在网络中的两台机器之间传输最后都是靠mac地址来识别的,即有了mac地址标记才知道数据封包是谁发的,要发给谁。所以上面封包中Ethernet Header里面有[Destination]和[Source]域用来标示目标地址和源地址。这里ping命令带的参数只有ip地址,如果不知道它的mac地址封包怎么能发出去呢?怎么才能知道它的mac地址呢?此时ARP协议就开始发挥作用了。

4) ARP协议的作用

a) 维护一张ARP表,即ip地址到mac地址的映射表;
b) 如果ARP表中找不到对应的ip地址到mac地址映射,则可以向所属子网络中其它机器发送请求,即向大家问“有没有机器的ip是xxx.xxx.xxx.xxx”,如果某台机器的ip刚好是这个ip,则这台机器就会回应"我就是ip:xxx:xxx:xxx:xxx",这样就找到了ip:xxx:xxx:xxx:xxx对应的mac地址,然后ARP就会把这个映射添加到ARP表中。这只是一种情况,即目标机器就在同一个局域网内,如果目标机器在外网,这时就需要网关来转发了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值