浅谈网络六-判断网络是否通畅「ICMP 和 ping」

前两天遇到个事情,就是我刚刚做完了服务器的域名指向,但是同事访问不了该域名,我就喊他ping以下这个域名,ping不通,但是我在服务器上ping是通的,过一会儿他就可以访问并且ping通了。这时候就产生了一个问题,ping的工作原理是什么样的呀?它是怎么工作的?

一.ICMP协议

讲到ping,首先要讲下它的爸爸,也就是ICMP协议(ping是基于它工作的),ICMP是(Internet Control Message Protocol)Internet控制报文协议。 它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

说起ICMP可能大家都比较陌生,接下来说明下它的主要功能:众所周知,咱们的网络环境是非常复杂的,那么当网络包在网络环境中传输的时候,总会遇到各式各样的问题。当遇到问题的时候,我们需要知道所遇到的问题具体是什么,这样才能够去针对问题去更换不同的策略。那么ICMP就是应用于采集传输过程中问题的。

需要注意的是,ICMP报文是封装在IP包中的,它是属于网络层的。

二.报文分类

ICMP报文有很多类型,不同类型的话有着不同的代码,常用的就是0和8,其中8是主动请求,0是主动应答。ICMP报文具体分为查询报文类型和差错报文类型,下面进行一下简单介绍。

1.查询报文类型

查询报文类型,顾名思义,就是主动发起的一种查询,例如ping 就是查询报文,是一种主动请求,并且获得主动应答是的ICMP协议。「注意,ping的话还在ICMP协议格式中加入了自己的格式,并不是与ICMP协议格式完全相同」。

对ping 的主动请求进行网络抓包,成为ICMP ECHO REQUEST,主动请求的应答被成为ICMP ECHO REPLY。相比于ICMP协议格式,它增加了两个自己的字段“标识符”和“序号”。标识符 是用来 标示去向区分的,判断包去干啥去哪,序号 是 发送包的识别编号,判断是哪个包。

2.差错报文类型

差错报文类型是在异常情况发生时,来报告发生错误的。ICMP差错报告报文只能报告差错,不能纠正差错,差错的纠正留给高层协议去做,它根据源IP地址将差错报告报文发送给IP数据报的源发送站点。它的结构较为复杂,将收到的需要进行差错报告IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段,再加上响应的ICMP差错报告报文的前8个字节。举几个例子:「代码3」终点不可达,「代码4」源抑制,「代码11」超时,「代码5」重定向。简单讲解下几个错误:
终点不可达,包含很多种情况,总体来说就是没办法和目标主机对接上。网络不可达:没找到地方;主机不可达:没找到对应主机;协议不可达;端口不可达;需要进行分片但是被禁用等。
源抑制,目标主机无法消化掉所有的数据,需要给更细的粒度或更大的时间区间进行传输。
超时,在规定的时间内,没有及时到达目标主机。
重定向,到达了,下次去走别的路由器线路。

三.该如何使用

说的再多原理,最终还是要归到使用上。

1.查询报文类型的使用:ping

下面就来讨论下ping在执行的过程中发生了什么,已内网间ping为例更简单的说明下过程。

ping在执行的时候,主机会去构建一个ICMP请求数据包,其中包含的多个字段中最重要的两个是“类型字段”和“顺序号”。类型字段 对于请求数据包而言为8;顺序号 主要区分连续 ping 的多个数据包,可以把它理解成自增id。为了计算往返时间RTT,它会在报文的数据部分插入发送时间。

然后ICMP协议将数据包连同本机的IP地址一起交给IP层进行处理,加入目标IP地址等信息构建IP数据包。

接下来需要加上MAC头,在局域网中通过ARP协议,找出目标地址对应的MAC地址,到达数据链路层构建数据帧,发送出去。

目标主机收到了数据帧之后,依次提取MAC,IP等信息,对比MAC信息,到IP层对比IP信息,提取数据交给ICMP协议,构建应答包,其中类型字段为 0 标示为应答包,顺序号为来时的顺序号,进行回包。

在规定时间内没有主机没有收到应答包就为主机不可到达;然后会算一下延迟,就是我们在打了ping命令后看到的时间time。


ping命令示例

当然这是最简单的情况,出外网以后遇到的问题会更加的复杂。除了ping目标地址外,还应该知道一个包都经过了哪些路由设备,ttl跃点数为55,如果这些都是在控制范围内的话,可以通过tcpdump -i [网卡] icmp 查看有没有到达某个点,进一步进行排查。如果不在控制范围内的话,就要使用telnet通过其他协议进行测试网络是否通畅了。

2.差错报文类型的使用:traceroute

traceroute的主要作用是设置特说的ttl,进行追踪去往目的所经过的路由器。下面描述下工作过程:

当其指向某个地址的时候,他会发送一个UDP数据包,将ttl设置为1,一旦度过一个路由,他就结束了。

如果中间路由不止一个,就会返回ICMP网络差错包,类型是时间超时,那么就使 ttl 加 1进行尝试,循环往复直到达到目标主机。

这样就拿到了中间所度过的所有路由器的IP地址,当然有的路由器不会回这个ICMP,这也是traceroute的一个公网的地址,看不到中间路由的原因。不会产生ICMP的原因有很多情况,例如 ICMP的差错报文出错;目的地址为广播地址活着源地址不唯一的时候等都会产生不回包的情况。

注意这里判断UDP是否到达目标主机的方式,它发送一个指定端口号大于30000的一个包,使目的主机回产生一个“端口不可到达”的错误。

总结下:
1.ICMP分为 查询报文和差错报文。
2.查询报文主要应用:ping
3.差错报文主要应用:traceroute

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,...
    srtianxia阅读 3,893评论 0 12
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,042评论 0 8
  • 第二章 物理层 频分复用:频分复用的用户在同样的时间占用不同的带宽资源(频率带宽) 时分复用:时分复用的用户在不同...
    PramaWells阅读 3,442评论 1 3
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,464评论 0 6
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,028评论 6 174