Extension
liulilittle
如果我只是恨你,那该多好;这一生,终究没能逃出这囚笼;也好,但愿此去,能化归烟云浮尘;逍遥天地,再无拘束。
展开
-
闲聊:最近想要做一个用在网络游戏领域的网络控制协议小玩具,大体聊聊构思的想法
但,我们通常预期目标都是为了减少网络抖动、只要产生丢包,那么网络抖动就会非常严重,而且在现代网络之中,因为路由跃点之间的不同,客户端到服务器之间的网络路由是随时波动的,即便路由没有变动,也会因为路由本身的QOS管理策略,导致帧的先后顺序发生改变(即乱序问题)产生抖动问题,因为若客户端需要排序,那么在收到来自未来帧时,是先缓存在接收方队列之中,等待确认帧(包)的到达,在这个空窗期就会产生抖动问题。我在上篇文中没有着重的探讨这个问题,而是说推迟确认(延迟1毫秒)都是为了解决,类似如这个SWS糊涂窗口问题。原创 2024-04-24 12:07:45 · 602 阅读 · 0 评论 -
如何正确设计 TCP/IP 流式应用层网络协议
在我多年打黑工的职业生涯之中,除了在盛大游戏出身的半个老师(做游戏服务器的)曾今深入的教过我,关于正确的 TCP/IP 流式应用层网络协议的设计理念,前往其它公司打黑工、包括一些的开源项目,见识到的 TCP/IP 应用层网络协议设计似乎都有一些潜在问题。正确的 TCP/IP 协议读入是片段读入的,而不是直接读入一个完整帧头,这是不正确的,因为你并不知道这个帧是否为伪造的,如果你完整读入,那么在这个帧头没有完整被读取完毕之前,程序都将处于 pending 状态,而持有的资源也没有办法得到释放。原创 2024-04-20 13:29:19 · 992 阅读 · 0 评论 -
Windows 平台上面管理服务器程式的高级 QoS 策略
在 Windows 平台,自进入 Windows Vista / Windows 2008 Server 开始就不允许用户通过,标准SOCKET API 接口来设置链路 QOS 策略了,但 Vista/7/2008/8 好歹对系统注册表解禁重启,还能用,但是 Windows 2012 RC2、Windows 8.1(build 9200)开始根本就不行,只能通过 QoS2 接口调用来设置。9、策略命随便写,DSCP值(0~63)写 26 就可以(它就是:FLASH 报文优先级)4、点击基于策略的 QoS。原创 2024-04-19 13:53:13 · 420 阅读 · 1 评论 -
如何合理利用多个中国大陆小带宽服务器?
我们要做的轻量的控制算法,即:只需要保证帧的序及帧缓存积压的问题,就可以,另外我推荐用TCP/IP作为下一层,因为KCP这些协议不适合传输大包,它们是为了小包及时性设计的,所以可以容忍20~30%的带宽损失。但积压大量的帧缓存,可能会产生很高的网络延迟,这是控制协议的弊端,但是你还真的自己好好做下控制协议,若你不在自己这层控制,让UDP/IP的应用去自己去处理这些问题,它们的传输效率就会非常慢的。带宽退让是滑块窗口与重传这部分关联的算法,目的是为了平衡链路拥塞层度,这些可以用成熟现成的控制算法来实现它们。原创 2024-04-18 12:47:24 · 585 阅读 · 0 评论 -
Linux 软路由命令行配置(参考)
允许任何地址到任何地址的确认包和关联包通过。# 默认丢弃转发,所有内网流量不能访问外网卡。# 开放某个ip的转发,允许上网。# 仅允许访问223.5.5.5。# SNAT 源地址转换。# 仅允许访问80端口。原创 2024-04-13 14:24:16 · 281 阅读 · 0 评论 -
Linux 上面模拟网络丢包率(命令)
1、模拟20%入站丢包率。1、模拟30%入站丢包率。3、模拟20%出站丢包率。4、模拟30%出站丢包率。原创 2024-04-13 13:21:14 · 256 阅读 · 0 评论 -
初识开源项目 openppp2
2、OPENPP2 为控制台窗口程式,开源项目的作者,并不提供移动端APP产品,仅提供嵌入式框架类库基本支援,想要移动端APP的人们,需自行定制构建并且实现它,但这与开源维护作者们之间毫无关联。该工具链对多数人并不友好,上手门槛相对高,工具作者本人,反对并抵制普通及一般性非专业用户,不欢迎有前科、或心怀不轨、愚不可及的人们适用它,否则产生的一切后果自负,工具链作者们概不负责。2.2、Linux 平台上面,Intel Atom™ X5 Z8300/Z8350,启用SSMT技术的情况下,全核四百兆吞吐速度。原创 2024-04-08 14:46:59 · 411 阅读 · 0 评论 -
删除我的电脑中“C盘瘦身专家”图标(流氓软件)
找到包含 “C盘瘦身专家” 得注册表项,然后直接删除,刷新桌面浏览器,就可以看到图标被删除了,国内做好软件不行,搞流氓软件倒是有一绝,正常从市场安装软件都得中招,玛德。计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer。用联想电脑管家强制先卸载掉该软件,然后以管理员身份打开注册表(regedit)原创 2024-04-08 12:00:32 · 318 阅读 · 0 评论 -
Linux 命令显示网络接口IP地址,可以在谷歌/甲骨文云shell上运行
显示当前网络接口IP。原创 2024-03-31 20:27:24 · 336 阅读 · 0 评论 -
Linux systemd 配置为守护(daemon)运行模式
在 CentOS7、Ubuntu 16及以上版本均支持 systemd 配置,但需要注意:systemd 配置运行对应用程序有一定限制,这些被运行ELF程式必须考虑在 systemd 环境下工作的兼容性。操作命令及配置文件;原创 2024-03-31 20:23:23 · 269 阅读 · 0 评论 -
Ubuntu 16.04/18.04 LTS内核降级及通过GURB指定内核
4.4.0-47内核是最后一个可以安装 “锐速 ServerSpeeder” 的内核版本。有些时候是没法删除内核实现轻松降级的,这个时候就需要修改gurb配置文件指定内核启动,但这就需要以下的命令配合了。GRUB_DEFAULT=0 表示首选内核(看dpkg -l|grep linux-image 列出来的排序)重定向语句写作:($menuentry_id_option>指定内核ID)先列出所有的内核,把$menuentry_id_option的值复制出来。列出当前安装的所有LINUX内核。原创 2024-03-31 20:18:27 · 565 阅读 · 0 评论 -
修改系统进程资源配额(默认)
reboot(重启生效)。原创 2024-03-31 20:01:51 · 90 阅读 · 0 评论 -
Linux 查看各个进程打开文件描述数量
第一列:“打开文件描述符句柄数量”第二列:“进程ID”原创 2024-03-31 20:00:44 · 354 阅读 · 0 评论 -
Ubuntu 安装GDB调试器(手动下载 dep 文件安装,有些时候 apt 不可用)
wget http://kr.archive.ubuntu.com/ubuntu/pool/main/b/babeltrace/libbabeltrace1_1.3.2-1_amd64.debwget http://kr.archive.ubuntu.com/ubuntu/pool/main/b/babeltrace/libbabeltrace-ctf1_1.3.2-1_amd64.debwget http://security.ubuntu.com/ubuntu/pool/main/g/gdb/gdb原创 2024-03-31 19:57:38 · 573 阅读 · 0 评论 -
常用VPS服务器检测脚本
老版脚本:wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh"新版脚本:bash原创 2024-03-31 19:56:27 · 391 阅读 · 0 评论 -
CentOS7 RPM升级支持BBR TCP/CC的内核版本
Fedora/CentOS 系统修改内核保有量(installonly_limit=3)本命令设置系统最大可安装保留内核数量,超出后会删除并卸载版本最低的那个内核。原创 2024-03-31 19:54:23 · 190 阅读 · 0 评论 -
ubuntu 18.04 LTS 安装多个CPU平台GCC交叉编译器工具链
目标平台;aarch64amd64armv7ls390xmipselriscv64编译器名;原创 2024-03-31 19:16:23 · 323 阅读 · 0 评论 -
MTU网络大小
1492 是PPPoE的最佳MTU大小,因为PPPoE(拨号链接/宽带链接/家宽光猫)会在头上增加8个字节用来做PPPoE的帧头,所以1500-8=1492的MTU。1472是PING带包最大值(MSS),大于该值的ICMP包会被分包,但是这个要看IP头是不是固定20字节,指的是IPV4哈,IPV6只有1452。MTU是路由器最大传输单元(指L3网络层最大帧大小),IP包超过这个MTU大小设定就会走分片流程,MTU最大为1500字节。V4:最大TCP MSS是:1460(20-20)原创 2024-03-23 11:17:44 · 264 阅读 · 0 评论 -
网络QUIC测试方法。
3、 在海外网络环境之中,大家访问海外知名互联网视频媒体网站,通常可以QUIC/HTTP3.0协议来传输DASH块,例如:YouTube(油管)QUIC在HTTP/S的端口为:80/443, UDP端口两种(固定的)不存在其它端口,非QUIC协议公标端口不用去管它们。通过Wireshark抓包,UDP可以看到QUIC IETF的协议字样,QUIC默认最大一帧通常为1250字节载荷。2、访问H3/泛播测试网站,按F12打开开发人员控制台,切换到网络这一项,把协议显示右键菜单点出来,刷新网页。原创 2024-03-21 10:47:12 · 400 阅读 · 0 评论 -
多核编程之中关于死锁的问题
我不是很推荐在低U配置(就是单核)机子上面使用自旋锁这样的东西,这是因为在这些机子上面,会直接死锁并且系统几乎被完全挂起,但它并不违背锁的四个必要先决条件,仅仅只是因为两个自旋锁占用了大量的CPU,几乎没有空闲CPU时间用于等待后台事件完成。Actor 模式也是个可行的多核编程,可行的设计模式,还是要看开发人员对于多线程编程掌握程度,多线程这个东西,玩的好人会玩的非常好,玩的很差的人,其下限这块没法看。而链接的锁是内部自治的,那么通常不会产生死锁的问题,当然,除此以外还有其它的办法。原创 2024-03-12 14:13:44 · 374 阅读 · 0 评论 -
Linux shell 计算磁盘大小函数实现
调用该 shell 脚本函数并获取管道输出的内容:shell变量=$(calc_disk_size)源实现,返回最小单位是GB,人们可以自行参考下述 shell 脚本代码。原创 2024-03-11 12:13:48 · 424 阅读 · 0 评论 -
Linux shell VM虚拟机类型检查脚本函数(支持WSL、WSL2)
对于,开源脚本这个函数的扩展修改,其它用户都可以将这段代码直接移植到自己的脚本程序之中,并且调用使用它。如果期望管道捕获它输出的值,则这么调用即可:shell变量=$(virt_check)原创 2024-03-11 12:10:27 · 383 阅读 · 0 评论 -
Linux Shell 编程强制字符串转换为数字,而不报错。
【代码】Linux Shell 编程强制字符串转换为数字,而不报错。原创 2024-03-11 12:04:28 · 480 阅读 · 0 评论 -
Linux shell IPV4子网判断实现
源代码:(及测试用例)原创 2024-03-08 22:41:26 · 329 阅读 · 0 评论 -
Linux shell 网络掩码地址转CIDR
【代码】Linux shell 网络掩码地址转CIDR。原创 2024-03-08 22:25:46 · 542 阅读 · 0 评论 -
Linux shell CIDR转网络掩码(cidr_to_netmask)
【代码】Linux shell CIDR转网络掩码(cidr_to_netmask)原创 2024-03-08 22:22:10 · 333 阅读 · 0 评论 -
Linux shell 列举当前所有网卡的IPV4地址及网卡名。
忽略 lo 环路网卡。原创 2024-03-08 22:15:07 · 451 阅读 · 0 评论 -
记录:DPDK 22.11.2 LTS在WSL/2 Ubuntu 18.04 LTS上面编译
2.1、Ubuntu 18.04 LTS 上面自带 ninja 工具链。1、下载 DPDK 发行版本源代码,最好先找到 LTS 版本(即长期支援版本)本文编译DPDK版本为:DPDK 22.11.2 LTS。如果要安装编译出来的程序工具链到操作系统之中, 就执行下面的语句。2.2、不可用下述的命令行安装 meson 工具链。先回到DPDK源代码跟目录:(DPDK需要设置大页内存)2、下载依赖工具链:meson、ninja。3、切入到DPDK源代码目录内,开始编译。ldconfig # 链接动态库。原创 2024-03-07 12:58:58 · 506 阅读 · 0 评论 -
LINUX内核打开IPV4分片支援。
在某些LINUX系统上面IP分片是被禁用的,通常我们都不需要IPV4分片的支持,但是有些程序必须强制打开IP分片,因为它们不考虑自己分片的问题,常见于UDP、大包ICMP/PING测试。您可以再次运行 sysctl net.ipv4.ip_no_pmtu_disc 命令来确认参数的值已经更改为 0,并且 IPv4 分片支持已成功启用。这会将 net.ipv4.ip_no_pmtu_disc 参数的值设置为 0,即启用 IPv4 分片支持。原创 2024-03-06 18:10:40 · 401 阅读 · 0 评论 -
VGW在 Windows 平台上局域网就绪的旁路由器程序
从这个配置就可以看出来,某些有邪恶想法的人可以省省了,不可能实现你们的目的的,这就是个正常的虚拟路由器,就像 VMware 虚拟机可以在一个母鸡上,虚拟多个IP桥接到当前局域网一样,VGW用的技术是跟他们是差不多的,都是面向实际生产环境跟合法企业所需要的功能,解决现实问题存在的一些问题而提出的。有些 Windows 平台的软路由器,一些手机没法通过它上网,比如通过IOS、Android、鸿蒙系统的网络设备,这在 VGW 虚拟出来的局域网路由器,是不存在的。MASK=物理局域网路由器的子网掩码。原创 2024-03-06 17:43:00 · 976 阅读 · 0 评论 -
Linux 进程的 status 注解。
Cpus_allowed/Cpus_allowed_list/Mems_allowed/Mems_allowed_list: CPU和内存掩码。voluntary_ctxt_switches/nonvoluntary_ctxt_switches: 进程切换上下文次数(自愿/非自愿)我们知道 Linux 一切都是面向文件的,所以我们可以通过文件来获取到正在运行的ELF程序的状态信息。CapInh/CapPrm/CapEff/CapBnd/CapAmb: 进程的能力限制。VmLck: 已锁定的虚拟内存大小。原创 2024-03-04 18:15:47 · 513 阅读 · 0 评论 -
arm-linux-gnueabi、arm-linux-gnueabihf 交叉编译器区别
使用硬件浮点(硬浮点)。这意味着编译器会生成使用硬件浮点单元进行计算的指令,从而实现更高效的浮点运算。使用软件浮点(软浮点)。这意味着所有的浮点运算都将由软件库来处理,而不会利用硬件中的浮点运算单元。因此,生成的目标代码包含了对软件浮点库的调用。都是小端架构的,区别就是浮点数是通过编译器根据IEEE754标准实现的还是CPU指令集来处理浮点数,就像是X86上面的SSE指令集。通常用ihf 就可以了,但是如果目标平台的ARM CPU太垃圾不支持硬浮点的话,就只能用 i 版了。原创 2024-03-04 16:20:43 · 537 阅读 · 0 评论 -
解决GCC连接器(lld)出现问题 relocation truncated to fit (重定向截断)
但是缺点肯定是有的,那就是效率肯定没有RVA相对地址(短地址)跳转速度块,因为绝对地址都是需要先放在寄存器之中的,在按照寄存器的值跳转,不能直接JMP到绝对地址上面的,相当于每次都要多走一些流程,并且在CPU之中相对寻址本来就比随机的绝对寻址要快的。这条会有限制,C++ 17 直接没法用了,而且 C++ 11 的一些模板展开特性也会受到限制,基本不是很推荐通过这条指令来解决,但如果真的必须要,无可避免、退无可退的情况下,您或许可以考虑设置它到连接器上面试试看,的确是有效的。3、配置连接器选项,增加选项。原创 2024-03-03 20:01:53 · 852 阅读 · 0 评论 -
IRR APNIC/CN区域IPV4地址列表库(2024/03/03)更新
在VSCode 之中可以轻松修改编写批处理脚本插入到内核路由表,配置特定区域的IP地址列表走指定网卡,多网卡环境下很有用。该地址为本人从APNIC亚太IP地址管理机构,公开CN地区所有的。列表,PREFIX/CIDR无间路由寻址格式。原创 2024-03-03 19:45:29 · 438 阅读 · 0 评论 -
关于NAT的几种类型
这个主要用在UDP/P2P,你可以理解先打NAT洞,然后用任何类型的IP+PORT都可以向这个UDP端口发送数据,当然这个UDP端口也可以向任何目标IP+PORT地址发数据,打洞需要这种NAT,当然完全锥形NAT更好,毕竟能静态映射它不好嘛,只是这两个类型NAT大多数时候容易被人混淆。你可以理解,我们在内网NAT客户端设备之中用UDP链接了外网某服务器IP,然后对面可以一直用自己的IP,任意的端口号给我们内网的设备发数据过来,这种常见是UDP、ICMP NAT。原创 2024-03-02 22:02:20 · 580 阅读 · 0 评论 -
Android NDK底层BUG,记录:connect、socket(AF_INET, SOCK_STREAM, 0) 等系统套接字接口函数崩溃问题。
准确的说是,只要当前 “线程栈” 无法回溯 Fwmark 都会导致崩溃,在NDK之中创建的线程都是在 LINUX 基础上,从 Fwmark 之中执行后在驱动调用,只是这类常见于应用在协程。在 Android NDK 之中,看上去调用 connect、socket 函数是不会崩溃的,但这是否定的,它在特定的情况下存在必定的崩溃的问题。同理UDP的套接字,在创建时会崩溃,但调用 sendto、recvform 不会崩溃,但它并不仅仅只是在有栈协程之中会崩溃。1、main 线程(若为进程)原创 2024-02-29 13:26:55 · 508 阅读 · 0 评论 -
C/C++ 如何正确的切换协同程序?(基于协程的并行架构)
可以这么说,如果大家手下要有这样的小伙伴,被你发现,当天就让他直接走人了,如果不知道,尚且情有可原,提点过还犯这种想偷懒的低级错误,这几乎可以想象,平常工作态度就有很大的问题,在生产项目之中,这会带来多大不可控,不可预测、安全性的风险,在软件工程学的角度来说,这是绝对不允许的,有的懒可以偷,有的懒不能偷,没有那本专业技术书籍,让人们这么解决问题。7、老生常谈的问题,需要确保协同程序之间同步问题,避免产生死锁的问题,有些菜的不得了的家伙,单线程都能整死锁,虽然死锁常见于多核编程的场景上面。原创 2024-02-26 00:18:13 · 1102 阅读 · 0 评论 -
Linux 同个局域网子网内,旁路由NAT配置
正确配置,但仍旧无法访问网络,那么您可以检查是否存在 Docker, 若存在,卸载 Docker,这是因为 Docker 会改变,Linux 内核 SNAT 路由配置,这或破坏,旁路由配置。若有可能的情况下,人们应该使用嵌入式的 Debian 操作系统,因为它可以占用更少的资源,挤出更多硬件资源为应用程序、及内核SNAT路由转发服务。2、配置为旁路由的 Linux 设备(推荐用 Debian、Ubuntu、CentOS,不推荐 OpenWrt)永久配置自己改改,本文只说临时路由配置。3、主路由配置子网段。原创 2024-02-23 09:28:51 · 458 阅读 · 0 评论 -
HI3798MV100、Amlogic-S805 TV电视机顶盒做SNAT路由性能评测。
愿意折腾不在乎的可以去弄弄,但我觉得多花五块钱十块人民币就能买到别人已经刷好系统的TV机顶盒比自己浪费时间去捣鼓会更有价值,这并不是什么有很高技术含量的东西。希望本文,对于想要使用低功耗SNAT路由的童鞋有一些帮助,当然我并不建议自己去买盒子刷机,因为这可能存在一些不可控的风险。受限于网口最大速率限制,HI3798MV100晶片本可以提供更好的吞吐性能,很可惜的,无法全数发挥出来,有些浪费资源了。2、某些玩客云、(电信/联通/移动/广电)的华为海思3798芯片的TV机顶盒并不保证能刷入系统。原创 2024-02-22 13:44:03 · 901 阅读 · 0 评论 -
Java 实现 Awaitable(多线程并行等待,类似 AutoEventReset 的作用)
AutoEventReset、ManualEventReset,是我们在多线程并行编程之中常常需要涉及的,但是 ManualEventReset 可能用的并没有那么多,这个多用于实现读写锁的,当然 Java 自己库提供了官方实现,就没必要自己去整了。C/C++ 里面的话,这块基本都是自己写的,毕竟标准库STL得功能咋个说,这块太弱了,说没也有点东西,说有东西又差了很多点的意思,得自己上马搞底层造轮子,总之奇奇怪怪。2、 processed (其它处理任务得线程完成了调用这个,顾名思义:处理结束)原创 2024-02-20 18:10:22 · 403 阅读 · 0 评论