TCP状态位包含:FIN,PSH,ACK三个状态位,表示什么意思。

yanjinbin0 2011-07-08 09:00:09
截包工具,截获原始数据如下:
--------------------------------------------------------------------------
0000 78 2b cb 02 07 be 94 0c 6d da 20 72 08 00 45 88 x+...... m. r..E.
0010 00 ac e4 08 40 00 31 06 3d 63 71 39 f4 6c c0 a8 ....@.1. =cq9.l..
0020 01 0a 09 cc 23 f0 ca 81 2c 73 37 1f ce 11 80 19 ....#... ,s7.....
0030 11 60 d2 de 00 00 01 01 08 0a 00 15 fd fc 00 15 .`...... ........
0040 36 c6 dd 12 07 07 22 0b 00 00 00 1d 8e cb 07 07 6.....". ........
0050 07 22 0b 1e 11 0b 5c 6d 1c 43 5f 00 41 08 40 28 ."....\m .C_.A.@(
0060 d9 00 0d 28 5a 00 00 ff ff dd dd 12 07 07 22 0b ...(Z... ......".
0070 00 00 00 1d 8e cb 07 07 07 22 0b 1e 11 0b 5c 6d ........ ."....\m
0080 1c 43 5f 00 41 08 40 28 d9 00 0d 28 5a 00 00 ff .C_.A.@( ...(Z...
0090 ff dd dd 12 07 07 22 0b 00 00 00 1d 8e cb 07 07 ......". ........
00a0 07 22 0b 1e 11 0b 5c 6d 1c 43 5f 00 41 08 40 28 ."....\m .C_.A.@(
00b0 d9 00 0d 28 5a 00 00 ff ff dd ...(Z... ..

解析:
----------------------------------------------------------------------------
IP包:
45 88 00 ac
e4 08 40 00
31 06 3d 63
71 39 f4 6c
c0 a8 01 0a

TCP包:
09 cc 23 f0
ca 81 2c 73
37 1f ce 11
80 19 ->状态位:0x19-FIN,PSH,ACK三个状态


包含三个状态位的TCP包,表示什么意思。
windows会怎么解析这样的包呢。

-----------------------------------------------------------------------
这里为什么研究这个,因为在收到这样的包时候,使用windows的recv函数接收数据只能收到部分数据.
例如这里recv函数接收到的数据是:
DD120707220B0000001D8ECB070707220B1E110B5C6D1C
但这里明显缺少了部门数据,不知道什么意思,求高手指点。
...全文
15065 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶之舟 2011-07-17
  • 打赏
  • 举报
回复
表示TCP当前的连接状态,FIN表示完成,ACK表示确认
dibotiger 2011-07-17
  • 打赏
  • 举报
回复
如果英文不错, 你都能立马想到对应的英文单词.

没错,就是这些因为单词的缩写或则头3个字符.构成了这些标志位的基本意思.

Eleven 2011-07-14
  • 打赏
  • 举报
回复
TCP连接:SYN ACK RST UTG PSH FIN

三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。

*SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。


*ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

*RST:复位标志
复位标志有效。用于复位相应的TCP连接。

*URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,

*PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

*FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

.TCP的几个状态对于我们分析所起的作用。在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

sam263564 2011-07-14
  • 打赏
  • 举报
回复
我也是新手 不过 ACK不是答复么
yanjinbin0 2011-07-10
  • 打赏
  • 举报
回复
哥们我也想不明白啊。
请高人出手。
easy66 2011-07-10
  • 打赏
  • 举报
回复
192.168.18.1是Client,192.168.18.118是Server
easy66 2011-07-10
  • 打赏
  • 举报
回复
楼主,我遇到跟你同样的问题了,我是在正常的通讯中不知怎么出现了个 rst,ack,然后对方可能就关闭了,但是自己不知道,于是不停的重发,第二次重发时就是FIN,ACK,PSH组合,可能windows看到没有希望发送成功了,于是就想关闭,但是还抱着一丝希望对方可以收到这个命令,于是就带了数据
2750 11.392971 192.168.18.1 192.168.18.118 TCP 66 59129 > efs [PSH, ACK] Seq=3109 Ack=3368 Win=65065 Len=12
2751 11.393519 192.168.18.118 192.168.18.1 TCP 60 efs > 59129 [ACK] Seq=3368 Ack=3121 Win=8596 Len=0
2752 11.393615 192.168.18.118 192.168.18.1 TCP 67 efs > 59129 [PSH, ACK] Seq=3368 Ack=3121 Win=8596 Len=13
//正常通信中突然出现下面一条
2753 11.393964 192.168.18.1 192.168.18.118 TCP 54 59031 > efs [RST, ACK] Seq=14 Ack=1 Win=0 Len=0
//Client竟然像不知道自己发了上面一条一样,还是按应该的次序发数据,结果当然是失败了
2754 11.394973 192.168.18.1 192.168.18.118 TCP 66 59129 > efs [PSH, ACK] Seq=3121 Ack=3381 Win=65052 Len=12
2755 11.696004 192.168.18.1 192.168.18.118 TCP 66 [TCP Retransmission] 59129 > efs [PSH, ACK] Seq=3121 Ack=3381 Win=65052 Len=12
//临死前最后蹦跶,FIN带了PSH
2756 12.223018 192.168.18.1 192.168.18.118 TCP 66 [TCP Retransmission] 59110 > efs [FIN, PSH, ACK] Seq=4897 Ack=5305 Win=64584 Len=12
2757 12.296041 192.168.18.1 192.168.18.118 TCP 66 [TCP Retransmission] 59129 > efs [PSH, ACK] Seq=3121 Ack=3381 Win=65052 Len=12
2758 12.895832 192.168.18.1 192.168.18.118 TCP 54 59129 > efs [FIN, ACK] Seq=3133 Ack=3381 Win=65052 Len=0
2759 13.035051 192.168.18.1 192.168.18.118 TCP 66 [TCP Retransmission] 59094 > efs [FIN, PSH, ACK] Seq=25 Ack=27 Win=65494 Len=12
2760 13.498091 192.168.18.1 192.168.18.118 TCP 66 [TCP Retransmission] 59129 > efs [FIN, PSH, ACK] Seq=3121 Ack=3381 Win=65052 Len=12
//Socket超时时间已到,重新连接
2761 14.397669 192.168.18.1 192.168.18.118 TCP 66 59149 > efs [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
2762 14.397968 192.168.18.118 192.168.18.1 TCP 60 efs > 59149 [SYN, ACK] Seq=0 Ack=1 Win=8596 Len=0 MSS=1456
======================
我想了大半天也没搞明白为什么会出现个RST,ACK
yanjinbin0 2011-07-08
  • 打赏
  • 举报
回复
单个状态知道什么意思,但是FIN,PSH组合起来用,还真不知道是什么意思。
我猜测:是关闭连接并发送数据吗?
但为什么我的windows接口收不全数据呢?????
GoForSky 2011-07-08
  • 打赏
  • 举报
回复
TCP/ip 协议书 好好看看吧
badbirdboy 2011-07-08
  • 打赏
  • 举报
回复
TCP/ip详解里有状态位的介绍

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧