Linux 计算机网络 从 ping 来初窥计算机网络
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Linux 计算机网络 从 ping 来初窥计算机网络
在上一章节《计算机网络从零到一》我们重点讲解了整个网络的形成以及物理层、数据链路层、网络层这三层的形成以及他们所解决的问题而本章节主要讲解 ping
命令在 Linux 中到底发生了一些什么。
ping 简介
当我们第一次接手服务器时首先需要验证的就是网络相关配置而最简单直接的就是 ping
命令。如我们要验证所在服务器是否能访问百度搜索网址则可以使用
ping www.baidu.com
# ping 命令在linux默认参数下会无限制的运行如需要停止可以使用 [ctrl+C]
可以看到详细的 ping
命令运行过程以及在退出程序后的一个统计数据。
详细运行过程中标识了每一次 ping
包的数据大小为 64kytes;通过 www.baidu.com
的回复 ip 39.156.66.14
传回;每一次都有一个序列号 icmp_seq
从 1 开始递增老版本为 0;ttl
也在之前讲解过为 tcp/ip
的剩余生命周期;time
是当前服务器记录的每一次从发送请求到接收到回复的时间所以不需要两个服务器进行时间同步。
在统计数据中会显示发送了多少个包接收到多少个包丢包率以及总的消耗时间;还会有 rtt
本机硬件耗费的时间的最小值/平均值/最大值/平均偏差其中平均偏差的计算公式为:
S Q R T ( S U M ( R T T ∗ R T T ) / N – ( S U M ( R T T ) / N ) 2 ) SQRT(SUM(RTT*RTT) / N – (SUM(RTT)/N)^2) SQRT(SUM(RTT∗RTT)/N–(SUM(RTT)/N)2)
值越大表示网络情况越不稳定
在 Linux 下才有这个值;windows 下无;Mac 下叫做 stddev
ping 参数
我们可以使用 man ping
来查看 ping
的使用手册下表列举了常用的 ping
参数供大家参考:
命令 | 释义 |
---|---|
-c [number] | count:指定ping的次数在到达后自动停止 |
-A | Adaptive ping:根据每一次ping的时间自动调整ping的速度 |
-f | Flood ping:使用极限速度ping目标地址只有超级用户能够使用会自动使用静默模式 |
-i [double] | interval:每次ping 的间隔时间单位秒 |
-I [interface] | interface:使用指定网卡进行ping任务 |
-q | quiet output:使用静默模式只输出汇总信息 |
-t [number] | ttl:设置ttl值 |
ping 执行过程
不知道大家有没有疑惑ping
命令貌似很简单但是既可以 ping ip
又可以 ping host
还能 ping website
。那他是如何进行解析的呢如果我们现在 host
中配置了一个与 website
相同的那么 ping
命令会如何解析呢?还有 ping
命令究竟是怎么与目标服务器进行连接的好像也没看到使用什么端口不是说连接两个服务器都需要开端口进行连接吗?
带着疑问我们一步一步进行尝试。
地址解析
地址解析不仅存在于我们的 ping
命令中也存在各种需要与目的地服务器交互的程序中。在之前的章节中我们介绍了 traceroute、dns 解析、计算机网络从零到一三个小节。其实大部分已经有萌芽的趋势我们再汇总进行一次全面的解析。
一共涉及到三个重要的文件:
- /etc/hosts
配置所有的 ip:服务器名
。
- /etc/host.conf
这个文件在之前的三个章节中均未讲解到。稍后进行讲解。
- /etc/resolv.conf
配置我们 DNS 服务器相关的解析详情请跳转 dns 解析
。
/etc/host.conf
当需要访问其他服务器时指定主机名的查找方法。默认首先查找 /etc/hosts
如果未能查找再使用 /etc/resolv.conf
文件查找 DNS 服务器向 DNS 服务器进行请求。
cat /etc/host.conf
# multi on
默认情况下只会有一行 multi on
标示是否允许 /etc/hosts
中指定的主机有多个 ip
地址如果有多个 ip
地址我们一般称之为多穴主机路由器就是一种多穴主机。当然还有其他的相关设置:
- order hosts,bind,nis
主机的解析顺序使用先 hosts
也就是主机映射解析 /etc/hosts
;然后使用 bind
也就是 DNS 解析
。当然也可以先 DNS解析
写成 order bind,hosts,nis
。nis
防火墙。
- ospoof on
是否开启对该服务器进行 ip 地址欺诈的保护。
当然这里只列举了最重要的参数其余可以查看 man5
手册host.conf
部分:
https://www.man7.org/linux/man-pages/man5/host.conf.5.html
host.conf 配置
当你看完手册后可以发现上面的描述全是错误的因为大多数已经被遗弃了现在只能配置三个参数:
- trim [list]
可以存在多个使用 :
或 ;
或 ,
进行分割的一个数组并且每个元素都应该是 .
开头。及西裤将自动从使用 DNS 解析的任何域名进行匹配如果匹配成功会删除末尾的域名。这个不会影响 nis
和 hosts
。
- multi [on/off]
标示是否允许 /etc/hosts
中指定的主机有多个 ip
地址如果有多个 ip
地址我们一般称之为多穴主机。
- reorder [on/off]
建议禁用。如果设置为 on
解析库则会尝试重新排列主机地址以便在解析时后弦列出同一网段的地址。
地址解析实例
所以可以知道地址解析是由 /etc/host.conf
决定的那我们来验证一下:
我们设置为优先解析 host
再解析 dns
:
cat /etc/hosts
# 192.168.111.128 maggot111128 maggot111128.huangyichun.com
ping maggot111128.huangyichun.com
确实是解析到了我们 hosts
文件中对应的地址如果 ping
不存在的则为:
则解析到了本人的个人网站服务器了。
ping 协议 ICMP
在之前的 raceroute
讲解中我们也提到了 ICMP
协议但没有作为主题进行讲解。
Internet Control Message Protocol
是 TCP/IP
的一个子协议用于在 ip
主机和路由器之间传递 控制信息
位于在 ip
之上报文承载在 IP 分组之中位于网络层。有两个版本分别对应 IPv4
和 IPv6
。
ICMP 虽在 TCP/IP 之上但是与 TCP/IP 一样是网络层的一部分ICMP 报文作为 IP 报文的数据部分进行发送。同样 IGMP 也是网络层。
控制信息
包含以下信息:
- 网络是否通常
- 主机是否可达
- 路由是否可用
控制信息
并不传递用户数据但是它是否成功是信息传递的基础。可以用来检查网络状况是否正常、网络延时是怎样等等。他不需要端口号。
ICMP 报文类型
ICMP 作为控制协议有查询和差错两大类报文总计类 8 类:
ping ICMP 回送请求和应答报文
在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文若源主机能收到 ICMP 回送应答报文则说明到达该主机的网络正常。
traceroute ICMP 时间超时报文
tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令返回数据包到达目的主机所经历的路径详细信息并显示每个路径所消耗的时间。