当前位置: 首页 > news >正文

如何绕开运营商的 QoS 限制

运营商针对 UDP 进行限制,这是 QUIC 以及类似 UDP-Based 协议的推广阻力之一,上了线很多问题,丢包,慢等的问题严重增加运维,运营成本。

按照运营商五元组 QoS 这种简单粗暴不惹事的原则,只要换一个端口就可绕开限制。很多 UDP 服务,用久了就慢,往往重启一下就好了,大概就是这原因,我不是运营商,所以不能确定。

此外,若限制单 IP 或源 IP/目标 IP 二元组,考虑到 NAT,可能引起用户投诉,所以如果要限制 IP 二元组,一般发生在 NAT 之前。

千万不要觉得运营商在公网大流量下解析 TCP,UDP 报头是什么难事,TCP 和 UDP 报头均将两个端口号放在前 32 位,解析两个协议可用同一套代码,从固定位置取值 hash 即可。如果 TCP 当初将端口号安排在报头变长部分,或者干脆和 payload 一起加密,就真没法解析了,运营商就没办法将数据包映射到流。但这也损害了端主机的分层模型-必须在解密后才能解复用(密钥从何协商而来?),或至少要先 “理解” 上层逻辑,从 TLV 中解出端口…

UDP-Based 协议的优势是可随便换端口,可这么好的特性往往大家都不用,偏偏把 UDP 视作 “连接”。QUIC 头有个 Connection ID 字段,这个才标识 “连接”,UDP packet 只是一个箱子,所以 QUIC 可以通过不断换端口来避开 QoS 限制。若是自研协议,可以学 QUIC 的样子换端口,加个 “会话层” 而已。

我此前的经验,换端口有时没有效果有时有,限速发生在不同位置效果不同。举个例子,如果运营商对你的流量做了 NAT,且在 NAT 之前针对你的源 IP/目标 IP 二元组限制,那换端口也没用,但在 NAT 之后,多 inner IP 共享少得多的 outer IP,典型的 NAPT 场景,运营商一般不会对 IP 二元组进行限制以免误伤招致投诉甚至客户流失,这种情况下,你换端口,基本上就绕过了。

此外,IPv6 可能还不太一样,虽然 IPv6 号称可以点到点,但同时也可以更精细定位到谁是谁。

在 QoS 限制五元组之外,运营商还可能针对目标端口进行限制。由于 UDP 无连接,易打洞的特点,在公网私搭服务器是相对容易的,但凡运营商发现有大流量发向同一端口,可能就会限制了。关于目标端口要不要换的问题,能换就换。
我倾向于在传输层以上实现自己的换端口协议,无论换源端口还是换目标端口,就像 QUIC 那样。

再看 TCP。

TCP 自带拥塞控制,sender 发太猛会丢包,丢包会乘法比例减少 cwnd,似乎不需要额外 QoS 限制。但运营商的事该做还得做,且谁也不能保证 sender 的 TCP 实现一定标准,现在有很多魔改,如一个报文发两遍,所谓 FEC 就是这样跟运营商对着干,抢带宽。

运营商 QoS 手段很简单,跟 UDP 一样,直接针对元组限速或丢包(也可能是管理员疏忽或懒惰,加上的限制策略忘删了)。应对方案也一样,断开重连,换个端口。但由于很多应用都没断点续传,TCP 重连成本很高,虽有 fastopen 新特性,但运营商设备往往不支持。

但可构建 TCP 隧道,实现类似直播的延时 buffer,断点续传,通过这个方法重连 TCP 隧道,达到换端口的目的。或构建多条隧道实现平滑切端口。

TCP 四次挥手太昂贵,Time-Wait 没现实意义,为降低 TCP 断连成本,选择 RST 而不是优雅断开是高尚的。

TCP 为闭环,处理 SYN/FIN 状态机最麻烦,如果经常和 TCP 打交道,80%+ 的问题都和连接管理相关,但 TCP 连接管理标准中想避开的问题发生概率极低。不为小概率事件付出太多,这是 RST 断连的依据。fastopen 运营商不支持也没办法,但还是要试一下 SYN 报文携带一些数据能不能过去,我用该手段做过一个敲门方案,完全可以通过(但不能保证所有线路都可通过),如果对端是自己的,那就收了,省掉握手开销。

换端口,RST 重连,SYN 捎带,这些都是简单常见的绕开限制的方法,至于别的一些奇技淫巧,参考 TCP 不可靠传输 和 假 TCP。

浙江温州皮鞋湿,下雨进水不会胖。

相关文章:

如何绕开运营商的 QoS 限制

运营商针对 UDP 进行限制,这是 QUIC 以及类似 UDP-Based 协议的推广阻力之一,上了线很多问题,丢包,慢等的问题严重增加运维,运营成本。 按照运营商五元组 QoS 这种简单粗暴不惹事的原则,只要换一个端口就可…...

C#基础教程22 异常处理

文章目录 C# 异常处理语法C# 中的异常类异常类 描述异常处理创建用户自定义异常C# 异常处理 异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理…...

java八股文--java基础

java基础1.什么是面向对象,谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…...

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块第四套解析(详细)

2022年全国职业院校技能大赛(中职组) 网络安全竞赛试题 (4) (总分100分) 赛题说明 一、竞赛项目简介 “网络安全”竞赛共分A.基础设施设置与安全加固;B.网络安全事件响应、数字取证调查和应用安全;C.CTF夺旗-攻击;D.CTF夺旗-防御等四个模块。根据比赛实际情况,竞…...

【Spark】spark使用jdbc连接带有kerberos认证的hive jdbc

背景 这个需求就是spark不通过spark-hive的方式访问hive数据,而是通过spark读取hive jdbc的方式访问hive数据,因为这个hive有kerberos认证,在网上也不是很容易搜索到这样的操作案例。不多bb,直接上教程。 准备工作 准备一个hiv…...

【Maven】项目中pom.xml坐标定义以及pom基本配置

目录 一、pom.xml坐标定义 二、pom 基本配置 一、pom.xml坐标定义 在 pom.xml 中定义坐标&#xff0c;内容包括&#xff1a;groupId、artifactId、version&#xff0c;详细内容如下&#xff1a; <!--项目名称&#xff0c;定义为组织名项目名&#xff0c;类似包名-->&l…...

Linux GCC 编译详解

文章目录一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、windows 下…...

谁说程序员不懂了浪费,女神节安排

Python的PyQt框架的使用一、前言二、女神节文案三、浪漫的代码四、官宣文案一、前言 个人主页: ζ小菜鸡大家好&#xff0c;我是ζ小菜鸡&#xff0c;特在这个特殊的日子献上此文&#xff0c;希望小伙伴们能讨自己的女神欢心。 二、女神节文案 1.生活一半是柴米油盐&#xff0c…...

上市公司管理层短视指标(2007-2020)

1、数据说明&#xff1a;将研发⽀出的减少量&#xff08;∆R&D&#xff09;作为管理层短视⾏为的度量指标&#xff0c;即∆R&D为公司t年的研发⽀出减去t-1年的研发⽀出并除以t-1年末的总资产再乘以100。2、数据来源&#xff1a;自主整理3、时间跨度&#xff1a;2007-20…...

IDDPM 和 DDIM 对比

IDDPM 和 DDPM 对比IDDPMDDIMIDDPM IDDPM&#xff1a;Improved Denoising diffusion probabilistic models learning Σθ\Sigma_{\theta}Σθ​&#xff0c; 即Σθ(xt,t)exp⁡(vlog⁡βt(1−v)log⁡β~t)\Sigma_{\theta}\left(x_{t}, t\right)\exp \left(v \log \beta_{t}(1…...

链表OJ题(上)

✅每日一练&#xff1a;876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 定义快慢指针&#xff0c;让快指针走2步&#xff0c;慢指针走1步&#xff0c;当fast或者fast.next为空时&#xff0c;走完链表&#xff0c;此时slow就是中间位置 pub…...

【题解】百度2021校招Web前端工程师笔试卷(第一批):单选题、多选题

题目来源&#xff1a;牛客网公司真题_免费模拟题库_企业面试|笔试真题 (nowcoder.com) 若有错误请指正&#xff01; 单选题 1 某主机的 IP 地址为 212.212.77.55&#xff0c;子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组&#xff0c;则目的地址可以是&…...

论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description

发表时间: 2018年 项目地址&#xff1a;https://arxiv.org/abs/1712.07629 论文地址&#xff1a;https://github.com/magicleap/SuperPointPretrainedNetwork 本文提出了一种用于训练计算机视觉中大量多视点几何问题的兴趣点检测器和描述符的自监督框架。与patch-based的神经网…...

游戏玩的多,陪玩你了解的多吗?用Python来采集陪玩数据,看看行情和美照

前言 (&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨 大家好 现在应该每个人都玩过游戏吧&#xff0c;有些的上瘾&#xff0c;天天玩停不下来&#xff0c;有些的倒是没啥感觉 有游戏就肯定有陪玩啊&#xff0c;毕竟当朋友忙的时候&#xff0c;自己一个…...

React框架创建项目详细流程-项目的基本配置-项目的代码规范

文章目录React创建项目流程与规范项目规范项目配置目录结构样式重置Router配置Redux状态管理axios配置React创建项目流程与规范 项目规范 项目规范: 在项目中都会有一些开发规范和代码风格, 下面介绍一下我采用的规范与风格 文件夹、文件名称统一小写、多个单词以连接符(-)连…...

nnunet入门之一 (CT图像分割)

目录安装环境数据处理预处理训练测试MIC-DKFZ/nnUNet 选择Linux环境运行该项目&#xff0c;Windows环境需要更改较多的参数&#xff0c;暂不支持。 安装环境 安装cuda, cudnn&#xff0c;已安装的检测cuda版本 检测cuda版本&#xff1a; nvcc -v cd /usr/local nvidia-smi&…...

从0到1_批量下载视频

简介&#xff1a;真实从0到1&#xff0c;童叟无欺&#xff5e; 目标&#xff1a;用python批量下载搜索视频&#xff0c;以“CG 服装”为例 搜索图片就不放啦&#xff0c;不能过审 本章主要介绍如何用python把搜索到的视频直接下载到自己的本地文件夹中&#xff5e; 介绍一下工作…...

CNCF x Alibaba云原生技术公开课 第十二章 可观测性:监控与日志

1、监控 监控类型 资源监控&#xff1a;cpu、内存、网络等。性能监控&#xff1a;apm监控&#xff0c;一般是通过一些 Hook 的机制在&#xff0c;在虚拟机层、字节码执行层通过隐式调用&#xff0c;或者是在应用层显示注入&#xff0c;获取更深层次的一个监控指标&#xff0c…...

C语言宏定义几个问题

1.#define Ant A虽说做的是将代码中Ant替换成A&#xff0c;但是是整体的替换&#xff0c;不能将整体分离替换。 不带宏参定义一般形式如下&#xff1a; 格式&#xff1a; #define 标识符 字符串 其中“标识符”为所定义的宏名&#xff0c;“字符串”可以是常数、表达式、格式串…...

王道计算机组成原理课代表 - 考研计算机 第二章 数据的表示和运算 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 数据的表示和运算 章节知识点总结的十分全面&#xff0c;涵括了《计算机组成原理…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…...