首页 > 其他分享 >TCP内核参数的简单验证

TCP内核参数的简单验证

时间:2023-01-30 22:34:56浏览次数:36  
标签:10.110 grep 136.50 验证 tcp TCP 5200 内核 139.230

前言

春节假期时学习了下内核参数与nginx的调优
最近因为同事遇到问题一直没有解,自己利用晚上时间再次进行验证.
这里将几个参数的理解和验证结果简单总结一下.
希望能够在学习的过程中将问题解决掉. 

其实很后悔没有好好学习代码.现在很多问题都已经到了瓶颈期
无法深入的研究下去. 

参数一

  • net.ipv4.tcp_max_tw_buckets
先说一下基本的结论:
CentOS默认的值: 262144
阿里云虚拟机的默认值: 5000
华为云虚拟机的默认值: 5000
腾讯云虚拟机的默认值: 131072

在简单描述一下这个参数的作用: 
在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,
不会有新的 TIME_WAIT 产生。

类似 Nginx 之类的中间代理一定要关注这个值,因为它对你的系统起到一个保护的作用,
一旦端口全部被占用,服务就异常了。 
tcp_max_tw_buckets 能帮你降低这种情况的发生概率,争取补救时间。
学习来源: https://www.jianshu.com/p/b7e991be0909

我这边理解就类似于 JVM里面GC over limited的处理机制相仿. 
能够快速重用部分端口, 避免无端口可用无法建立新连接. 

参数二

  • net.ipv4.ip_local_port_range
这个参数 云计算和CentOS的默认值出奇的一致: 
32768    60999
第一个参数代表随机端口的下限
第二个参数代表建立TCP连接时端口的上限
C10K甚至是C100K的很多优化里面都是需要改这个参数的

TCP是有四元素 local_ip local_port remote_ip remote_port 
来唯一确认一个TCP连接的.
理论上一个TCP的LISTEN的监听端口可以建立很多个TCP连接的. 

参数三

  • net.ipv4.tcp_tw_reuse
个人感觉这个参数其实是存在一定风险的
可能会导致错误的TCP连接.
但是理论上 linux内核有TCP状态的检验还有TCP的序列号进行串行化处理
几乎零可能性的出现严重的数据问题. 

一个简单的进行验证的脚本

echo "443:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :443 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`
echo "5000:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :5000 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`
echo "5200:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :520 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`

可以定量分析不同端口的连接信息. 

内核参数的验证-1

修改内核参数
sysctl -w "net.ipv4.tcp_max_tw_buckets=50000"
登录系统进行分析查看time wait的TCP数量. 
[root@openeuler2203 ~]#  netstat -anop |grep tcp |grep -v LISTEN |grep -v :637 |grep -v :884 |grep -v :1521 |grep -v tcp6 |grep -v :22 |grep :5200
tcp        0      0 10.110.139.230:5200     10.110.136.50:57506     TIME_WAIT   -                    timewait (0.71/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:37506     TIME_WAIT   -                    timewait (57.65/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:37604     TIME_WAIT   -                    timewait (57.94/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:57490     TIME_WAIT   -                    timewait (0.70/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:37708     TIME_WAIT   -                    timewait (58.02/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:37696     TIME_WAIT   -                    timewait (58.02/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:37630     TIME_WAIT   -                    timewait (57.96/0/0)
tcp        0      0 10.110.139.230:5200     10.110.136.50:57538     TIME_WAIT   -                    timewait (0.75/0/0)

发现会有40条 time wait的 tcp连接. 
最后一列是等待终结的time wait的tcp连接 等到所有的连接都停止后再次修改内核参数
sysctl -w "net.ipv4.tcp_max_tw_buckets=10"
# 注意我这种修改仅是验证问题, 没有生产适用性. 
# 注意每次测试至少要等待60秒等待之前的tcp连接终结. 

再次执行登录简单测试,效果为:
[root@openeuler2203 ~]#  netstat -anop |grep tcp |grep -v LISTEN |grep -v :637 |grep -v :884 |grep -v :1521 |grep -v tcp6 |grep -v :22 |grep :5200
tcp        0      0 10.110.139.230:5200     10.110.136.50:59150     ESTABLISHED 716321/nginx: worke  off (0.00/0/0)

发现没有再次生成 time wait的连接
# 注意这个参数是整个操作系统所有的time_wait的连接数 不单纯是一个端口的. 所以10个肯定是不够用的. 

内核参数验证-2

直接修改参数: 
sysctl -w "net.ipv4.ip_local_port_range=3000 4000"
# 注意结果可以与内核参数验证-1 里面的结果进行对照. 
# 注意需要修改回 bucket的数据避免测试失效. 
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp        0      0 10.110.136.50:3508      10.110.139.230:5200     ESTABLISHED 3872246/nginx: work  off (0.00/0/0)
tcp        0      0 10.110.136.50:31062     10.110.139.230:5200     TIME_WAIT   -                    timewait (51.06/0/0)
注意可以再次修改一下 端口信息再次进行验证
sysctl -w "net.ipv4.ip_local_port_range=5000 5100"
测试结果为: 
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp        0      0 10.110.136.50:5096      10.110.139.230:5200     ESTABLISHED 3872246/nginx: work  off (0.00/0/0)
tcp        0      0 10.110.136.50:3508      10.110.139.230:5200     TIME_WAIT   -                    timewait (55.94/0/0)
仅仅是执行了一下刷新动作. 
就会看到上面一个3508 local 的本地端口开始进入time_wait状态
新建立的连接的local_port 就是 5096  
sysctl -w "net.ipv4.ip_local_port_range=5000 5050"
效果也是完全一致符合猜测. 
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp        0      0 10.110.136.50:5096      10.110.139.230:5200     TIME_WAIT   -                    timewait (56.10/0/0)
tcp        0      0 10.110.136.50:5008      10.110.139.230:5200     ESTABLISHED 3872246/nginx: work  off (0.00/0/0)

# 需要注意 修改改端口仅影响 第四列的本地连接信息, 不会影响第五列的外部连接信息
# 外部的需要是一个 监听端口为主. 

标签:10.110,grep,136.50,验证,tcp,TCP,5200,内核,139.230
From: https://www.cnblogs.com/jinanxiaolaohu/p/17077436.html

相关文章

  • AJAX jsonp实践(验证用户名是否存在)
    视频HTML<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><ti......
  • tcp/ip详解之04 以太网和802.3封装
    1.以太网和802.3封装在TCP/IP世界中,以太网IP数据报的封装是在RFC894[Hornig1984]中定义的,IEEE802网络的IP数据报封装是在RFC1042[PostelandReynolds1988]中定义的。......
  • tcp/ip详解之03 ip首部
    1.ip首部4个字节的32bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作bigendian字节序。由于TCP/IP首部中所有的二进制整......
  • rpa使用muggle_ocr自动识别验证码
    1.安装包pip3installrpa=1.48.1pip3installmuggle-ocr=1.0.3如果muggle-ocr使用pip3安装不了,只能手动安装。百度网盘:https://pan.baidu.com/s/1K3Tq9Vz-u3oQ8tWU......
  • 验证码的几种处理方式
     针对验证码有如下方法:1>在产品没有上线前,需要找开发先给web验证码留后门,也就是将验证码验证先注释掉2>让开发给web验证码留一个万用验证码,只要输入给定的验证码,就可以......
  • tcp/ip详解之02 tcp/ip封装
    1.tcp/ip封装 当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要......
  • tcp/ip详解之01 tcp/ip协议分层
    摘自tcp/ip详解3卷1. tcp/ip协议分层1)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆......
  • 查看系统版本 内核信息
    cat/proc/versionLinuxversion4.4.0-131-generic(buildd@lgw01-amd64-015)(gccversion5.4.020160609(Ubuntu5.4.0-6ubuntu1~16.04.10))#157-UbuntuSMPThuJu......
  • tcpdump常用参数说明及常见操作
    tcpdump常用参数说明及常见操作-a将网络地址和广播地址转变成名字-c指定抓包的数量-d将匹配信息包的代码以人们能够理解的汇编格式给出-d......
  • TCP/IP五层体系结构之物理层
    作用:确定传输媒体和接口有关的一些特性,例如电气特性、机械特性和电气特性等。物理层的传输媒体:传输媒体也称为传输介质或传输媒介,它就是数据传输系统中在发送器和接收器......