术语解释
解决网络问题的思路
流控理论
网络性能问题
拥塞重传
RTO: 丢包的 Retransmission Timeout 被触发 -> 进入超时重传阶段
超时重传
快速重传
选择重传: SACk
延迟确认: Delayed ACK
- 来自: <<一篇关于Vmware的文章>> , <<来点有深度的>>
- 含义: 当需要发送 ACK包时, 不立即发送, 等待片刻, 当有数据需要发送时, 捎带ACK, 这样省掉一个纯粹的ACK包
- 优点: 少一些确认包可以节省带宽
- 缺点: 凭空多出一些延迟; 该发送的ACK包未及时发送, 当出现网络拥塞时(延迟确认+网络拥塞), 可能会严重影响网络性能 (某种TCP协议栈的实现有200毫秒的延时)
- 过滤条件 检测: tcp.analysis.ack_rtt > 0.2 && tcp.len == 0
慢启动
TCP full window
TCP zero window
小包问题:
- 来自: <<最经典的网络问题>>
- 含义:又叫愚笨窗口综合症, 当小包频繁发送时会严重浪费流量, 占用带宽, 拖垮网络性能
- 解决方法: 纳格算法: Nagle 提出的
- 注意: Nagle 算法 不要和 延迟确认一起使用, 否则网络效率非常低 !
DDOS攻击
来自: <<三次握手的小知识>>
含义: Distributed Denial of Service, 分布式拒绝服务攻击
种类: 有很多种, 最流行的 就是 基于三次握手的 SYN flood
解决网络问题的思路
网络不通时的查找方向
- - 分析其中的数据包: arp, rarp, mac地址, TTL, icmp, dns ...
- - 比较异常点
- - 分析,推测 网络结构, 网络配置, socket 配置
网络可联通, 但效率低的查找方向
1. 抓包: 在两侧(客户端,服务器端)都抓包, 两端抓到的包可能不太一样, 有利于排查问题;
2. 对抓到的包 认真分析, 推测可能原因;
3. 运用 三板斧 (性能问题)
- 板斧一: Statistics -> Summary : 统计 -> 摘要总结
- 目的: 查看整体情况
- 板斧二: Analyze -> Expert Infos : 分析 -> 专家信息
- 目的: 查看 error, warnings, ...
- 板斧三: 选定一个tcp流, Statistics -> TCP StreamGraph -> TCP Sequence Graph(Stevens)
- 目的: 查看 时间, 总流量的 坐标图, 分析瓶颈
4. 分析其他
- 请求包和响应包之间的延时, 某个方向的两个包的延时, 如果延时较大, 就需要检查配置;
Wireshark 的提示 [亦章节名称]
TCP报文( tcp dup ack 、TCP Retransmission): 写的不错 !
[TCP Out-Of-Order] : 先到
- wireshark 发现 后一个包的Seq = 前一个包的Seq+Len 时, 认为正常
- wireshark 发现 后一个包的Seq < 前一个包的Seq+Len 时, 认为乱序, 会做此标记; (但三次握手, 四次挥手除外)
[TCP Previous segment not captured] : 晚到/丢包
- wireshark 发现 后一个包的Seq = 前一个包的Seq+Len 时, 认为正常
- wireshark 发现 后一个包的 Seq > 前一个包的Seq+Len时, 认为中间丢失了一段数据.
- 实际情况有两种: 真的丢了 OR 实际上没丢, 但被抓包工具漏掉了
- 验证方法: 直接看对方回复的ACK就行了, 如果该ACK包含了没抓到的那个包, 则就是抓包工具漏掉了, 否则即真丢失了
[TCP Retransmission] :
- 丢包后, 有没有后续包可在接收方触发[Dup Ack], 只能利用 "超时重传", 这个标记就标识超时重传
[TCP Fast Retransmission] :
- 当发送方收到 >=3个 [TCP Dup ACK], 就意识到之前的包可能丢了, 于是 "快速重传"
[TCP Dup ACK XXX#X] : 快速重传时会出现
- 表示第X次重新请求第XXX个包, 丢包或者乱序的情况下,会出现该标志
...