本文主要是介绍Linux系统ipv4参数解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ipv4参数解析
不要在任何事物面前迷失掉自我,哪怕是教条,哪怕是别人的眼光,哪怕是爱情 ——《成为简-奥斯汀》
1.参数简介
/proc/sys/net/ipv4
目录下这些参数都是 Linux 内核中的网络相关参数,通过修改这些参数可以调整系统的网络行为。
以下是对每个参数的详细介绍以及如何使用它们的简要说明:
conf
: 该参数用于设置 ICMP 的全局配置选项。可以通过修改/proc/sys/net/ipv4/conf/*
文件来配置具体的接口。fwmark_reflect
: 控制是否启用防火墙标记 (Firewall Mark) 的反射,用于处理 ICMP 数据包。icmp_echo_ignore_all
: 控制是否忽略所有 ICMP 回显请求。icmp_echo_ignore_broadcasts
: 控制是否忽略 ICMP 广播回显请求。icmp_errors_use_inbound_ifaddr
: 控制是否使用入站接口的地址来响应 ICMP 错误消息。icmp_ignore_bogus_error_responses
: 控制是否忽略 ICMP 错误响应中的虚假错误消息。icmp_msgs_burst
: 指定 ICMP 消息的突发大小。icmp_msgs_per_sec
: 指定 ICMP 消息的每秒发送速率。icmp_ratelimit
: 控制是否启用 ICMP 消息的速率限制。icmp_ratemask
: 指定 ICMP 消息的速率掩码。igmp_max_memberships
:指定一个系统中可加入的 IGMP 组的最大数量。igmp_max_msf
:控制 IGMP 消息的查询延迟。inet_peer_maxttl
和inet_peer_minttl
:分别控制缓存的 IP 远程主机的最大和最小 TTL(Time to Live)值。inet_peer_threshold
:控制用于缓存远程主机的 IP 地址的阈值。ip_default_ttl
:指定发出的 IP 数据包的默认 TTL 值。ip_dynaddr
:控制是否启用动态 IP 地址分配。ip_early_demux
:控制是否启用早期 IP 分解。ip_forward
:控制是否启用 IP 转发。ip_forward_use_pmtu
:控制 IP 转发是否使用路径 MTU(Maximum Transmission Unit)。ip_local_port_range
:指定本地端口范围。ip_local_reserved_ports
:指定本地保留端口范围。ip_no_pmtu_disc
:控制是否禁用 IP 的路径 MTU 发现。ip_nonlocal_bind
:控制是否允许非本地地址绑定。ipfrag_high_thresh
和ipfrag_low_thresh
:分别指定 IP 分段缓冲区的高和低阈值。ipfrag_max_dist
:指定 IP 分段缓冲区的最大分段距离。ipfrag_secret_interval
和ipfrag_time
:控制 IP 分段缓冲区中分段的生存期。neigh
:可能是指用于配置和管理邻居关系的一组参数,包括 ARP(Address Resolution Protocol)和 NDP(Neighbor Discovery Protocol)等。修改这些参数可能需要在网络配置文件中进行,具体取决于系统和网络配置。ping_group_range
:用于设置允许哪些用户或组发送 ICMP ECHO 请求。route
:用于配置系统的路由表,包括添加、删除和显示路由信息。可以使用route
命令来管理路由表。tcp_abort_on_overflow
:控制 TCP 当发送缓冲区溢出时是否终止连接。tcp_adv_win_scale
:指定 TCP 连接中的窗口比例因子,用于调整窗口尺寸。tcp_allowed_congestion_control
:指定允许使用的 TCP 拥塞控制算法。tcp_app_win
:指定 TCP 连接的应用窗口大小。tcp_autocorking
:控制是否启用 TCP 自动塞数据。tcp_available_congestion_control
:显示可用的 TCP 拥塞控制算法列表。tcp_base_mss
:指定 TCP 连接的最小段大小。tcp_challenge_ack_limit
:指定 TCP 挑战应答窗口的大小。tcp_congestion_control
:指定 TCP 拥塞控制算法。tcp_dsack
:控制是否启用 TCP 的 D-SACK(Duplicate Selective ACKnowledgment)。tcp_early_retrans
:控制是否启用 TCP 的早期重传。tcp_ecn
:控制是否启用 TCP 的显式拥塞通知(ECN)。tcp_fack
:控制是否启用 TCP 的 FACK(Forward ACKnowledgment)拥塞控制算法。tcp_fastopen
:控制是否启用 TCP 的快速打开功能。tcp_fastopen_key
:用于设置 TCP 快速打开密钥。tcp_fin_timeout
:指定 TCP 连接的 FIN 超时时间。tcp_frto
:控制是否启用 TCP 的 FRTO(Forward RTO-Recovery)拥塞控制算法。tcp_fwmark_accept
:控制是否接受具有防火墙标记的 TCP 数据包。tcp_invalid_ratelimit
:指定 TCP 拒绝连接请求的速率限制。当 TCP 拒绝连接请求的速率超过这个限制时,会启动速率限制机制。tcp_keepalive_intvl
:指定 TCP Keepalive 消息之间的间隔时间。TCP Keepalive 用于检测连接是否仍然有效。tcp_keepalive_probes
:指定 TCP Keepalive 消息发送的次数。如果在指定次数内没有收到对方的响应,则认为连接已经失效。tcp_keepalive_time
:指定 TCP Keepalive 开始发送的时间间隔。tcp_limit_output_bytes
:指定 TCP 输出缓冲区的最大字节数。当输出缓冲区的字节数超过此限制时,TCP 将停止发送数据。tcp_low_latency
:控制 TCP 是否优先低延迟。启用后,TCP 将尽量减少传输延迟。tcp_max_orphans
:指定系统中允许的最大孤立 TCP 连接数。孤立连接是指已经建立但未被关联到任何进程的连接。tcp_max_reordering
:指定 TCP 允许的最大重排序段数。重排序是指接收方接收到的 TCP 段不按顺序到达的情况。tcp_max_syn_backlog
:指定 TCP SYN 队列的最大长度。SYN 队列用于存放正在建立连接的 TCP 请求tcp_max_tw_buckets
:指定 TIME_WAIT 状态的最大数量。TIME_WAIT 状态是指连接关闭后等待一段时间以确保对方收到最后的 ACK 消息的状态。tcp_mem
:用于设置 TCP 缓冲区的内存分配参数。tcp_min_tso_segs
:指定 TCP 发送数据包的最小段数。tcp_moderate_rcvbuf
:控制 TCP 是否自动调整接收缓冲区大小。启用后,TCP 将尝试根据网络条件自动调整接收缓冲区大小。tcp_mtu_probing
:控制 TCP 是否启用路径 MTU 探测。启用后,TCP 将尝试发现网络路径的最大传输单元 (MTU)。tcp_no_metrics_save
:控制是否禁用 TCP 对连接指标的保存。tcp_notsent_lowat
:指定 TCP 发送缓冲区中未发送数据的最低水位线。当发送缓冲区中的未发送数据低于此水位线时,TCP 将触发写事件。tcp_orphan_retries
:指定系统重试关闭孤立连接的次数。tcp_probe_interval
:指定 TCP 重传探测的时间间隔。TCP 重传探测用于检测网络中的丢包情况。tcp_probe_threshold
:指定 TCP 重传探测的阈值。当重传次数超过此阈值时,TCP 将认为网络中存在丢包情况。tcp_reordering
:控制是否启用 TCP 的重排序功能。tcp_retrans_collapse
: 控制 TCP 在遇到连续的超时重传时是否将它们合并成一次重传。tcp_retries1
: 指定 TCP 在发送 SYN 包后重试的次数。tcp_retries2
: 指定 TCP 在建立连接后重试的次数。tcp_rfc1337
: 控制是否启用 TCP 端口号的随机化,以防止 TCP 端口号预测攻击。tcp_rmem
: 指定 TCP 接收缓冲区的大小。tcp_sack
: 控制是否启用 TCP 选择确认 (SACK) 选项,以支持更有效的拥塞控制和丢包恢复。tcp_slow_start_after_idle
: 控制 TCP 连接在空闲一段时间后重新进入慢启动阶段的行为。tcp_stdurg
: 控制 TCP 是否严格遵循标准对紧急指针 (URG) 的处理方式。tcp_syn_retries
: 指定 TCP 在发送 SYN 包时的重试次数。tcp_synack_retries
: 指定 TCP 在接收到 SYN-ACK 包后的重试次数。tcp_thin_dupack
: 控制 TCP 是否使用 “瘦” 的快速重传算法来处理冗余的 ACK 包。tcp_thin_linear_timeouts
: 控制 TCP 是否使用 “瘦” 的线性超时算法来处理超时重传。tcp_timestamps
: 控制是否启用 TCP 时间戳选项,用于更精确地测量往返时间 (RTT)。tcp_tso_win_divisor
: 控制 TCP 大段优化 (TSO) 窗口大小的除数。tcp_tw_recycle
: 控制是否启用 TCP TIME-WAIT 状态的回收机制,以便更有效地重用端口。tcp_tw_reuse
: 控制是否启用 TCP TIME-WAIT 状态的重用机制,以便更快地重用端口。tcp_window_scaling
: 控制是否启用 TCP 窗口缩放选项,以支持更大的窗口大小。tcp_wmem
: 指定 TCP 发送缓冲区的大小。tcp_workaround_signed_windows
: 控制是否启用 TCP 对有符号窗口的工作区。udp_mem
: 指定 UDP 缓冲区的内存分配参数。udp_rmem_min
: 指定 UDP 接收缓冲区的最小大小。udp_wmem_min
: 指定 UDP 发送缓冲区的最小大小。xfrm4_gc_thresh
: 控制 IPsec 安全关联管理器 (xfrm4) 的 GC 阈值。
2. tcp_retries1和tcp_retries2
tcp_retries1
和 tcp_retries2
是 TCP 协议中用于控制重传超时的两个参数,它们在 TCP 传输过程中起着重要的作用。
tcp_retries1
和 tcp_retries2
参数只影响连接的建立阶段,对建立连接后发送数据包的重传没有影响。
一旦 TCP 连接建立成功,发送数据包时遇到超时将使用其他机制来处理,例如使用 TCP 的超时重传机制。超时重传机制不受 tcp_retries1
和 tcp_retries2
参数的影响,而是由其他参数来控制,比如超时时间和重传次数。
2.1 tcp_retries1
-
作用:
tcp_retries1
控制 TCP 在第一个重传超时时的重试次数。 -
默认值:
默认情况下,tcp_retries1
的值是 3。 -
说明:
当 TCP 发送一个数据包后,在等待确认时,如果超时了,TCP 将重传这个数据包。tcp_retries1
决定了在重传超时时 TCP 将尝试的次数。当达到tcp_retries1
次重传后,TCP 将放弃这个连接。因此,tcp_retries1
控制了 TCP 在发起连接时的重传次数。
2.2 tcp_retries2
-
作用:
tcp_retries2
控制 TCP 在第二个重传超时时的重试次数。 -
默认值:
默认情况下,tcp_retries2
的值是 15。 -
说明:
如果在tcp_retries1
次重传后仍然没有收到确认,则 TCP 将使用更长的重传超时时间,并在tcp_retries2
次重传后放弃连接。因此,tcp_retries2
控制了 TCP 在发起连接后的重传次数。
2.3 作用
这两个参数一起控制了 TCP 在发起连接时和连接建立后的重传超时次数。通过调整这两个参数,可以控制 TCP 在网络不稳定或丢包较多的环境下的连接建立速度和可靠性。
默认情况下,tcp_retries1
和 tcp_retries2
的值是足够保证连接可靠性的,但是在特殊情况下,例如网络延迟较高或丢包较多的情况下,可能需要调整这两个参数的值。较小的重传超时次数可以加快连接建立速度,但是可能会降低连接的可靠性;较大的重传超时次数可以提高连接的可靠性,但是可能会增加连接建立的时间。
通过调整 tcp_retries1
和 tcp_retries2
参数,可以根据实际情况优化 TCP 连接的性能和可靠性。
3. keepalive
tcp_keepalive_time
、tcp_keepalive_intvl
和 tcp_keepalive_probes
这三个参数是用来控制 TCP KeepAlive 的超时和探测机制的。TCP KeepAlive 是一种机制,用于检测 TCP 连接是否仍然有效,以便在连接空闲时自动关闭无响应的连接。下面是这三个参数的详细介绍:
3.1 tcp_keepalive_time
-
作用:
tcp_keepalive_time
是 TCP KeepAlive 的超时时间,用来设置 TCP 连接在空闲时多久开始发送 KeepAlive 探测包。 -
默认值:
默认情况下,tcp_keepalive_time
的值是 7200 秒(2 小时)。 -
说明:
当 TCP 连接处于空闲状态时(即没有数据传输),TCP 将在经过tcp_keepalive_time
指定的时间后发送一个 KeepAlive 探测包。如果在这段时间内没有收到对端的响应,则认为连接已经失效,需要进行重连或关闭连接。
3.2 tcp_keepalive_intvl
-
作用:
tcp_keepalive_intvl
是 TCP KeepAlive 探测包的间隔时间,用来设置两次连续 KeepAlive 探测包之间的时间间隔。 -
默认值:
默认情况下,tcp_keepalive_intvl
的值是 75 秒。 -
说明:
在发送了第一个 KeepAlive 探测包之后,TCP 将以tcp_keepalive_intvl
指定的间隔时间发送后续的探测包,直到收到对端的响应或达到tcp_keepalive_probes
指定的重试次数。
3.3 tcp_keepalive_probes
-
作用:
tcp_keepalive_probes
是 TCP KeepAlive 探测包的重试次数,用来设置在没有收到对端响应时重试的次数。 -
默认值:
默认情况下,tcp_keepalive_probes
的值是 9 次。 -
说明:
如果在发送了 KeepAlive 探测包后经过tcp_keepalive_intvl
指定的时间仍然没有收到对端的响应,则 TCP 将重复发送探测包,直到达到tcp_keepalive_probes
指定的重试次数。如果在重试次数用尽之后仍然没有收到对端的响应,则认为连接已经失效,需要进行重连或关闭连接。
3.4 TCP KeepAlive 的作用时机
TCP KeepAlive 主要在以下情况下起作用:
- 当 TCP 连接处于空闲状态时(即没有数据传输)。
- 当 TCP 连接长时间没有活动时,用来检测连接是否仍然有效。
通过调整这三个参数,可以控制 TCP 连接的空闲超时时间、探测包的发送间隔和重试次数,从而根据实际情况优化 TCP 连接的性能和可靠性。
4. tcp_synack_retries
tcp_synack_retries
是用于控制 TCP 在收到 SYN 报文后的重传次数。
-
作用:
tcp_synack_retries
用于控制 TCP 在收到 SYN 报文后的重传次数,即当 TCP 收到 SYN 报文后发送 SYN+ACK 应答,但是没有收到对端的 ACK 应答时,TCP 将重传 SYN+ACK 应答的次数。 -
默认值:
默认情况下,tcp_synack_retries
的值是 5 次。 -
说明:
当 TCP 收到 SYN 报文后发送 SYN+ACK 应答,但是没有收到对端的 ACK 应答时,TCP 将重传 SYN+ACK 应答,重传次数由tcp_synack_retries
参数控制。如果经过tcp_synack_retries
次重传后仍然没有收到对端的 ACK 应答,则 TCP 认为连接建立失败,放弃当前连接尝试。
TCP SYN+ACK 重传过程:
- 当 TCP 收到对端发送的 SYN 报文后,会回复一个 SYN+ACK 应答给对端。
- 如果对端没有收到 SYN+ACK 应答,对端会重传 SYN 报文。
- 当 TCP 收到对端重传的 SYN 报文后,会再次发送 SYN+ACK 应答给对端。
- 如果对端再次没有收到 SYN+ACK 应答,对端会再次重传 SYN 报文。
- TCP 会根据
tcp_synack_retries
参数的值重复第 3 和第 4 步,直到达到重传次数的上限。 - 如果经过
tcp_synack_retries
次重传后仍然没有收到对端的 ACK 应答,则 TCP 认为连接建立失败,放弃当前连接尝试。
作用:
tcp_synack_retries
参数用于控制 TCP 在收到 SYN 报文后的重传次数,通过调整这个参数,可以根据网络环境的实际情况来优化 TCP 连接的建立速度和可靠性。默认情况下,tcp_synack_retries
的值是足够保证连接可靠性的,但是在特殊情况下,例如网络延迟较高或丢包较多的情况下,可能需要调整这个参数的值。较小的重传次数可以加快连接建立速度,但是可能会降低连接的可靠性;较大的重传次数可以提高连接的可靠性,但是可能会增加连接建立的时间。
5. tcp_retrans_collapse
tcp_retrans_collapse
是一个用于控制 TCP 在发送方拥塞窗口重置前的最大重复确认数的参数。
tcp_retrans_collapse 参数详解:
-
作用:
tcp_retrans_collapse
用于控制 TCP 在发送方拥塞窗口重置前的最大重复确认数。当 TCP 收到对端的重复确认超过tcp_retrans_collapse
次时,TCP 将抑制对端的重复确认,并尝试执行快速恢复(Fast Recovery)算法。 -
默认值:
默认情况下,tcp_retrans_collapse
的值是 3 次。 -
说明:
在 TCP 发送数据时,如果收到对端的重复确认超过tcp_retrans_collapse
次,则 TCP 将认为网络出现拥塞,并尝试执行快速恢复算法。快速恢复算法允许 TCP 在拥塞窗口减小之前继续发送数据,并且能够更快地恢复到正常的发送速率。
TCP 快速恢复算法:
TCP 快速恢复算法是一种拥塞控制算法,用于加速 TCP 在网络出现拥塞时的恢复速度。当 TCP 发送数据时,如果收到对端的重复确认超过 tcp_retrans_collapse
次,则 TCP 将认为网络出现拥塞,并尝试执行快速恢复算法。快速恢复算法的具体过程如下:
- 当 TCP 发送方收到对端的重复确认时,拥塞窗口减小一半。
- TCP 发送方继续发送数据,并且每收到一个对端的确认时,拥塞窗口增加一个 MSS(最大段大小)。
- 当 TCP 发送方收到对端的确认数达到之前的拥塞窗口大小时,TCP 将退出快速恢复状态,并进入拥塞避免状态。
作用:
tcp_retrans_collapse
参数用于控制 TCP 在网络出现拥塞时执行快速恢复算法的条件。通过调整这个参数,可以根据网络环境的实际情况来优化 TCP 连接的性能和可靠性。默认情况下,tcp_retrans_collapse
的值是足够保证连接可靠性的,但是在特殊情况下,例如网络延迟较高或丢包较多的情况下,可能需要调整这个参数的值。较小的重复确认次数可以加快 TCP 在网络拥塞时的恢复速度,但是可能会增加数据包丢失的风险;较大的重复确认次数可以提高连接的可靠性,但是可能会降低 TCP 在网络拥塞时的传输效率。
6. tcp_thin_dupack
tcp_thin_dupack
是一个用于控制 TCP 在快速重传过程中使用“轻量级”重复确认的参数。
tcp_thin_dupack 参数详解:
-
作用:
tcp_thin_dupack
参数用于控制 TCP 在快速重传过程中使用“轻量级”重复确认的次数。在 TCP 发送方收到对端的重复确认时,如果重复确认的次数超过tcp_thin_dupack
指定的次数,则 TCP 将尝试执行快速重传算法。 -
默认值:
默认情况下,tcp_thin_dupack
的值是 0,表示不使用“轻量级”重复确认。 -
说明:
在 TCP 发送数据时,如果收到对端的重复确认,表示对端已经收到了当前报文之前的所有报文。当收到连续的重复确认时,TCP 认为对端已经收到了当前报文之前的所有报文,并且当前报文已经丢失。在这种情况下,TCP 将尝试执行快速重传算法来快速恢复丢失的报文。tcp_thin_dupack
参数用于控制 TCP 在收到重复确认时执行快速重传算法的条件,即重复确认的次数是否超过tcp_thin_dupack
指定的次数。
TCP 快速重传算法:
TCP 快速重传算法用于快速恢复丢失的报文,以提高数据传输的效率。当 TCP 发送方收到对端的连续重复确认时,TCP 认为对端已经收到了当前报文之前的所有报文,并且当前报文已经丢失。在这种情况下,TCP 将尝试执行快速重传算法来快速恢复丢失的报文。快速重传算法的具体过程如下:
- 当 TCP 发送方收到对端的重复确认时,重复确认计数器加 1。
- 如果重复确认计数器的值超过
tcp_thin_dupack
参数指定的值,则 TCP 将执行快速重传算法。 - TCP 将立即重传丢失的报文,并将拥塞窗口减小到一个拥塞避免阈值。
- TCP 将进入快速恢复状态,继续发送数据,并且每收到一个对端的确认时,拥塞窗口增加一个 MSS(最大段大小)。
- 当 TCP 收到对端的确认数达到之前的拥塞窗口大小时,TCP 将退出快速恢复状态,并进入拥塞避免状态。
作用:
tcp_thin_dupack
参数用于控制 TCP 在快速重传过程中使用“轻量级”重复确认的次数,通过调整这个参数,可以根据网络环境的实际情况来优化 TCP 连接的性能和可靠性。默认情况下,tcp_thin_dupack
的值是 0,表示不使用“轻量级”重复确认,这意味着 TCP 将在收到任意数量的重复确认后立即执行快速重传算法。在一些网络环境中,使用“轻量级”重复确认可以提高 TCP 在快速重传过程中的性能和效率,减少不必要的重传次数。因此,在调整这个参数时需要根据实际情况进行权衡。
7. 快速重传和快速恢复
快速重传和快速恢复是 TCP 在网络拥塞情况下的两种重要算法,用于提高数据传输的效率和可靠性。
7.1 快速重传(Fast Retransmit):
快速重传是 TCP 在收到对端的重复确认时快速重传丢失的报文,以加快丢失报文的重传速度,提高数据传输的效率。当 TCP 发送方收到对端的重复确认时,表示对端已经收到了当前报文之前的所有报文,并且当前报文已经丢失。在这种情况下,TCP 将尝试立即重传丢失的报文,而不必等待超时重传的触发。快速重传算法的具体过程如下:
- 当 TCP 发送方收到对端的连续重复确认时,重复确认计数器加 1。
- 如果重复确认计数器的值达到阈值(通常为 3 次),则 TCP 将立即重传丢失的报文。
- TCP 将立即重传丢失的报文,并将拥塞窗口减小到一个拥塞避免阈值。
- TCP 将进入快速恢复状态,继续发送数据,并且每收到一个对端的确认时,拥塞窗口增加一个 MSS(最大段大小)。
- 当 TCP 收到对端的确认数达到之前的拥塞窗口大小时,TCP 将退出快速恢复状态,并进入拥塞避免状态。
7.2 快速恢复(Fast Recovery):
快速恢复是 TCP 在拥塞恢复过程中的一种算法,用于快速恢复拥塞窗口的大小,并继续发送数据。在 TCP 进入快速恢复状态后,TCP 可以继续发送数据,并且每收到一个对端的确认时,拥塞窗口增加一个 MSS(最大段大小),以尽快恢复到正常的发送速率。快速恢复算法的具体过程如下:
- TCP 发送方收到对端的重复确认时,拥塞窗口减小一半。
- TCP 发送方继续发送数据,并且每收到一个对端的确认时,拥塞窗口增加一个 MSS(最大段大小)。
- 当 TCP 收到对端的确认数达到之前的拥塞窗口大小时,TCP 将退出快速恢复状态,并进入拥塞避免状态。
7.3 区别:
-
快速重传 是 TCP 在收到对端的连续重复确认时立即重传丢失的报文,以加快丢失报文的重传速度。
-
快速恢复 是 TCP 在快速重传后恢复拥塞窗口的大小,并继续发送数据,以尽快恢复到正常的发送速率。
这两种算法通常是配合使用的,当 TCP 发送方收到对端的连续重复确认时,首先执行快速重传算法快速重传丢失的报文,然后执行快速恢复算法快速恢复拥塞窗口的大小,并继续发送数据。这样可以提高 TCP 在网络拥塞时的性能和效率,加快数据传输的速度。
8. tcp_reordering
tcp_reordering
是一个用于控制 TCP 报文重排序阈值的参数。
tcp_reordering 参数详解:
-
作用:
tcp_reordering
参数用于控制 TCP 在接收端对报文进行重排序的阈值。当 TCP 接收到乱序的报文时,如果乱序的报文数量超过tcp_reordering
参数指定的阈值,则 TCP 将不再等待乱序的报文,而是立即将乱序的报文交给上层应用处理。 -
默认值:
默认情况下,tcp_reordering
的值是 3 个 TCP 报文。 -
说明:
在正常情况下,TCP 接收端会将乱序的报文缓存起来,直到收到乱序报文的所有报文都到达后,再将这些报文按正确的顺序交给上层应用处理。但是,当收到的乱序报文数量超过tcp_reordering
指定的阈值时,TCP 将不再等待乱序的报文,而是立即将乱序的报文交给上层应用处理。这样可以加快数据传输的速度,但是可能会增加上层应用的处理负担。
作用:
tcp_reordering
参数用于控制 TCP 在接收端对乱序报文的处理方式,通过调整这个参数,可以根据网络环境的实际情况来优化 TCP 连接的性能和可靠性。默认情况下,tcp_reordering
的值是足够保证连接可靠性的,但是在特殊情况下,例如网络延迟较高或丢包较多的情况下,可能需要调整这个参数的值。较小的乱序阈值可以加快数据传输的速度,但是可能会增加上层应用的处理负担;较大的乱序阈值可以提高连接的可靠性,但是可能会降低数据传输的速度。
9. tcp_frto
tcp_frto
是一个用于控制 TCP 在拥塞恢复时启用 Forward RTO-Recovery(F-RTO)算法的参数。
tcp_frto 参数详解:
-
作用:
tcp_frto
参数用于控制 TCP 在拥塞恢复时是否启用 F-RTO 算法。F-RTO 算法用于改善 TCP 在拥塞恢复过程中的性能,特别是在丢失较少的网络环境中。 -
默认值:
默认情况下,tcp_frto
的值是 2,表示启用 F-RTO 算法。 -
说明:
在 TCP 进入拥塞恢复状态时,通常会采用 Slow Start 和 Congestion Avoidance 算法来调整拥塞窗口大小。但是在丢失较少的网络环境中,采用 F-RTO 算法可能会更有效地恢复 TCP 连接的性能。F-RTO 算法在收到重复确认时会延迟减小拥塞窗口的大小,并尝试发送一个新的数据段来验证网络是否真的出现了拥塞。如果新的数据段成功被接收端确认,那么 F-RTO 算法将取消减小拥塞窗口的操作,否则将继续减小拥塞窗口的大小。
作用:
tcp_frto
参数用于控制 TCP 在拥塞恢复过程中是否启用 F-RTO 算法,通过调整这个参数,可以根据网络环境的实际情况来优化 TCP 连接的性能和可靠性。在丢失较少的网络环境中,启用 F-RTO 算法可能会更有效地恢复 TCP 连接的性能,提高数据传输的效率。但是在丢包较多的网络环境中,可能会增加不必要的重传次数,降低连接的性能。因此,在调整这个参数时需要根据实际情况进行权衡。
10. tcp_max_tw_buckets
tcp_max_tw_buckets
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TIME-WAIT 状态连接的数量限制。
TIME-WAIT 状态是指当 TCP 连接被正常关闭时,端口会进入 TIME-WAIT 状态一段时间。在这段时间内,端口不能被新的连接使用,以确保所有在网络上的数据包都已经被正确处理。这个状态默认持续时间为 2 * MSL(Maximum Segment Lifetime,最大报文生存时间),通常为 60 秒到 120 秒。
tcp_max_tw_buckets
参数控制了系统中 TIME-WAIT 状态连接的最大数量。当 TIME-WAIT 状态连接的数量达到这个限制时,新的连接请求将被拒绝,并且会出现 “too many open files” 错误。
下面是该参数的详细介绍:
- 参数名称:
tcp_max_tw_buckets
- 默认值: 180000
- 可调范围: 0 - 4294967295(32位系统)或 0 - 18446744073709551615(64位系统)
- 作用: 控制系统中 TIME-WAIT 状态连接的最大数量。
- 影响因素: 对于高负载的网络服务器来说,可以增加这个参数的值,以允许更多的 TIME-WAIT 状态连接同时存在,从而减少 “too many open files” 错误的发生。不过,需要注意的是增加这个参数的值会占用更多的系统资源。
要查看当前系统中 tcp_max_tw_buckets
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_max_tw_buckets
要设置 tcp_max_tw_buckets
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_max_tw_buckets=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
11. tcp_tw_recycle
tcp_tw_recycle
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TIME-WAIT 状态连接的回收行为。
TCP 连接在关闭后会进入 TIME-WAIT 状态,保持一段时间以确保网络中所有数据包都被处理完毕。在 TIME-WAIT 状态期间,连接的双方不能建立新的连接。
tcp_tw_recycle
参数控制了是否启用 TIME-WAIT 状态连接的快速回收机制。当该参数设置为 1 时,表示启用快速回收机制;当设置为 0 时,表示禁用快速回收机制。
启用快速回收机制后,内核会尝试使用源地址和目标地址以及端口号的散列值来区分不同的连接,以便更快地回收 TIME-WAIT 状态的连接。
下面是该参数的详细介绍:
- 参数名称:
tcp_tw_recycle
- 默认值: 0
- 可调范围: 0 或 1
- 作用: 控制是否启用 TIME-WAIT 状态连接的快速回收机制。
- 影响因素: 启用快速回收机制可以减少系统中处于 TIME-WAIT 状态的连接数,从而节约系统资源并提高系统的并发连接能力。但是,在某些情况下,启用快速回收机制可能会导致连接建立失败或连接超时。
要查看当前系统中 tcp_tw_recycle
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_tw_recycle
要设置 tcp_tw_recycle
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_tw_recycle=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_tw_recycle=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
12. tcp_thin_linear_timeouts
tcp_thin_linear_timeouts
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TCP 超时重传算法的行为。
TCP 超时重传算法用于处理丢失的数据包。当 TCP 发送方发送数据包后,如果在一定时间内未收到对应的确认 ACK 包,则会认为数据包丢失,触发超时重传机制,重新发送数据包。
tcp_thin_linear_timeouts
参数控制了 TCP 超时重传算法的行为。当该参数设置为 1 时,表示启用线性超时重传算法;当设置为 0 时,表示禁用线性超时重传算法。
线性超时重传算法的特点是,每次超时重传的时间间隔都会按照线性增长的方式进行。例如,初始超时重传时间为 T1,每次重传的时间间隔为 T1、2T1、3T1,依此类推。
下面是该参数的详细介绍:
- 参数名称:
tcp_thin_linear_timeouts
- 默认值: 1
- 可调范围: 0 或 1
- 作用: 控制是否启用线性超时重传算法。
- 影响因素: 线性超时重传算法可以使 TCP 在丢包情况下更快地进行重传,从而提高网络的吞吐量和效率。但是,在某些情况下,禁用线性超时重传算法可能会提高网络的稳定性和可靠性。
要查看当前系统中 tcp_thin_linear_timeouts
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_thin_linear_timeouts
要设置 tcp_thin_linear_timeouts
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_thin_linear_timeouts=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_thin_linear_timeouts=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
当 tcp_thin_linear_timeouts
参数的值为 1 时(即启用线性超时重传算法),TCP 在丢失数据包后会采用线性递增的方式来计算重传超时时间。也就是说,重传超时时间会按照线性增长的方式递增。
而当 tcp_thin_linear_timeouts
参数的值为 0 时(即禁用线性超时重传算法),TCP 在丢失数据包后会采用指数递增的方式来计算重传超时时间。也就是说,重传超时时间会按照指数递增的方式递增。
所以您的理解是正确的:启用的情况下会快速重传,不启用的情况下重传的时间会按照 T1、2T1、3T1 的线性递增方式递增。
13. tcp_sack
tcp_sack
参数是 Linux 内核中 TCP 实现的一部分,用于启用或禁用选择性应答(SACK)选项。
选择性应答(SACK)是一种 TCP 扩展,用于提高 TCP 在丢包情况下的性能。它允许接收方在接收到乱序或丢失的数据包时,向发送方发送 SACK 选项,以告知发送方哪些数据包已经接收到,从而使发送方只重传丢失的数据包,而不是整个数据段。
tcp_sack
参数控制了是否启用选择性应答(SACK)选项。如果该参数设置为 1,则表示启用 SACK 选项;如果设置为 0,则表示禁用 SACK 选项。
下面是该参数的详细介绍:
- 参数名称:
tcp_sack
- 默认值: 1
- 可调范围: 0 或 1
- 作用: 控制是否启用选择性应答(SACK)选项。
- 影响因素: 启用 SACK 选项可以提高 TCP 在丢包情况下的性能,减少重传的数据量,从而提高网络的吞吐量和效率。但是,在某些情况下,禁用 SACK 选项可能会提高网络的兼容性和稳定性。
要查看当前系统中 tcp_sack
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_sack
要设置 tcp_sack
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_sack=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_sack=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
14. tcp_probe_interval
tcp_probe_interval
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TCP 探测报文发送的时间间隔。
TCP 探测报文是一种用于探测网络路径是否可达的特殊 TCP 数据包。它通常用于检测连接是否已经断开,以及重新建立连接的时间。当 TCP 连接处于断开状态时,内核会周期性地发送 TCP 探测报文,以检测连接的状态。如果在一定时间内没有收到对方的响应,就会认为连接已经断开。
tcp_probe_interval
参数控制了 TCP 探测报文发送的时间间隔。它定义了内核在发送两个连续的 TCP 探测报文之间等待的时间长度。当连接处于断开状态时,内核会以这个时间间隔发送 TCP 探测报文。
下面是该参数的详细介绍:
- 参数名称:
tcp_probe_interval
- 默认值: 0(单位为秒)
- 可调范围: 0 - 1800(单位为秒)
- 作用: 控制 TCP 探测报文发送的时间间隔。
- 影响因素: 修改这个参数的值可以影响 TCP 探测报文发送的频率。较小的时间间隔可以更快地发现断开的连接,但会增加网络流量和系统负载。
要查看当前系统中 tcp_probe_interval
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_probe_interval
要设置 tcp_probe_interval
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_probe_interval=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_probe_interval=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
15. tcp_limit_output_bytes
tcp_limit_output_bytes
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TCP 发送缓冲区的大小。
TCP 发送缓冲区是用于存储将要发送到网络的数据的内存区域。当应用程序发送数据到 TCP 套接字时,数据首先被复制到发送缓冲区中,然后由 TCP 协议栈从缓冲区中取出数据并发送到网络。如果发送缓冲区已满,应用程序的发送操作将被阻塞,直到有足够的空间将数据复制到缓冲区中。
tcp_limit_output_bytes
参数控制了 TCP 发送缓冲区的最大大小。当发送缓冲区中的数据量达到这个限制时,新的数据将无法被复制到发送缓冲区中,从而导致应用程序的发送操作被阻塞。
下面是该参数的详细介绍:
- 参数名称:
tcp_limit_output_bytes
- 默认值: 262144(单位为字节)
- 可调范围: 0 - 4294967295(32位系统)或 0 - 18446744073709551615(64位系统)
- 作用: 控制 TCP 发送缓冲区的最大大小。
- 影响因素: 修改这个参数的值可以影响 TCP 发送数据的性能和可靠性。增加这个参数的值可以增加发送缓冲区的大小,从而允许应用程序一次性发送更多的数据,提高数据传输的效率。但是,需要注意的是,增加发送缓冲区的大小也会增加系统内存的消耗,并可能导致内存压力增加。
要查看当前系统中 tcp_limit_output_bytes
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_limit_output_bytes
要设置 tcp_limit_output_bytes
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_limit_output_bytes=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_limit_output_bytes=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
16. tcp_max_tw_buckets
tcp_max_tw_buckets
参数是 Linux 内核中 TCP 实现的一部分,用于控制 TIME-WAIT 状态连接的数量限制。
TIME-WAIT 状态是指当 TCP 连接被正常关闭时,端口会进入 TIME-WAIT 状态一段时间。在这段时间内,端口不能被新的连接使用,以确保所有在网络上的数据包都已经被正确处理。这个状态默认持续时间为 2 * MSL(Maximum Segment Lifetime,最大报文生存时间),通常为 60 秒到 120 秒。
tcp_max_tw_buckets
参数控制了系统中 TIME-WAIT 状态连接的最大数量。当 TIME-WAIT 状态连接的数量达到这个限制时,新的连接请求将被拒绝,并且会出现 “too many open files” 错误。
下面是该参数的详细介绍:
- 参数名称:
tcp_max_tw_buckets
- 默认值: 180000
- 可调范围: 0 - 4294967295(32位系统)或 0 - 18446744073709551615(64位系统)
- 作用: 控制系统中 TIME-WAIT 状态连接的最大数量。
- 影响因素: 对于高负载的网络服务器来说,可以增加这个参数的值,以允许更多的 TIME-WAIT 状态连接同时存在,从而减少 “too many open files” 错误的发生。不过,需要注意的是增加这个参数的值会占用更多的系统资源。
要查看当前系统中 tcp_max_tw_buckets
参数的值,可以使用以下命令:
sysctl net.ipv4.tcp_max_tw_buckets
要设置 tcp_max_tw_buckets
参数的值,可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=新值
或者编辑 /etc/sysctl.conf
文件,在文件末尾添加如下行,并保存退出:
net.ipv4.tcp_max_tw_buckets=新值
然后执行以下命令使配置生效:
sudo sysctl -p
注意:在修改系统参数之前,请务必了解参数的含义和可能带来的影响,以及适用于你的系统的最佳配置值。
这篇关于Linux系统ipv4参数解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!