TCP连接状态详解

来源:互联网 发布:sogo 输入法 ubuntu 编辑:程序博客网 时间:2024/04/29 08:41

做性能测试进行分析时,时常会涉及到TCP连接的查看与分析,ESTABLISED和CLOSED容易理解,但TIME_WAIT,CLOSE_WAIT,FIN_WAIT_1等等这些状态就让人看了迷糊了。最近在分析一个Apache与Jboss AJP连接半断开问题时候,用到了这些知识,于是学习了一点资料作为补充。资源来源《TCP IP协议详解》。放两张图吧,呵呵:

 

 

按图中的表述,看到的连接CLOSE_WAIT和FIN_WAIT_2应该是一一对应的,但实际上我只看到前者,协议对FIN_WAIT_2状态没有超时规定的,虽然有些操作系统进行了这方面的实现,时间也多在几分钟或者10分钟左右,没理由只出现二者中的一种状态,这个问题有待深入研究一下。

 

MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,而ip头中有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。