51学通信技术论坛

 找回密码
 立即注册
搜索
查看: 7592|回复: 5
打印 上一主题 下一主题

TCP RST触发机制? [复制链接]

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2011-6-21 20:25:50 |只看该作者 |倒序浏览
一键分享 一键分享

上面是最近采集的Gn口数据,由于对数通不懂,所以只能从网上查相关资料,以下是我的理解不知道对不,如果不对麻烦各位指正:

从上图看出:在TCP连接建立后并没有数据交互,10s后服务器主动发起关闭TCP流程,服务器进FIN_WAIT_1态,由于手机没有响应ACK消息,2s后服务器重发FIN/ACK消息; 根据TCP协议:当TCP收到对方发来的FIN报文时,发ACK确认此FIN报文,并通知应用进程连接正在关闭,TCP在发送完尚未处理的报文段后,发一个FIN报文给对方,然后等待对方对FIN的确认,收到确认后关闭连接。

通过上面的例子,我们看出TCP连接处于非正常的状态,即一方试图发送数据时连接会自动RESET,可以判断服务器已经关闭连接,而终端并不知道,当终端希望发送数据到服务器时,就会收到RESET信号,表示这个TCP链接有误,要中止当前连接。



另外:1.RST SEQ=1和=2有很么区别吗?
           2.重发FIN消息,单手机就是没有ACK,请问几秒后后关闭连接,有timer吗?
怕图看不清,可以打开附件gn包,时间点为12:17分左右。

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

沙发
发表于 2011-6-21 20:27:27 |只看该作者
还有个问题:3.tcp建立后 几秒会发起FIN消息,是什么机制?这个和心跳又关系吗?

使用道具 举报

Rank: 9Rank: 9

懒

板凳
发表于 2011-6-22 17:01:57 |只看该作者
回复 tobino1 的帖子

  我尝试着回答一下问题。但我有很多还没弄得特别明白。所以仅供参考。
  用到的参考文档主要有RFC793关于TCP的规范。还有附件里的TCP/IP原理卷一的第18章:TCP连接的建立与释放。还有自己抓的包。这个包是在自己的电脑上访问www.gprshome.com的首页得到的。
1 关于RST里的序列号和使用场景。
  RST报文一般有3种场合会发送(见18章的18.7 复位报文段)。
1) 到不存在的端口的连接请求。例如你去telnet 1.1.1.1 100。如果对方1.1.1.1能ping通,可达,但没开100端口,就会给你发RST报文。
2)异常终止一个连接。例如正常连接是通过FIN来关闭的,异常关闭就会用到RST来关闭。
3)检测半打开连接。如果一方已经关闭或异常终止连接而另一方却还不知道,我们将这样的TCP连接称为半打开(Half-Open)的。任何一端的主机异常都可能导致发生这种情况。半打开连接的另一个常见原因是当客户主机突然掉电而不是正常的结束客户应用程序后再关机。

2 关于RST里的序列号。参考的是RFC。在第32页有一个实例。摘录如下:
      TCP A                                                TCP B
  1.  CLOSED                                               LISTEN
  2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               ...
  3.  (duplicate) ... <SEQ=90><CTL=SYN>               --> SYN-RECEIVED
  4.  SYN-SENT    <-- <SEQ=300><ACK=91><CTL=SYN,ACK>  <-- SYN-RECEIVED
  5.  SYN-SENT    --> <SEQ=91><CTL=RST>               --> LISTEN
  通过例子,可以看出来。第5步里SYN的报文里的SEQ=91,实际上是对第4步里SYN ACK的ACK=91的进行的reset,两者是关联的。第4步里的ACK=90则是对第3步SEQ=90的确认。
  所以,依葫芦画瓢,这里RST里的SEQ=1和SEQ=2,实际上是对不同的连接进行的RST。其中,RST SEQ=1应该是针对#87的ACK=1的reset,而RST SEQ=2应该是针对#92的ACK=2的reset。

3 但我目前还没找到FIN等ACK的Timer是多少。

4 tcp建立后 几秒会发起FIN消息,是什么机制?这个和心跳又关系吗?
  这个应该没有Timer,而是由应用层控制的。如果是网页访问,则应该由HTTP控制。当数据接收或发送完毕。收端和发端都分别会向对方发送FIN ACK报文来正常关闭TCP连接。请参考Open GPRSHome Homepage.pcap文件的#114,115,116,118这4个报文。对应的就是tcp关闭的四步。如果只有一方关闭了TCP连接,就叫半关闭状态。例如PC没有数据发给Server,则PC可以发FIN给Server在PC端关闭连接,但还可以从Server端收数据,直到Server端也将连接关闭。

  RFC793就不放上来了。网上随便下。


附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册
www.gprshome.com: GPRS及移动通信技术学习交流分享平台。

使用道具 举报

Rank: 2Rank: 2

地板
发表于 2011-10-12 16:20:17 |只看该作者
回复 爱卫生 的帖子

4 tcp建立后 几秒会发起FIN消息,是什么机制?这个和心跳又关系吗?
  这个应该没有Timer,而是由应用层控制的。如果是网页访问,则应该由HTTP控制。


赞同爱总的说话,TCP 没有什么心跳机制,好像有个TIMER但是会很长,以小时为单位。好像TCP连接有个长连接和短连接的说法,长连接的话,如果应用层有心跳的话,一定要用长连接,比如diameter over TCP,SMPP。如果短连接的话,数据传输完,连接就马上释放,比如XCAP,LDAP.
由于TCP没有心跳这些缺点,所以引入了SCTP协议支持心跳。

使用道具 举报

Rank: 9Rank: 9

懒

5#
发表于 2011-10-12 20:53:16 |只看该作者
回复 arrowbroken 的帖子

  谢谢补充啊!
www.gprshome.com: GPRS及移动通信技术学习交流分享平台。

使用道具 举报

Rank: 2Rank: 2

6#
发表于 2011-10-13 09:49:57 |只看该作者
回复 爱卫生 的帖子

大家多交流!

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

站长邮箱|Archiver|51学通信 ( 粤ICP备11025688 )

GMT+8, 2024-11-26 00:42 , Processed in 0.028129 second(s), 14 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部