1 ip地址
1.1 ip 地址的作用?ip 地址分类?
ip 地址的作用:用来标识一个节点的网络地址。
2 / 10
ip 地址分类:
a 类 1-126
b 类 128-191
c 类 192-223
d 类 224-239(科研)
e 类 240-254(组播)
1.2. 子网掩码的作用?默认 a b c 类子网掩码?
子网掩码的作用:用来标识 ip 地址的网络位和主机位。
a 类:255.0.0.0
b 类:255.255.0.0
c 类:255.255.255.0
1.3. 网关的作用?
网关的作用:从一个网络到另一个网络的关口。
1.4. 公有地址与私有地址的作用以及范围?
公有地址的作用:公有地址也可以称为公网地址,通过他可以直接访问因特网,他是广域网范畴内
的。
私有地址的作用:私有地址也可以称为专网地址,专门为组织机构内部使用,他是局域网范畴内的,
出了所在局域网是无法 访问因特网的。
私有地址的范围:
a:类 10.0.0.1-10.255.255.254
b:类 172.16.0.1-172.16.255.254
c:类 192.168.0.1-192.168.255.254
1.5 查看 windows 主机 ip 地址的,如何用命令查看 windows 主机 mac 地址?
在 windows 中查看 ip:右击网络图标-属性-更改适配器设置-双击本地连接-单击“详细信息”或者
开始-命令提示符-运行 ipconfig
在 linux 中查看 ip:直接运行 ifconfig
查看 mac 地址:开始-命令提示符-运行 ipconfig/all。
2 网络单位
2.1. 计算机网络的功能?
网络的功能:数据通信 资源共享 增加可靠性 提高系统处理能力
2.2. 计算机存储单位的换算?
计算机存储可以用位和字节计量
8 位
1 字节
1024 字节 1kb
1024kb 1mb
1024mb 1gb
1024gb 1tb
3 网络模型
3.1osi 参考模型一共有七层从下至上分别为 :
物理层-数据链路层-网络层-传输层-会话层-表示层-应用层
每一层的意义:
- 物理层:建立,维护,断开物理连接,定义了接口及介质,实现了比特流的传输。
- 数据链路层:建立逻辑链接,进行硬件地址寻址,差错校验等功能,通过 mac 地址实现数据的通信,
帧包装,帧传输,帧同步。交换机工作在数据链路层。 - 网络层:进行逻辑地址寻址,实现不同网络之间的通信,定义了 ip 地址,为数据传输选择最佳路 径,路由器工作在网络层。
- 传输层:定义传输数据的协议端口号,以及流控和差错校验,实现了程序与程序的互连,可靠与不 可靠的传输。
- 会话层:建立,管理,中止会话,例如断点续传。
- 表示层:数据的表现形式,如加密,压缩。
- 应用层:网络服务与最终用户的一个借口
3.2 osi 七层参考模型下四层的数据单元
- 传输层 段 segment
- 网络层 包 packet
- 数据链路层 帧 frame
- 物理层 比特 bit
3.3 tcp/ip 协议有哪几层?名字是?
tcp/ip 协议由五层或者四层组成:
- 网络接口层: 负责网络包在物理网络中的传输,比如 mac 寻址、错误侦测以及通过网卡传输网络帧等。
- 网络层: 负责网络包的封装、寻址和路由,比如 ip、icmp 等。
- 传输层: 负责端到端的通信,比如 tcp、udp 等。
- 应用层: 负责向用户提供一组应用程序,比如 http、ftp、dns 等。
3.4 tcp/ip 五层划分
- 物理层
- 数据链路层
- 网络层
- 传输层
- 应用层
3.5 应用、传输、网络层的协议?
应用层:http,https,ftp,tftp,smtp,pop3,snmp,dns,telnet
传输层:tcp,udp
网络层:icmp,igmp,ip,arp,rarp
3.6 tcp/ip 五层每一层的设备
应用层 计算机
传输层 防火墙
网络层 路由器
数据链路层 交换机
物理层
网卡
4 网线
4.1 t568a 和 t568b 的顺序?哪些负责发送,哪些负责接收?
t568a 线序:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕
t568b 线序:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕
1,2 发送,3,6 接收
4.2 什么叫标准网线?什么叫交叉网线?分别在什么情况下使用?
标准网线(直连线或者直通线):用于连接不同设备(a-a,b-b)
交叉网线:用于连接相同设备 (a-b)
5 交换机
5.1 mac 地址长度多少位?多少字节?
mac 地址长度 48 位(6 字节),前 24 位代表厂商,后 24 为代表网卡编号
5.2 交换机工作原理?
1.初始状态
2.根据源 mac 地址学习
3.除源端口外的端口广播未知数据帧
4.接收方回应
5.交换机实现单播通信(转发)
更新:老化时间 300 秒交换机对应端口的 mac 地址发生变化时同样进行更新
5.3 目前常用的 cisco 交换机有哪些型号?价格大约是多少?
cisco2960 系列交换机 5k 元左右
cisco3560 系列交换机 2w 元左右
cisco4500 系列交换机 5w 元左右
cisco6500 系列交换机 20w 左右
5.4 交换机可以设置网关吗?如何设置?给交换机配置网关的目的?
交换机可以设置网关
在全局配置模式下:
ip default-gateway 网关 ip 地址
交换机配置网关的目的是实现不同网段的计算机能够对该交换机远程管理。
6 路由
6.1 子网掩码
作用:用于区分 ip 地址的网络位与主机位
计算:网络位用连续的 1,主机位用连续的 0 表示
6.2 网络 id
网络位的 ip 地址不变,主机位用连续的 0 表示
6.3 广播地址
ip 地址的广播地址计算:网络位的 ip 不变,主机位用连续的 1 表示。
ip 地址的广播地址:为 ip 地址网段的最后一个地址(即该网段的最大值)
6.4 可用主机 ip 个数的计算
2 主机位次方-2
6.5 什么是路由?路由器的工作原理?
路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程。
路由器的工作原理:根据路由表选择最佳路径,每个路由器都维护着一张路由表,这是路由器转发
数据包的关键,每条路由表记录指明了到达某个子网或主机应从路由器的哪个物理端口发送,通过
此端口可到达该路径的下一个路由器的地址。
6.6 路由表的形成?
路由表的获得,直连路由:配置 ip 地址,端口 up 状态,形成直连路由。
非直连网段:需要静态路由或动态路由,将网段添加到路由表中
6.7 静态路由与动态路由的特点?列举几个常见的动态路由协议?
静态路由特点:由管理员手工配置的,是单向的,因此需要在两个网络之间的边缘路由器上需要双
方对指,否则就会造成流量有去无回,缺乏灵活性,适用于小型网络。
动态路由的特点动态路由是网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更
新路由表的过程,是基于某种路由协议来实现的。常见的路由协议类型有:距离矢量路由协议(如
rip)和链路状态路由协议(如 ospf)。路由协议定义了路由器在与其他路由器通信时的一些规则。
6.8 什么是浮动路由?什么是缺省路由?
浮动路由:配置一个管理距离更大的静态路由,作为应急触发的备份路径,在主路由有效的情况下,
浮动路由不会出现在路由表中。
缺省路由:缺省路由是一种特殊的静态路由,杜宇末梢网络的主机来说,也被称为“默认网关”
缺省路由的目标网络为 0.0.0.0/0.0.0.0 ,可匹配任何目标地址,只有当从路由表中找不到任何明
确的路由条目时,才会使用缺省路由。
6.9 访问一台主机访问不了请问如何排错?具体思路是哪些?
两台主机之间访问不了可能是开启了防火墙或者两台主机没有在一个网段,是不是有正确的网关地
址,主机跟网关直间是否能够 ping 通,dns 是否能够正常解析。
解决方法:
1.检查防火墙是否关闭,查看两个主机是否在一个网络当中。
2.ping 网关是否能通;
3.用 dns 解析一下域名是否能够正常的解析。
7 协议
7.1 传输层的协议有哪些?,分别是什么特点?
tcp:传输控制协议,可靠的,面向连接的协议,传输效率低
udp:用户数据包协议 不可靠的,无连接的服务,传输效率高。
7.2 简单描述一下 tcp 连接与断开?
tcp 通过三次握手链接,通过四次断开
syn:建立连接时将这个值设为 1
ack:当 ack=1 表示确认,ack=0 表示确认无效
fin:fin=1 表示断开连接请求
7.3 请简单描述一下常见的应用层协议都有哪些、传输层使用的什么协议,端口号多少?
dns-tcp 或 udp 端口号 53
http-tcp 端口号 80
https-tcp 端口号 443
smtp-tcp 端口号 25
pop3-tcp 端口号 110
telnet-tcp 端口号 23
ftp-tcp 端口号 21 和 20
tftp-udp 端口号 69
8 思科路由
8.1 什么是 vlan?vlan 的作用?默认交换机的接口在那个 vlan 中? vlan 的种类 ?
vlan:虚拟局域网
作用:广播控制、提高安全性、带宽利用、减少延迟
默认交换机接口在 vlan1 中
vlan 的种类:基于端口划分的静态 vlan 和基于 mac 地址划分的动态 vlan
8.2 什么是 trunk?trunk 的模式有哪些?
trunk:中继链路,可以承载多个 vlan
trunk 模式:
接入(access)
干道(trunk)
动态企望(desirable)主动
动态自动(auto ) 被动
8.3 isl 和 802.1q 的异同
相同点:都是显示了 vlan 的信息
不同点:
ieee 802.1q 是公有的标记方式,isl 是 cisco 私有的
isl 采用外部标记的方法,802.1q 采用内部标记的方法
isl 标记的长度为 30 字节,802.1q 标记的长度为 4 字节
8.4 什么是 etherchannel?有什么作用?
eternetchannel(以太网通道)功能:多条线路负载均衡,带宽提高,当一条线路失效时,其他线路通
信,不会丢包。
8.5 什么是 dhcp?dhcp 的作用?
dhcp:动态主机配置协
作用:给客户机自动分配 ip 地址
9 三层交换机
9.1 什么是三层交换机?二层交换与三层交换和路由有什么区别?
三层交换机:具有网络层路由功能的交换机称为三层交换机
区别:
二层交换机:属于数据链路层设备,根据 mac 地址表实现数据帧的转发。
三层交换机: 三层交换技术就是将路由技术与交换技术合二为一的技术。在对第一个数据流进行路由后,
它将会产生一个 mac 地址与 ip 地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通
过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。
路由器:路由器工作于 osi 七层协议中的第三层,其主要任务是接收来自一个网络接口的数据包,根据
其中所含的目的地址,决定转发到下一个目的地址。
9.2 按应用范围的不同,路由协议的类?
按应用范围的不同,路由协议可分为两类
1.在一个 as 内的路由协议称为内部网关协议,内部网关路由协议有以下几种:rip-1,rip-2,igrp,
eigrp,is-is 和 ospf。
2.as 之间的路由协议称为外部网关协议。
外部网关协议(也叫域 间路由协议)。域间路由协议有两种:外部网关协议(egp)和边界网关协议(bgp)
9.3 动态路由按照算法分哪几类?分别举例说明?
动态路由按照算法可以分为:距离矢量路由协议,链路状态路由协议
距离矢量路由协议:依据从源网络到目标网络所经过的路由的个数选择路由 rip,igrp
链路状态路由协议:综合考虑从源网络到目标网络的各条路径的情况选择路由 ospf,is-is
10 路由协议
10.1 什么是 hsrp?工作原理是?
hsrp:热备份路由协议
hsrp 是 cisco 私有协议,确保了当网络边缘设备或接入链路出现故障时,用户通信能迅速并透明地恢复,
以此为 ip 网络提供冗余行。通过使用同一个虚拟 ip 地址和虚拟 mac 地址,lan 网段上的两台或者多台
路由器可以作为一台虚拟路由器对外提供服务。 hsrp 使组内的 cisco 路由器能互相监视对方的运行状态。
10.2 什么是 stp?作用?
stp:生成树协议
作用:逻辑上断开环路,防止广播风暴的产生,当线路故障,阻塞接口被激活,恢复通信,起备份线路
的作用。
11 acl(访问控制列表)
- 什么是 acl?
acl(访问控制列表):读取第三层,第四层包头信息,根据预先定义好的规则对包进行过滤。
- 通配符掩码的作用?
通配符掩码:也叫做反码。用二进制数 0 和 1 表示,如果某位为 1,表明这一位不需要进行匹配操作,
如果为 0 表明需要严格匹配。
12 nat(网络转发)
12.1 什么是 nat?有哪些实现方式?
nat(网络地址转换):
通过将内部网络的私有 ip 地址翻译成全球唯一的公有 ip 地址,使内部网络可以连接到互联网等外部网络上。
nat 的实现方式:
- 静态转换;ip 地址的对应关系是一对一,而且是不变的,借助静态转换,能实现外部网络中某些特定服 务器的访问。
- 动态转换:ip 地址的对应关系是不确定的,而是随机的,所有被授权访问互联网的私有地址可以随机的 转换为任何指定的合法的外部 ip 地址
- 端口多路复用:通过改变外出数据包的源 ip 地址和源端口并进行端口转换,内部网络的所有主机均可 共享一个合法的 ip
地址实现互联网的访问,节约 ip
13. 网络
13.1 linux 网络栈
有了 tcp/ip 模型后,在进行网络传输时,数据包就会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。当然,网络包在每一层的处理逻辑,都取决于各层采用的网络协议。比如在应用层,一个提供 rest api 的应用,可以使用 http 协议,把它需要传输的 json 数据封装到 http 协议中,然后向下传递给 tcp 层。而封装做的事情就很简单了,只是在原来的负载前后,增加固定格式的元数据,原始的负载数据并不会被修改。比如,以通过 tcp 协议通信的网络包为例,通过下面这张图,我们可以看到,应用程序数据在每个层的封装格式。
其中:
- 传输层在应用程序数据前面增加了 tcp 头;
- 网络层在 tcp 数据包前增加了 ip 头;
- 而网络接口层,又在 ip 数据包前后分别增加了帧头和帧尾。
这些新增的头部和尾部,都按照特定的协议格式填充,想了解具体格式,你可以查看协议的文档。 比如,你可以查看这里,了解 tcp 头的格式。这些新增的头部和尾部,增加了网络包的大小,但我们都知道,物理链路中并不能传输任意大小的数据包。网络接口配置的最大传输单元(mtu),就规定了最大的 ip 包大小。在我们最常用的以太网中,mtu 默认值是 1500(这也是 linux 的默认值)。一旦网络包超过 mtu 的大小,就会在网络层分片,以保证分片后的 ip 包不大于 mtu 值。显然,mtu 越大,需要的分包也就越少,自然,网络吞吐能力就越好。
就是 linux 通用 ip 网络栈的示意图:
我们从上到下来看这个网络栈,你可以发现,
- 最上层的应用程序,需要通过系统调用,来跟套接字接口进行交互;
- 套接字的下面,就是我们前面提到的传输层、网络层和网络接口层;
- 最底层,则是网卡驱动程序以及物理网卡设备。
13.2 网络包的接收流程
当一个网络帧到达网卡后,网卡会通过 dma 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包。接着,网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧。
接下来,内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。比如:
- 在链路层检查报文的合法性,找出上层协议的类型(比如 ipv4 还是 ipv6),再去掉帧头、帧尾,然后交给网络层。
- 网络层取出 ip 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如tcp 还是 udp),去掉 ip 头,再交给传输层处理。
- 传输层取出 tcp 头或者 udp 头后,根据 < 源 ip、源端口、目的 ip、目的端口 > 四元组作为标识,找出对应的socket,并把数据拷贝到 socket 的接收缓存中。
最后,应用程序就可以使用 socket 接口,读取到新接收到的数据了。为了更清晰表示这个流程,我画了一张图,这张图的左半部分表示接收流程,而图中的粉色箭头则表示网络包的处理路径。
13.3 网络包的发送流程
了解网络包的接收流程后,就很容易理解网络包的发送流程。网络包的发送流程就是上图的右半部分,很容易发现,网络包的发送方向,正好跟接收方向相反。
- 首先,应用程序调用 socket api(比如sendmsg)发送网络包。由于这是一个系统调用,所以会陷入到内核态的套接字层中。套接字层会把数据包放到 socket 发送缓冲区中。
- 接下来,网络协议栈从 socket 发送缓冲区中,取出数据包;再按照 tcp/ip栈,从上到下逐层处理。比如,传输层和网络层,分别为其增加 tcp 头和 ip 头,执行路由查找确认下一跳的 ip,并按照 mtu大小进行分片。
- 分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 mac 地址。然后添加帧头和帧尾,放到发包队列中。
- 这一切完成后,会有软中断通知驱动程序:发包队列中有新的网络帧需要发送。最后,驱动程序通过 dma
,从发包队列中读出网络帧,并通过物理网卡把它发送出去。
13.4 性能指标
带宽
,表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。吞吐量
,表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 b/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 /带宽,也就是该网络的使用率。延时
,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如tcp 握手延时),或一个数据包往返所需的时间(比如 rtt)。pps
,是 packet per second(包 / 秒)的缩写,表示以网络包为单位的传输速率。pps通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即 pps 可以达到或者接近理论最大值)。而基于 linux服务器的转发,则容易受网络包大小的影响。- 除了这些指标,
网络的可用性
(网络能否正常通信)、并发连接数
(tcp 连接数量)、丢包率
(丢包百分比)、重传率
(重新传输的网络包比例)等也是常用的性能指标。
13.5 网络配置
分析网络问题的第一步,通常是查看网络接口的配置和状态。你可以使用 ifconfig 或者 ip 命令,来查看网络的配置。我个人更推荐使用 ip 工具,因为它提供了更丰富的功能和更易用的接口。ifconfig
和 ip
分别属于软件包 net-tools
和 iproute2
,iproute2 是 net-tools 的下一代。通常情况下它们会在发行版中默认安装。但如果你找不到 ifconfig 或者 ip 命令,可以安装这两个软件包。
$ ifconfig eth0
eth0: flags=4163 mtu 1500
inet 10.240.0.30 netmask 255.240.0.0 broadcast 10.255.255.255
inet6 fe80::20d:3aff:fe07:cf2a prefixlen 64 scopeid 0x20
ether 78:0d:3a:07:cf:3a txqueuelen 1000 (ethernet)
rx packets 40809142 bytes 9542369803 (9.5 gb)
rx errors 0 dropped 0 overruns 0 frame 0
tx packets 32637401 bytes 4815573306 (4.8 gb)
tx errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ ip -s addr show dev eth0
2: eth0: mtu 1500 qdisc mq state up group default qlen 1000
link/ether 78:0d:3a:07:cf:3a brd ff:ff:ff:ff:ff:ff
inet 10.240.0.30/12 brd 10.255.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20d:3aff:fe07:cf2a/64 scope link
valid_lft forever preferred_lft forever
rx: bytes packets errors dropped overrun mcast
9542432350 40809397 0 0 0 193
tx: bytes packets errors dropped carrier collsns
4815625265 32637658 0 0 0 0
它们都包括了网络接口的状态标志、mtu 大小、ip、子网、mac 地址以及网络包收发的统计信息。
第一,网络接口的状态标志。ifconfig 输出中的 running
,或 ip 输出中的 lower_up
,都表示物理网络是连通的,即网卡已经连接到了交换机或者路由器中。如果你看不到它们,通常表示网线被拔掉了。
第二,mtu 的大小。mtu 默认大小是 1500
,根据网络架构的不同(比如是否使用了 vxlan 等叠加网络),你可能需要调大或者调小 mtu 的数值。
第三,网络接口的 ip 地址、子网以及 mac 地址。这些都是保障网络功能正常工作所必需的,你需要确保配置正确。
第四,网络收发的字节数、包数、错误数以及丢包情况,特别是 tx 和 rx 部分的 errors
、dropped
、overruns
、carrier
以及 collisions
等指标不为 0 时,通常表示出现了网络 i/o 问题。其中:
errors
表示发生错误的数据包数,比如校验错误、帧同步错误等;dropped
表示丢弃的数据包数,即数据包已经收到了 ring
buffer
,但因为内存不足等原因丢包;overruns 表示超限数据包数,即网络 i/o 速度过快,导致 ring buffer中的数据包来不及处理(队列满)而导致的丢包;
carrier
表示发生 carrirer错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
collisions
表示碰撞数据包数。
13.6 套接字信息
ifconfig 和 ip 只显示了网络接口收发数据包的统计信息,但在实际的性能问题中,网络协议栈中的统计信息,我们也必须关注。你可以用 netstat 或者 ss ,来查看套接字、网络栈、网络接口以及路由表的信息。
# head -n 3 表示只显示前面3行
# -l 表示只显示监听套接字
# -n 表示显示数字地址和端口(而不是名字)
# -p 表示显示进程信息
$ netstat -nlp | head -n 3
active internet connections (only servers)
proto recv-q send-q local address foreign address state pid/program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* listen 840/systemd-resolve
# -l 表示只显示监听套接字
# -t 表示只显示 tcp 套接字
# -n 表示显示数字地址和端口(而不是名字)
# -p 表示显示进程信息
$ ss -ltnp | head -n 3
state recv-q send-q local address:port peer address:port
listen 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=840,fd=13))
listen 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1459,fd=3))
etstat 和 ss 的输出也是类似的,都展示了套接字的状态、接收队列、发送队列、本地地址、远端地址、进程 pid 和进程名称等。其中,接收队列(recv-q)和发送队列(send-q)需要你特别关注,它们通常应该是 0。当你发现它们不是 0 时,说明有网络包的堆积发生。当然还要注意,在不同套接字状态下,它们的含义不同。
当套接字处于连接状态(established)时:
recv-q
表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)。- 而
send-q
表示还没有被远端主机确认的字节数(即发送队列长度)。
当套接字处于监听状态(listening)时
- recv-q 表示全连接队列的长度。
- 而 send-q 表示全连接队列的最大长度。
所谓全连接,是指服务器收到了客户端的 ack,完成了 tcp 三次握手,然后就会把这个连接挪到全连接队列中。这些全连接中的套接字,还需要被 accept() 系统调用取走,服务器才可以开始真正处理客户端的请求。
与全连接队列相对应的,还有一个半连接队列。所谓半连接是指还没有完成 tcp 三次握手的连接,连接只进行了一半。服务器收到了客户端的 syn 包后,就会把这个连接放到半连接队列中,然后再向客户端发送 syn ack 包。
13.7 协议栈统计信息
$ netstat -s
...
tcp:
3244906 active connection openings
23143 passive connection openings
115732 failed connection attempts
2964 connection resets received
1 connections established
13025010 segments received
17606946 segments sent out
44438 segments retransmitted
42 bad segments received
5315 resets sent
incsumerrors: 42
...
$ ss -s
total: 186 (kernel 1446)
tcp: 4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
transport total ip ipv6
* 1446 - -
raw 2 1 1
udp 2 2 0
tcp 4 3 1
...
这些协议栈的统计信息都很直观。ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 则提供的是更详细的网络协议栈信息。比如,上面 netstat 的输出示例,就展示了 tcp 协议的主动连接、被动连接、失败重试、发送和接收的分段数量等各种信息。
13.8 网络吞吐和 pps
给 sar 增加 -n 参数就可以查看网络的统计信息,比如网络接口(dev)、网络接口错误(edev)、tcp、udp、icmp 等等。执行下面的命令,你就可以得到网络接口统计信息:
# 数字1表示每隔1秒输出一组数据
$ sar -n dev 1
linux 4.15.0-1035-azure (ubuntu) 01/06/19 _x86_64_ (2 cpu)
13:21:40 iface rxpck/s txpck/s rxkb/s txkb/s rxcmp/s txcmp/s rxmcst/s %ifutil
13:21:41 eth0 18.00 20.00 5.79 4.25 0.00 0.00 0.00 0.00
13:21:41 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13:21:41 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
rxpck/s
和txpck/s
分别是接收和发送的 pps,单位为包 / 秒。rxkb/s
和txkb/s
分别是接收和发送的吞吐量,单位是 kb/ 秒。rxcmp/s
和txcmp/s
分别是接收和发送的压缩数据包数,单位是包 / 秒。%ifutil
是网络接口的使用率,即半双工模式下为 (rxkb/s txkb/s)/bandwidth,而全双工模式下为
max(rxkb/s, txkb/s)/bandwidth。
其中,bandwidth 可以用 ethtool 来查询,它的单位通常是 gb/s
或者 mb/s
,不过注意这里小写字母 b ,表示比特而不是字节。我们通常提到的千兆网卡、万兆网卡等,单位也都是比特。如下你可以看到,我的 eth0 网卡就是一个千兆网卡:
$ ethtool eth0 | grep speed
speed: 1000mb/s
13.9 连通性和延时
最后,我们通常使用 ping ,来测试远程主机的连通性和延时,而这基于 icmp 协议。比如,执行下面的命令,你就可以测试本机到 114.114.114.114 这个 ip 地址的连通性和延时:
# -c3表示发送三次icmp包后停止
$ ping -c3 114.114.114.114
ping 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=54 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=47 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=3 ttl=67 time=244 ms
--- 114.114.114.114 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 244.023/244.070/244.105/0.034 ms
ping 的输出,可以分为两部分
- 第一部分,是每个 icmp 请求的信息,包括 icmp 序列号(icmp_seq)、ttl(生存时间,或者跳数)以及往返延时。
- 第二部分,则是三次 icmp 请求的汇总。
比如上面的示例显示,发送了 3 个网络包,并且接收到 3 个响应,没有丢包发生,这说明测试主机到 114.114.114.114
是连通的;平均往返延时(rtt)是 244ms,也就是从发送 icmp 开始,到接收到 114.114.114.114 回复的确认,总共经历 244ms。