【计算机网络】网络诊断工具ping的模拟实现之基础知识

在学习网络的时候,我们肯定用过ping来测试两个主机之间是否连通。最近在复习就想着可不可以自己来实现一个ping。这也可以算得上是一个小项目了。

为了更好的模拟实现ping命令,我想按照一个开发的模式去做这个项目。先从对项目的理解上开始,然后在去调查整个背景知识,再去构建框架逐步实现。

今天是第一天,首先对ping(Packet InterNet Groper)可能牵扯到的知识做一个整理。

ping在Linux和window中是一个命令,可以用“ping(空格)IP地址”来检测网络是否连通。ping使用了ICMP回送请求与回送回答报文,并且ping是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP/UDP。

ping的原理是:利用网络上地址IP的唯一性,然后给目标地址发送一个数据包,并要求对方回送个同样大的数据包来确定两台机器网络是否连通。下来,我们详细说ICMP协议。

ICMP,协议网际控制报文协议。最开始提出的ICMP是为了更有效转发IP数据报和提高交付成功的机会。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。值得注意的是,ICMP不是高层协议,而是IP层的协议。ICMP报文作为IP层数据报的数据,需要加上数据报的首部,组成一个IP报然后发送出去。

这里写图片描述

ICMP报文。在这里,代码字段是为了进一步区分某种类型下某种情况。

这里写图片描述

不同类型和代码会使得ICMP报有不同的意义。

这里写图片描述

ICMP报文的种类有两种,一种是ICMP差别报告报文ICMP询问报文。由上图的后两行可以分辨出到底是查询报文还是差错报文。ICMP的差别报告有五种。

1. 终点不可达
当路由器或主机不能交付数据报时就会让源点发送终点不可达报文

2. 原点抑制
当路由器或主机由于拥塞而丢弃数据报时,就会向源点发送源点抑制报文,使源点知道应当把数据报的发送频率减慢

3. 时间超过
当路由器收到生存时间为0的数据报时,除了丢弃这个报文外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已经收到的数据报片都丢弃,并向源点发送时间超过报文。

4. 参数问题
当路由器或目的主机收到的数据报的首部中有字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

5. 改变路由
路由器把改变路由报文发送给主机,让主机知道下次应将报文发送给另外的路由器。

但值得注意的是,出现一下情况时是不会发送差别报文的。

- 对ICMP差错报文不会在发送ICMP差错报文
- 对第一个分片的数据报片后的所有后续数据报片都不发送ICMP差错报文
- 对具有多播地址的数据报不发送ICMP差错报文
- 对具有特殊地址(127.0.0.0或0.0.0.0)的数据报都不发送ICMP差错报文

而常用的ICMP询问报文有两种:

1. 回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的主机是否可达及了解有关状态。

2. 时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的时间和日期。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日到现在一共有多少秒。时间戳请求和回答可用来进行时钟同步和测量时间。

下篇将开始准备搭建框架。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值