查看: 122266|回复: 58

[原创]TCP建立及关闭过程详解

[复制链接]
发表于 2006-4-30 12:04:14 | 显示全部楼层 |阅读模式
关键字:TCP 协议 三次握手 科来 网络 分析 协议分析
一、TCP协议简介
TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务。
TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。
可以从以下几个方面对TCP协议进行分析:
1.TCP报头:TCP报头总长最小为20个字节,其报头结构如下图(图1)所示;
  比特0             比特15   比特16             比特31
源端口(16)        目的端口(16)
序列号(32)
确认号(32)
报头长度(4)        保留(6)        连接标记(6)        窗口(16)
校验和(16)        紧急(16)
选项(0或32)
数据(可变)

(图1 TCP报头结构)

2.TCP连接建立:TCP的连接建立过程又称为TCP三次握手。首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;接收方主机在收到这个请求后向送方主机回复一个同步/确认(SYN/ACK)应答;发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立;
3.TCP连接关闭:发送方主机和目的主机建立TCP连接并完成数据传输后,会发送一个将结束标记置1的数据包,以关闭这个TCP连接,并同时释放该连接占用的缓冲区空间;
4.TCP重置:TCP允许在传输的过程中突然中断连接,这称为TCP重置;
5.TCP数据排序和确认:TCP是一种可靠传输的协议,它在传输的过程中使用序列号和确认号来跟踪数据的接收情况;
6.TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方,这称为TCP重传;
7.TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。
8.TCP数据保护(校验和):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2006-4-30 12:06:12 | 显示全部楼层
二、跟踪分析TCP流程
我们使用科来网络分析系统对一个Telnet会话中的TCP部分进行跟踪,以分析TCP的连接建立和连接关闭流程。这个Telnet会话的流程如下:在客户端(Windows主机,名为wangym)的命令窗口中使用telnet 192.168.2.100访问192.168.2.100,并输入用户名和密码(这里都是ftpuser),然后直接使用exit命令退出此Telnet连接。
1. TCP连接建立
1)第1步(图2),客户端(名为wangym,下同)使用3192的随机端口向192.168.2.100主机的23端口发起一个TCP 同步数据包请求建立TCP连接。这个数据包将TCP标记中的同步位置1,表示这是TCP三次握手的第一个数据包;

(图2 TCP连接建立第1步)

2)第2步(图3),192.168.2.100主机向客户端发送一个同步/确认数据包,此数据包同时将TCP标记中的同步位和确认位置1,它既对第一步中的客户端同步数据包进行确认,表示愿意与客户端同步,同时再对客户端主机进行同步请求;

(图3 TCP连接建立第2步)

3)第3步(图4),客户端在收到192.168.2.100对它的同步请求后,再对192.168.2.100进行确认,此数据包中将TCP标记中的确认位置1,表示这是一个确认数据包,此数据包发送后,两台主机的三方握手成功建立;

(图4 TCP连接建立第3步)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2006-4-30 12:07:44 | 显示全部楼层
2. TCP连接关闭
第4到69的数据包,是用户进行Telnet登录及退出的操作,第70到74的数据包,是双方主机在收到退出Telnet操作命令后的TCP连接关闭过程。
1)第1步(图5),192.168.2.100主机向客户端发送一个终止数据包,此数据包同时将TCP标记中的终止位和确认位置1,它告诉客户端192.168.2.100主机已成功接收客户端的上一个数据包,并提示内容接收完毕,请求关闭这个TCP连接;

(图5 TCP连接关闭第1步)

2)第2步(图6),客户端收到192.168.2.100发给自己且带有终止位的数据包后,对其进行确认,且示同意关闭此TCP连接。

(图6 TCP连接关闭第2步)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2006-4-30 12:08:39 | 显示全部楼层
3)第3步(图7),客户端在对192.168.2.100主机的确认后,再向其发送一个终止TCP连接的请求,此请求数据包将TCP标记中的确认位和终止位同时置1,表示同意192.168.2.100关闭TCP连接的请求,且自己也把关闭此TCP连接的请求发给192.168.2.100,并等待对方的确认。
  
(图7 TCP连接关闭第3步)

4)第4步(图8),192.168.2.100主机对客户端关闭TCP连接的请求进行确认,此数据包将TCP标记中的确认位置1,表示同意客户端关闭TCP连接的请求。至此,此TCP连接正常关闭。
  
(图8 TCP连接关闭第4步)


------------完

[ 本帖最后由 菜鸟人飞 于 2006-4-30 12:09 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

发表于 2006-4-30 13:50:17 | 显示全部楼层
长见识了,一直只知道TCP三次握手建立连接,还从不知道TCP四步关闭。
回复

使用道具 举报

发表于 2006-5-8 09:27:50 | 显示全部楼层
好文章不能错过,
这是TCP关闭的正常情况~
回复

使用道具 举报

发表于 2006-5-8 10:17:02 | 显示全部楼层
科来网络分析系统把协议细节名称汉化
对新手协议入门学习很有帮助

第一次试用 影响不怎么好 但相关开发人员态度很好 很有耐心
下来有时间 也下载一个继续试用
回复

使用道具 举报

发表于 2006-5-8 12:07:15 | 显示全部楼层
原帖由 jingshne 于 2006-5-8 09:27 发表
好文章不能错过,
这是TCP关闭的正常情况~

版主,TCP关闭的非正常情况是怎样的呢?
回复

使用道具 举报

 楼主| 发表于 2006-5-8 15:18:45 | 显示全部楼层
非正常关闭时,不会发结束(Fin)数据包,而直接发重置(RST)数据包。
回复

使用道具 举报

发表于 2006-5-9 09:13:38 | 显示全部楼层
照着stevens的《TCP/IP详细I》画了张TCP状态变迁图,这张图比较精典,基本上可以让咱们了解一下这个变迁过程。

主要是两种:一是被动打开和被动关闭,一是主动打开和主动关闭。

还有极其不常见的,同时打开,同时关闭。

另外就是异常断开,发送RST,不过有时可能连RST等任何一种关闭的包都来不急发,造成半打开状态。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×

评分

1

查看全部评分

回复

使用道具 举报

发表于 2006-5-11 13:21:50 | 显示全部楼层
jingshne版主,有点迷惑啊,箭头太多,不太懂。
有文字叙述没有呢?
勿怪我这个新手。
回复

使用道具 举报

发表于 2006-5-29 17:33:01 | 显示全部楼层

请教斑竹,TCP什么情况下才会发起异常终止(RST)?

我用ethereal抓取上网数据,经常看见客户端
在服务器发送Fin 发起终止后;
客户端发送 ACK;随后又发送一个RST而不是正常的终止。

请指教。
回复

使用道具 举报

发表于 2006-5-30 09:18:26 | 显示全部楼层
TCP状态变迁图的理解:


当计算机之间传输数据时,计算机可以作为客户端,也可以做为服务器,

1.  如果计算机作为客户端,他将通过发送SYN段来启动连接。这时候的状态是SYN—SENT。一旦客户端受到了确认以及服务器的SYN段,它将对服务器的SYN进行确认,并奖连接状态转换成ESTABLISHED。如果客户端计算机想要终止连接,他将发送一个FIN并将连接状态变为FIN-WAIT1。接着客户端收到服务器的一个确认,并将状态转换为FIN-WAIT2,然后等待服务器发送FIN段以完成连接的终止过程。当服务器最后发送FIN段时,连接状态就转换为TIME-WAIT。如果客户端在两分钟等待期限内为服务器的FIN发送确认消息,连接就彻底中断了,并且此时状态变成了CLOSED。如果超过了定时器设置的时间,连接就自动中断。

2.如果计算机作为服务器,就打开LISTEN状态,然后等待客户端启动连接。当客户端通过发送SYN段来启动连接时,该计算机就用一个SYN段和一个确认作为响应,这就将连接的状态边为了SYN-RCVD。于是客户端通过发送一个确认来确认服务器的SYN。受到客户端的确认后,连接就建立起来了,这时以ESTABLISHED状态为标志。到客户端想要终止连接时,就发送一个FIN段,服务器将对此作出确认。这时服务器变成CLOSE-WAIT状态,他上面的TCP服务将等待它的应用来决定是否终止连接。当服务器应用决定终止连接时,它就允许TCP发送FIN段,这时连接状态就边成了LAST-ACK,在这个FIN段确认受到后,连接将再次变为CLOSE状态。

注:所有连接状态都是以CLOSED状态开始的。

[ 本帖最后由 菜青虫 于 2006-5-30 09:20 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2006-5-30 10:50:17 | 显示全部楼层
原帖由 nevsylv 于 2006-5-29 17:33 发表
我用ethereal抓取上网数据,经常看见客户端
在服务器发送Fin 发起终止后;
客户端发送 ACK;随后又发送一个RST而不是正常的终止。

请指教。

引起RST的原因可能有:
网络攻击
服务器响应太慢,用户终止连接
半连接(三次握手不完整的TCP连接)现象 
老版本浏览器使用复位连接的方法关闭HTTP连接,由于某些局域网中有大量老版本浏览器存在,所以出现TCP复位连接是很普遍的。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2006-6-7 10:09:43 | 显示全部楼层
很不错的TCP链接教材
回复

使用道具 举报

发表于 2006-6-8 21:09:01 | 显示全部楼层
真是好东西,使我更加清楚TCP协议!
回复

使用道具 举报

发表于 2006-6-26 17:08:41 | 显示全部楼层
长见识了,谢谢楼主,我又进步了!
回复

使用道具 举报

发表于 2006-6-29 17:29:25 | 显示全部楼层
谢谢楼主,我比较笨下来慢慢研究
回复

使用道具 举报

发表于 2006-7-6 20:48:57 | 显示全部楼层
原帖由 masinfo 于 2006-6-29 17:29 发表
谢谢楼主,我比较笨下来慢慢研究

           
回复

使用道具 举报

发表于 2006-7-11 16:33:36 | 显示全部楼层
只知道TCP三次握手建立连接,还从不知道TCP四步关闭。
回复

使用道具 举报

发表于 2006-7-17 11:40:46 | 显示全部楼层

ooooccc

啥东西?  晕死!!

[ 本帖最后由 flamen 于 2006-10-17 21:20 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

发表于 2006-7-19 00:59:59 | 显示全部楼层
真是好东西,使我更加清楚TCP协议!
回复

使用道具 举报

发表于 2006-8-29 00:22:02 | 显示全部楼层
顶,可靠传输,可能就是要三次吧,
我下下来了,慢慢在研究下
我喜欢先理论在实践
回复

使用道具 举报

发表于 2006-9-4 15:12:13 | 显示全部楼层
对TCP有一个比较详细的认识了,谢谢
回复

使用道具 举报

发表于 2006-9-4 20:16:57 | 显示全部楼层
对tcp又有了新的认识,非常感谢楼主!
回复

使用道具 举报

发表于 2006-11-1 18:52:03 | 显示全部楼层
原来这样关闭啊!
以前还不知道哦!
回复

使用道具 举报

发表于 2006-11-22 22:22:39 | 显示全部楼层
今天知道了这样关闭的了!
回复

使用道具 举报

发表于 2006-11-30 15:56:05 | 显示全部楼层
为啥我试了一下,关闭就两个步骤啊!
回复

使用道具 举报

发表于 2006-11-30 16:45:49 | 显示全部楼层
对tcp又有了新的认识,非常感谢楼主!
回复

使用道具 举报

发表于 2006-12-7 23:02:28 | 显示全部楼层
真是好东西,使我更加清楚TCP协议!


慢慢学着。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

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