IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ping的工作原理 -> 正文阅读

[网络协议]ping的工作原理

ping的工作原理

我们判断与对方网络是否畅通,通常使用的是ping命令。

那ping命令的原理有了解吗,在一次面试中,我被面试官以很温柔的语气问出了一道我答不出来的题。

这里需要了解一个协议IP的协议的助手—ICMP协议

ping是基于ICMP协议工作的,全称是 Internet Control Message Protocol,互联网控制报文协议。

那如何体现控制

网络包在复杂的传输环境里,常常会遇到各种问题,所以需要传出消息,报告遇到的问题,这样才可以调整传输策略,以此来控制整个局面。

首先了解一下ICMP的功能

ICMP主要的功能是:确认IP包是否成功到达目标地址、报告发送过程中IP包被废弃的原因和改善网络设置等。

在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体原因将由ICMP负责通知。

主机A---->路由器1---->路由器2---->主机B(电源关闭)

详细过程:

发送包—路由器2为了知道主机B的MAC地址,而发送ARP包----APR请求 ----再次发送ARP请求(然而主机B已经关机)----再次发送ARP包-----多次发送ARP包无果-----由于始终无法到达主机B,路由器2返回一个ICMP目标不可达的包发给主机A。

主机A 向主机A发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这是,路由器2就会向主机A发送一个ICMP目标不可达数据包,说明发往主机B的包未能成功。

ICMP的这种通知消息会使用IP进行发送

因此,路由器2返回的ICMP包会按照往常路由控制先经过路由器1再转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域,得知具体发生问题的原因。

ICMP报文是封装在IP包里面,他工作在网络层,是IP协议助手

ICMP包头的类型字段,大致可以分为两大类:

①用于诊断的查询信息,也就是查询报文类型

②通知出错原因的错误消息,也就是差错报文类型

ICMP类型

类型类容种类
0回送应答(Echo Reply)查询报文类型
3目标不可达(Destination Unreachable)差错报文类型
4原点抑制(Source Quench)差错报文类型
5重定向或改变路由(Redirect)差错报文类型
8回送请求(Echo Request)查询报文类型
11超时(Time exceeded)差错报文类型

ping–查询报文类型的使用

ping的发送和接收过程

同个子网下的主机A(IP 192.168.1.1)和主机B(IP 192.168.1.2),主机A执行ping主机B后,发生了什么?

ping命令执行的时候,源主机首先会构建一个ICMP回送请求消息的数据包。

ICMP数据包内包含多个字段,最重要的是类型和序号这两个字段:

类型:应为是回送请求,该字段为8;

序号:用于区分连续ping的时候发出的多个数据包(序号从0开始,每发送一个新的回送请求就加1)

并且为了能够计算往返时间RTT,它会在报文的数据部分插入发送时间。

然后,由ICMP协议将这个数据包连同地址192.168.1.2一起交给IP层,IP层将192.168.1.2作为目的地址,本机IP地址作为源地址,协议字段设置为1表示是ICMP协议,再加上一些其他控制消息,构建一个IP数据包。

接下来,需要加入MAC头。如果在本地ARP映射表中查找出IP地址192.168.1.2所对应的MAC地址,则可以直接使用;如果没有,则需要发送ARP协议查询MAC地址,获得MAC地址后,由数据链路层构建一个数据帧,目的地址是IP层传过来MAC地址,源地址则是本机的MAC地址;还要附加上一些控制信息,依据以太网的介质访问规则,将他们传送出去。

主机B收到这个数据帧后,先检查他的目的MAC地址,并和自己的MAC地址对比,如果符合则接收,否则就放弃。

接收后检查该数据帧,将IP数据包从帧中提取 出来,交给本机IP层。同样,IP层检查后,将有用信息提取后交给ICMP协议。

主机B会构建一个ICMP回送响应消息数据包,回送响应包的类型字段为0,序号为接收到的请求数据包中的序号,然后再发送出去给主机A。

在规定的时间内,源主机如果没有接到ICMP的应答包,则说明目标主机不可达;如果接受到了ICMP回送响应消息,则说明目标主机可达。

此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是ICMP数据包的时间延迟。

当然,这是最简单的同一个局域网里面的情况,如果跨网段的话,还涉及网关的转发,路由器的转发等等,但是对于ICMP的头来讲,是没什么影响的。会影响的是根据目标IP地址,选择路由的下一跳,还有每经过一个路由到达一个新的局域网,需要换MAC头里面的MAC地址。

traceroute–差错报文类型的使用

traceroute作用1:

故意设置特殊的TTL,来追踪去往目的地时沿途经过的路由器,例:traceroute 192.168.1.100

原理:

利用IP包的生存期限从1开始按照顺序递增的同时发送UDP包,强制接收ICMP超时消息的一种方法。

比如,将TTL设置为1.则遇到第一个路由器就牺牲了,接着返回ICMP差错报文网络包,类型是时间超时。

接下来,将TTL设置为2.则遇到第2个路由器就牺牲了,接着返回ICMP差错报文网络包,类型是时间超时.

如此往复,直到到达目的主机。

通过这个过程,traceroute就可以拿到所有路由器的IP。

需要注意的是,有的路由器根本不会返回这个ICMP,所有对于有的公网地址,是看不到中间经过这个路由的。

发送方如何知道发出的UDP包是否到达了目的主机呢?

traceroute在发送UDP包时,会填入一个不可能的端口号值作为UDP目标端口号(大于3000)。当目的主机收到UDP包后,会返回ICMP差错报文信息,但这个差错报文信息的类型是端口不可达

所以当差错报文类型是端口不可达时,说明发送方发出的UDP包到达了目的主机。

traceroute作用2:

故意设置不分片,从而确定路径的MTU

因为有的时候,我们并不知道路由器MTU大小,以太网的数据链路层上的MTU通常是1500字节,但是非以太网的MTU值就不一样了,所以我们需要知道MTU的大小,从而控制发送包的大小。

原理:

首先在发送端主机发送IP数据报时,将IP包首部的分片禁止标志位设置为1.根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。

随后,通过一个ICMP的不可达消息将数据链路上的MTU的一起发送给发送主机,不可达的消息类型为需要进行分片但设置了不分片位

发送主机端每次收到ICMP差错报文时就减少包的大小,以此来定位一个合适的MTU值,以便能到达目标主机。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:06:18  更:2021-09-08 11:06:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/24 9:22:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码