共计 7972 个字符,预计需要花费 20 分钟才能阅读完成。
0. 前情摘要
在一次航行途中,我司客户遭逢到了得物 App 在飞机上的 WiFi 网络拜访异样的问题。这让咱们意识到在特定场景下,用户可能面临无奈应用得物 App 的困扰。通过 SRE 团队与无线团队、网络团队联结全力排查与优化,最终胜利解决了这一问题,并同时挖掘出全网防火墙设施在各个 C 端用户工作生存场景拜访不到得物 App 的问题。为得物 er 稳固拜访得物提供保障,同时也输入相似疑难问题排查模板。
1. 常识速递
1.1 什么是地面 WiFi 技术?
目前机载 WiFi 服务次要有两大解决方案:地空宽带(ATG)无线通信零碎和机载卫星通信零碎(SATCOM)。
- 地空宽带(ATG)无线通信零碎采纳定制的无线收发设施,沿航行航路或特定空域架设高空基站和对空天线,造成 地空通信链路。
- 机载卫星通信零碎由利用卫星、飞机、卫星地面站三者进行数据通讯
两者的技术优劣势比照如下:
指标 | ATG | SATCOM |
---|---|---|
时延 | <100ms | 较高,10-700ms,取决于卫星类型和轨道高度 |
覆盖范围 | 高空基站笼罩的区域,次要在海洋上,最大半径 300km | 寰球范畴,包含远离海洋和陆地上的区域 |
网络连通性 | 高空基站之间可能存在信号盲区 | 通过卫星信号传输,具备更高的连通性 |
可靠性 | 可能受地形和基站散布影响 | 受卫星信号强度和可用卫星数量影响 |
实用场景 | 次要实用于海洋上的航行 | 实用于寰球范畴内的航行,包含跨洋航线 |
马斯克搞的星链服务用的是近轨卫星群,间隔地表在 550 公里范畴左右,时延根本在 20ms 以内,而我国目前用于客舱通信的卫星根本是同步卫星,离地间隔 36000 公里,时延根本在 500ms 以上
1.2 电商业务为什么会广泛应用 TCP 协定
当今互联网支流通信协议应用的 TCP/UDP 协定, 恪守 TCP/IP 的 4 层网络模型, 其中 TCP 协定相比 UDP 提供了牢靠的、面向连贯的通信:
- 三次握手
在 TCP 协定下,数据传输之前,通信单方须要先建设连贯,建设连贯时会进行一系列的握手过程,确保数据传输前通信单方的状态和能力都是失常的
- 包确认机制(ACK)
在数据传输时,TCP 协定会将数据分成多个包进行传输,并且会对每个包进行校验和确认,确保数据可能正确无误地传输。
- 拥塞及流量管制
TCP 协定提供了拥塞管制和流量管制等机制,可能自适应地调整传输速率,防止网络拥塞和数据失落
基于以上 TCP 协定保证数据的可靠性和完整性,因而在电商利用中宽泛应用 TCP 协定。
2. 天地协同排查****
2.1 计划制订
理解了地面 WiFi 实现技术后,如何定位排查问题便是咱们 SRE 专家思考的问题。对于工作疑难杂症,永远的三板斧:模仿复现问题,抓包,剖析残缺申请链路。本次麻烦的是场景非凡,须要在地面 WiFi 环境上能力复现,同时抓包又是一个技术活,只能咱们技术团队亲自出马了。这里要特地褒扬无线平台的客户端同学,为了齐全复现场景,顺便早上 7 点乘指定班机来回测试,收集重要抓包数据。
2.2 测试计划 & 工具确认
因复现场景刻薄(必须万米低空 WiFi 才会开启),必须制订好残缺的测试计划实现尽可能多的数据收集。无线平台团队和 SRE 团队协同筹备好了测试工具包,可进行网路层面测试蕴含 ping 和 traceroute,APP 层面的申请测试,单域名拜访测试等。并筹备好抓包工具,在测试时留存所有抓包数据。SRE 在公司同步值班抓取服务端申请包,做双向比照。
上面是咱们的 SRE 老司机梳理的各协定段排查工具,大家可珍藏:
只管 TCP 协定具备面向连贯、可靠性低等长处,然而在理论的网络环境中,因为网络的复杂性、拓扑构造、利用缺点等因素,会导致各种网络问题, 以下咱们将排障工具和 4 层模型做了一个归类:
咱们排障个别按从下往上逐层排除可疑点这个思路来时,日常工作会少走一些弯路
2.3 问题复现 & 测试抓包
客户端测试同学在飞机巡航情况下,连上飞机 WiFi 后,关上得物 App,确实存在拜访不了得物 App 的状况。于是,客户端同步公开值班人员开启测试。(1)关上得物 App,浏览不同页面并截图,确保影响范畴(2)进行网络测试蕴含(ping、traceroute 等)(3)在浏览器独自拜访典型接口,如主接口、社区接口、图片链接等(4)测试其它电商平台,察看其拜访状况。以上所有拜访保留截图、日志、抓包数据等值班 SRE 等同工夫抓取雷同工夫的接口的入口申请包,保留下来,后做比照剖析。
2.4 数据整顿
2.4.1 链路诊断
网络链路层测试:用 ping/traceroute 等工具对 app.dewu.com/m.dewu.com 相干域名进行了拔测,均显示网络层失常
这里简略介绍一下 ping/traceroute 工具工作原理
(1)ping 工具
ping 是一种基于 icmp 协定开发的网络诊断工具,工作于第 3 层,其工作原理是向指标主机收回一个 icmp 的 echo request 数据包,并期待接管 echo response 数据包,而后程序主动估算丢包率和数据包的 rtt,因而次要用于网络连通性和网络时延的诊断
此工具原始作者是 Mike Muuss, 于 1983 年开发, 前面 macos/win/linux 相继实现各自版本,以下没有非凡阐明的状况下,所有相干参数或叙述次要是针对 linux 版本开展的
- ping 工具集成在 iputils 包中,开源我的项目https://github.com/iputils/iputils
- 一个基于 icmp 协定的 ping 包格局
上图中红色标注的属于 ip 和 icmp 协定头中较要害的字段:
协定 | 字段 | 取值 | 含意与作用 |
---|---|---|---|
IP | Identification | 1-65535 | 数据包惟一标识符,另外性能用于 ip 分片,当一个 ip 包的负载超过 1480 时,ip 包要分成多片,且多片的 identification 放弃一样 |
IP | Flags | 3 个 bit 位 | 用于批示 IP 数据包是否容许分片和每个分片的地位,它的三个 bit 别离是:- 第一个 bit 示意是否容许分片,如果容许分片,则该位被设置为 1,否则设置为 0。如果该位为 0,则示意不分片,整个 IP 数据报会一次性传输;如果为 1,则容许分片。 |
- 第二个 bit 示意是否是最初一片,如果是最初一片,则该位被设置为 0,否则设置为 1。
- 第三个 bit 是 “ 更多片 ” 标记位。如果传输的 IP 数据报被分片成多个分片,然而以后这个数据报不是最初一个分片,则这个标记位被设置为 1;否则设置为 0 | | IP | TTL | 1-255 | 次要管制网络中呈现回路时,防止 IP 包无休止的在网络上转发,每经验一个路由器时,此值会减 1;小窍门:Linux 的网络中默认个别为 64,因而在服务侧抓包看到的 ttl 值后,64- 以后 ttl 值,即可晓得此包经验过多少路由器 | | IP | Protocol | 1/2/6/17 | 代表承载的下层协定:1:ICMP,2:IGMP,6:TCP,17:UDP | | ICMP | Type | 0-18 | 节选局部解释:回复应答(ICMP 类型 0):ping 命令用到该类型的数据包以测试 TCP/IP 连贯;指标不可达(ICMP 类型 3):用以批示指标网络、主机或者端口不可达;回复申请(ICMP 类型 8):ping 命令用该类型的数据包测试 TCP/IP 连贯;| | ICMP | Identifier | 随机 / 指定值 | Identifier 字段在 Echo Request 和 Echo Reply 音讯中都存在,作用是帮忙辨别不同的 ICMP 会话。在发送 Echo Request 音讯时,发送方会随机地生成一个 16 位的标识符,而后在接管响应包的时候,通过比拟响应报文中的标识符,来确认响应报文是否是本人发送的响应 | | ICMP | SequanceNumber | 1-65535 | 当一个 ICMP Echo(ping)申请音讯被发送给指标主机时,Sequence Number 字段的值通常从 0 开始计数,每发送一个 ICMP Echo 申请就会递增一个。而当指标主机收到 ICMP Echo 申请后,会将它的 Sequence Number 值复制到 ICMP Echo Reply(ping 回应)音讯中,以便申请端确认它所接管到的回应音讯是对相应申请的响应 | | ICMP | TimeStamp | 工夫戳 | 次要用于测量 RTT,当一个主机收到一个 ICMP Timestamp 申请时,它会记录返回的 ICMP Timestamp 回应音讯中的以后工夫戳,并计算出申请和回应之间的时间差 |
- ping 的局部参数默认值
参数 | Linux 默认值 | 阐明 |
---|---|---|
-t | 64 | 指定 ttl 数值 |
-c | 发送有限数量的 ICMP 数据包 | 指定发送 ICMP 数据包的次数 |
-s | 56 字节 | 指定 ICMP 数据包的大小 |
-W | 10 秒 | 指定每个响应包超时工夫,单位为秒 |
-i | 1 秒 | 指定发送 ICMP 数据包的工夫距离 |
- ping 的例外
从结尾形容的 ping 的原理能够看出,指标设施必须回复 echo response 能力判断网络连通性和时延,因而如果指标设施设置了相似“net.ipv4.icmp\_echo\_ignore_all=0”禁止或者防火墙设置了抛弃 icmp 包策略,此测试后果根本生效, 此时须要其它工具如 telnet/nc/curl 等工具配合测试了
特地有意思的一点:在 _s20190709_ 版本和此前版本,Identifier 取值应用是以后 ping 过程的 pid, 如下图所示:
ping 以后过程 pid 是 2570,16 进制值是 0xa0a, 因而在包中第 25 和 26 字节中展现进去是 0xa0a,之后的版本思考不平安,因而全副改为随机值了
ping_common.c
//s20190709 版本和此前的版本
if (sock->socktype == SOCK_RAW)
ident = htons(getpid() & 0xFFFF);
// 之后的版本
if (sock->socktype == SOCK_RAW && rts->ident == -1)
rts->ident = rand() & IDENTIFIER_MAX;
(2)traceroute
- 性能与作用
用于查找数据包从源到起点所须要的网络门路,并辨认这些门路上的瓶颈和故障
- 工作原理
它发送一份 TTL 字段为 1 的 IP 数据包给目标主机,解决这份数据包的第一个路由器将 TTL 值减 1,抛弃该数据包,并发送一份超时 ICMP 报文。这样就失去了该门路中的第一个路由器的地址。而后 traceroute 在发送一份 TTL= 2 的数据包,这样咱们就能失去第二个路由器的地址,持续这个过程直至该数据包达到目的地主机
这个数据包承载的下层协定能够是 ICMP/UDP/TCP
- 工具倒退历程
最后是在 1987 年,由 Van Jacobson 主导实现,前面 macos/win/linux/bsd 等也都实现了各自版本,支流 linux 发行版根本应用的是这个我的项目 https://traceroute.sourceforge.net/ 提供的
- 配置初始值
<!—->
// 代码配置节选
#define MAX_HOPS 255 // 最大跳数,限度 traceroute 可能追踪到的最远节点的数量
#define MAX_PROBES 10 // 每个路由节点的最大探测次数
#define DEF_HOPS 30 // 默认的最大跳数
#define DEF_NUM_PROBES 3 // 默认的每个节点的探测次数
#define DEF_WAIT_SECS 5.0 // 默认的期待每个节点响应的工夫
#define DEF_DATA_LEN 40 //IP 包上的负载默认大小
#define MAX_PACKET_LEN 65000 // 最大的包长度,默认为 65000 字节
#ifndef DEF_AF
#define DEF_AF AF_INET // 默认的地址族,个别设置为 AF_INET,示意 IPv4
static const char *module = "default"; // 默认应用 udp 进行探测
static tr_module default_ops = {
.name = "default",
.init = udp_default_init,
.send_probe = udp_send_probe,
.recv_probe = udp_recv_probe,
.expire_probe = udp_expire_probe,
.header_len = sizeof (struct udphdr),
};
#define DEF_START_PORT 33434 /* udp 探测时启始探测端口 */
- 包格局剖析
从抓包能够验证代码实现逻辑,以及整个探测过程(tcpdump host 1.1.1.1 -Nn -w 保留文件名.pcap)
从两个工具的介绍和测试数据来看,阐明网路层面是失常的。
2.4.2 应用层测试
地面侧从 ios/android 终端,https/http 等维度对我司后盾服务接口进行了测试验证,同时也对友商的 app 进行了购物体验,只有得物 App 的接口返回异样(https/http), 且应用浏览器测试时返回带有拦挡提醒的页面;
2.4.3 网络 抓包
地面侧对 ios 端进行了抓包,高空侧在高防入口进行了抓包,从 client/server 侧角度看,单方都认为对方发动了强制断开(reset)信令:从手机端看认为是高防(服务端)先断开的,从高防侧看认为是手机(客户端)先断开的
ios 端:
高防端:
tcpdump 是一个超级好用的开源的抓包工具,始终是咱们 SRE 最重要的工具之一,这里给大家分享一下: tcpdump 是一个功能强大的命令行网络数据包截获工具。通过应用 tcpdump,能够捕捉和剖析网络中的数据包流量,从而可能诊断网络问题、监督网络行为、进行网络安全审计等操作。tcpdump 也是作为学习网络协议和数据包构造的十分好的工具,用于对网络数据包进行剖析和解码。
-
tcpdump 工作在数据链路层
-
工作原理
- 网络 _数据包截获:通过调用 libpcap 库捕捉从指定网络_ 接口 _传输的数据包。具体来说,libpcap 库利用操作系统提供的原始套接字(Socket) 接口来截获网络数据包,而后通过回调机制将数据包传递给 tcpdump 过程。_
- 数据包过滤:tcpdump 能够依据用户设置的过滤规定对捕捉到的数据包进行过滤。过滤规定利用 _BPF_ (Berkeley Packet Filter) 过滤器来实现,这是一个基于指令集的过滤器,它可能对数据包的各个字段进行匹配和过滤,过滤出符合条件的数据包。
- 数据包解析:一旦通过过滤器选定了要截获的数据包,tcpdump 就会对这些数据包进行解析和格式化,展现其中的各个字段和属性。数据包解析过程的要害是数据包格局的辨认和解码,tcpdump 和 libpcap 库能够辨认和解决多种数据包格局,包含以太网、 _IPv4_ / _IPv6_ 、TCP/UDP、 _DNS_ 、HTTP 等等。
- 数据包展现:最初,tcpdump 将解析后的数据包内容输入到规范输入或者用户指定的文件中,供用户进行查看和解决。用户能够对输入内容进行进一步解决,比方进行过滤、排序、统计等操作,以更好地了解 _网络_ 数据流量,剖析网络协议和利用行为,发现问题和优化性能等。
2.5 数据包剖析
- 从网络链路层测试数据后果看,网络层上端口是失常通行的,包含 tcp 三次握手。那阐明整个网络链路是通顺的。不存在网络不通的状况。(从友商可失常拜访来看也能印证这个问题)
- 从网络抓包数据来看,从 client/server 侧角度看,单方都认为对方发动了强制断开(reset)信令:从手机端看认为是高防(服务端)先断开的,从高防侧看认为是手机(客户端)先断开的
- 从应用层上截图来看,貌似受到相似 acl 的拦挡
综合论断:最有可能是受到相似防火墙之类的中间层 设施 拦挡
2.6 模仿复现
从如下截图来看,可能和我司的防火墙同一厂商,于是迅速和网络同学组织了一次模仿验证:
将某一终端 IP 在防火墙上开启“禁用拜访网站 / 软件下载”策略,
而后在浏览器上申请 https://app.dewu.com, 发现命中此策略
同时也从 client 端及防火墙进口同时进行了抓包:
电脑 client 侧:
防火墙进口侧:
基于下面的证据链,根本能够确认防火墙的策略误判了公司 得物 App 的域名为下载类网站
2.7 厂商沟通
将我司复现的问题反馈给厂家后,厂商的策略工程师确认此“拜访网站 / 软件下载”策略存在 bug,并在沟通中的过程也确认了此航司与我司都是应用同一厂商的防火墙。
2.8 停顿同步
4/18,厂商进行了全网策略公布
4/19,我司 ac 设施主动进行了策略更新
4/21,请敌人帮忙在同一航班验证得物 App 应用晦涩,验证通过
3. 网络技术点回顾
3.1 traceroute
从本次的 traceroute 数据中咱们能够确定一点:
- 地面 WiFi 到国内电商次要域名的时延根本都在 600ms 以上,此数据也进一步确认地面 WiFi 应用的 SATCOM 形式(高提早)
3.2 ip 包头
- ip 包头中的 ttl 失常状况下每通过一个路由器,TTL 的值就会减 1,直到服务器接管时不再变动,也就是失常状况下 client 和 server 的包中的值不应该有变动,如果有较大变动都根本是中间设备篡改
- ip 包头中另外一个字段 identifcation 用于标识 IP 数据报的唯一性,如果一个 ip 包须要分片(MTU 超过 1460),则每个分片的 ip 包中的 identifcation 数值一样; 同时 RFC791 标准并没有规定 Identification 字段的取值形式,但理论状况下咱们看到的顺次增长(MTU 超过 1500 字节加 1),如果有跳变很大,根本也是中间设备篡改
3.3 AC 设施网络管理
AC(Access Controller)是一种地方管制的网络设备,用于治理多个 AP(Access Point)的上网行为。AC 设施上网行为治理性能能够帮忙管理员对用户的上网行为进行监控和治理,包含以下方面:
-
- 认证和受权治理:AC 设施能够实现多种认证形式,如无线局域网安全性协定(WPA、WPA2)、802.1X 认证等,确保用户的非法身份,并受权其拜访网络。
- 流量管制:AC 设施能够对接入的用户进行流量管制,限度其上行和上行的带宽、流量总量等参数,以防止网络拥挤和单个用户占用过多带宽资源。
- 上网行为过滤:AC 设施能够对用户的网络拜访进行过滤,禁止用户拜访某些不合适的网站或利用,确保网络的平安和稳固。
- 用户治理和监控:AC 设施能够对所有接入用户进行对立治理和监控,包含用户的身份、设施类型、MAC 地址、IP 地址、上网时长等,帮忙管理员理解用户的上网习惯和行为特色,发现和解决异样行为。
性能实现:
-
- 用户认证,能够基于用户和用户组来治理用户的登陆,能够配置本地认证也能够 AAA 认证等等
- URL 过滤,使用 HTTP 辨认技术就是获取到 HTTP 申请时带有的 host 字段来获知用户想要拜访的网站,以此来达到过滤网站目标(本次出问题就是此性能上)
-
- HTTP:三次握手后,HTTP 发出请求,带有 host 字段,从这里得悉拜访网站
- HTTPS:三次握手后会建设 SSL 加密通道,在 SSL 第一次握手时客户端收回 client hello 报文时,会有个 server name 字段(SNI),从这里获知后进行相应的过滤
参考资料:
1)中国民航网
2)东航官网
3)通信世界
4)中兴通讯 5G 地空通信白皮书 2020
文:wave
线下流动举荐: *
工夫: 2023 年 6 月 10 日(周六)14:00-18:00主题: 得物技术沙龙总第 18 期 - 无线技术第 4 期 地点: 杭州·西湖区学院路 77 号得物杭州研发核心 12 楼培训教室(地铁 10 号线 &19 号线文三路站 G 口出)
流动亮点: 本次无线沙龙聚焦于最新的技术趋势和实际,将在杭州 / 线上为你带来四个令人期待的演讲话题,包含:《抖音创作工具 -iOS 功耗监控与优化》、《得物隐衷合规平台建设实际》、《网易云音乐 - 客户端大流量流动的日常化保障计划实际》、《得物 Android 编译优化》。置信这些话题将对你的工作和学习有所帮忙,咱们期待着与你独特探讨这些令人兴奋的技术内容!
点击报名: 无线技术沙龙
本文属得物技术原创,来源于:得物技术官网
未经得物技术许可严禁转载,否则依法追究法律责任!