PING命令与ICMP协议
概述
不管是开发中,还是电脑日常使用,常常遇到网络不通的问题。这时你就会习惯性的使用一个命令ping,查看问题出在哪里,那它是如何工作的哪?
ICMP协议
ICMP就是互联网控制报文协议,网络包在复杂的网络环境传输时,常常遇到各种各样的问题。当遇到问题的时候,总不能让这个网络包死的不明不白,要传出消息来,报个情况,是怎么死的,为什么死的,这样才可以调整传输的策略。所以ICMP的功能主要有两种,确认IP包是否成功到底目标地址,通知在发送过程中IP被丢弃的原因。
ICMP报文是封装在IP包里的,一个ICMP报文包括IP报头,ICMP报头和ICMP报文,若IP报头中的协议字段为1时,说明是一个ICMP报文。
类型:占一个字节,标识ICMP报文的类型,不同类型有不同的代码,它有分为两大类,一类为差错报文,一类为查询报文。
代码:与类型字段一起标识ICMP报文的详细类型。
校验和:检验报文在传输过程中是否出现差错,和IP报头中的校验和是一样的。
查询报文类型
ping就是查询报文,一种主动的请求,并且获得主动应答的ICMP协议。ping发起请求命令,会发送一个ICMP Echo Request给对端,请求得到回复,就叫ICMP Echo Reply,它对比原生的ICMP,多了两个字段,一个是标识符,一个是序号。并且ping命令会统计响应时间和TTL(生存周期)来计算往还时间,说明路程的长短。
假定我们在一个子网内,主机A的IP为192.168.6.1,主机B的IP为192.168.6.2,。在主机A运行ping 192.168.6.2
- ping命令执行的时候,源主机会构建一个ICMP请求的数据包。里头有两个重要的字段,就是我们前面说的标识符和序号,对于请求数据包而言该字段的类型为8(回送请求),另一个就是顺序号,区分连续ping的时候发出的多个数据包,每发出一个请求数据包,顺序号会自动加1,并且会在报文的数据部分插入发送时间。
- ICMP协议将这个数据包连同192.168.6.2交给IP层,IP层将会以192.168.6.2作为目标地址,本机IP地址作为源地址,还有一些控制信息构建为一个IP数据包
- 加入MAC头,先判断一下是不是在一个子网内,如果是就在ARP映射表中查找IP地址192.168.6.2对应的MAC地址,则可以直接使用。如果没有,就要发送ARP协议查询MAC地址,获取MAC地址后。构建一个数据帧在附加上一些控制信息,依据以太网的介质访问规则,将数据包发送出去。
- 192.168.6.2收到这个数据帧后,检查下MAC目标地址,和本机的MAC地址对比,符合就接收,不符丢弃。检查该数据帧,将IP数据包从帧中提取出来,交给本机IP层,IP层检查完后,有用信息提取后交给ICMP协议。
- 192.168.6.2收到后,会构建一个ICMP应答包,应答的类型字段为0,顺序号为接收到的请求包的序号,发给主机192.168.6.1
- 在规定时限内,源主机也就是192.168.6.1没有接到ICMP的应答包,就说明目标主机不可达,如果接收到ICM应答包,则说明目标主机可达。然后检查当前时刻减去该数据最初从源主机发出的时刻,也就是ICMP数据包的时间延迟。
注意:有很多中间设备都是禁止ping的,并不是说网络不通。这个时候我们就要使用其他协议来检查网络是否通畅,如telnet等
差错报文类型
这是ICMP协议的另一个报文种类,差错报文中常用的类型主要有5种。终点不可达,端口不可达,源点抑制,超时,参数问题,改变路由
- 假定主机A给主机B发送一个邮件,网络传输中要经过很多台路由器,若R1接到邮件后,发生了故障,不知道下一步该发给哪个路由设备或那台主机设备,这封邮件也就没法到达主机B,这时路由R1就会把数据包丢弃并向主机A发回一个终点不可达的数据报文。这时数据报文,类型标号为3,表示是不可达的错误类型。
- 目标系统收到一个IP数据报某个服务请求时,本地没有此服务,会向源头返回ICMP端口不可达信息。
- 假定主机A给主机B发送一个视频,主机A传输非常快,主机B接收慢的话,可能导致数据都拥塞在某一台设备上,这台设备解决不了拥塞问题,会给源主机发送一个源点抑制报文反馈给源主机,告诉源主机数据拥塞了,在发送就会丢数据,告诉他放慢发送数据。类型标号为4,
- 如果超过网络包生存周期还是没到,就是超时,主机A给主机B发送一个数据报文时,该数据报文在网络会有一个TTL生存时间字段,没经过一台路由,TTL字段就会减1,路由器收到数据报文后TTL字段值减1后为0的话,该路由器就会把数据包丢弃并向主机A发送一个ICMP超时报文,类型是为11
- 当路由器后目标追收到数据报的首部中有的字段值不正确时,就会丢弃数据报,向源点发送参数问题的报文,类型为12
- 路由器改变路由报文发送给主机,让主机知道下次应将数据报文发送给另外的路由器。类型为5
traceroute
traceroute的应用就是差错报文类型使用,它的目的就打印出可执行的程序主机,一直到目标主机之前要经历多少路由器,也就是路由追踪。traceroute使用ICMP的规则,故意制造一些能产生错误的场景,就是故意设置特殊的TTL,追踪去往目的地时沿途经过的路由器。
======================================================
如发现错误,请及时留言,lz及时修改,避免误导后来者。感谢!!!
转载于:https://www.cnblogs.com/dslx/p/10809500.html
PING命令与ICMP协议相关推荐
- c语言实现icmp协议ping命令,利用ICMP协议实现ping命令
一.实现原理 ping利用ICMP协议包来侦测另一个主机是否可达.Ping的原理是使用了类型码为8的ICMP回送请求包,收到请求的主机则用类型码为0的ICMP回应报文.如果应答包和请求包的标示号.序号 ...
- 【计算机网络】(5)ping的过程分析+icmp协议
目录 一.ping 1.1 过程分析 1.2 ICMP协议 1.2.1 iptables简要介绍 1.2.2 路由追踪 1.3 常用选项 1.4 ping一台服务器ping不通的原因和解决方法 1.5 ...
- ping命令使用什么协议
几乎每一名网工及弱电工程师都遇到过网络不通的情况,通常判断标准是以外网连通性及 Ping 测试得出结果,而 ping 属于 ICMP 协议中的一个工具.ping 是为了测试另一台主机是否可达,发送一份 ...
- ping 原理与ICMP协议---转
http://blog.csdn.net/inject2006/article/details/2139149 ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某 ...
- ping 原理与ICMP协议
2019独角兽企业重金招聘Python工程师标准>>> ICMP(Internet Control Message Protocol) http://blog.csdn.net/in ...
- ssh命令、ping命令、traceroute 命令所使用的协议
在Node reboot or eviction: How to check if yourprivate interconnect CRS can transmit network heartbea ...
- Ping命令及其协议
今天一师弟,问我说:"师兄一个网络地址我可以用浏览器访问,为什么不能ping通呢?" 答:"ping命令,用于路由和主机之间的连通测试,即局域网内:而浏览器访问地址则能够 ...
- 全面掌握ping命令(三) ping命令防火墙设置
Ping命令利用ICMP协议工作,ICMP是一个比较复杂的协议,功能强大,也经常被黑客利用来攻击网络上的路由器和主机,所以目前的很多网络设备或防火墙都提供了禁用ICMP协议的功能.如Windows系统 ...
- ICMP协议Ping命令的应用
ICMP的全称是InternetControlMessageProtocol,它是TCP/IP协议族的一个子协议,属于网络层协议,用于在IP主机.路由器之间传递控制消息.从技术角度来讲,就是让我们能够 ...
最新文章
- DeepMind 打造 AI 游戏系统,可以玩扑克、国际象棋、围棋等,战斗力爆表
- java常用类型转换
- 在Visual Studio中使用命令行参数进行调试
- Making the impossible: 3 nodes intercontinental replication--转载
- keepalived热备 keepalived+LVS Haproxy
- 标准梯度—lhMorpGradient
- Deep Q-learning
- 百度地图java批量获得经纬度_从百度地图API接口批量获取地点的经纬度
- xampp 中 mysql的相关配置
- win7查看隐藏文件_win7系统如何隐藏文件 win7系统隐藏文件步骤【介绍】
- B - 吉哥系列故事——完美队形II HDU - 4513 (马拉车)
- MySQL-第三篇SQL语句基础(2)数据库约束
- c++ sort排序函数
- php纯真ip调用,使用php调用纯真IP数据库信息的解析组件
- 亚马逊成功的四个关键因素
- vTestStudio:变体Variant初理解
- C 关于unsigned int compzero = ~0;与unsigned int compzero = 0xFFFF; 的区别!
- 【华为OD机试真题 JS】叠积木
- 由《创业时代》想到的
- Keil C51中code、data、bdata、idata、xdata、pdata的解释
热门文章
- 优启通VIP版(EasyU)_v3.7.2023.0323
- Global Enqueue Services Deadlock --WFG的诊断
- 一组数据证明 歪果仁根本不用PC玩游戏
- 西克DFS60E-S4AB00500增量编码器
- SpringBoot启动dubbo出现com.alibaba.dubbo.common.bytecode.Wrapper12: inconsistent stack height -1异常
- 视频有水印怎么办?视频去水印软件推荐
- Js将字符串转换成对象或数组en
- php 汉字转拼音类
- Unity3D《太空战机》如何给战机加上防护罩
- Unity3D开发:为地形添加水源和效果