TCP内核参数

TCP内核参数

1.修改TCP内核参数

systcl.conf

在Linux系统中,/proc/sys/net/ipv4/tcp_max_syn_backlog文件、/proc/sys/net/core/somaxconn文件和/etc/sysctl.conf文件都与系统内核参数有关。它们之间的区别主要在于生效时间和持久性。直接修改/proc/sys/net/ipv4/tcp_max_syn_backlog文件会立即生效,但重启后更改会丢失;而修改/etc/sysctl.conf文件可以使更改在系统重启后依然生效。

#首先,关于默认值:net.ipv4.tcp_max_syn_backlog的默认值通常为128,而net.core.somaxconn的默认值因Linux发行版而异,通常为128或512。要查看当前值,请执行以下命令:
[root@CentOS8 ~]# vim /proc/sys/net/core/somaxconn
[root@CentOS8 ~]# sysctl net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 128
[root@CentOS8 ~]# sysctl net.core.somaxconn
net.core.somaxconn = 128
[root@CentOS8 ~]#

1.#修改/proc/sys/net/ipv4/tcp_max_syn_backlog的值,以增加系统允许的半连接队列大小。要实现这一目标,使用sysctl命令:
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=1024
#使用sysctl -w命令修改的参数值仅在当前系统运行期间有效,系统重启后将恢复为默认值或/etc/sysctl.conf中的设置。
#这条命令会临时地修改tcp_max_syn_backlog的值。要使该设置在系统重启后依然生效,需要编辑/etc/sysctl.conf文件。使用文本编辑器(如nano或vi)打开此文件,并添加或修改以下行:
net.ipv4.tcp_max_syn_backlog = 1024
#保存并关闭文件。接下来,运行以下命令使修改生效:
sudo sysctl -p
#现在,tcp_max_syn_backlog的值已成功更改为1024,且在系统重启后仍然生效。

2.#修改/proc/sys/net/core/somaxconn的值,以增加系统允许的全连接队列大小。要实现这一目标,使用sysctl命令:
sudo sysctl -w net.core.somaxconn = 1024

#为了使更改在系统重启后依然生效,在/etc/sysctl.conf文件中修改相应的参数。将以下内容添加到/etc/sysctl.conf文件中
net.core.somaxconn = 1024
#保存并关闭文件。接下来,运行以下命令使修改生效:
sudo sysctl -p
#现在,net.core.somaxconn参数的值已成功更改,并且在系统重启后仍然生效。

syn半连接队列和accept全连接队列

在TCP(传输控制协议)中,当客户端与服务器之间建立连接时,会使用三次握手(Three-Way Handshake)协议。在这个过程中,服务器需要处理两种类型的连接队列:SYN半连接队列和Accept全连接队列。

  1. SYN半连接队列:
在TCP连接建立过程的第一步,客户端会发送一个带有SYN(synchronize)标志位的数据包给服务器,请求建立连接。服务器收到这个SYN包后,会将此连接放入SYN半连接队列。此时,连接还没有完全建立,服务器仅收到了客户端的连接请求。
SYN半连接队列主要用于存储处于SYN_RECV状态的连接。这些连接已经接收到客户端的SYN包,但尚未完成整个三次握手过程。SYN半连接队列的长度由`net.ipv4.tcp_max_syn_backlog`内核参数控制。当SYN半连接队列满时,服务器可能会拒绝新的连接请求。
  1. Accept全连接队列:
当服务器收到客户端的SYN包后,它会发送一个带有SYN和ACK(acknowledge)标志位的数据包给客户端,确认收到了连接请求。然后,客户端回应一个ACK包给服务器,表示连接已经建立。此时,服务器会将该连接从SYN半连接队列移动到Accept全连接队列。
Accept全连接队列存储处于ESTABLISHED状态的连接,这些连接已经完成了三次握手过程。Accept全连接队列的长度由net.core.somaxconn内核参数控制。当Accept全连接队列满时,服务器可能无法处理更多的并发连接。

服务器应用程序(如Web服务器)需要在合适的时间内接受(accept)全连接队列中的连接,以便为客户端提供服务。如果服务器应用程序处理连接的速度不够快,全连接队列可能会变满,导致新的连接被拒绝。

总之,SYN半连接队列和Accept全连接队列是服务器在TCP连接建立过程中使用的两种类型的队列。SYN半连接队列用于存储尚未完成三次握手的连接,而Accept全连接队列用于存储已经建立的连接。通过优化这两个队列的长度和服务器应用程序的处理速度,可以提高服务器的并发连接处理能力

2.TCP内核参数

#net.ipv4.tcp_max_syn_backlog: 控制SYN半连接队列的大小。推荐值:1024或更大,根据并发连接需求进行调整。
#net.core.somaxconn: 控制Accept全连接队列的大小。推荐值:1024或更大,根据并发连接需求进行调整。
#net.ipv4.tcp_tw_reuse: 控制是否允许重用处于TIME_WAIT状态的套接字。推荐值:1(启用)。
#net.ipv4.tcp_tw_recycle: 控制是否更快地回收处于TIME_WAIT状态的套接字。推荐值:0(禁用),因为它可能在NAT环境下导致连接问题。
#net.ipv4.tcp_fin_timeout: 控制套接字在FIN_WAIT_2状态下等待关闭的时间(以秒为单位)。推荐值:30-60。
#net.ipv4.tcp_keepalive_time: 控制TCP keep-alive消息发送的间隔时间(以秒为单位)。推荐值:600。
#net.ipv4.tcp_keepalive_probes: 控制在认为连接已断开之前发送TCP keep-alive消息的次数。推荐值:9。
#net.ipv4.tcp_keepalive_intvl: 控制连续TCP keep-alive消息之间的时间间隔(以秒为单位)。推荐值:75。
#net.ipv4.tcp_synack_retries: 控制TCP SYN+ACK重试的次数。推荐值:5。
#net.ipv4.tcp_syn_retries: 控制TCP SYN重试的次数。推荐值:5。

#vim /etc/sysctl.conf
# SYN半连接队列大小
net.ipv4.tcp_max_syn_backlog = 1024
# Accept全连接队列大小
net.core.somaxconn = 1024
# 允许重用TIME_WAIT状态的套接字
net.ipv4.tcp_tw_reuse = 1
# 禁止更快地回收TIME_WAIT状态的套接字
net.ipv4.tcp_tw_recycle = 0
# 套接字在FIN_WAIT_2状态下等待关闭的时间(以秒为单位)
net.ipv4.tcp_fin_timeout = 30
# TCP keep-alive消息发送的间隔时间(以秒为单位)
net.ipv4.tcp_keepalive_time = 600
# 在认为连接已断开之前发送TCP keep-alive消息的次数
net.ipv4.tcp_keepalive_probes = 9
# 连续TCP keep-alive消息之间的时间间隔(以秒为单位)
net.ipv4.tcp_keepalive_intvl = 75
# TCP SYN+ACK重试的次数
net.ipv4.tcp_synack_retries = 5
# TCP SYN重试的次数
net.ipv4.tcp_syn_retries = 5

⑴ net.core.somaxconn

修改net.core.somaxconn参数的主要用途是调整服务器的Accept全连接队列的最大长度。Accept全连接队列存储处于ESTABLISHED状态的连接,这些连接已经完成了TCP三次握手过程。路径:/proc/sys/net/core/somaxconn

增加net.core.somaxconn值可以提高服务器在繁忙时段处理并发连接的能力。当服务器接收到大量的并发连接请求时,较大的net.core.somaxconn值有助于确保服务器能够容纳更多的已建立连接。这有助于减少因为全连接队列已满导致的连接请求被拒绝的情况。

然而,增加net.core.somaxconn值并不能直接提高服务器的性能。实际上,如果服务器的处理能力有限,设置过高的net.core.somaxconn值可能会导致服务器资源不足以处理所有的连接,从而影响整体性能。因此,在调整net.core.somaxconn值时,需要权衡服务器的实际需求和性能。

总之,修改net.core.somaxconn参数可以调整服务器的Accept全连接队列长度,从而影响服务器处理并发连接的能力。在调整此参数时,应根据服务器的实际需求和性能进行合理配置。

sudo sysctl -w net.core.somaxconn=1024

⑵net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog是一个Linux内核参数,用于控制SYN半连接队列的最大长度。半连接队列用于存储已收到SYN包但尚未完成TCP三次握手的连接请求。当客户端向服务器发送SYN包(第一次握手)时,服务器将这个连接请求放入SYN半连接队列。路径:/proc/sys/net/core/netdev_max_backlog

此参数对服务器的性能和并发连接处理能力有影响。在服务器面临大量并发连接请求时,较大的net.ipv4.tcp_max_syn_backlog值有助于减少因SYN半连接队列已满而导致的新连接请求被拒绝的情况。然而,设置过高的值可能会导致服务器资源不足以处理所有连接,从而影响整体性能。

net.ipv4.tcp_max_syn_backlog的默认值通常为128,但您可以根据服务器的实际需求和性能调整此值。要修改net.ipv4.tcp_max_syn_backlog,您可以使用sysctl命令或编辑/etc/sysctl.conf文件。例如,要将net.ipv4.tcp_max_syn_backlog的值设置为1024,您可以执行以下命令:

sudo sysctl -w net.ipv4.tcp_max_syn_backlog=1024

请注意,使用sysctl -w命令修改的参数值仅在当前系统运行期间有效。系统重启后,参数值将恢复为默认值或/etc/sysctl.conf中的设置。要使更改在系统重启后依然生效,请将以下内容添加到/etc/sysctl.conf文件中:

net.ipv4.tcp_max_syn_backlog = 1024

然后运行以下命令以使更改生效:

sudo sysctl -p

⑶ net.ipv4.tcp_fin_timeout

net.ipv4.tcp_fin_timeout 是一个 Linux 内核参数,用于设置内核在 FIN_WAIT_2 状态下关闭 TCP 连接之前应等待的时间(以秒为单位),这个参数可以影响到关闭连接的速度。FIN_WAIT_2 状态是 TCP 连接终止过程的一部分,在该过程中,连接的双方交换 FIN(结束)数据包以表示它们已完成数据发送并准备关闭连接。路径:/proc/sys/net/ipv4/tcp_fin_timeout

net.ipv4.tcp_fin_timeout 的默认值通常为 60 秒,这意味着在 FIN_WAIT_2 状态下,连接在关闭前将等待 60 秒。这个参数可以根据实际需求进行调整。较短的超时时间可以使系统更快地释放不再使用的连接资源,从而提高系统性能。然而,将此值设置得过低可能导致网络连接过早关闭,进而影响应用程序的正常工作。

要查看 net.ipv4.tcp_fin_timeout 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_fin_timeout

要设置新的值(例如,将其更改为 30 秒),可以使用以下命令:

sudo sysctl -w net.ipv4.tcp_fin_timeout=30

要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:

net.ipv4.tcp_fin_timeout = 30
#生效
sysctl -p

⑷ net.ipv4.tcp_tw_reuse

net.ipv4.tcp_tw_reuse 是一个 Linux 内核参数,用于控制是否允许重用 TIME_WAIT 状态的套接字以便快速回收。这个设置在高并发、大量短连接场景下尤为重要,因为它可以帮助系统更快地回收和重用 TCP 端口和资源。路径:/proc/sys/net/ipv4/tcp_tw_reuse,默认为0

在 TCP 连接终止过程中,有一个状态叫做 TIME_WAIT。当连接终止时,TCP 连接的一端需要等待一段时间(默认是 2 倍的最大段生命周期,约为 2 分钟)以确保所有在网络中传输的数据包都已被接收。在这段时间里,连接会保持 TIME_WAIT 状态。当有大量的短连接时,很多套接字会处于 TIME_WAIT 状态,可能导致端口资源耗尽,启用此选项可以更有效地使用系统资源。

net.ipv4.tcp_tw_reuse 的取值如下:

  • 0(默认值):禁止套接字重用。系统将严格遵循 TCP 协议规范,不允许在 TIME_WAIT 状态下重用套接字。
  • 1:允许套接字重用。系统会在可能的情况下尽快回收和重用处于 TIME_WAIT 状态的套接字,从而减轻端口资源耗尽的问题。

要查看 net.ipv4.tcp_tw_reuse 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_tw_reuse
#要设置新的值(例如,启用套接字重用),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_tw_reuse = 1
#生效
sysctl -p
理解套接字重用

套接字重用(socket reuse)是指操作系统在允许的情况下,更快地回收和重用处于 TIME_WAIT 状态的套接字。这有助于减轻因短时间内产生大量短连接而导致的端口资源耗尽问题。

在 TCP 连接终止过程中,连接的一端会进入 TIME_WAIT 状态。这是为了确保在网络中传输的数据包都已被接收。在 TIME_WAIT 状态期间,套接字占用了系统的资源,例如端口号。当有大量短连接时,可能会导致大量套接字处于 TIME_WAIT 状态,进而导致可用端口资源耗尽。

当启用套接字重用(例如,将 net.ipv4.tcp_tw_reuse 设置为 1)时,操作系统会尝试在允许的情况下更快地回收和重用处于 TIME_WAIT 状态的套接字。这意味着,尽管套接字可能仍处于 TIME_WAIT 状态,但操作系统可以将其分配给新的连接,从而有效地减轻端口资源耗尽问题。

然而,需要注意的是,套接字重用可能会导致不符合 TCP 协议规范的行为,例如可能产生乱序的数据包。因此,在启用套接字重用之前,请确保您了解可能的影响,并根据网络环境和应用需求进行权衡。

套接字

套接字(socket)是计算机网络编程中的一个抽象概念,它是网络通信的基本构建模块。套接字充当应用程序和网络协议之间的接口,使应用程序能够与其他应用程序通过网络进行通信。简单来说,套接字就像一个电话插座,应用程序可以通过它与其他程序建立连接并进行通信。

在计算机网络中,主要使用两种协议进行通信:TCP(传输控制协议)和 UDP(用户数据报协议)。这两种协议都基于 IP(互联网协议),因此通常称为 TCP/IP 和 UDP/IP。套接字可以基于这些协议创建,以便应用程序可以使用不同的通信机制。

TCP 套接字提供可靠的、面向连接的通信,确保数据按顺序、完整地从一端传输到另一端。TCP 套接字常用于需要高可靠性和数据完整性的应用程序,如 Web 服务器和电子邮件服务器。

与 TCP 不同,UDP 套接字提供不可靠的、无连接的通信。它们发送数据包而不需要建立连接,因此传输速度更快。但是,它们不能保证数据包的顺序或完整性。UDP 套接字适用于对延迟敏感且可以容忍数据丢失的应用程序,如音频、视频和在线游戏。

在编程中,套接字 API(应用程序编程接口)提供了一组用于创建、管理和与套接字通信的函数。程序员可以使用这些函数编写能够通过网络进行通信的应用程序。常见的套接字 API 包括 Berkeley 套接字(用于 Unix 和类 Unix 系统)和 Winsock(用于 Windows 系统)。

⑸ net.ipv4.tcp_tw_recycle

net.ipv4.tcp_tw_recycle 是一个 Linux 内核参数,用于控制是否启用快速回收 TIME_WAIT 套接字的机制。与 net.ipv4.tcp_tw_reuse 类似,这个设置在大量短连接场景下尤为重要,因为它可以帮助系统更快地回收和重用 TCP 端口和资源。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0

net.ipv4.tcp_tw_recycle 参数的值:

  • 0(默认值):禁用 TIME_WAIT 套接字的快速回收。
  • 1:启用 TIME_WAIT 套接字的快速回收。系统会尽快回收处于 TIME_WAIT 状态的套接字,减轻端口资源耗尽的问题。

net.ipv4.tcp_tw_reuse 不同,net.ipv4.tcp_tw_recycle 参数采用更激进的方法来回收 TIME_WAIT 套接字。启用此选项时,系统会在可行的情况下尽快回收 TIME_WAIT 套接字,而不是等待它们自然过期。这有助于减轻因大量短连接导致的端口资源耗尽问题。

然而,启用 net.ipv4.tcp_tw_recycle 可能会导致与网络地址转换(NAT)设备不兼容的问题。在 NAT 设备背后的客户端可能无法与启用了此选项的服务器建立连接。因此,对于面向公共互联网的服务器,通常不建议启用 net.ipv4.tcp_tw_recycle

要查看 net.ipv4.tcp_tw_recycle 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_tw_recycle
#要设置新的值(例如,启用快速回收 TIME_WAIT 套接字),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_tw_recycle=1
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_tw_recycle = 1
sudo sysctl -p

⑹ net.ipv4.tcp_syncookies

net.ipv4.tcp_syncookies 是一个 Linux 内核参数,用于控制是否启用 SYN cookie 机制。SYN cookie 是一种防御性技术,用于抵抗 SYN 洪水攻击,这是一种分布式拒绝服务(DDoS)攻击类型。SYN 洪水攻击是一种拒绝服务(DoS)攻击,攻击者通过发送大量 SYN(同步)数据包来消耗服务器资源,从而使正常用户无法访问服务器。路径:/proc/sys/net/ipv4/tcp_syncookies,默认为1

在正常的 TCP 握手过程中,客户端发送一个 SYN 数据包给服务器,服务器响应一个 SYN-ACK 数据包,然后客户端回复一个 ACK 数据包。当服务器收到大量 SYN 数据包时,它需要分配内存资源来追踪每个正在建立的连接。攻击者可能发送大量伪造的 SYN 数据包,迫使服务器分配大量资源来处理这些不存在的连接,从而导致资源耗尽。

当启用 SYN cookies 时,服务器会使用一种特殊的算法来生成 SYN-ACK 数据包,而不是在内存中分配资源。这种算法会在稍后收到 ACK 数据包时进行验证。这样,服务器不需要为每个 SYN 数据包分配内存资源,从而降低了资源消耗。

net.ipv4.tcp_syncookies 参数的值:

  • 0:禁用 SYN cookies 机制。
  • 1(默认值):启用 SYN cookies 机制。当服务器遇到大量 SYN 请求时,会启动 SYN cookies 保护。

要查看 net.ipv4.tcp_syncookies 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_syncookies
#要设置新的值(例如,禁用 SYN cookies 机制),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_syncookies=0
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_syncookies = 0
sudo sysctl -p

需要注意的是,SYN cookies 机制可能会导致某些 TCP 扩展(如窗口缩放和时间戳)无法使用。然而,在面临 SYN 洪水攻击时,启用 SYN cookies 是一种有效的防御手段。因此,在大多数情况下,保持此选项启用是合理的。

⑺ net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range 是一个 Linux 内核参数,用于定义系统可用于分配给 TCP 和 UDP 套接字的本地端口号范围。当一个应用程序发起网络连接或监听端口时,系统会从这个范围内分配一个可用的端口号。路径:/proc/sys/net/ipv4/ip_local_port_range

此参数包含两个整数值,分别表示端口范围的起始和结束。默认情况下,这个范围通常设置为 32768 到 60999,但根据系统需求和网络环境的不同,您可以根据需要调整这个范围。

较低的端口号(1-1023)通常保留给特权进程(即,需要 root 权限的进程)和众所周知的服务(如 HTTP、FTP、SSH 等)。因此,net.ipv4.ip_local_port_range 的起始值通常设置在 1024 以上。

要查看 net.ipv4.ip_local_port_range 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.ip_local_port_range
#要设置新的值(例如,将端口范围更改为 20000 到 65000),可以使用以下命令:
sudo sysctl -w net.ipv4.ip_local_port_range="20000 65000"
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.ip_local_port_range = 20000 65000
sudo sysctl -p

⑻net.ipv4.tcp_max_tw_buckets

net.ipv4.tcp_max_tw_buckets 是一个 Linux 内核参数,用于定义系统可以容纳的处于 TIME_WAIT 状态的套接字的最大数量。TIME_WAIT 是 TCP 连接在正常关闭后进入的状态,用于确保在连接关闭后仍能正确处理可能残留的数据包。在这个状态下,套接字会被保留一段时间(通常是 2 * Maximum Segment Lifetime,约为 1-4 分钟),然后被系统回收。路径:/proc/sys/net/ipv4/tcp_max_tw_buckets

在处理大量短连接的场景下,可能会出现许多套接字处于 TIME_WAIT 状态。这可能导致系统资源(如端口和内存)被耗尽。net.ipv4.tcp_max_tw_buckets 参数用于限制处于 TIME_WAIT 状态的套接字的最大数量,以防止资源耗尽。

当处于 TIME_WAIT 状态的套接字数量达到 net.ipv4.tcp_max_tw_buckets 参数指定的限制时,系统将立即回收最旧的 TIME_WAIT 套接字。这有助于保护系统免受因大量 TIME_WAIT 套接字导致的资源耗尽问题。

要查看 net.ipv4.tcp_max_tw_buckets 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_max_tw_buckets
#要设置新的值(例如,将最大 TIME_WAIT 套接字数量更改为 20000),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=20000
要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_max_tw_buckets = 20000
sysctl -p

⑼ net.ipv4.tcp_synack_retries

net.ipv4.tcp_synack_retries 是一个 Linux 内核参数,用于控制服务器在 TCP 握手过程中发送 SYN-ACK(同步-确认)数据包的重试次数。在 TCP 握手过程中,客户端首先向服务器发送一个 SYN(同步)数据包,服务器收到 SYN 数据包后回复一个 SYN-ACK 数据包,并等待客户端发送 ACK(确认)数据包以完成握手。

在某些情况下,例如网络拥塞或丢包时,服务器发送的 SYN-ACK 数据包可能无法到达客户端。在这种情况下,服务器需要重新发送 SYN-ACK 数据包。net.ipv4.tcp_synack_retries 参数定义了服务器应重试发送 SYN-ACK 数据包的次数

net.ipv4.tcp_synack_retries 参数的默认值通常为 5。这意味着服务器将尝试发送 SYN-ACK 数据包的总次数为 6(包括首次发送和之后的 5 次重试)。

要查看 net.ipv4.tcp_synack_retries 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_synack_retries
#要设置新的值(例如,将重试次数更改为 3),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_synack_retries=3
要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_synack_retries = 3
sysctl -p

⑽ net.ipv4.tcp_syn_retries

net.ipv4.tcp_syn_retries 是一个 Linux 内核参数,用于设置 TCP 连接建立过程中 SYN 数据包的重试次数。当客户端试图与服务器建立 TCP 连接时,它会发送一个 SYN(同步)数据包以启动 TCP 握手过程。如果服务器没有响应,客户端可能需要重新发送 SYN 数据包。net.ipv4.tcp_syn_retries 参数定义了客户端应该重试发送 SYN 数据包的次数。

net.ipv4.tcp_syn_retries 参数的默认值通常为 6。这意味着客户端将尝试发送 SYN 数据包的总次数为 7(包括首次发送和之后的 6 次重试)。在每次重试之间,客户端会等待更长的时间,这样在网络状况不佳的情况下,仍然有机会建立连接。

要查看 net.ipv4.tcp_syn_retries 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_syn_retries
#要设置新的值(例如,将 SYN 重试次数更改为 4),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_syn_retries=4
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_syn_retries = 4
sysctl -p

⑾ net.ipv4.tcp_retries1

net.ipv4.tcp_retries1 是一个 Linux 内核参数,用于设置 TCP 连接中数据包轻量级重试的次数。这个参数定义了内核在认为 TCP 连接可能存在问题之前,尝试重新发送未确认(未收到 ACK)的数据包的次数。/proc/sys/net/ipv4/tcp_retries1

当 TCP 向接收方发送数据包时,它会等待接收方确认已经收到数据包。如果在一定时间内没有收到确认(ACK),TCP 将尝试重新发送数据包。net.ipv4.tcp_retries1 参数指定了在将连接视为有问题之前,TCP 应该重试发送未确认数据包的次数。

net.ipv4.tcp_retries1 的默认值通常为 3。这意味着 TCP 将尝试重发未确认的数据包 3 次,然后认为连接可能有问题。如果连接有问题,TCP 将继续重试,但会根据 net.ipv4.tcp_retries2 参数指定的次数来确定重试次数。net.ipv4.tcp_retries2 参数定义了在放弃尝试之前,将要进行的总重试次数。

要查看 net.ipv4.tcp_retries1 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_retries1
#要设置新的值(例如,将轻量级重试次数更改为 5),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_retries1=5
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_retries1 = 5
sudo sysctl -p

⑿ net.ipv4.tcp_retries2

net.ipv4.tcp_retries2 是一个 Linux 内核参数,用于设置 TCP 连接中数据包的最大重试次数。这个参数定义了在放弃尝试重新发送未确认(未收到 ACK)的数据包之前,TCP 应该重试的次数。/proc/sys/net/ipv4/tcp_retries2

在 TCP 通信过程中,发送方会等待接收方确认已收到数据包。如果在一定时间内没有收到确认(ACK),发送方会尝试重新发送数据包。在经过一定次数的轻量级重试之后(由 net.ipv4.tcp_retries1 参数指定),连接可能被认为存在问题。net.ipv4.tcp_retries2 参数定义了在放弃尝试之前,将要进行的总重试次数。

net.ipv4.tcp_retries2 的默认值通常为 15。这意味着,在认为连接有问题之后,TCP 将尝试再进行 15 次重试,然后放弃并关闭连接。这些重试次数包括了 net.ipv4.tcp_retries1 参数定义的轻量级重试次数

要查看 net.ipv4.tcp_retries2 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_retries2
#要设置新的值(例如,将最大重试次数更改为 10),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_retries2=10
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_retries2 = 10
sysctl -p

⒀ net.ipv4.tcp_keepalive_time

net.ipv4.tcp_keepalive_time 是一个 Linux 内核参数,用于设置 TCP 连接的空闲保活(keepalive)时间。TCP keepalive 是一个可选的机制,用于检测 TCP 连接是否仍然有效。当连接在一段时间内没有任何数据传输时,发送方会发送一个特殊的保活(keepalive)探测包来确认连接是否仍然有效。如果接收方没有响应,发送方可能会重试发送保活探测包,直到达到最大重试次数后放弃并关闭连接。

net.ipv4.tcp_keepalive_time 参数定义了在发送第一个保活探测包之前,连接必须保持空闲的时间(以秒为单位)。默认值通常为 7200 秒(2 小时)。

要查看 net.ipv4.tcp_keepalive_time 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_keepalive_time
#要设置新的值(例如,将保活时间更改为 3600 秒),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_keepalive_time=3600
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_keepalive_time = 3600
sysctl -p

⒁net.ipv4.tcp_keepalive_probes

net.ipv4.tcp_keepalive_probes 是一个 Linux 内核参数,用于设置 TCP 保活(keepalive)探测包的最大重试次数。TCP keepalive 是一种可选的机制,用于检测 TCP 连接是否仍然有效。当连接在一段时间内没有任何数据传输时,发送方会发送一个特殊的保活探测包来确认连接是否仍然有效。如果接收方没有响应,发送方会重试发送保活探测包。

net.ipv4.tcp_keepalive_probes 参数定义了在放弃并关闭连接之前,发送方应该重试发送保活探测包的次数。默认值通常为 9 次。

要查看 net.ipv4.tcp_keepalive_probes 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_keepalive_probes
#要设置新的值(例如,将保活探测包的最大重试次数更改为 5 次),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_keepalive_probes=5
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_keepalive_probes = 5
sudo sysctl -p

⒂ net.ipv4.tcp_keepalive_intvl

net.ipv4.tcp_keepalive_intvl 是一个 Linux 内核参数,用于设置 TCP 保活(keepalive)探测包之间的时间间隔。TCP keepalive 是一种可选的机制,用于检测 TCP 连接是否仍然有效。当连接在一段时间内没有任何数据传输时,发送方会发送一个特殊的保活探测包来确认连接是否仍然有效。如果接收方没有响应,发送方会重试发送保活探测包。

net.ipv4.tcp_keepalive_intvl 参数定义了发送方在连续发送保活探测包之间应该等待的时间(以秒为单位)。默认值通常为 75 秒。

要查看 net.ipv4.tcp_keepalive_intvl 的当前值,可以在 Linux 系统中使用以下命令:

sysctl net.ipv4.tcp_keepalive_intvl
#要设置新的值(例如,将保活探测包之间的时间间隔更改为 60 秒),可以使用以下命令:
sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60
#要使更改永久生效,需要在 /etc/sysctl.conf 文件中添加或修改以下行:
net.ipv4.tcp_keepalive_intvl = 60
sudo sysctl -p

⒃ net.ipv4.ip_forward=0

net.ipv4.ip_forward 是一个 Linux 系统内核参数,用于控制 IPv4 数据包在不同网络接口之间的转发功能。该参数可以设置为 01

  • net.ipv4.ip_forward=0:IP 转发功能禁用。当设置为 0 时,系统将不会转发收到的 IPv4 数据包。这意味着,如果数据包不是目的地为本地系统的,它将被丢弃。大多数个人计算机和服务器默认情况下将此参数设置为 0,因为它们通常不需要充当路由器或网关。
  • net.ipv4.ip_forward=1:IP 转发功能启用。当设置为 1 时,系统将允许 IPv4 数据包在不同网络接口之间转发。这使得 Linux 系统可以充当路由器或网关,将数据包从一个网络接口传递到另一个网络接口。此设置在某些特定场景下是必需的,例如搭建 VPN 服务器、网络地址转换 (NAT) 或构建路由器等。

可以通过以下方法检查和修改 net.ipv4.ip_forward 的值:

  1. 查看当前设置:
cat /proc/sys/net/ipv4/ip_forward
  1. 临时修改设置(重启后失效):

启用ip转发

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

禁用 IP 转发:

echo 0 | sudo tee /proc/sys/net/ipv4/ip_forward
  1. 永久修改设置(通过修改 /etc/sysctl.conf 文件):

使用文本编辑器打开 /etc/sysctl.conf 文件,例如使用 vi

sudo vi /etc/sysctl.conf

找到 net.ipv4.ip_forward 参数,设置为 0(禁用)或 1(启用),并保存文件。例如,要禁用 IP 转发,添加或修改以下行:

net.ipv4.ip_forward=0

使更改立即生效:

sudo sysctl -p
IP 转发功能

IP 转发功能(IP forwarding)是指网络设备(如路由器或具有多个网络接口的计算机)在接收到 IP 数据包后,根据数据包的目标地址将其转发到正确的网络接口和下一跳设备,以便数据包最终到达目的地。

在简单的网络环境中,设备之间可以直接通信,无需转发。但在更复杂的网络拓扑中,数据包通常需要在多个设备之间进行转发,以便从源设备传输到目的设备。IP 转发功能是实现这一过程的关键。

当一台计算机具有多个网络接口,例如连接到不同的子网或 VLAN 时,IP 转发功能可以让这台计算机充当路由器或网关的角色,将数据包从一个网络接口转发到另一个网络接口。这对于实现互联网连接共享、构建 VPN 网关或搭建防火墙等场景非常有用。

在 Linux 系统中,IP 转发功能可以通过内核参数 net.ipv4.ip_forward 进行启用或禁用。值为 0 表示禁用,值为 1 表示启用。默认情况下,大多数系统会禁用 IP 转发功能,因为不需要充当路由器或网关。但在需要时,可以根据实际需求启用 IP 转发功能。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingYuyu_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值