Wireshark TS | 二谈访问网页失败

news2024/11/14 18:41:35

前言

又一个访问网页失败的案例,该案例来自于 Wireshark sharkfest 2018 - Point And ShootPacket,其中的 Case 2 Cannot see homepage,描述的是来自 OSAKA 的用户抱怨访问一些网站页面不能显示,但是另外一些网站页面可以,譬如 Google OK,但是 Apple 不行,而其他像是 TOKYO 的用户反馈从来没有遇到过类似问题。

首先结论先行,该问题是广域网环境 MTU 问题导致,在以前的案例分析中也经常碰到 MTU 相关问题,总体上来说这类案例比较好分析,为什么会又再写篇文章?主要是因为该案例基于对比分析的思路,多点捕获了相关数据包,由于数据包跟踪文件齐全,可以很清晰的看到问题本质。


问题信息

为了故障排查,用户首先分别在 OSAKA 和 TOKYO 局域网下各捕获了一个 pcap 文件,2_OSAKA_FAIL_LAN.pcap 和 2_TOKYO_SUCCESS_LAN.pcap。

数据包跟踪文件基本信息如下:

λ capinfos 2_*.pcap
File name:           2_OSAKA_FAIL_LAN.pcap
File type:           Wireshark/tcpdump/... - pcap
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: 65535 bytes
Number of packets:   5
File size:           705 bytes
Data size:           601 bytes
Capture duration:    0.103908 seconds
First packet time:   2013-01-30 13:32:30.562003
Last packet time:    2013-01-30 13:32:30.665911
Data byte rate:      5783 bytes/s
Data bit rate:       46 kbps
Average packet size: 120.20 bytes
Average packet rate: 48 packets/s
SHA256:              bc72d90c881b05f9c4f0423d54506eb9dcd919add11a0d40f0365b1906b5ec18
RIPEMD160:           cab2cf3a865fb2b58305d03cb1fbdae18275de6c
SHA1:                693698c13dfe8049b6a5ffcc7b1c226d5e35e61c
Strict time order:   True
Number of interfaces in file: 1
Interface #0 info:
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 65535
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Number of stat entries = 0
                     Number of packets = 5

File name:           2_TOKYO_SUCCESS_LAN.pcap
File type:           Wireshark/tcpdump/... - pcap
File encapsulation:  Ethernet
File timestamp precision:  microseconds (6)
Packet size limit:   file hdr: 65535 bytes
Number of packets:   233
File size:           216 kB
Data size:           213 kB
Capture duration:    1.349497 seconds
First packet time:   2013-01-30 13:35:40.939895
Last packet time:    2013-01-30 13:35:42.289392
Data byte rate:      157 kBps
Data bit rate:       1263 kbps
Average packet size: 914.41 bytes
Average packet rate: 172 packets/s
SHA256:              b6ccfd9aea3cd032d905bdcc71c3fefe61b3d4444878c3a28863ab317f573dd2
RIPEMD160:           d7735defdc1b10326b1a49ac7efc082e8fbc0dc6
SHA1:                cca8863abe3ca3b41f40db97425b1b554eba6978
Strict time order:   True
Number of interfaces in file: 1
Interface #0 info:
                     Encapsulation = Ethernet (1 - ether)
                     Capture length = 65535
                     Time precision = microseconds (6)
                     Time ticks per second = 1000000
                     Number of stat entries = 0
                     Number of packets = 233

2_OSAKA_FAIL_LAN.pcap,文件通过 Tcpdump 捕获,无截断,数据包捕获数量仅为 5 个,捕获持续时间仅为 0.1 秒,平均速率 46 kbps。考虑到数据包数量少以及捕获时长极短,推断用户根据问题所在,精确过滤仅保留了必要的问题数据包。

2_TOKYO_SUCCESS_LAN.pcap,文件同样通过 Tcpdump 捕获,无截断,数据包捕获数量 233 个,捕获持续时间为 1.3 秒,平均速率 1263 kbps。

专家信息如下,两个数据包跟踪文件总体来说并没有明显的问题所在,需要进入实际数据包分析。

image.png

image.png

问题分析

直接展开 OSAKA 和 TOKYO 两个局域网的数据包信息,对比如下:

image.png

  1. OSAKA 局域网

该数据包跟踪文件在客户端侧捕获,可以看到在 TCP 三次握手之后,客户端的 GET 请求,服务器仅回复了 ACK 确认收到,仅就这 5 个数据包结束,并没有收到服务器实质数据响应包。考虑到数据包数量极少,且无其他现象,单就此数据包无法判断问题,需要对比成功的数据包跟踪文件。

  1. TOKYO 局域网

该数据包跟踪文件在客户端侧捕获,同样的在 TCP 三次握手之后,客户端的 GET 请求,服务器不仅回复了 ACK,也回复了带有数据的分段 No.6-7(TCP Len 1414),HTTP 交互结果 200 OK。

  1. 对比分析

客户端和服务器在 TCP 三次握手过程中,分别通告了 MSS、WS 因子、SACK 等选项支持情况。对比可知,做为客户端侧,OSAKA 和 TOKYO 发出的 SYN 中 MSS 均为 1460,但是收到服务器侧发来的 SYN/ACK 中,OSAKA MSS 为 1460,而 TOKYO MSS 为 1414,而此处的差异就造成之后的部分数据分段发送失败。

CS

OSAKA :客户端和服务器双向通告的 MSS 为 1460,这也就造成双方认为在之后 TCP 交互中可以传输的最大 TCP 分段长度为 1460。对比 TOKYO 可知,服务器在收到客户端的 GET 请求之后,会发送数据响应,也就是客户端预期能收到的 No.6-7,Frame Length 为 1514(14 Ethernet 首部 + 20 IPv4 首部 + 20 TCP 首部 + 1460 TCP Len),但由于广域网中间路径的最小 MTU 限制,造成 No.6-7 在中间被丢弃,所以客户端则并没有收到后续数据包,仅收到服务器 No.5 ACK 后陷入沉寂。

TOKYO:客户端 SYN 通告的 MSS 为 1460,服务器 SYN/ACK 通告的 MSS 为 1414,造成双方认为在之后 TCP 交互中可以传输的最大 TCP 分段长度为 1414。因此服务器在收到客户端的 GET 请求之后,会发送数据响应,也就是 No.6-7,Frame Length 为 1468(14 Ethernet 首部 + 20 IPv4 首部 + 20 TCP 首部 + 1414 TCP Len),满足广域网中间路径的最小 MTU 限制,因此 No.6-7 传输成功,客户端正常收到完成交互。

至此,通过 OSAKA 局域网失败和 TOKYO 局域网成功的数据包跟踪文件对比,已经明确可知是由于 MTU 问题 所引起的访问网页失败。但问题的根因是什么呢? 譬如同样是访问 Google 服务端,OSAKA 用户失败,而 TOKYO 用户成功,难道是 Google 服务端看菜下饭,回复给 OSAKA 用户的 MSS 是 1460,而回复给 TOKYO 用户的 MSS 是 1414,问题会出现在服务端嘛,区别对待?!不能说百分百不可能,但是确实大多数这样的案例问题会出现在中间的网络环境。

而为了解决广域网上的传输问题,用户又分别在 OSAKA 广域网TOKYO 广域网上捕获了相关数据包,分别为 2_OSAKA_FAIL_WAN.pcap 和 2_TOKYO_SUCCESS_WAN.pcap ,捕获点大概如下:

客户端(局域网捕获点)— 本地路由器(广域网捕获点)— 广域网 — 服务器端

  1. OSAKA 局域网和广域网

image.png

可以看到客户端和服务器双向实际通告的 MSS 均为 1460,经过路由器时也并没有对其做任何修改,最后双方所选择使用的 MSS 自然也都是 1460

  1. TOKYO 局域网和广域网

CS2

再一次通过对比分析,可以很清晰的找到问题所在,以下描述完整过程:

a. 客户端本地通告的 MSS 为 1460(LAN SYN),在经过本地路由器时,被路由器修改变成了 MSS 1414(WAN SYN),自然服务器收到的客户端 SYN MSS 也为 1414

b. 服务器通告的 MSS 为 1460(WAN SYN/ACK),在经过本地路由器时,被路由器修改变成了 MSS 1414(LAN SYN/ACK),最后客户端收到的服务器 SYN/ACK MSS 为 1414

此处重点,需理解 TCP 三次握手中的 TCP OPTIONS 是通告,而非协商
因为如果是协商,服务器在收到客户端 SYN MSS 1414 后,经比较本地的 MSS 1460,越小优选,服务器所发出的 SYN/ACK MSS 理论上应该是 1414,但是实际情况是 1460,说明是通告,各自通告自身的选项。

c. 最后的结果,客户端和服务器双方 MSS 均为 1414,客户端根据 SYN/ACK MSS 1414 选择,服务器根据 SYN MSS 1414 选择,遵循越小优选。


问题总结

问题的原因在于 MTU,而根因是 OSAKA 的路由器没有调整 MSS 大小,造成传输时 MTU 超出限制而引起丢包,最终反映的应用现象就是访问网页失败,所以像是经过类似 PPPOE、IPSEC VPN 等等需要添加报头的网络环境,需要根据实际情况调整 MSS 或者 MTU 的值来保证正常传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展,软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节,因此,软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

depot_tools问题记录 - 执行fetch/gclient命令无响应

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 在研究将Dart dill文件序列化为可读文本时遇到的问题。 开发环境 macOS: 13.4 问题描述 之前使用depot_tools中的fetch/gclient命令还是正常的,今天想实测--no-history参数时突然遇到命令无响应的情况…

Redis 删除 key用 del 和 unlink 有啥区别?

问题 del 和 unlink 有啥区别啊?为什么String类型删除不会做异步删除? 彬彬回答 DEL 和 UNLINK 都是同步的释放 key 对象,区别是怎么释放后面的 value 对象 DEL 每次都是同步释放 value 部分,如果 value 很大,例如一…

Openssh升级方法详解

项目组linux服务器被绿盟扫描出openssh 1.0.2版本有漏洞,需要升级到7.5版本,以下是升级过程: 第一步 安装Telnet服务 先下Openssh软件包 看你需要什么版本http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 1.查看当前的ssh服务版本 …

【前端】网页开发精讲与实战 HTML Day 2

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:前端 💬总结:希望你看完之后,能对你有…

看完这篇 教你玩转渗透测试靶机Vulnhub——The Planets:Mercury

Vulnhub靶机The Planets:Mercury渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞发现:③:SSH登入:…

架构师进阶之路 - 微服务怎么划分

目录 微服务划分目标 业务、技术、团队导向规划服务 领域检查 依赖DAG检查 分布式事务检查 性能分布检查 稳定(易变)性检查 调用链检查 微服务划分目标 我们常说服务的合理划分是微服务成功的重中之重,一个合理的服务划分应该符合一下…

SQL中如何用快照,恢复被误删的数据?

什么是快照 数据库快照是sql server 2005的一个新功能。MSDN上对它的定义是: 数据库快照是数据库(称为“源数据库”)的只读静态视图。在创建时,每个数据库快照在事务上都与源数据库一致。在创建数据库快照时,源数据库…

THREE.JS镜头随鼠标晃动效果

为了让动画更灵活并且简单 借助gsap让其具有更多可能,在未来更容易扩充其他动效 gsap Dom跟随鼠标移动 gsap.quickTo() 首先要监听鼠标移动,并且将移动的值转换到 -1 和 1 之间 方便处理 private mousemove(e: MouseEvent) {const x (e.clientX / inner…

spring10-配置数据元

他的作用是提高我们程序性能的:我们怎么用呢!先创建我们数据源对象:创建初始化对象之后,创建数据源对象之后,会给我们一些初始化资源。 使用完后还给他 ,这是一种环保的思想。 常见的数据源:底…

干货-卷起来,企业级web自动化测试实战落地(二)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 WebDriver的基本使…

毫米波雷达 TI IWR1443 测试官方程序(Out Of Box Demo)

IWR1443 windows 文章目录 1、准备工作1.1、mmWave SDK1.2、Code Composer Studio(CCS)1.3、Uniflash1.4、TI Cloud Agent 2、导入工程3、烧录3.1、先将 IWR1443 调到 Flashing Mode3.2、使用 UniFlash 软件 4、运行GUI4.1、IWR1443 调到 Functional Mo…

【计算机组成与体系结构Ⅰ】实验0 Logisim 入门实验

一、实验目的 1:掌握加减法器工作原理。 2:能够设计出一个n位加减法器。 3:熟悉Logisim软件使用。 二、实验环境 (1)Logisim 2.7.1 (2)Microsoft Windows 10 三、实验内容 1:设…

FastAPI中如何正确理解和使用:async和await

1 缘起 项目需要, 技术选型使用FastAPI。 开发过程中,遇到需要异步操作的场景, 查阅相关FastAPI异步信息的过程中,发现了async和await组合技, 通过阅读官方文档和实际测试,发现,async和await并不是传统意义上的异步(如线程池异步执行任务), async和await的融合技是应…

SEGA: Semantic Guided Attention on Visual Prototype for Few-Shot Learning

方法比较简单,利用语义改进prototype,能促进性提升

如何系统学习分布式?

关键词:想要走存储/数据库方向的话,具体路线是啥?重点需要掌握精通哪些知识? 回答 那我简单说一下走存储/数据库这块的学习路线吧。 目前做存储比较热门的是分布式存储方向,有NoSQL的也有关系型数据库的&#xff0c…

21.DAC数模转换

1.STM32 DAC介绍: DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。 DAC主要特性: 2个DAC转换器,每个转换器对应1个输出通道;8位或者12位单调输出;12位模式下数据左…

Coggle 30 Days of ML(23年7月)任务五:XGBoost训练与预测

Coggle 30 Days of ML(23年7月)任务五:XGBoost训练与预测 任务五:使用TFIDF特征和XGBoost完成训练和预测 说明:在这个任务中,你需要使用TFIDF特征和XGBoost算法完成训练和预测,进一步提升文本…

Matlab数学建模实战——(Lokta-Volterra掠食者-猎物方程)

1.题目 问题1 该数学建模的第一问和第二问主要是用Matlab求解微分方程组,直接编程即可。 求解 Step1改写 y(1)ry(2)f Step2得y的导数 y(1).2y(1)-ay(1)*y(2)y(2).-y(2)a*y(1)*y(2) Step3编程 clear; a0.01; F(t,y)[2*y(1)-a*y(1)*y(2);-y(2)a*y(1)*y(2)]; […

【Mac】Mac 通过路径找到对应的文件夹

mac 的快捷键 复制文件夹或文件全路径 命令:command Option C 跳转文件夹或文件 命令:command shift G 其他待补充