首页 > 系统相关 >关于Linux内核4.12之前版本中, tcp_tw_recycle开启后NAT环境总是出问题的分析

关于Linux内核4.12之前版本中, tcp_tw_recycle开启后NAT环境总是出问题的分析

时间:2024-01-29 10:12:38浏览次数:23  
标签:4.12 SEQ 检查 tw tcp API NAT 服务器

  问题出现的场景很简单,nat网关下,有几台服务器,需要访问企业内部的某个的API服务器, API服务器上rcycle设置为1(4.12内核版本之前有这个设置,之后这个属性取消了,理论上也不会出现这种问题了),就在NAT下客户端并发量比较大的情况下,出现连接不上的情况(应该是SYN后,没有收到SYN ACK,连接被丢弃)。 特意深入了解了TCP的协议,进行问题分析。   首先,出现这种问题,是因为client机器的tcp_timestamps属性开启了(这里其实只要client开启了这个,服务端开不开tcp_timestamps,在传输中,在tcp协议的option字段下,会追加timestamp,这个属性其实比较有用,所以系统是默认开启的),同时,API服务器开启了 tcp_tw_recycle属性导致的。   先说明一下tcp_timestamps属性的作用。 内核协议栈中,有个PAWS的检查(好像是防止SEQ回绕),这个出现这个检查的原因是因为在每个TCP链接中,有一个SEQ序号的问题,这个需要在传输中是要递增的,如果一个长连接,不停的在传输数据,会导致SEQ一直增加,会出现增加到MAX的时候(忘了SEQ是几个字节,但总会出现所有位都是1的情况),再+1,就会又从0开始了,这样CLIENT和SERVER交互的时候,就会出现两边找不到对应SEQ的情况,所以,增加了时间戳,哪怕SEQ对不上,但只要后面的数据包的时间戳比之前的大,那这个数据包就是有效的,不会被丢弃。 (上面只是简单描述,实际上并不如此简单,只是说明,内核会增加这么一个检查,默认检查的是四元组的连接,并且,内核中,也有这种进出连接的缓存,方便快速检查。后面会针对PAWS检查,做更详细的文章。)    但是,如果服务器上开启了 tw_recycle,则会增加一个 per-host的PAWS检查,从名字上看,就是每主机检查,这里的“每主机”,却只通过ip地址来限定主机了,这就会导致NAT后面的服务器,如果时间不同步(哪怕时间同步了,依然会有很大概率时间戳上出问题),会导致连接API服务器的时候,会出现某些连接被丢弃的情况,就是因为从API服务器上看,NAT后面这些服务器发起的连接,被API服务器认为是一台主机发起的,这样子,再做timestamp检查的时候,出问题的概率就大了。 从协议栈的源码,很容易能看出些问题来。 https://github.com/torvalds/linux/blob/v3.10/net/ipv4/tcp_ipv4.c 找了内核3.10版本的源码来分析, 在 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb){ 函数中,有对应的检查逻辑。

if (tmp_opt.saw_tstamp &&
            tcp_death_row.sysctl_tw_recycle &&
            (dst = inet_csk_route_req(sk, &fl4, req)) != NULL &&
            fl4.daddr == saddr) {
            if (!tcp_peer_is_proven(req, dst, true)) {
                NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSPASSIVEREJECTED);
                goto drop_and_release;
            }
        }

  这里可以大概看出来,如果数据包中的option属性中,包含了tstamp(也就是如果client如果开了时间戳),且本地(服务端)tw_recycle属性也开启了,就从 inet_csk_route_req中取出  f14, 这里的inet_csk_route_req,有介绍说是出路由缓存,大概意思就是跟本次连接有关的上次传输(或者连接???)的信息吧???

然后紧接着比较了f14的目标IP和本次请求的来源IP, 按照出路由,那么目标IP肯定是NAT的外网IP, 而本次请求的来源IP,自然也是NAT的IP

那么,只看IP地址相同,就会进入tcp_peer_is_proven,这里面会检查时间戳,自然就会出现如果时间戳有差异,会被API服务器丢弃连接的情况了。

这个问题,其实很多人都在网上有分析过,但是,看了不少文章,很少有人把per-host PAWS检查明确的解释为只检查两次连接的IP,就会继续检查时间戳。

当然,这个问题,也是因为自己对内核的一些逻辑实在不清楚导致的,也许大家的知识储备中,对这种情况十分清楚,导致文章里,也仅是一笔带过。

这个分析里,依然很多细节都不清楚:

 PAWS具体是为了解决什么问题?

 SEQ到底如何递增到最大值?

 INET_CSK_ROUTE_REQ函数的具体功能和逻辑是什么?

这些留待之后有时间,再继续深入了。

标签:4.12,SEQ,检查,tw,tcp,API,NAT,服务器
From: https://www.cnblogs.com/davytitan/p/17993856

相关文章

  • 自定义httpServletRequestWrapper导致上传文件请求参数丢失
    问题背景项目是SpringBoot单体式,在项目中,为了实现调用controller请求的日志记录功能。因此做了以下配置:创建自定义拦截器LogInterceptor;因为需要使用到流获取请求参数,解决流只能读一次问题,所以需要自定义HttpServletRequestWrapper;需要使得自定义HttpServletRequestW......
  • CF1433E Two Round Dances 题解
    题目传送门前置知识圆排列解法\(\dfrac{Q_{n}^{\frac{n}{2}}Q_{\frac{n}{2}}^{\frac{n}{2}}}{A_{2}^{2}}\)即为所求。同时因为\(n\le20\)和没有模数,所以不需要处理逆元,暴力算即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineu......
  • SpringBoot启动项目报错:java.lang.UnsatisfiedLinkError: D:\files\software\jdk-1
    目录问题描述解决方法:问题描述在运行向的时候出现报错:java.lang.UnsatisfiedLinkError:D:\files\software\jdk-15.0.1\jdk-17.0.3.1\bin\tcnative-1.dll:Can'tloadIA32-bit.dllonaAMD64-bitplatform atjava.base/jdk.internal.loader.NativeLibraries.load(Native......
  • Comparison between IPQ9574 and IPQ9554 | MLO EHT Solution Unveils the WiFi 7 CPU
    ComparisonbetweenIPQ9574andIPQ9554|MLOEHTWiFi7QualcommSolutionUnveilstheWiFi7CPUforIndustrialApplications-AlderSeriesWi-Fi7elevateswirelessexperiencesandwillaccelerateemergingusecaseswithitsextremedataspeedsandconsis......
  • 《Visual Tree Convolutional Neural Network in Image Classification》阅读笔记
    论文标题《VisualTreeConvolutionalNeuralNetworkinImageClassification》图像分类中的视觉树卷积神经网络作者YuntaoLiu、YongDou、RuochunJin和PengQiao来自国防科技大学并行和分布式处理国家实验室初读摘要问题:在图像分类领域,随着深度学习的快速发展,卷......
  • 2024AAAI_SGNet Structure Guided Network via Gradient-Frequency Awareness for Dep
    1.任务描述: 给定输入LR深度图和HRRGB图像,引导DSR目的是在ground-truth深度图监督的条件下,预测HR深度图2.Network本文提出的SGNet主要包括两部分,即梯度校准模块(GCM)和频率感知模块(FAM)。首先将RGB图像和上采样后的LR深度图送入到GCM,利用RGB丰富的梯度信息在梯度域中......
  • Windows远程桌面不能共享剪贴板-Todesk&向日葵&TW等都可以解决
    大家常会遇到mstsc远程桌面的时候,本地和远程之间不能够复制和粘贴文本内容,大家可能会很疑惑,我远程的时候明明在“本地资源”里面勾选了“剪贴板”,但为什么还不能用,原因就是因为“rdpclip.exe”这个进程没有正常工作。解决办法:在服务器上打开任务管理器(Ctrl+Alt+Del),查看......
  • 【AnaTraf 分享】什么是 AnaTraf?为什么设计 AnaTraf?
    网络流量分析与AnaTraf“2013年,网络流量分析技术(NTA,NetworkTrafficAnalysis)的概念被首次提出,在2016年逐渐兴起。2017年,NTA被Gartner评选为2017年十一大信息安全新兴技术之一,同时也被认为是五种检测高级威胁的手段之一。基于流量的安全能力始终都受到关注。安全研究人员一直......
  • 机器人的运动控制是否可以引入生物学信息,生物学信息是否可以辅助机器人的智能控制算法
    相关内容:Roboticprostheticanklesimprove'natural'movement,stability看了上面的论文的介绍(内容没看到,不是openaccess论文),论文的主要思想就是利用人体腿部的神经信号来控制假肢脚踝的控制,从而使单侧下肢截肢后使用假肢的人获得更好的行动稳定性。这个研究的实验......
  • 30V、单 N 沟道NTMFS4C908NAT3G、NTMFS4C910NAT3G功率 MOSFET
    NTMFS4C908N、NTMFS4C910NN沟道MOSFET是30V、单N沟道功率MOSFET,具有低RDS(on)值和低电容,可最大限度地降低导通和驱动器损耗。这些MOSFET采用8-SOFL封装尺寸,设计紧凑。MOSFET符合AEC-Q101标准并具有PPAP功能典型应用包括电池保护、电机控制、电源开关、开关电源、负载开关和电磁......