菜鸟科技网

ndd命令是什么?有什么用?

ndd 是一个在 Solaris 和其他一些基于 Unix 的系统(如早期的 HP-UX)中用于检查和配置内核网络参数的命令,它的名字来源于 "Network Device Driver"(网络设备驱动程序)。

ndd命令是什么?有什么用?-图1
(图片来源网络,侵删)

ndd 是一个用户级的工具,它允许你直接与内核中的网络驱动程序和 TCP/IP 协议栈进行交互,查看或修改它们的运行时配置。


ndd 的主要用途

ndd 主要用于两个方面:

  1. 查询网络参数:查看当前网络驱动程序或协议栈的各种配置值,这对于诊断网络问题、性能调优和了解系统网络状态非常有用。
  2. 修改网络参数:动态地更改这些参数,而无需重新编译内核或重启系统,这对于临时调整网络行为、解决特定问题或进行性能测试非常方便。

常见的用法和示例

ndd 的基本语法是:

# 查看驱动程序或模块的可用参数
ndd -h <driver_name>
# 查看特定参数的当前值
ndd <driver_name> <parameter_name>
# 设置特定参数的新值
ndd -set <driver_name> <parameter_name> <new_value>

示例 1:查看和修改 TCP/IP 协议栈参数

这是 ndd 最常见的用法,驱动程序名是 tcpip

ndd命令是什么?有什么用?-图2
(图片来源网络,侵删)

查看 TCP 协议栈的所有可配置参数:

ndd -h /dev/tcp

查看当前 TCP 的重传超时时间(单位:毫秒):

ndd /dev/tcp tcp_rexmit_interval

查看当前 TCP 的接收窗口大小:

ndd /dev/tcp tcp_recv_space

临时修改 TCP 的重传超时时间为 500 毫秒:

ndd命令是什么?有什么用?-图3
(图片来源网络,侵删)
sudo ndd -set /dev/tcp tcp_rexmit_interval 500

注意:修改参数通常需要 root 权限。

示例 2:查看和修改网络驱动程序参数

以常见的 bge (Broadcom Gigabit Ethernet) 驱动为例。

查看 bge 驱动的所有可配置参数:

ndd -h /dev/bge

查看 bge 网卡的最大传输单元:

ndd /dev/bge instance_mtu

查看 bge 网卡的接收环大小:

ndd /dev/bge bge_rx_ring_size

临时禁用网卡上的巨型帧支持:

sudo ndd -set /dev/bge bge_jumbo_capable 0

重要参数示例(以 TCP 为例)

以下是一些在 Solaris 系统调优中非常重要的 ndd 参数:

参数名 描述 默认值 调优建议
tcp_conn_req_max TCP 半连接队列的最大长度(用于处理 SYN Flood)。 1024 如果服务器收到大量连接请求,可能会耗尽队列,导致合法连接被拒绝,可以适当调高。
tcp_conn_req_max_q0 TCP 半连接队列的紧急长度。 4096 当半连接队列达到 tcp_conn_req_max 时,新的连接请求会进入这个更大的紧急队列。
tcp_rexmit_interval_initial 初始重传超时时间(毫秒)。 200 对于高延迟网络,可以适当增加此值,避免过早重传。
tcp_xmit_hiwat TCP 发送缓冲区的高水位线。 8192 增加此值可以提高网络吞吐量,尤其是在处理大文件传输时。
tcp_recv_hiwat TCP 接收缓冲区的高水位线。 8192 增加此值可以提高接收性能,防止接收方因缓冲区满而停止接收数据。
tcp_time_wait_interval TIME_WAIT 状态的持续时间(毫秒)。 240000 减少此值可以更快地释放端口资源,但在高并发连接下可能增加端口耗尽的风险。

现代系统的替代品

在现代操作系统(如 Linux 和较新的 macOS/FreeBSD)中,ndd 命令已经不再使用或被取代,它们有更强大、更标准化的工具来完成同样的工作。

Linux 中的替代品:sysctl

在 Linux 中,所有内核参数都通过 /proc/sys 文件系统暴露,并由 sysctl 命令管理。

查看所有网络参数:

sysctl -a | grep net

查看当前 TCP 接收缓冲区大小:

sysctl net.core.rmem_max

临时修改 TCP 接收缓冲区大小:

sudo sysctl -w net.core.rmem_max=16777216

永久修改(写入配置文件):

net.core.rmem_max=16777216 添加到 /etc/sysctl.conf/etc/sysctl.d/ 目录下的配置文件中,然后运行 sudo sysctl -p

macOS 中的替代品:sysctl

macOS 使用和 Linux 类似的 sysctl 机制。

# 查看
sysctl net.inet.tcp.recvspace
# 临时修改
sudo sysctl -w net.inet.tcp.recvspace=65536

特性 ndd (Solaris/HP-UX) sysctl (Linux/macOS/FreeBSD)
系统 Solaris, HP-UX (较老) Linux, macOS, FreeBSD, Windows
作用 查询/修改内核网络参数 查询/修改内核所有参数(不限于网络)
接口 专用命令 ndd /proc/sys 文件系统和 sysctl 命令
现代性 已过时,在新版本中可能被移除 当前标准,功能强大且广泛使用

如果你正在使用 Solaris 或 HP-UX 系统,ndd 是一个不可或缺的网络诊断和调优工具,但在现代的 Linux 或 macOS 环境中,你应该使用 sysctl 来完成相同的任务。

分享:
扫描分享到社交APP
上一篇
下一篇