Skip to content

wireshark

tcpdump

  • 文件名后缀
    • pcap, tcpdump 和 Wireshark 等工具默认支持的文件格式
    • cap, 由一些 tcpdump 以外的抓包程序生成的, Wireshark 是可以读取这些.cap 文件的,只要在正确的版本上
    • Pcapng, 新的 Wireshark 和 tshark 做抓包, 默认生成的抓包文件, 包含更多的信息
Java
tcpdump host {对端ip} port {端口}

其他参数:
-w 文件名
-c 数量
-s 长度
-n 不做地址转换, 比如 IP 地址转换为主机名,port 80 转换为 http
-v/-vv/-vvv, 打印更加详细的信息
-e 可以打印二层信息, 特别是mac地址
-p 关闭混杂模式, 所谓混杂模式,也就是嗅探(Sniffering),就是把目的地址不是本机 地址的网络报文也抓取下来

TCP状态

1744803106493

1744803116513

网络排查经验

  • 将应用层信息与传输层, 网络层信息联系起来
    • 应用层信息, 日志, 性能数据, 载荷等
    • 传输层:TCP 序列号(Sequence Number)、确认号(Acknowledge Number)、MSS、 接收窗口(Receive Window)、拥塞窗口(Congestion Window)、时延(Latency)、重复确认(DupAck)、选择性确认(Selective Ack)、重传(Retransmission)、丢包 (Packet loss)等。
    • 网络层:IP 的 TTL、MTU、跳数(hops)、路由表等

过滤器

  • 以ip为条件
Java
ip.addr eq my_ip:过滤出源IP或者目的IP为my_ip的报文 
ip.src eq my_ip:过滤出源IP为my_ip的报文 
ip.dst eq my_ip:过滤出目的IP为my_ip的报文
  • tcp.flags(SYN、ACK、FIN、PSH、RST 等 TCP 标志位)条件
Java
如RST 报文:
tcp.flags.reset eq 1
  • 过滤特定时间段内的报文 frame.time
Java
frame.time >="dec 01, 2015 15:49:48" and frame.time <="dec 01, 2015 15:49:49"

http keep-alive 与 tcp keep-alive

总结二者的区别:

  1. http keep-alive 是七层特性,tcp keep-alive 是四层特性
  2. http keep-alive 旨在较短时间内,复用 tcp 链接,快速传输大量数据,减少重复握手挥手带 来的时延消耗和网络拥堵,比如用浏览器访问一个带有大量 js,css 或图片的网页;

tcp keep-alive 旨在相对较长的一段时间内,检查 tcp 链接是否存活,它的传输频率很低, 传输数据量也很小,感觉类似网络隧道软件,语音,聊天软件中可能会用到 tcp keep-alive。

  1. http keep-alive 的内部实现不依赖于 tcp keep-alive, 二者实现上没有关系。