网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

09 | 长肥管道:为何文件传输速度这么慢?

优化网络配置
分析传输速度瓶颈
配置优化提速
速度慢原因分析
查看Scale Factor值
检查是否启用
展示TCP序列号变化趋势
展示数据传输速度
TCP Stream Graphs
I/O Graph
影响TCP传输效率
Window Scale 启用与否
接收端配置限制
地理距离影响
影响数据传输效率
设备配置影响
影响发送窗口大小
拥塞窗口与接收窗口中较小值
网络承载在途数据量
已发送未确认的报文
影响在途报文数量
往返时间
如何应用所学知识解决实际问题
eBay数据中心文件传输
TCP Window Scale
TCP Stream Graphs
I/O Graph
网络I/O状况
丢包率
窗口大小
往返时间 (RTT)
接收窗口
发送窗口
带宽时延积 (BDP)
在途报文
时延 (RTT)
速度上限 = 发送窗口 / 往返时间
思考题
案例分析
Wireshark分析技巧
TCP传输速度问题
关键因素
核心概念
文件传输速度分析

该思维导图由 AI 生成,仅供参考

你好,我是胜辉。
在上节课里,我们通过一个 MTU 引发问题的案例,学习了 MTU 相关的知识点,了解了 MTU、MSS、TCP 分段、IP 分片这些概念之间的区别和联系。我们也学习了用 iptables 修改 MSS 来达到规避 MTU 问题的目的,是不是觉得网络虽然学起来不简单,但学会了好像也挺好玩的?
那这个感觉就对了,学习本来就是一件有意思的事情,也是很有收获感的事情。学得更多,收益更多,反过来就能推动自己继续学得更多,形成良性循环。
当然,上节课我们主要说的是如果传输失败会怎么样,而从这节课开始,我们会讨论讨论传输起来以后的效率问题,比如传输速度。
传输速度是网络性能中非常重要的一部分内容,因为它直接影响了我们享受到的网络服务的品质。比如现在移动端网络越来越快,所以无论传输大文件还是实时的视频通话,都得到了很大的发展。
数据中心更是如此。服务器的网卡早就从多年前的千兆网卡(1Gbps)升级到万兆网卡(10Gbps)。而负载均衡、防火墙等网络设备,更是从 10Gbps 升级到 40Gbps,乃至 100Gbps。
在这个大背景下,照理说在数据中心之间传个文件早已不在话下。但是我们偏偏遇到了这样一个奇葩的问题:数据中心间传输文件的速度居然只有 400 多 KB/s,是不是很奇怪?你有没有遇到过类似的传输速度方面的问题,你又是如何通过网络分析,找到根因的呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过深入分析文件传输速度缓慢的案例,提出了优化TCP传输速度的解决方案。首先介绍了TCP传输速度受到的影响因素,如往返时间(RTT)、在途字节数等,并解释了这些概念对传输速度的影响。随后,详细介绍了如何使用Wireshark工具来分析传输速度趋势和TCP序列号,并指导读者如何根据分析结果进行优化。通过对时延信息的收集和分析,读者可以了解到如何利用Ping和Wireshark获取RTT信息,并了解了iRTT的计算方法。文章还探讨了带宽时延积和发送窗口对传输速度的影响,以及窗口和往返时间在传输速度问题中的重要性。通过对窗口和往返时间的把握,读者能够解决大部分传输速度的问题。此外,还提到了使用Wireshark的一些技巧,包括查看I/O Graph、TCP Stream Graphs和TCP Window Scale等方法。总之,本文为读者提供了解决文件传输速度缓慢问题的实用方法和技巧,以及Wireshark分析技巧,使读者能够在网络排查中更加坚定有力地前行。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络排查案例课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 江山如画
    我们公司之前有一个场景是多个客户端连接同一个服务端,如果某个客户端下载文件或上传文件,占用大量的带宽,会导致新的客户端连不上服务端。后来在服务端使用 tc 工具做了流控,根据客户端个数均分带宽,还有限制单个IP的最大使用带宽。 学了今天的课程后,突然想到 tc tools 这类流控工具,底层原理是不是就是调整服务端的接收窗口,进而调节带宽大小的。进一步想类似百度网盘,迅雷,它们的限速原理是不是也是通过调整接收窗口的大小。如果是这样,可以通过修改报文中窗口大小字段,进而绕过带宽限制。

    作者回复: tc的原理是调整qdisc发送缓存队列,超出队列的数据就丢弃,进而达到速度限制的效果。

    2022-02-09
    9
    11
  • 分清云淡
    这篇文章《TCP性能和发送接收Buffer的关系》讲得非常清楚:https://plantegg.github.io/2019/09/28/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82TCP--%E6%80%A7%E8%83%BD%E5%92%8C%E5%8F%91%E9%80%81%E6%8E%A5%E6%94%B6Buffer%E7%9A%84%E5%85%B3%E7%B3%BB/

    作者回复: 这是高手:)

    2022-02-25
    2
    7
  • 一把螺丝刀
    请问是做了什么修改来增大窗口呢?

    作者回复: 您好,案例里的设备是特殊硬件有其自己的配置方式,不具备普适性就没展开了。linux有相关参数,比如mem_rmax、rmin这些,都会影响接受窗口,你可以调整看看效果

    2022-02-10
    6
  • 唐伟
    老师,你好!我有两个问题想请教一下: 1、文中“我们对它的配置做了修改,使得接收窗口大幅增加后,速度马上提上去很多倍,这才彻底解决了问题。”,这里是修改啥配置?能否贴出来学习一下? 2、文中说“那为什么启用了 Window Scale,还是被限制在 64KB 附近呢?我们发现,这还是受限于这台设备本身的特点。在某些情况下,这里的 Window Scale 虽然启用了,但无法充分工作,导致实际上这台设备的接收窗口一直被压制在 64KB 附近。”,那这里是怎样定位设备本身的问题呢?

    作者回复: 您好,这两个问题跟特定硬件设备有关,不是很有普适性,所以也没有在课程里详细介绍。这节课的关键,还是整个排查的过程和TCP协议的理解。通过这个案例,我希望能帮助大家举一反三、融会贯通,而不是局限在这个特定案例里面。 当然,既然你在这里问了详细情况,我就稍展开一下: 1. 这个配置是硬件负载均衡的tcp profile。硬件设备(当然本质上还是软件和硬件和结合)的data plane是厂商自己研发的,并不是用linux提供的TCP/IP协议栈。这里的tcp profile也是厂商研发的特性,我们可以方便的定义不同的VIP使用不同的tcp profile。假设同一台LB上有两个VIP,一个VIP是对公网服务的,那面对的就是时延较长、带宽相对有限的网络,另外一个VIP是对内服务的,那面对的就是时延较短、带宽比较充足的网络。这两个VIP可以应用不同的tcp profile,来适配相应的网络场景。这就比linux要更加灵活一些了。虽然理论上linux也可以用容器来划分不同的网络命名空间并设置不同的tcp参数,但毕竟没有vip配合tcp profile这么方便。我们也是修改了tcp profile,使其接收窗口变得更大,能容纳这些错乱的数据,大部分情况下可以缓解这个bug带来的问题。 2. “启用了window scale还是被限制在64KB”,这就是这款设备的这个firmware的bug了,具体的情况只有厂商清楚啦。 希望对你有用~

    2022-06-30
    1
  • 我来也
    最近的两篇文章比较有意思,可以借来排查一下一个比较困扰我的问题。 我电脑推送docker镜像时某些层经常卡住,然后重试。 中间的链路非常扰: mac 的docker 是自己的一套网段,我需要通过一个http 代理来推送镜像。我电脑上用了一个代理软件surge。 推送docker镜像是docker 进程发流量到代理软件surge,代理软件再自己建个tcp连接去发数据。 这个代理软件吧它自己有有虚拟网卡之类的,把docker 的流量自己又倒腾了一次。

    作者回复: 恩我们在学习群里已经在沟通了~

    2022-02-11
    3
    1
  • Realm
    设备上配置了限速64k引起的?老师,一般网络限速是基于窗口吗?

    作者回复: 确切说并不是直接调整带宽限制,而是修改设备对每个tcp连接的最大接收窗口的限制。按照“窗口/往返时间”这个公式,同一个窗口配合不同的往返时间,起到的速度限制各不相同~

    2022-02-09
    2
    1
  • AlohaJack
    “那为什么启用了 Window Scale,还是被限制在 64KB 附近呢?我们发现,这还是受限于这台设备本身的特点。在某些情况下,这里的 Window Scale 虽然启用了,但无法充分工作,导致实际上这台设备的接收窗口一直被压制在 64KB 附近。” 请问老师,这里可能具体由于什么原因和配置导致接收窗口被压制呢? 发送窗口=min(接收窗口,拥塞窗口) 既然发送窗口只有64kb,接收窗口又比64kb大,那是不是可以理解为由于中间网络拥塞,导致拥塞窗口变小,最终导致发送窗口只有64kb?

    作者回复: 您好,这是一台硬件设备,其firmware(非Linux)是厂家自己维护的,自然也不开源,所以具体代码级别的原因就不得而知了。当时确定的是firmware本身的一个feature gap。 启用了WS只是告诉系统:“你可以用更大的接收窗口了”,但不等于直接修改接收窗口(毕竟接收窗口是系统动态生成而且一直变化的,不适合用静态值来配置)。我们观察到的是,设备(非Linux)的tcp profile里WS是启用的,但是抓包时候发现的接收窗口仍然在64KB左右。离我们预期很远,所以说也是这个firmware的一个bug吧。这一点跟具体设备有关,其实并不很重要。最重要的是深入掌握这里面的TCP原理,这是可以普适的,你可以到处能用到的知识:)

    2022-08-17归属地:上海
    2
  • 上杉夏香
    文章随机二刷中: 碰见传输速度慢的问题,排查思路如下: 1、确定这条线路的带宽。如果达到带宽的限制,那么慢有应得。 2、查看wireshark抓包的专家信息,是否有丢包的情况?严重吗?(这里以TCP为控制层协议) 3、根据公式:v=发送窗口/RTT。RTT一般都是客观存在且不容易改变的,除非直接加专线。发送窗口又分为两个方面,到底是对方的接受窗口限制了发送窗口还是拥塞窗口在起作用。如果是接受窗口在起作用,可以查看window scale是否开启?开启是否有额外的特殊问题?如果是拥塞窗口在起作用,一般认为该时段网络达到上限(丢包触发拥塞窗口的大小,丢包说明网络状态差),还有就是设置歧视拥塞窗口为10个MSS而不是2个MSS;发生拥塞后不要从头开始进入慢启动阶段等等

    作者回复: 差不多了,你总结的不错!在第3点钟,拥塞情况确实对传输速度有很大的影响,而初始拥塞窗口对于小文件传输的影响更大,因为小文件传输本身需要的时间就短,那么起始阶段占整个传输的比例就更大了,这个阶段效率高一些很有帮助。

    2022-08-12归属地:上海
  • Geek_0d1ecd
    是否可以理解,目前网络加速都是把RTT减少,把长距离切成多个片段 (TCP Window Scale不变的情况下,另外TCP Window Scale的值会带来什么未知的隐患吗)

    作者回复: 网络加速这个话题很大,几句话肯定讲不完,不过RTT不是那么容易缩小的,除了逻辑路径优化,就是真正的物理路径的优化了,比如更短距离的光纤线路等。不过我想你可能指的是CDN或者POP点这种离终端用户更近的节点,它们确实可以省去tcp握手的时间,另外CDN或者POP跟源站的tcp连接是“热”的,保持在一个较高的tcp窗口水平,这也十分有帮助。 window scale没什么副作用~

    2022-06-14
  • salt
    这个示例包似乎有问题,window size scaling factor 显示为unkown, options字段也只显示了字节不能展开,导致wireshark看到的Calculated widow size显示的值都是271。 上一节课的包,window size scaling factor /options都正常显示。

    作者回复: 你好,确实有这个问题,我刚重新编辑了文件并上传了,这次有window scale和准确的windows size了:)

    2022-04-16
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部