TCP的连接和终止(TCP/IP详解)

TCP是一个面向连接的协议,连接建立需要经过三次握手,包括SYN和SYN-ACK段交换。连接建立后,通过TCP保活定时器维持连接。终止连接则需要四次挥手。同时打开和半开连接是TCP连接的特殊情况。Windows系统中有相应的注册表参数用于控制TCP连接建立和防御SYN攻击。
摘要由CSDN通过智能技术生成

TCP的连接和终止

TCP是一个面向连接的协议。在传输数据前必须要建立连接,在停止传输数据后要终止连接释放资源。

一.TCP连接建立

TCP连接是在IP网络中两个进程间(应用层协议)的双向、全双工的逻辑回路。由节点的IP地址和端口将连接双方对应起来。 
     1.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。

image 
                   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能接收和支持此选项。协商好窗口因子后此连接就固定使用直到断开连接  
    image   
                            一个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包含,此时才会包含。 
    image 
                                 一个FTP会话的SYN-ACK段
  • 段3:ACK段 
    在TCP连接的发起方A收到SYN-ACK后,A再向B发送ACK。ACK中确认被发起方A使用的最终TCP参数,同时向B确认它该使用同样的参数。自此TCP连接建立完成。 
    image 
                  一个FTP会话的SYN-ACK段

2.同时打开

两个应用程序同时执行主动建立TCP的连接的可能性是存在的,此时发送到SYN建立需要交换4个包,如图所示:

image  
                            同时打开报文交换

需要注意的是,即使同时打开仍然只建立一条连接。(但其他的协议不一定)

3.TCP 连接的结果

  • 1.每一个TCP对等端知道连接上对方将被发送的第一个字节的序列号(发给对方的确认号,A发给B的确认号就是B将发送的序列号,同样B也是。)
  • 2.每一个TCP对等端知道连接上能发送的MSS。选取握手阶段SYN和SYN+ACK包中MSS选项中较小的值。以此值开始进行PMTU的发现机制。
  • 3.知道连接对端接收缓冲区大小,即窗口大小。
  • 4.每个对等端知道对方能否使用SACK,窗口缩放等选项。

4.Windows控制TCP建立连接进程的注册表:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值