软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
TCP连接的建立与终止

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站


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是服务器执行主动关闭。




相关文章

相关软件