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

文章出自: http://www.blogjava.net/jasmine214--love/archive/2010/12/15/340680.html?opt=admin

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连接建立完成。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值