1
看 记一次 KUBERNETES/DOCKER 网络排障 这篇文章时发现作者的解决问题的思路很清晰,涉及到一些网络分析方面的内容。
一般分析网络会用命令或者类似 Wireshark 的抓包软件。如果用 Wireshark 进行抓包会发现有不同种类颜色的条目,每一种颜色代表不同意义。通过视图-着色规则可以查看默认规则。想要查看问题的分析(尤其是被染色为黑色的数据包),下方详细内容标黄色的部分展开,继续找标黄色的内容即可(部分情况是 TCP Anaysis Flags 下就是分析的详细内容)。
还有一个需要注意的点是 TCP Flags。例如有一个包的信息是这样的
Source Destination Protocol Length Info
202.193.71.65 183.232.231.174 TCP 54 33078 → 443 [FIN, ACK] Seq=1 Ack=1 Win=16560 Len=0
注意被中括号包围的部分([FIN,ACK])就是TCP Flags。
TCP Flags 的意义大致如下:
- F : FIN - 结束;结束会话
- S : SYN - 同步;表示开始会话请求
- R : RST - 复位;中断一个连接
- P : PUSH - 推送;数据包立即发送
- A : ACK - 应答
- U : URG - 紧急
- E : ECE - 显式拥塞提醒回应
- W : CWR - 拥塞窗口减少
具体 Flag 详解可以参考 TCP 标志位详解(TCP Flag),一些 Flag 产生的原因(例如RST)去搜一下也能很容易获得答案。不过即便是获得答案在实际过程中也很难找出实际原因(就像文章所提及的那样)。
2
filter
if(!exp(i)) continue;
map
var _i = map(i);
reduce \(R_n=f(R_{n-1}, i_n)\)
// 求和
Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9)
.reduce((ir, b) -> ir + b)
.ifPresent(System.out::println);
// 找出最长的单词
Stream<String> stream = Stream.of("I", "love", "you", "too");
Optional<String> longest = stream.reduce((s1, s2) -> s1.length()>=s2.length() ? s1 : s2);
简单的说就是将上次计算的结果参与此次运算,运算需要两个参数,第一个是上一次运算的结果,第二个是流的一个元素
没有中间变量