跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用固定网络配置连接系统 Oracle Solaris 11.1 Information Library (简体中文) |
使用 ipadm 命令可配置协议属性,也称为可调参数。ipadm 取代了早期发行版中常用于设置可调参数的 ndd 命令。
TCP/IP 属性可以是基于接口的,也可以是全局性的。属性可以应用于特定接口,也可全局性地应用于区域中的所有接口。全局属性在不同的非全局区域中可以有不同的值。有关支持的协议属性的列表,请参阅 ipadm(1M) 手册页。
通常情况下,TCP/IP Internet 协议的缺省值足以使网络正常工作。但是,如果缺省值对您的网络拓扑来说不够用,则可以根据需要定制这些属性。
有以下三个用于设置 TCP/IP 接口属性的 ipadm 子命令:
ipadm show-prop -p property protocol 命令,用于显示协议的属性及其当前值。如果不使用 -p property 选项,则会列出协议的所有属性。如果不指定协议,则会列出所有协议的所有属性。
ipadm set-prop -p property =value protocol 子命令,用于为 IP 接口的属性指定值。
ipadm reset-prop -p property protocol 子命令将特定协议属性重置为其缺省值。
注 - 如果属性可以接收多个值,则使用 += 限定符将多个值分配给属性,如下所示:
ipadm set-prop -p property+=value1 [value2 value3 ...].
要从属性的一组值中删除一个值,可以使用 -= 限定符,如下所示:
ipadm set-prop -p property-=value2
启用包转发显示了如何在接口上启用包转发。通过设置 IP 接口上的包转发属性,可以有选择性地实现此功能。可以仅在系统的特定接口上启用此属性。
如果要在不考虑 IP 接口数量的情况下在整个系统上启用包转发,则使用协议属性:在协议中,属性名称与 IP 接口中的属性名称相同,均为 forwarding。必须分别发出命令才能在 IPv4 和 IPv6 协议上启用包转发。
以下示例显示如何在系统上对所有 IPv4 和 IPv6 通信启用包转发:
# ipadm show-prop -p forwarding ip PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE ipv4 forwarding rw off -- off on,off ipv6 forwarding rw off -- off on,off # # ipadm set-prop -p forwarding=on ipv4 # ipadm set-prop -p forwarding=on ipv6 # # ipadm show-prop ip PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE ipv4 forwarding rw on on off on,off ipv4 ttl rw 255 -- 255 1-255 ipv6 forwarding rw on on off on,off ipv6 hoplimit rw 255 -- 255 1-255#
注 - IP 接口的 forwarding 属性与协议的该属型不是互斥的。您可以同时为接口和协议设置该属性。例如,可以在协议上全局性地启用包转发,然后在系统上定制每个 IP 接口的包转发。因此,尽管全局启用包转发,但系统仍可选择包转发。
在传输协议(如 TCP、UDP 和 SCTP)上,端口 1–1023 是缺省的特权端口,只有使用 root 权限运行的进程才可以绑定到这些端口。通过使用 ipadm 命令,您可以将超出此给定缺省范围的一个端口保留为特权端口。因此,只有 root 进程可以绑定到该端口。要设置特权端口,请定制以下传输协议属性:
smallest_nonpriv_port-该属性的值指示一般用户可以绑定到的端口号范围。如果指定的端口在此范围内,则可以将其设置为特权端口。使用 ipadm show-prop 命令可显示属性的值。
extra_priv_ports-该属性指定哪些端口为特权端口。使用 ipadm set-prop 子命令可指定要限制的端口。可以为此属性指定多个值。
例如,假设要将 TCP 端口 3001 和 3050 设置为特权端口,并且仅限 root 用户访问。smallest_nonpriv_port 属性指示 1024 是非特权端口的最小端口号。因此,指定的端口 3001 和 3050 可以更改为特权端口。应发出类似于以下内容的命令以继续:
# ipadm show-prop -p smallest_nonpriv_port tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp smallest_nonpriv_port rw 1024 -- 1024 1024-32768 # ipadm show-prop -p extra_priv_ports tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp extra_priv_ports rw 2049,4045 -- 2049,4045 1-65535 # ipadm set-prop -p extra_priv_ports+=3001 tcp # ipadm set-prop -p extra_priv_ports+=3050 tcp # ipadm show-prop -p extra_priv_ports tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp extra_priv_ports rw 2049,4045 3001,3050 2049,4045 1-65535 3001,3050
要删除其中一个端口(如 4045)以避免成为特权端口,应键入以下命令:
# ipadm set-prop -p extra_priv_ports-=4045 tcp # ipadm show-prop -p extra_priv_ports tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp extra_priv_ports rw 2049,3001 3001,3050 2049,4045 1-65535 3050
缺省情况下,具有多个接口的系统(也称为多宿主主机)基于路由表中到通信流的目标的最长匹配路由来路由其网络通信流。如果存在多个长度相等的到目标的路由路径,Oracle Solaris 将应用等成本多路径 (Equal-Cost Multi-Path, ECMP) 算法将通信流量分配到这些路由。
在某些情况下,以这种方式分配通信流量并不合适。可能通过多宿主主机上的一个接口发送了 IP 包,但是此主机与该包中的 IP 源地址不位于同一子网上。此外,如果传出数据包是对某传入请求(例如 ICMP 回显请求)的响应,则请求和响应可能不经过相同的接口。这种通信路由配置称为非对称路由。如果您的 Internet 服务提供商按照 RFC 3704 (http://rfc-editor.org/rfc/bcp/bcp84.txt) 中所述实现准入过滤,则非对称路由配置可能导致提供商丢弃传出数据包。
RFC 3704 旨在限制拒绝服务攻击在 Internet 上扩散。为了与它保持一致,必须将您的网络配置为对称路由。在 Oracle Solaris 中,可以通过使用 IP hostmodel 属性满足这一要求。此属性控制通过多宿主主机接收或传送 IP 数据包的行为。
hostmodel 属性可以具有以下三个可能值之一:
对应于 RFC 1122 中定义的强端系统 (end system, ES) 模型。此值实现对称路由。
对应于 RFC 1122 中定义的弱 ES 模型。在采用此值的情况下,多宿主主机使用非对称路由。
通过使用首选路由配置数据包路由。如果路由表中存在多个目标路由,则使用在其上配置传出数据包的 IP 源地址的接口的路由,就是首选路由。如果不存在这样的路由,则传出数据包将使用到数据包的 IP 目标的最长匹配路由。
以下示例显示了如何在多宿主主机上实现 IP 包的对称路由。
# ipadm set-prop -p hostmodel=strong ip # ipadm show-prop -p hostmodel ip PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE ipv6 hostmodel rw strong -- weak strong, src-priority, weak ipv4 hostmodel rw strong -- weak strong, src-priority, weak
当节点发送的包数超过网络可以容纳的量时,通常会出现路由器缓冲区溢出形式的网络拥塞。各种算法通过对发送系统实施控制来防止通信拥塞。下面的算法在 Oracle Solaris 中受支持,可以轻松地添加或直接插入到操作系统中。
下表列出和说明了支持的算法。
|
通过设置以下控制相关的 TCP 属性来启用拥塞控制。尽管下面列出的属性为 TCP 的属性,但由这些属性启用的控制机制也适用于 SCTP 通信。
cong_enabled-包含系统中当前运行的算法的列表(以逗号分隔)。您可以添加或删除相应算法以仅启用要使用的那些算法。此属性可以有多个值。因此,必须使用 += 限定符或 -= 限定符,具体取决于希望生效的更改。
cong_default-当应用程序未在套接字选项中显式指定算法时,此算法为缺省使用的算法。当前,cong_default 属性的值同时适用于全局和非全局区域。
要将用于实施拥塞控制的算法添加到协议中,请发出以下命令:
# ipadm set-prop -p cong_enabled+=algorithm tcp
要删除算法,请发出以下命令:
# ipadm set-prop -p cong_enabled-=algorithm tcp
要替换缺省算法,请发出以下命令:
# ipadm set-prop -p cong_default=algorithm tcp
注 - 添加或删除算法时不遵循任何序列规则。您可以先删除属性的算法,然后再将其他算法添加到该属性。但是,cong_default 属性必须始终具有已定义的算法。
以下示例显示了实施拥塞控制可能需要执行的步骤。在此示例中,将 TCP 协议的缺省算法从 newreno 更改为 cubic。然后,从已启用的算法列表中删除 vegas 算法。
# ipadm show-prop -p cong_default,cong_enabled tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp cong_default rw newreno -- newreno - tcp cong_enabled rw newreno,cubic, -- newreno newreno,cubic, highspeed, highspeed,vegas vegas # ipadm set-prop -p cong_enabled-=vegas tcp # ipadm set-prop -p cong_default=cubic tcp # ipadm show-prop -p cong_default,confg_enabled tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp cong_default rw cubic -- newreno - tcp cong_enabled rw newreno,cubic, -- newreno newreno,cubic, highspeed highspeed,vegas
TCP 接收缓冲区大小是通过使用 TCP 属性 recv_buf 来设置的,缺省情况下为 128 KB。但是,应用程序没有均匀使用可用带宽。因此,连接延迟可能会要求您更改缺省大小。例如,使用 Oracle Solaris 的安全 Shell 功能会产生带宽使用开销,因为有其他校验和与加密进程在数据流上执行。因此,可能需要增加缓冲区大小。同样,为使执行批量传输的应用程序能有效使用带宽,也需要进行相同的缓冲区大小调整。
通过估算带宽延迟乘积 (bandwidth delay product, BDP),可以计算要使用的正确接收缓冲区大小,如下所示:
BDP = available_bandwidth * connection-latency
使用 ping -s host 可获取连接延迟的值。使用 uperf 和 iperf 工具可估计带宽使用情况。
合适的接收缓冲区大小接近 BDP 的值。但请注意,带宽使用情况还取决于各种条件。共享基础结构或争用带宽的应用程序和用户的数量可能会影响该估算值。
要更改缓冲区大小的值,请使用以下语法:
# ipdadm set-prop -p recv_buf=value tcp
以下示例显示了如何将缓冲区大小增加到 164 KB
# ipadm show-prop -p recv_buf tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp recv_buf rw 128000 -- 128000 2048-1048576 # ipadm set-prop -p recv_buf=164000 tcp # ipadm show-prop -p recv_buf tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp recv_buf rw 164000 -- 164000 2048-1048576
最好不要设置缓冲区大小的值,因为首选大小在不同的情况下有所不同。考虑以下针对每种网络在各自特定条件下显示不同 BDP 值的情况:
BDP = 128 MBps * 0.001 s = 128 kB
BDP = 128 MBps * 0.1 s = 12.8 MB
BDP = 2.6 MBps * 0.175 = 470 kB
如果无法计算 BDP,请使用以下观测值作为指导:
对于通过 LAN 的批量传输,缓冲区大小缺省值 128 KB 已够用。
对于大部分 WAN 部署,接收缓冲区大小应在 2 MB 范围内。
![]() | 注意 - 增加 TCP 接收缓冲区大小的同时会增加许多网络应用程序的内存资源占用。 |