Linux网络基础与性能优化

本文介绍了Linux网络的基础知识,包括OSI和TCP/IP模型,详细讲解了网络性能指标、监控工具如netstat、ifconfig等,并探讨了SOCKET性能优化,包括TCP选项如SO_LINGER、SO_REUSEADDR等,以及缓存大小和backlog的设置。此外,还提出了性能优化思路,如使用I/O多路复用和异步I/O技术。
摘要由CSDN通过智能技术生成

Linux网络基础与性能优化

网络模型:

常见的有OSI网络模型、TCP/IP网络模型、五层协议网络模型:
在这里插入图片描述

OSI七层网络模型:将传统的五层TCP模型中的应用层分为应用层、表示层、会话层

  • 应用层:负责为应用程序提供统一的接口
  • 表示层:负责把数据转换成兼容接收系统的格式
  • 会话层:负责维护计算机之间的通信连接,即负责在网络中的两节点之间建立、维持和终止通信
  • 传输层:负责为数据加上传输表头,形成数据包
  • 网络层:负责数据的路由和转发
  • 数据链路层:负责 MAC 寻址、错误侦测和改错
  • 物理层:负责在物理网络中传输数据帧

Linux上使用的是TCP/IP网络模型,即四层网络模型:

  • 应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等
  • 传输层,负责端到端的通信,比如 TCP、UDP 等
  • 网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等
  • 网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等

在TCP/IP模型下,网络数据将逐层传递并处理:
在这里插入图片描述

对于发送方发送数据包而言,数据包由顶向下,逐层增大:

  • 应用层:应用程序调用 Socket API发送网络包,把数据包放到 Socket 发送缓冲区中
  • 网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理
  • 传输层:增加 TCP 头
  • 网络层:增加IP 头和执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片
  • 数据链路层:分片后的网络包,再送到数据链路层,进行物理地址寻址,以找到下一跳的 MAC 地址,并且添加帧头和帧尾,放到发包队列中
  • 驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去

对于接收方接收数据包而言:

  • 当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包
  • 网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧
  • 内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧
    • 数据链路层:在数据链路层检查报文的合法性,找出上层协议的类型,去掉帧头、帧尾,然后交给上一层网络层
    • 网络层:网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理
    • 传输层:传输层取出 TCP 头或者 UDP 头后,根据 源 IP、源端口、目的 IP、目的端口 四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
    • 应用层:应用程序就可以使用 Socket 接口,读取到新接收到的数据
网络性能
常用的网络性能指标:
  • 带宽:表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)
  • 吞吐量:表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)
  • 延时:表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时),或一个数据包往返所需的时间(比如 RTT)
  • PPS:Packet Per Second(包 / 秒),表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力基于 Linux 服务器的转发,则容易受网络包大小的影响。
  • 网络的可用性:网络正常通信
  • 并发连接数:TCP可以连接多少
  • 丢包率:丢包占总包的比重
  • 重传率:重新传输的网络包比例
常用的网络性能监控工具:
  • netstat:用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,核心是显示套接字状态
  • ifconfig:用于显示或配置网络设备(网络接口卡)信息
  • route:用于显示和操作IP路由表,通过目标地址ip和子网掩码可以分析出发包路径
  • sar -n DEV:显示网络信息,用sar分析网络更多的是用于流量和包量的检测和异常发现
  • nmap:用于网络探测和安全审核的工具
  • ss:查询网络的连接信息
  • ping:检测网络连通性

简单介绍下各种工具的使用:(更详细的命令建议man手册查看)

netstat

用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,核心是显示套接字状态

参数:-a 显示所有套接字 -n 不解析DNS名字(解析DNS会比较慢) -t 过滤出TCP相关的网络套接字 -p 显示进程/程序名 -s显示出协议栈中相关的一些统计信息

tips:现在常用ss替代,ss的速度更快一些 -t 表示只显示 TCP 套接字 -n 表示显示数字地址和端 -p 表示显示进程信息

#使用netstat查看tcp和udp的套接字信息
[root@jessy /] netstat -antu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 172.30.0.39:46522       169.254.0.55:5574       ESTABLISHED
tcp        0     36 172.30.0.39:22          163.177.68.30:3199      ESTABLISHED
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 172.30.0.39:123         0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:50844           0.0.0.0:*                          
udp6       0      0 fe80::5054:ff:fed2::123 :::*                               
udp6       0      0 ::1:123                 :::*    

#使用ss也可以达到同样的效果
[root@jessy /] ss -ant
State      Recv-Q Send-Q             Local Address:Port              Peer Address:Port              
LISTEN     0      128                      *:22                             *:*                  
ESTAB      0      0                   172.30.0.39:46522              169.254.0.55:5574               
ESTAB      0      36                  172.30.0.39:22                 163.177.68.30:3199 

用netstat查看更为详细的协议栈信息更加直观和详细:

[root@jessy /] netstat -s
Ip:
    16250019 total packets received
    0 forwarded
    0 incoming packets discarded
    16249365 incoming packets delivered
    17150794 requests sent out
    1784 dropped because of missing route
Icmp:
    3568568 ICMP messages received
    87 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 339
        timeout in transit: 107
        echo requests: 3567914
        echo replies: 202
        timestamp request: 2
    3568477 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 109
        echo request: 420
        echo replies: 3567914
        timestamp replies: 2
....
Tcp:
    14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值