聊聊 wireshark 的重传包和重复包(Duplicate Packets or TCP Retransmissions?)

简介: 聊聊 wireshark 的重传包和重复包(Duplicate Packets or TCP Retransmissions?)

聊聊 wireshark 的重传包和重复包(Duplicate Packets or TCP Retransmissions?)

1 背景

最近某客户在推进全栈信创,其中操作系统使用了鲲鹏(arm)+麒麟V10,数据库使用了OceanBase, 大数据平台使用了星环TDH,JDK使用了龙井1.8。

在使用 datax 从 ob 同步数据到 hdfs 的过程中,我们发现 arm 版的 JDK 消耗的堆空间比 x86 的 JDK 大很多(400万数据,前者大概需要8G,而后者只需要2G)。

为分析原因,除了排查 JVM 堆栈信息,为排除网络影响,我们还通过 tcpdump 在 datax 节点进行抓包,并导出到 wireshark 中进行分析。

抓包命令如下:tcpdump -i any -nn -s 100 "port 2883 or port 8020" -w /tmp/ob.pcap;

2 现象-虚惊一场

将 pcap 包导出并使用 wireshark 打开后,在 "packet list"面板和“expert info” 中,都可以发现,wireshark 对大量的 TCP 数据包,都进行了“重传”,“快速重传”,“DUP ACK” 的标识,如下图所示:

  • This frame is a (suspected) fast retransmission
  • This frame is a (suspected) retransmission
  • Duplicate ACK

640.png640.png


因为这是使用了万兆网卡的 LAN 内网环境,wireshark 显示的 RTT 和 RTO 也都在几十微秒左右, 所以网络情况应该是良好的,如此多的重传包,严重不合理呀!

640.png640.png

进一步在 “packet details”中,对比查看重传包/Duplicate ACK 和对应的原始包,才发现,这些包的除了 TCP SEQ/ACK 完全一致,IP Identifiation 也完全一致!虚惊一场,原来这些包是 Duplicate Packets,网络是没有问题的!

640.png640.png

  • 对于 “duplicate ip packet”,Wireshark 就经常错误诊断并标识为 "TCP Retransmission","TCP Fast Retransmission","TCP Spurious Retransmission" ,"TCP Out-of-Order",或 “Duplicate ACK”;
  • 所以说,Wireshark 中的提示信息,也不一定任何时候都是正确的,我们不能无脑相信,而是需要结合 TCP 的工作机制,仔细甄别。

3 技术背景- TCP retransmition,Layer 3 loop, Layer 2 duplicate

以下三种包很容易引起混淆:

  • TCP retransimition (一般是超时等网络问题);
  • Layer 3 loop(三层网络环路,一般是网络拓扑和配置问题);
  • Layer 2 duplicate (二层重复包,可能是网络端口镜像和linux cooked capture 抓包方式问题,当然也有可能是网络设备的软或硬件问题);

640.png

三者各自的特点和区别概括如下:

  • TCP retransimition: TCP SEQ/ACK 一致,IP ID 不一致;(TCP层面遇到问题需要重传,此时TCP将包交给IP层后,IP层会封包并给与新的IP ID);
  • Layer 3 loop:TCP SEQ/ACK 一致,IP ID 一致,但 TTL 不一致(三层网络环路,数据包传输过程中,每经过一跳,其ttl 值就会被路由器减1);
  • Layer 2 duplicate:数据包所有字段完全一致,包括TCP SEQ/ACK,IP ID,以及 TTL;

640.png

4 如何清理去掉二层的重复包

当遇到了二层的重复包且底层原因是 linux cooked caputre等抓包方式引起的问题时,可以使用工具去掉重复包,此后 wireshark 显示的数据包就更清爽了,更方便进一步分析了。

安装 wireshark 时,一般也一并安装了 editcap 工具,可以使用该工具编辑并去掉 duplicate packet。该工具底层会对比指定大小窗口内所有数据包的MD5是否相同,若相同则丢弃重复的包:

  • 示例命令如下:editcap.exe -d infile.pcap outfile.pcap
  • 如果 editcap 默认的dup 窗口参数不合适,-D 和 -w 修改;

640.png

640.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
网络协议 网络架构
UDP包的大小与MTU
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助:首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层.
3774 0
|
5天前
|
网络协议 网络架构
Wireshark中的ICMP协议包分析
Wireshark可以跟踪网络协议的通讯过程,本节通过ICMP协议,在了解Wireshark使用的基础上,重温ICMP协议的通讯过程。 ICMP(Internet Control Message Protocol)Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP是TCP/IP模型中网络层的重要成员,与IP协议、ARP协议、RARP协议及IGMP协议共同构成TCP/IP模型中的网络层。 在Wireshark界面,我们可以看到
|
网络协议 C语言
Wireshark lua dissector 对TCP消息包合并分析
Wireshark lua dissector 对TCP消息包合并分析
712 0
|
网络协议 安全 Unix
TCP MSS选项
本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已获互联网工程指导小组 (IESG) 批准出版。并非 IESG 批准的所有文件都适用于任何级别的互联网标准;请参阅 RFC 5741 的第 2 节。
133 0
TCP MSS选项
|
网络协议 算法
TCP/IP 校验和简析
TCP/IP 校验和简析
522 0
|
网络协议 数据挖掘
|
JSON 网络协议 数据格式
TCP 粘包/拆包的原因及解决方法?
TCP粘包、拆包属于网络底层问题,在数据链路层、网络层、传输层都有可能出现。日常的网络应用开发大多数在传输层出现,而UDP是由消息保护边界的,不会发生粘包、拆包问题,只发生在TCP协议中。假设客户端向服务端发送了两个连续的数据包Packet1、Packet2;
701 0
TCP 粘包/拆包的原因及解决方法?
|
网络协议
TCP/IP源码(20)——数据包发送的流程图
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 今天,把之前看过的UDP发送的过程总结了一下,画出了数据包发送的流程图。
1539 0