原标题:关于 Linux 网络,你必须知道这些
一、网络模型
1. 国际标准化组织定义了一个七层的 OSI 网络模型,但是这个模型过于复杂。
2. 实际工作中的事实标准,是更为实用的 TCP/IP 模型
TCP/IP 模型,把网络互联的框架分为应用层、传输层、网络层、网络接口层等四层
(1) 应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。
(2) 传输层,负责端到端的通信,比如 TCP、UDP 等。
(3) 网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等。
(4) 网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等。
二、网络包的发送、接收流程
三、性能指标
1. 带宽:链路的最大传输速率,单位为 比特 / 秒
2. 吞吐量:单位时间内成功传输的数据量,单位也为 比特 / 秒
吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。
3. 延时: 从发出请求,到收到远端响应,所需要的时间。
4. PPS: Packet Per Second(包 / 秒)。
PPS 通常用来评估网络的转发能力,比如硬件交换机。
四、网络配置
ifconfig命令 (或者ip命令,输出内容差不多)
1. 网络状态标志:RUNNING。 如果看不到,表示网线被拔掉了。
2. MTU 的大小:默认大小是 1500
3. 网络收发的字节数、包数、错误数以及丢包情况。
errors:错误的数据包数,比如校验错误、帧同步错误等;
dropped:丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包;
overruns:超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包;
carrier:发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
collisions:碰撞数据包数。
五、套接字信息
1. netstat -nlp
接收队列(Recv-Q)和发送队列(Send-Q)应该是 0,不是 0 时,说明有网络包的堆积发生。
2. ss -ltnp
不同套接字状态下,含义不同。
(1) 套接字处于连接状态(Established)时,
Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数
Send-Q 表示还没有被远端主机确认的字节数
(2) 套接字处于监听状态(Listening)时,
Recv-Q 表示 syn backlog 的当前值。
Send-Q 表示最大的 syn backlog 值。
(3) syn backlog:半连接队列,就是还没有完成 TCP 三次握手的连接,连接只进行了一半。
服务器收到了客户端的 SYN 包后,就会把这个连接放到半连接队列中,然后再向客户端发送 SYN+ACK 包。
accept queue:全连接队列,完成了 TCP 三次握手。
服务器收到了客户端的 ACK,完成了 TCP 三次握手。还需要再被 accept() 系统调用取走。
六、协议栈统计信息
netstat -s
展示了 TCP 协议的主动连接、被动连接、失败重试等各种信息。
七、网络吞吐和 PPS
sar -n DEV 1
rxpck/s 和 txpck/s 分别是接收和发送的 PPS,单位为包 / 秒。
rxkB/s 和 txkB/s 分别是接收和发送的吞吐量,单位是 KB/ 秒。
%ifutil 是网络接口的使用率
八、连通性和延时
使用 ping 测试远程主机的连通性和延时,而这基于 ICMP 协议。
从发送 ICMP 开始,到接收到 114.114.114.114 回复的确认,总共经历 244ms。