📜  TCP 变量的 Linux 命令行

📅  最后修改于: 2022-05-13 01:56:17.536000             🧑  作者: Mango

TCP 变量的 Linux 命令行

在本文中,我们将讨论 TCP 变量的 Linux 命令行。

查找 Linux 中使用的默认 TCP

  • 检查 Linux 内核中的默认 TCP
$ sysctl net.ipv4.tcp_congestion_control

输出:

$ net.ipv4.tcp_congestion_control = cubic
  • 将 Linux 内核中的默认 TCP 更改为 Reno
$ sudo sysctl -w net.ipv4.tcp_congestion_control=reno

输出:

切换回 CUBIC 作为 Linux 内核中的默认 TCP

输出:

$ net.ipv4.tcp_congestion_control = cubic

启用 TCP 快速打开

  • 检查 Linux 内核中 TFO 的默认设置
$ sysctl net.ipv4.tcp_fastopen

输出

$ net.ipv4.tcp_fastopen = 1
  • 如果您的机器是服务器,则启用 TFO
$ sudo sysctl -w net.ipv4.tcp_fastopen=2

输出:

$ net.ipv4.tcp_fastopen = 2
  • 如果您的机器既是客户端又是服务器,则启用 TFO
$ sudo sysctl -w net.ipv4.tcp_fastopen=3

输出

$ net.ipv4.tcp_fastopen = 3
  • 禁用 TFO
$ sudo sysctl -w net.ipv4.tcp_fastopen=0

输出

$ net.ipv4.tcp_fastopen = 0 

启用慢启动重启拥塞控制算法

  • 检查 Linux 内核中 SSR 的默认设置
$ sysctl net.ipv4.tcp_slow_start_after_idle

输出

$ net.ipv4.tcp_slow_start_after_idle = 1
  • 禁用慢启动重启(对服务器很重要,对客户端不重要)
$ sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0

输出:

$ net.ipv4.tcp_slow_start_after_idle = 0

我们可以在Linux中给这个参数设置2、3等值吗?如果是这样,那是什么意思?

是的,我们可以设置等于 2 和 3 的值。值 2 表示机器的行为类似于服务器,值 3 表示机器的行为类似于客户端和服务器。值 1 仅表示机器充当客户端。

启用窗口缩放

  • 检查 Linux 内核中 TCP Window Scaling 的默认设置
$ sysctl net.ipv4.tcp_window_scaling

输出

$ net.ipv4.tcp_window_scaling = 1
  • 禁用 TCP 窗口缩放(不推荐,但尝试学习并重新启用)
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0

输出:

$ net.ipv4.tcp_window_scaling = 0

如何在 Linux 内核中找到默认窗口缩放

检查 Linux 内核中 Window Scaling Factor 的默认值

$ sysctl net.ipv4.tcp_adv_win_scale

输出

net.ipv4.tcp_adv_win_scale = 1 

这是 shift.cnt=1,比例因子=2 shift.cnt = 2

tcp_adv_win_scale

启用 SACK 选项

  • 检查 Linux 内核中 SACK 的默认设置
$ sysctl net.ipv4.tcp_sack

输出:

net.ipv4.tcp_sack=1
  • 在 Linux 内核中禁用 SACK 的默认设置
$ sudo sysctl -w net.ipv4.

输出:

net.ipv4.tcp_sack=0 tcp_sack

检查时间戳设置

  • 检查Linux内核中TIMESTAMPS的默认设置
$ sysctl net.ipv4.tcp_timestamps

输出

net.ipv4.tcp_timestamps=1
  • 在 Linux 内核中禁用 TIMESTAMPS
$ sudo sysctl -w net.ipv4.tcp_timestamps=0

输出

net.ipv4.tcp_timestamps=0 

检查低延迟设置:

  • 检查Linux内核中Low Latency的默认设置
$ sysctl net.ipv4.tcp_low_latency

输出

net.ipv4.tcp_low_latency=1
  • 在 Linux 内核中禁用低延迟
$ sudo sysctl -w net.ipv4.tcp_low_latency=0

输出

net.ipv4.tcp_low_latency=0 

检查默认缓冲区大小

  • 检查Linux内核中Buffer Size的默认设置
$ sysctl net.ipv4.tcp_rmem

输出

net.ipv4.tcp_rmem=4096    131072    6291456 

值按顺序排列:最小值默认最大值。 131072 字节 = 128 KB,是默认缓冲区大小。

默认缓冲区大小

检查 Linux 内核中可用和允许的 TCP:

  • 要查看可用的 TCP:
sysctl net.ipv4.tcp_available_congestion_control 

输出

net.ipv4.tcp_allowed_congestion_control= reno cubic
  • 查看允许的 TCP:
sysctl net.ipv4.tcp_allowed_congestion_control 

输出

net.ipv4.tcp_allowed_congestion_control= reno cubic 

检查 Linux 内核中的默认基本 MSS

  • 要查看默认的基本 MSS 值:
sysctl net.ipv4.tcp_base_mss

输出

net.ipv4.tcp_base_mss = 1024 

tcp_base_mss

检查 DUP-ACK 的默认值以快速重传丢失的数据包

  • 查看 DUP-ACK 的默认值:
sysctl net.ipv4.tcp_early_retrans

输出

net.ipv4.tcp_early_retrans = 3 

查看黑洞 TFO 的默认超时

  • TFO 的黑洞超时:
sysctl net.ipv4.tcp_fastopen_blackhole_timeout_sec 

输出

net.ipv4.tcp_fastopen_blackhole_timeout_sec = 3600

tcp_fastopen_blackhole_timeout_sec

重传次数

  • 不涉及网络层的数据包重传次数:
sysctl net.ipv4.tcp_retries1

输出

net.ipv4.tcp_retries1 = 3
  • 放弃前丢包的最大重传次数:
sysctl net.ipv4.tcp_retries2

输出

sysctl net.ipv4.tcp_retries2 = 15 

Linux 内核中的默认 KeepAlive 参数

  • 默认保活超时值:
sysctl net.ipv4.tcp_keepalive_time

输出

net.ipv4.tcp_keepalive_time=7200

当客户端没有主动向服务器发送请求时,服务器会等待 7200 秒。如果没有来自客户端的响应,则它将确认数据包发送给客户端。对于 7200 秒,服务器只是等待并且不会断开连接。

  • keepalive 探测的默认频率:
sysctl net.ipv4.tcp_keepalive_probes

输出

net.ipv4.tcp_keepalive_probes=9

当 7200 秒结束时,服务器发送第一条探测消息以查看客户端是否仍然连接。如果在发送第二个探测之前没有响应,则服务器再次发送探测消息。当所有 9 个探测都已发送且未收到来自客户端的确认时。然后服务器断开客户端的连接,套接字可供其他客户端使用。

  • 每个keepalive探测的默认时间间隔:
sysctl net.ipv4.tcp_keepalive_intvl

输出

net.ipv4.tcp_keepalive_intvl=75 

服务器将在 75 秒间隔后发送下一个探测。因此,服务器断开连接的不活动总时间为:- 7200+9*75 = 7875 秒。