TCP连接的建立与终止

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

TCP连接的建立与终止

这里详细介绍了tcp连接和关闭的过程,尤其要掌握三次握手的过程,这是SYN攻击的原理。

三次握手:

下列步骤建立一个TCP连接:

服务器必须准备好接受外来的连接。这通过调用socket,bind,listen函数来完成,即被动打开(Passive open)。

客户通过conmect进行主动打开(active open)。这引起客户TCP发送一个SYN分节(表示同步),他告诉服务器客户将在待建立的连接中发送的数据的初始序列号。一般情况下syn分节不携带数据。他只包含一个IP头,一个TCP头,及可能携带的TCP选项。

服务器必须确认客户的Syn,同时自己也得发送一个SYN分节,他含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个分节向客户发送SYN和对客户SYN的ACK。

客户必须确认服务器的SYN。

连接至少需要三个分组,因此称做三次握手(three-way handshake)。

如果客户的初始序列号为J,服务器的初始序列号为K。在ACK里的确认号为发送这个ACK的一方所期待的对方的下一个序列号。因为SYN只占一个字节的序列号空间,所以每一个SYN的ACK中的确认号都是相应的初始序列号加一。类似的,每一个FIN的ACK中的确认号为FIN的序列号加一。

TCP选项

每一个SYN可以含有若干个TCP选项。通常使用的选项有:

MSS选项(MAX segment size )。

窗口规模选项。

时间戳选项。

TCP连接终止

TCP的连接需要用三个分节建立一个连接,终止一个连接则需要四个分节!

某个应用进程首先调用close,我们称为主动关闭(active close)。这一端的Tcp于是发送一个FIN分节,表示数据发送完毕。

接受到FIN的另一端执行passive close。这个FIN由TCP确认。他的接受也作为文件结束符传送给接受方应用进程,因为FIN意味着应用进程在此连接上再也接受不到额外数据。

一段时间后,接受到文件结束符的应用进程将调用close,关闭他的套接口。这导致他的TCP也发送一个FIN。

接收到这个FIN的原发送方TCP对他进行确认。

因为每个方向都需要有一个FIN和ACK,所以一般需要四个分节。

有时候,步骤1的FIN随数据一起发送。

执行被动关闭的方在步骤2,3时的FIN和ACK也可以合并为一个分节。

当进程终止时,所有打开的描述字都将关闭,此时仍然打开的TCP连接上也会发出一个FIN。

通常是由客户执行主动关闭,但HTTP是服务器执行主动关闭。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航