目录
ICMP
发送接收过程
ping命令详解
使用技巧
作用1工作原理
作用2工作原理
traceroute命令详解
ICMP
在学习这两个命令之前,需要先简单的了解一下ICMP网络协议
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议
ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。
对于差错报文类型 3(目标不可达)还可以继续进行细分
PING (Packet Internet Groper), 因特网包探索器,用于测试网络连接量的程序 。Ping是工作在TCP/IP网络体系结构中 应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议) Echo 请求报文,测试目的站是否可达及了解其有关状态 。
在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:
(1)用来检测网络的连通情况和分析网络速度;
(2)根据域名得到服务器IP;
(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。
发送接收过程
我们模拟一下发送和接收的过程
发送方A
ping 命令执行的时候,源主机A首先会构建一个 ICMP 回送请求消息数据包。
ICMP 数据包内包含多个字段,最重要的是两个:
- 第一个是类型,对于回送请求消息而言该字段为 8;
- 另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包。
每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。
然后,由 ICMP 协议将这个数据包连同地址A(被ping主机IP地址)一起交给 IP 层。IP 层将以 A作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。
接下来,需要加入 MAC 头。如果在本地 ARP 映射表中查找出 IP 地址A所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
接收方B
主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。
接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议。
主机 B 会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包中的序号,然后再发送出去给主机 A。
在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。
此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。
综上所述,ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY (类型为 0)。
ping命令详解
以下是MAC OS操作系统下ping命令的详细应用,不同操作系统间的操作和可选字段略有不同
ping [-AaDdfnoQqRrv] [-c count] [-G sweepmaxsize] [-g sweepminsize] [-h sweepincrsize]
[-i wait] [-l preload] [-M mask | time] [-m ttl] [-P policy] [-p pattern]
[-S src_addr] [-s packetsize] [-t timeout] [-W waittime] [-z tos] host
ping [-AaDdfLnoQqRrv] [-c count] [-I iface] [-i wait] [-l preload] [-M mask | time] [-m ttl]
[-P policy] [-p pattern] [-S src_addr] [-s packetsize] [-T ttl]
[-t timeout] [-W waittime] [-z tos] mcast-group
如果单独的ping一个地址的话会不间断地ping指定计算机,直到管理员中断。
1. ping-c的使用
通过这个命令可以自己定义发送的个数,对衡量网络速度都很有帮助,比如我想测试发送10个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少
2. ping-s的使用
发送s(size)指定大小的到目标主机的数据包。
3. ping-t的使用
不间断地ping指定计算机,直到t(timeout)。
其他字段的实用性并不大,一般在工作中不会用到,想了解的大佬可以自行研究
使用技巧
当你的网络出现故障不能访问某计算机如 14.215.177.39 (百度的 IP 地址之一 ) 时,我们一般可采用由近及远的连通性测试来确定问题所在。现假设你的 IP 是 192.168.1.2,你旁边计算机的 IP 是 192.168.1.3,网关的 IP 是 192.168.1.1 ,那么过程如下:
ping 192.168.1.2 ,测试自己计算机的状态,如果 OK,那么说明本机网络软件硬件工作正常,否则,问题在本机,检查本机 TCP/IP 配置即网卡状态等
ping 192.168.1.3 ,测试到旁边计算机的连通性,如果OK,那么说明本子网内部工作正常,否则,问题在本机网络出口到交换机之间,检查本机网卡到交换机的连线等
ping 192.168.1.1,测试到网关的连通性,如果 OK,那么说明本子网出口工作正常,否则,问题在网关,这是你无能为力的事情,报告给网管
ping 14.215.177.39,测试到百度的连通性,如果 OK,那就 OK,否则,问题在网关以外,这也是你无能为力的事情,报告给网管或者李彦宏?
traceroute (Windows 系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP 呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。
traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。
互联网是由网关连接在一起的大型复杂的网络硬件集合。跟踪某人的数据包遵循的路由(或找到丢弃该数据包的错误网关)可能很困难。 Traceroute利用IP协议的“生存时间”字段,并尝试从每个网关到某个主机的路径中引发ICMP TIME_EXCEEDED响应。
唯一必需的参数是目标主机名或IP地址。默认的探测数据报长度为40字节,但是可以通过在目标主机名之后指定一个数据包长度(以字节为单位)来增加。
获得IP之后可通过网站 查看这些节点位于何处,是哪个公司的,大致清楚本机到百度服务器之间的路径。
作用1工作原理
它的原理就是利用 IP 包的生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。
比如,将 TTL 设置 为 1,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是时间超时。
接下来将 TTL 设置为 2,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。
这样的过程,traceroute 就可以拿到了所有的路由器 IP。
当然有的路由器根本就不会返回这个 ICMP,所以对于有的公网地址,是看不到中间经过的路由的。
traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。
因为有的时候我们并不知道路由器的 MTU
大小,以太网的数据链路上的 MTU
通常是 1500
字节,但是非以外网的 MTU
值就不一样了,所以我们要知道 MTU
的大小,从而控制发送的包大小。
作用2工作原理
首先在发送端主机发送 IP
数据报时,将 IP
包首部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。
随后,通过一个 ICMP 的不可达消息将数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。
发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU
值,以便能到达目标主机。
traceroute命令详解
traceroute [ -adDeFISnrvx ] [ -f first_ttl ] [ -g gateway ]
[ -i iface ] [ -M first_ttl ]
[ -m max_ttl ] [ -P proto ] [ -p port ]
[ -q nqueries ] [ -s src_addr ] [ -t tos ]
[ -w waittime ] [ -A as_server ] [ -z pausemsecs ]
host [ packetlen ]