dog250
码龄17年
求更新 关注
提问 私信
  • 博客:28,530,979
    社区:8,141
    视频:315
    28,539,435
    总访问量
  • 2,318
    原创
  • 24
    排名
  • 31,262
    粉丝
  • 334
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:美国
加入CSDN时间: 2008-03-06
博客简介:

TCP/IP

博客描述:
TCP, QUIC 传输优化
查看详细资料
个人成就
  • 博客专家认证
  • 获得14,039次点赞
  • 内容获得5,498次评论
  • 获得21,254次收藏
  • 代码片获得3,026次分享
  • 原力等级
    原力等级
    9
    原力分
    11,052
    本月获得
    66
创作历程
  • 94篇
    2025年
  • 183篇
    2024年
  • 142篇
    2023年
  • 151篇
    2022年
  • 88篇
    2021年
  • 153篇
    2020年
  • 144篇
    2019年
  • 104篇
    2018年
  • 62篇
    2017年
  • 96篇
    2016年
  • 76篇
    2015年
  • 90篇
    2014年
  • 103篇
    2013年
  • 101篇
    2012年
  • 151篇
    2011年
  • 595篇
    2010年
  • 7篇
    2009年
成就勋章

TA关注的专栏 2

TA关注的收藏夹 0

TA关注的社区 3

TA参与的活动 0

创作活动更多

新星杯·14天创作挑战营·第13期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛!注: 1、参赛者可以进入活动群进行交流、互相鼓励与支持(开卷),虚竹哥会分享创作心得和涨粉心得,答疑及活动群请见:https://bbs.csdn.net/topics/619781944 【进活动群,得奖概率会更大,因为有辅导】 2、文章质量分查询:https://www.csdn.net/qc

90人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

TCP 传输时 sk_buff 的 clone 和 unclone

如果 skb 发到真实网卡,当网卡中断通知发送完成,该 skb 即可得到释放,但本地环回的 skb 生命周期可是要长得多,比如 loopback_xmit,直接用 tx 路径的 skb 调用 netif_rx 了。至于 skb_copy,pskb_copy,自然就不必说,理解 skb_clone,skb_unclone,kfree_skb 就够了。不管这世界多么无知和操蛋,只要给我一本历史书,给我一个 TCP 疑难问题,或带我到一座可以攀登的山脚下,我就马上元气爆满!
原创
博文更新于 2025.07.12 ·
737 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

关于学习的方法

我喜欢读史,经常有人问我那么一大坨年代,人名,地名,我是怎么背下来的,还是一样的道理,建立时空图景。读完题目后,脑子里都是句子和逻辑,但没有场景,只有当你将这么大一段话还原成时空中的一个场景时,它是什么才显而易见,解法自然也就有了,所以我一再强调,万能的坐标系,它真的就是万能的,因为它描述的就是世界发生的事件,时间,地点。时序图,TCP 三次握手,四次挥手,协议状态机都是这回事,换成分析 TCP 抓包的 tcptrace 图,也是这个思路,在时空中往往很容易一眼看出端倪,这是我们的眼睛进化出来的本事。
原创
博文更新于 2025.07.06 ·
1015 阅读 ·
4 点赞 ·
0 评论 ·
2 收藏

仅做传输层拥塞控制就够了吗?

不控制数据源,即使传输层拥塞控制再好,数据也只是转而塞在 send buffer 里,这里不塞那里塞,最终还是会影响用户体验,即使你为 send buffer 设置了 small queue,还有应用 buffer,总有一个地方会拥塞。头痛医头,脚痛医脚,大概率会造成打地鼠的局面,不要只盯着一个算法的实现本身,要盯着你的需求,你的问题,梳理你的全局架构,控制源头,把算法当工具使,不是反着来。要针对架构优化,而不是对实现优化。道理是相通的,看你如何部署,我见过太多的论文,专利,算法初看没毛病,但着眼点错了。
原创
博文更新于 2025.07.05 ·
1698 阅读 ·
10 点赞 ·
0 评论 ·
18 收藏

拥塞控制的边界:从膝点到崖点

拥塞控制应该在膝点和崖点之间工作,然而膝点的滑落不可检测,而崖点的滑落则可检测,我们知道,Reno/CUBIC 等 AIMD 算法均以崖点为操作点,膝点和崖点之间就叫拥塞避免,对应 Additive Increase,而对崖点的反应就是 Multiplicative Decrease,而 BBR 则以膝点为理想操作点,但也只是理想。于是 “对丢包进行反应” 就成了拥塞控制的基调,至于如何反应,由于考虑公平性,这就需要控制论背景,而不只是一句话的事了,我们都知道,这就是 AIMD。
原创
博文更新于 2025.07.04 ·
1987 阅读 ·
17 点赞 ·
0 评论 ·
23 收藏

用户进程的借壳挂靠之术

task_struct 的这种组织形式类似公司组织架构,部门间可共享资源也可资源隔离,项目组随时成立,员工自由加入和退出还可转岗,总经理有权将公司组织成任意结构,由此类比,就可理解为什么只需要调换几个字段,就可以实现进程挂靠,却又不能自由共享资源了。与组合模式的树形递归结构不同的是,Linux 的 task_struct 模型更偏向资源共享的扁平化组织,通过指针共享资源,而非嵌套包含。照这个做法,可以做点正面的事,比如借鸡生蛋,代孕,将经理的结果说成是自己的。
原创
博文更新于 2025.07.04 ·
1041 阅读 ·
4 点赞 ·
0 评论 ·
9 收藏

内核线程的借壳生存之术

若想玩得更花式,可用 do_mmap 在挂靠进程地址空间申请一片可执行内存(PROT_EXEC),里面写上些代码,起一个线程挂靠于其上,用 do_mmap 申请一片 stack,构造寄存器及返回地址,执行那片代码,那片代码干什么都行,比如 “调用 insmod kthr.ko”,这样想抵赖也不足了。” 我不是搞 TCP 的,我是个工人,泥工,瓦工,木工,机修工,电工,带娃,养狗,种花,种地,做饭,理发啥都会,就是不会跳舞,我也不管这些事有没有前途,和谁都没有冲突。浙江温州皮鞋湿,下雨进水不会胖。
原创
博文更新于 2025.06.28 ·
1879 阅读 ·
7 点赞 ·
0 评论 ·
12 收藏

那些不应该的优化

hlist 就是冲 Hash 的 O(1) 去的,正常情况下它一定很短,如果太长了,要么 Hash 函数不良,要么 Hash bucket 太少,首要解决 Hash 冲突问题,而不是遍历冲突链表的问题。遍历没有了,代价是每个 hlist_head 增加一个 8 字节字段,1000 个就要消耗 8KB 的空间,但这说服不了谁,没人在乎那 8KB,就算 80MB 又如何。所以 hlist_add_tail_rcu 很好,无需优化。但以上的修改却节省不了多少时间。浙江温州皮鞋湿,下雨进水不会胖。
原创
博文更新于 2025.06.28 ·
1714 阅读 ·
13 点赞 ·
4 评论 ·
5 收藏

OpenVPN 进入 Linux 6.16 内核喽

OpenVPN 进内核不只优化了拷贝和切换(但标准程序员却总盯着这些),更多是它以这种方式融入了丰富的 Linux 内核网络生态,比如 Netfilter,iptables/nft,eBPF/XDP,甚至还有进一步 offloading 的可能,直达现代加密硬件和加速卡。2010 年开始我基于 OpenVPN 做了 5 年多,期间做遍了各种数据面,并发以及加解密优化,寻遍了 Linux 内核协议栈的每个角落,到了 2020 年前后,我用这些手艺又吃了两年老本,对 WireGuard 做了几个手术。
原创
博文更新于 2025.06.27 ·
1978 阅读 ·
27 点赞 ·
0 评论 ·
18 收藏

广域网多路径传输

广域网应用用不到超过运营商出售的带宽(如果用到就买更大的),但广域网接入带宽总波动,不能恒常,这对直播推流,实时播放等恒常带宽需求而言非常不利,应用要不断调整编解码速率以跟随带宽波动,但波动往往随移动,位置,时间而不可预知,因此调整永远是滞后且不准的。这类多路径传输亦属于闭环控制技术,还是那个观点,这类技术为弥补资源差异而存在,随着网络基础设施推陈出新,而恒常带宽诉诸的受体感知能力有上限,再好也不会觉得更爽,资源差异逐渐天然抹平,这类控制技术也就逐渐没了必要。,但重要的是稳定性,而不是总和,
原创
博文更新于 2025.06.21 ·
1990 阅读 ·
24 点赞 ·
0 评论 ·
16 收藏

西班牙大停电与 SO_REUSEPORT 一致性 Hash

Linux 内核一直没有实现一致性 Hash 选择 socket,直到 6.16-rc2,对长连接负载均衡,热升级带来了极大的复杂性,而 eBPF 技术又未竟全功,实现起来也极其复杂(看看多么麻烦:reuseport socket 热升级),所以我才又实现了一版 reuseport 一致性 Hash,但同样没开大会,也没派池。总之不过多评价这个算法本身的优劣以及其实用场景,这也不是本文的目的,本文主要集中于它如何出问题,如何让它不容易出问题,以及真的出了问题如何控制问题蔓延的。
原创
博文更新于 2025.06.21 ·
2375 阅读 ·
18 点赞 ·
0 评论 ·
18 收藏

Linux 路由下一跳与源地址选择

当涉及 ECMP 类的多下一跳选择时,本机始发数据会面临源地址选择和下一跳选择的一致性问题,先说上面第一点,源地址尚未确定时,源地址依赖下一跳,于是路由查找寻找下一跳,优先选择与下一跳 “接近”(最匹配) 的网卡 IP 作为 saddr,接下来再选 sport,为了应用 ECMP,saddr,sport 会作为 hash 输入,在多下一跳中选择一个,这次选择与确定源地址时的选择可能不一致。)IPv6 没这问题,因为 IPv6 是后来开大会设计的,有一套严格的源地址选择规范,详见 RFC3484。
原创
博文更新于 2025.06.21 ·
1893 阅读 ·
4 点赞 ·
0 评论 ·
9 收藏

MPTCP 吞吐聚合的神奇方法

如果你有空间和资源,最有效的优化方案就是用它们来换,TCP 很多单机性能问题都源自端口号,序列号空间太小,加大它们便是,若要你重新设计一个新协议,你还抄 TCP,然后用一些精巧的算法再优化,那就是纯经理了。流控平衡 receiver,sender 的收发缓冲区,拥塞控制平衡 host 和网络的速率,数据包调度平衡数据流(or subflow)间时延,进程调度平衡处理器和进程时间,可见,这类算法的作用力应随资源逐渐均衡而减弱才更有性价比,道理很简单,不必为不需要的功能买单。总之,对齐了时延,调度就最简单。
原创
博文更新于 2025.06.21 ·
2364 阅读 ·
18 点赞 ·
0 评论 ·
25 收藏

说说聚合路由器

再说调度和重组算法,连 iptables,Netfilter 都玩不明白,也就用用 MPTCP,有多少人能有自研协议的能力,说到开源协议魔改,也还是编译和移植,大多数好的产品也就是依仗硬件贵罢了,硬件贵,软件就不重要了,软件是兜下限的,硬件决定上限。可见时延差不离,这种结果在意料之中,就算不同运营商也差不了太多,因为路由规划都是最短路径优先,大家的路径路由统一性非常强,甚至物理传输上都是共享的,差异就在空口,各家基站也差不多,那么就看手机了。三星,iphone 是出名的高档手机,贵有贵的道理。
原创
博文更新于 2025.06.15 ·
2092 阅读 ·
9 点赞 ·
0 评论 ·
2 收藏

二叉树,Hash,网络拥塞的共相解构

连同网络拥塞,当出现很费劲的操作时,总有办法施加一些控制摆脱之,无论是树的平衡操作,Hash 算法,还是路由负载均衡,拥塞控制,背后的力量都会让信息变得混乱而均匀。再看标准 Hash 结构,由于它的 Hash 函数是固定的,所有增量计算则必须重算所有节点,因此它能在内存的代价下保持一个伪装的 O(1),若非如此,则必须处理冲突,而负载因子不敏感的冲突处理的时间复杂度是 O(n),O(log n) 的方法对负载因子太敏感,更耗内存,交易还是省不了。我简单说,因为我的能力只能触及其形而上层面,深了我也不懂。
原创
博文更新于 2025.06.14 ·
2655 阅读 ·
16 点赞 ·
0 评论 ·
18 收藏

Linux 内核 TCP 性能真的很差吗?

可见,在高速网络环境,Linux 内核 TCP 的处理实际上成了一个内核零存,task 整取的过程,若 CPU 能力一定,当整个 CPU 核全忙时,处理 TCP 的时间越多,处理业务时间越少,反之如果 CPU 花时间处理业务,留给处理 TCP 的时间就会少,如果将 task 亦看作端到端(数据视角,从数据的产生到消亡)处理一环的话,这里就是个瓶颈点,CPU 能力限制了整体吞吐的上限。在早期的应用编程模型中,阻塞接收很常见,前文提到,那时瓶颈在网络,往往求数据而不得,又没其它事务做,只能等。
原创
博文更新于 2025.06.14 ·
3044 阅读 ·
7 点赞 ·
0 评论 ·
17 收藏

TCP/IP 与高速网络

可以这样理解,数据在主机生成直到网卡发送的时间是 ns 级(至多 us 级),数据被目标主机网卡接收直到被消费的时间亦 ns 级,在这期间的网络传输时间却没有任何保底承诺,且没有任何反馈承诺,这个时间从 us 到 s 不等,如此大的时延抖动跨度,任何附加手段均无能为力,即使最大强度最理想的流控和拥塞控制附加其上,也只能将抖动压缩至 5~10ms,这对于 400Gbps+ 高速网络依然不可接受,这是 TCP/IP 网络的属性,而非缺陷。网络的核心是拓扑,只有基于全互联规则拓扑构建的网络才能彻底打破僵局。
原创
博文更新于 2025.06.07 ·
4102 阅读 ·
17 点赞 ·
6 评论 ·
19 收藏

高速多路径传输之始末

内存拷贝并不约束时序,横着拷贝,竖着拷贝,斜着拷贝,大块拷贝,小块拷贝都非常随意,这就能有效利用好并行资源,比如多路径分别传输不同的文件块,每个文件块都映射到自己的地址,单独一个线程负责周期性查看 hole,随时 nack。所以我经常说,人们根本就不那么在乎单流最大吞吐,大部分人用不了那么大带宽,在很长一段时间,就算人们需要单流大吞吐,也用不起(在 2025 年,即便经理也不敢持续 500Mbps 跑流量),人们在乎的是很多流的总吞吐,这至少还涉及并发能力,可以几个用户,几条流一起跑。
原创
博文更新于 2025.06.07 ·
3941 阅读 ·
28 点赞 ·
0 评论 ·
18 收藏

MPTCP 聚合吞吐

但必须注意,子路径必须不能太异构,聚合 Wi-Fi,5G,4G,想都别想,不是说不能提升,而是不划算。无论如何,涉及聚合,叠加的案例,都不是简单的加法,都需要方向的一致性,同步协调性,结构稳定性三要素,而作为端到端协议,TCP 天然缺失同步协调性和结构稳定性,这些是尽力而为网络的属性特征,TCP/IP 并不具备任何调优支撑,任何的优化都可以说是粗暴的运气。这么多人频率,方向,力道均一致才能叠加速度,频率不一致会减速,方向,左右力道不一致会减速并跑偏。”,第二局就赢了,但小朋友们也缺失了体验,这怪我。
原创
博文更新于 2025.06.02 ·
4370 阅读 ·
4 点赞 ·
0 评论 ·
10 收藏

scale up 不能优化 TCP 聚合性能

虽然管道可以提供 RTT_Normalized · (S1 + S2) 的带宽,但如果某时刻从左边注入这么多数据,RTT_Normalized 过后,仅流出 RTT_Normalized · |RTT2 - RTT1|/RTT2 · (S1 + S2) 数据,若要流出更多的数据,则必须在更大 RTT2 路径上更早注入数据,如果没有足够的数据提前注入,就要在右侧等待重组,该力度由 α 调节,表现为多路径调度和重组算法,由这些算法决定(前面写过,但不是本文重点),对于可靠传输,左边不等右边等,怎么优化都没用。
原创
博文更新于 2025.05.31 ·
5128 阅读 ·
8 点赞 ·
1 评论 ·
21 收藏

Wi-Fi 切换 5G 的时机

不管信不信,背后也没什么原因,人们每天的行为轨迹在时间序上是有规律的,观察和统计上下班打卡时间,外出跑步时间,坐地铁班次,甚至消费时间,你会惊奇地发现每天几乎都是 “那个点”,误差甚至不超过一两分钟。早上出门上班,关上家门等电梯时,家里 Wi-Fi 信号已经很微弱,但依然坚挺,没即时切到 5G,傍晚下班离开公司,走出大楼时,公司 Wi-Fi 信号已经很微弱,但依然坚挺,没即时切到 5G,这两个时间有那么一两分钟是无法上网的,除非我手工把 Wi-Fi 关闭,等走远了再打开。浙江温州皮鞋湿,下雨进水不会胖。
原创
博文更新于 2025.05.30 ·
5811 阅读 ·
13 点赞 ·
3 评论 ·
17 收藏
加载更多