将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

 找回密码
 开始注册
查看: 1023|回复: 0
收起左侧

tcpdump 抓包分析说明,异常数据分析、常见RST介绍

[复制链接]
发表于 2020-6-11 20:57:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?开始注册

x
一般地,只是单个的一个SYN,它表示的只是建立连接。当出现SYN和ACK可能同时为1,我们认为客户端与服务器建立了一个连接。而当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。/ L9 m# d, c0 q( n) V) D& j3 v

3 ^4 }6 s5 ^8 d+ Z- C; P' A9 PWireshark 抓包步骤' v0 `/ r) {! x" t7 ?, ^
首先根据域名获取对应的ip,终端输入 ping 域名
: D, k* b: W" h. z9 r- f
8 O- W3 `! W2 j% P$ j& j4 m小技巧 也可通过telnet查看端口是否开启telnet ip 端口* C6 n. s4 N: B1 @' d2 P3 B9 Z

) m/ g; D/ v( T5 V9 s打开Wireshark,首页选择要抓取的通道(Wi-Fi,网卡等),然后设置过滤规则,点击右上角箭头配置过滤规则,或者点击某一条右键选中
7 S% H8 V; R  o# R+ V" }Apply as Filter,8 V5 f; N0 ?* g
ip.src==103.219.186.235 or ip.dst==103.219.186.235% E) I4 y  ~- m7 D! _2 o( w% u2 u
6 q0 }3 r5 o6 U3 D. Y* T( \8 @

2 k; g  R( o* X: M, @$ f$ Z, jTCP三次握手! I2 M) [* j% ], D. c6 |/ U
& I% a+ r( w' {

- s3 B6 Y' Z8 h. _+ K第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
! m8 Y3 u8 I  L4 o6 `9 F0 ]; K
2 o: J$ [$ C) W/ J+ @3 V- U- p 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;5 \! e5 M0 E* o) u2 X) C

( A5 f4 Q9 @: u: t: e 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。( v$ `2 i5 _; ^- ?4 Y

4 g4 k) t& x7 `0 @9 c3 A) @, |9 w+ V3 @6 B% A# Z: h2 t6 _

) ~  x- v2 x. t/ m# z7 M( _( C1. 客户端发送 SYN 报文 到服务器
7 Z0 L* ~) j1 G9 z, Q3 J+ n: Z' }5 B
7 L: F) j2 h9 b9 l4 K, w
2. 服务器接收到后 回复 SYN + ACK 报文
1 t, U+ |( n7 W- W( y# s3 q3 X! P8 S/ _8 N) |' u% u5 e

4 M. y; V# E# J- y" K. f0 F3.客户端接收到服务端的 SYN+ACK 报文后,回复 ACK报文- Z& B8 J) q3 o0 T1 H, I

7 Y# R+ I, H0 x0 T注意:理论上,Syn 应该初始值是个随机数的,后面的要根据初始值增加 ,wireshark为了好区分从0开始的,可以自行设置显示原始Syn
$ S9 R; j" d( K9 U* d' `$ K2 |
3 X  ]2 B$ `* A4 }8 m8 j9 w+ T! KTCP 四次挥手,简略分析$ O0 i4 J: {" v( ^5 x) N2 _% T

+ `" m6 ]* {! p! s* Z& P% d9 N/ w* j3 ]5 T& X- [" g
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
! [' n5 ^! g8 @/ E# }3 e4 d(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
& |  N4 H. c8 j9 x: e. e- w2 B6 w(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
' U; z1 Y2 D( P$ {1 B$ D(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
: f% V) h( O5 d/ P1 \1 E
! o" ~5 y7 q5 E& ?抓包异常数据解读
% m9 [9 C" K' W3 g2 I& N" D" a1.[TCP Previous segment not captured]丢包
, |( Z7 E9 H6 a" L% `$ \在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len(三次握手和四次挥手是例
! L' T2 d% O' E1 c& N外)当后Seq>前Seq +Len,就知道中间缺失了一段数据。
  y' T6 Q& t7 F
" t% u8 A7 a4 O1 T1 n4 @/ d4 u) W- \
[TCP Out-of-Order] 乱序
- u) m6 W; M* f0 Y6 g- ^$ gWireshark在获取包序号26时发现seq=18981,而包序号25的数据包seq = 20441,所以wireshark认为数据包顺序错了1 M) M. T# ?# U% }
( P8 a$ y, Z2 H" |0 `8 f0 {0 t
2.[TCP Dup ACK x#y]
9 ~$ x) ?& S; |4 c当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。此时就会Ack就说我想获取seq=28852的数据包而你给了我其他包。! \9 k# i8 o& ~

4 x2 R4 n8 O* d6 o0 B6 U/ S( V+ T  O1 [/ W+ M4 O

- w, A$ n/ ~: K6 y3、[TCP Spurious Retransmission] 丢包重传  Y8 H. y0 |1 M0 s/ e7 N! P; e
; S0 M. ?1 |  h3 Q; I- j: j
$ O% e; R2 F" _. b; J
4、[TCP Fast Retransmission] 快速重传* d3 F3 p$ s' Z) K
当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)。6 |7 M8 i+ [# H0 o
7 |3 }% D; D. @4 |9 Q5 S; h+ _
6 [: g0 n; {7 B, R! a# O6 h% h
! x( T3 [# G3 l- f% w# e
5、[TCP Retransmission] 超时重传9 Y/ l6 @7 ^. c0 f; n# X
如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传,只能超时重传。6 n6 W2 w+ @$ ]+ J4 y

! P9 X$ h  i0 Y
) m) z& ~$ h6 Y1 N6 r' J) w1 L% w, ]5 S$ ~! z1 E4 z8 x3 D
6、几种TCP连接中出现RST的情况
) v& ~. U& N$ B  K  \: o( p) Z" g1.端口未打开' {$ ]) a0 v' L3 i! ^" ]
服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。2 T' o& h2 Y0 v$ ~

! U8 U; }) G- H+ W4 L0 [2. 请求超时, e( {' e5 ^2 e) B0 @
查看2次包的时间间隔- I7 P* D# ^8 e

( ^0 M1 V! y  y& |( T% X( O1 k7 P2 _3. 服务端关闭的socket! d1 s0 H# Q8 E  [1 z$ B, t
# m+ E# M1 Z% K+ ^- h
4. 防护墙拒绝了请求7 _& S! }7 i+ B1 J+ y$ U
0 s8 E& L2 ~* k2 g; o
5. 移动链路% s. I& J# R% Y# I9 j3 w6 V/ T$ ?
, K5 r- ]# q2 E$ a; _, @- a# E
      移动网络下,国内是有5分钟后就回收信令,也就是IM产品,如果心跳>5分钟后服务器再给客户端发消息,就会收到rst。也要查移动网络下IM 保持<5min 心跳。* r# C9 j1 I4 F  C
8 X' j2 P6 c& l. a7 F: P" h; F, }
6. 负载等设备
( j( A6 q/ G! |$ ?      负载设备需要维护连接转发策略,长时间无流量,连接也会被清除,而且很多都不告诉两层机器,新的包过来时才通告rst。
2 _0 R. n+ J5 I2 ]' x4 ?; l- e  ]
, P, Z0 Q0 `' e6 rApple push 服务也有这个问题,而且是不可预期的偶发性连接被rst;rst 前第一个消息write 是成功的,而第二条写才会告诉你连接被重置
" C5 U: g3 w9 |; P! x" T3 t) ?) g6 _2 b; L, K8 F$ u4 r2 R
7. 超过超时重传次数、网络暂时不可达7 N6 f# z# C  o6 D3 Q
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2021-12-2 09:33 , Processed in 0.071557 second(s), 23 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

快速回复 返回顶部 返回列表