TCP的连接和终止
TCP是一个面向连接的协议。在传输数据前必须要建立连接,在停止传输数据后要终止连接释放资源。
一.TCP连接建立
TCP连接是在IP网络中两个进程间(应用层协议)的双向、全双工的逻辑回路。由节点的IP地址和端口将连接双方对应起来。
1.TCP连接特点:
tcpip协议中基于tcp协议的应用程序∙通过一个握手进程建立起来;
∙通过一个周期性保持进程来保持,保证两个TCP节点间处于激活状态;
∙通过一个握手进程来终止,释放资源。
∙TCP连接也被连接中的任意一端重置。
1.TCP连接的建立
为了建立连接TCP连接双方必须从对方了解下面的信息:
∙ 1.对方数据发送的开始序列号;
∙ 2.对方在出站管道上发送数据的缓冲区大小;
∙ 3.能被接收的最大段MSS;
∙ 4.被支持的TCP选项;
通过3个TCP段的交换来了解这些信息,就是常说的TCP 握手的3个包。一般在客户端访问TCP服务器的时候,在客户端初始化一个TCP连接,服务器端打开一个特殊端口等待传入的请求。客户端主动发起第一个 SYN置位的包开始协商TCP连接。服务器接收后向客户端回ACK,最后客户端在向服务器回复ACK后连接建立。
下面我们用TCP连接的两个对等端A和B来详细介绍握手过程,其中发起方是A。
TCP 连接建立进程的3个TCP段交换
段一:同步(SYN)段
TCP连接的发起方A向B发送第一个TCP同步段(SYN).在TCP头部的选项中会包含一些选项与对端协商。
TCP 头部包含如下字段:
目的端口 TCP连接对端B被动打开的TCP端口数
源端口 TCP连接发起方A主动打开的端口,大多数是一个随机一个端口。
序列号 SYN的序列号ISN1可以看作是一个32位的计数器,由发起方A 产生,具有一定的随机性。Windows 2003和XP根据派生启动
(startup-derived)、2048位的随机密钥和一个基于RC4的随机数来计算ISN,从而减少下一TCP连接的 ISN被预测的可能性。
确认号设置为0.SYN握手第一个包的ACK字段不重要,此时刚发起连接没有数据报需要确认。但后续的ACK是重要的。
SYN标志置1.
窗口设置为默认值,指示本地TCP接收缓冲区大小的初始值。
MSS TCP选项中的MSS指示发起方A接收的最大的TCP段。
选择性确认(SACK) –TCP选项如果包含这个字段,可以指示发起方A 的TCP能接收和解释此选项。
窗口缩放选项如果包含,指示出发起方A的TCP能接收和支持此选项。
协商好窗口因子后此连接就固定使用直到断开连接
一个FTP会话的SYN段
段二:SYN-ACK段
在B收到SYN包后,B将发SYN-ACK,TCP选项仅包含发起方A发送的SYN 包中的的选项。
目的端口设置为A的源端口
源端口设置为B端口
序列号 B产生自己的序列号ISN2。和A发送的SYN中的ISN没有关系,仅产生的方法一样。
确认号期望收到的对端的下一个字节ISN1+1.
SYN标志置1.
ACK标志置1,必须有此标志,除了SYN中置0外,SYN之后的所有报文(包括SYN-ACK和实际数据包都会带ACK的标志)。
窗口设置B可以接收的最大窗口值,一般根据应用程序或者操作系统默认指定。
MSS TCP选项设为B能接收的最大长度的TCP段;
SACK-许可如果A发送的SYN包含此选项时才使用此选项,表示B 的TCP能接收和解释SACK选项。
窗口缩放选项如果SYN包含,此时才会包含。
一个FTP会话的SYN-ACK段 段3:ACK段
在TCP连接的发起方A收到SYN-ACK后,A再向B发送ACK。ACK中确认被发起方A使用的最终TCP参数,同时向B确认它该使用同样的参数。自此TCP连接建立完成。
一个FTP会话的SYN-ACK段
2.同时打开
两个应用程序同时执行主动建立TCP的连接的可能性是存在的,此时发送到SYN 建立需要交换4个包,如图所示:
同时打开报文交换
需要注意的是,即使同时打开仍然只建立一条连接。(但其他的协议不一定)3.TCP 连接的结果
∙ 1.每一个TCP对等端知道连接上对方将被发送的第一个字节的序列号(发给对方的确认号,A发给B的确认号就是B将发送的序列号,同样B也是。)∙ 2.每一个TCP对等端知道连接上能发送的MSS。选取握手阶段SYN和SYN+ACK包中MSS选项中较小的值。以此值开始进行PMTU的发现机制。
∙ 3.知道连接对端接收缓冲区大小,即窗口大小。
∙ 4.每个对等端知道对方能否使用SACK,窗口缩放等选项。
4.Windows控制TCP建立连接进程的注册表:TcpMaxConnectRetransmissions
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\P arameters
Data Type:REG_DWORD
Valid range:0~255
Default value:2
Present by default:No
设定当试图建立一个TCP连接时,会重传多少次SYN。每次间隔时间加倍。初始的RTO为3秒,并且默认值为2,这样第一次SYN等待3秒后重传第一次,在等待6秒后重传第二次,在等待12秒没有SYN+ACK就超时了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论