Wireshark网络分析就这么简单

发表于:2020-2-19 14:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wish123    来源:博客园

  tcpdump抓包命令:
  root#tcpdump -I eth0 -s 80 -w /tmp/tcpdump.cap
  注:其中80表示,只抓每个包的前80个字节。
  抓包时就筛选自己需要的包:
  Wireshark抓包前Capture→Options,在Capture Filter中输入“host 10.10.100.10”,然后再抓。
  tcpdump抓包对应的命令:
  root#tcpdump -I eth0 host 10.10.100.10 -w /tmp/tcpdump.cap
  小技巧:
  ping<IP> -n 1 -l 1
  这样抓包看到的,Data位为1,当请求方出口IP为PAT地址时,便于定位测试ping包是否可达。
  过滤表达式:
  根据IP和端口:过滤“IP为10.10.100.10且TCP端口为445”,则输入“ip.addr eq 10.10.100.10 && tcp.port eq 445”
  根据协议过滤:NFS共享挂在失败,查看portmap和mount两个协议,则输入“portmap || mount”
  数据包跟踪:选中感兴趣的包,选择Follow TCP/UDP Stream。
  鼠标帮助过滤:选中感兴趣的包,右键Prepare a Filter→Selected可以自动生成过滤表达式。如果选择Apply as Filter→Selected则此表达式还会自动执行。
  Wireshark自动分析:
  1、单击Analyze→Expert Information可以看到不同级别的提示,如重传统计,连接建立和重置统计
  2、单击Statistics→Service Response Time选定协议名称,可以得到响应时间统计。
  3、单击Statistics→TCP Stream Graph
  4、单击Statistics→TCP Stream Graph可以生成统计图
  5、单击Statistics→I/O Graphs可以看到统计信息,如平均流量等等:
  6、通过“Ctrl+F”搜索关键字:选string按钮,然后输入error搜索:
  NFS协议的抓包分析:
  客户端访问NFS服务器的portmap端口(tcp111),询问NFS进程的端口号,默认NFS的端口号时2049,客户端再访问TCP2049,mount挂载动作时file handle动作。
  另外NFS创建文件时,是认UID的,同一个UID号再另一台机器上看到的用户就会不一样了。
  NFS协议的细节动作:
  NFS时多个READ-CALL连续发出,和window的CIFS不同,CIFS时一个一个来的。
  NFS进入文件夹的动作时ACCESS-CALL,查找是LOOKUP-CALL,创建是CREATE-CALL,写入是WRITE-CALL,写完了提交时COMMIT-CALL(COMMIT确认了才算数据真正写好),看看文件属性是GETATTR-CALL
  async和sync的写方式,async时多个WRITE-Call同时发出,sync时一个一个WRITE-Call执行(commit对sync无意义),分辨方法时看WRITE-CALL上的UNSTABLE和FILE_SYNC标志,前者是async,后者表示sync。
  有人mount时跟上noac参数,读写性能很差,是因为noac会强制写操作为sync参数,读操作时频繁GETATTR,导致性能受影响。
  MTU的交互:
  TCP在三次握手过程中就会告知对方自己的MSS(Maximum Segment Size),MSS加上TCP头(20)和IP头(20)的长度就是MTU。
  强制nslookup使用tcp协议:
  root#nslookup
  >set vc
  TCP三次握手:
  第一个数据段的Seq为1,长度1448,所以数据段2的Seq号就是1449,数据段2长度为1448,数据段3的Seq号为2897。接收方发送的ACK号其实就等于发送方的Seq加上长度,接收方以此来判断少了哪些包,要求重传。
  我们之所以在Wireshark上看到Seq=0,是因为Wireshark启用了Relative Sequence Number,可以在“Edit→Preferences→protocals→TCP”里设置。
  Windows滑动窗口:
  ACK的数据包中有win=1460或者win=2920之类的,表示接收方一次可以接收一个或两个MSS,两个就是发送方可以一次发两个包来等对方确认。
  如果接收方处理速度跟不上接收数据的速度,缓存就会满了,从而导致接收窗口为0,发送方就会将自己的发送窗口限制为0,如下图。
  发送窗口决定一次能发多少字节,而MSS决定这些字节分几个包发完。
  发送方一次发N个包,接收方有时候收到很多包时,只要回复最后一个就能确认它收到了所有N个包。
  历史插曲:
  TCP刚发明,接收窗口被定义为65535字节,TCP包头只给接收窗口值留了16bit,无法突破65535的,RFC1323中三次握手时,把自己的Window Scale信息告知对方,由于Window Scale放在TCP头之外的Option中,不用改TCP头设计,Window Scale作用向对方声明一个Shift count,我们把它做成2的指数,乘以TCP包头中定义的接收窗口,得到真正的TCP接收窗口。
  如下图,5856就是183乘以32。
  TCP慢速启动:
  刚开始是连续翻倍增加每一次发送MSS的数量,到一定数量后开始逐渐+1递增。
  RTO是收不到确认,等待一段时间后再发,从发原始包到重发的时间。
  遇到拥塞重传后,从1开始重新慢启动,临界值设定为上次拥塞时的一半。
  快速重传:
  接收方收到的Seq比期望的大时,所以它没收到一个包就Ack一次期望的Seq号,发送方收到3个或以上重复ACK时,就意识到相应的包已经丢了,从而重传。为什么要规定3个Dup Ack呢,为了在很大程度上避免因乱序而触发重传。
  拥塞避免阶段收到快速重传,临界窗口应该设为发生拥塞时还没被确认的数据量的一半,然后将拥塞窗口设置为临界窗口值加3个MSS,继续保留在拥塞避免阶段,这个过程被称为快速恢复。如下:
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号