首页 百科知识 连接建立的三次握手过程

连接建立的三次握手过程

时间:2024-10-01 百科知识 版权反馈
【摘要】:例如:SYN字段设为1,表示该报文是一个同步报文;发送序号字段设置为一个B随机生成的32位值y;确认号字段设置为A发送的SYN报文段中的发送序号字段的值再加上1,即x+1;MSS字段指明接收方B允许接收的TCP报文段的最大长度等。若第一个请求导致建立了一个由(x,y)标识的连接,而第二个请求也建立了一个由(x,y)标识的连接,则在TCP实体内部只会存在一个TCP连接表项(x,y)。

为了建立连接TCP连接,通信双方必须从对方了解如下信息:

◆ 对方报文发送的开始序号。

◆ 对方发送数据的缓冲区大小。

◆ 能被接收的最大报文段长度MSS。

◆ 被支持的TCP选项。

如图5.7与图5.8所示,在TCP协议中,通信双方将通过三次TCP报文段的交换来实现对以上信息的了解,并在此基础上建立一个TCP连接,而通信双方的三次TCP报文段的交换过程,也就是通常所说的TCP连接建立实现的三次握手(Three-Way Handshake)过程,其中:

图5.7 使用三次握手法建立TCP连接的过程

图5.8 使用三次握手法建立TCP连接过程的形象描述

◆ 第一次握手(发起方发送同步报文段SYN):TCP连接的发起方A向接收方B发送一个TCP同步报文段SYN(Synchronize),在该报文段的头部选项中会包含一些选项与对方协商,例如:SYN字段设为1,表示该报文是一个同步报文;发送序号字段设为一个A随机生成的32位值x;确认号字段设为0;MSS字段指明发起方A允许接收的TCP报文段的最大长度等。

图5.9 两台主机同时企图建立一个相同连接的情形

◆ 第二次握手(接收方发送同步确认报文段SYN-ACK):在B收到SYN报文之后,B将回送SYN-ACK报文段给发送方A,在该报文段的头部选项中仅包含A发送的SYN报文段中的选项。例如:SYN字段设为1,表示该报文是一个同步报文;发送序号字段设置为一个B随机生成的32位值y;确认号字段设置为A发送的SYN报文段中的发送序号字段的值再加上1,即x+1;MSS字段指明接收方B允许接收的TCP报文段的最大长度等。

◆ 第三次握手(发送方发送确认报文段ACK):在TCP连接的发起方A收到了接收方B回送的SYN-ACK报文之后,A再向B发送一个ACK报文,在ACK报文中确认被发起方A使用的最终TCP参数,同时也向B确认它该使用同样的参数,自此TCP连接建立完成。例如:发送序号字段设为A随机生成的32位值x再加上1,即x+1;而确认号字段设置为B随机生成的32位值y再加上1,即y+1,等等。

当连接建立完成之后,则:

①TCP连接的通信双方均可知道连接上对方将被发送的第一个字节的序列号(发给对方的确认号,A发给B的确认号就是B将发送的序列号,同样B也是);

②双方均可知道连接上能发送的MSS,从而即可选取握手阶段双方交换的SYN报文和SYN+ACK报文中MSS选项中较小的值作为实际值;

③双方均可知道对方的接收缓冲区大小;

④ 双方均可知道对方能否使用SACK、窗口缩放等选项。

基于这些信息,双方即可建立一个TCP连接(x,y)并基于该连接开始报文段的传输。

如图5.9所示,采用三次握手法建立TCP连接,如果有两台主机同时企图在同样的套接字之间建立一个连接,则结果将只有一个连接被建立起来(这两个连接被看作完全相同,即为同一个连接),因为所有的连接都是由它们的端点来标识的。若第一个请求导致建立了一个由(x,y)标识的连接,而第二个请求也建立了一个由(x,y)标识的连接,则在TCP实体内部只会存在一个TCP连接表项(x,y)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈