2012-03-26 19:53
TCP/IP三次握手协议
当两台主机采用TCP协议进行通信时,在交换数据前将建立连接。通信完成后,将关闭会话并终止连接。连接和会话机制保障了TCP的可靠性功能。
请参见图中建立并终止TCP连接的步骤。
主机将跟踪会话过程中的每个数据段,并使用TCP报头中的信息了解每台主机所接收到的数据。
每个连接都代表两股单向通信数据流或者会话。若要建立连接,主机应执行三次握手。TCP报头中的控制位指出了连接的进度和状态。
三次握手:
1.确认目的设备存在于网络上;
2.确认目的设备有活动的服务,并且正在源客户端要使用的目的端口号上接受请求;
3.通知目的设备源客户端想要在该端口号上建立通信会话。
在TCP连接中,充当客户端的主机将向服务器发起该会话。
TCP连接创建的过程分为三个步骤:
1.客户端向服务器发送包含初始序列值的数据段,开启通信会话;
2.服务器发送包含确认值的数据段,其值等于收到的序列值加1,并加上其自身的同步序列值。该值比序列号大1,因为ACK总是下一个预期字节或二进制八位数。通过此确认值,客户端可以将响应和上一次发送到服务器的数据段联接起来;
3.发送带确认值的客户端响应,其值等于接受的序列值加1。这便完成了整个建立连接的过程。
为了理解三次握手的过程,必须考察两台主机间交换的不同值。在TCP数据段报头中,有六个包含控制信息的1比特字段,用于管理TCP进程。这些字段分别是:
URG—紧急指针
ACK—确认字段
PSH—推送功能
RST—重置连接
SYN—同步序列号
FIN—发送方已传输完所有数据
这些字段用作标志,由于它们都只有1比特大小,所以它们都只有两个值:1或者0。当值设为1时,表示数据段中包含控制信息。
通过4步流程法,可以交换标志,以终止TCP连接。
TCP三次握手
步骤1:
TCP客户端发送带同步序列号(SYN)控制标志设置的数据段,指示包含在报头中的序列号字段的初始值,用以开启三次握手。序列号的初始值称为初始序列号(ISN),由系统随机选取,并用于跟踪会话过程中从客户端到服务器的数据流。在会话过程中,每从客户端向服务器发送一个字节的数据,数据段报头中包含的ISN值就要加1。
如图所示,协议分析器的输出结果中显示了SYN控制标志和相应的序列号。
SYN控制标志被置位并且相应的序列号设定为0。尽管图中的协议分析器已显示了序列号和确认号的相应值,但其真实值应该为32位二进位数字。我们可以通过研究Packet Bytes窗格确定数据段报头中发送的实际数值。此处您可以看到以十六进制显示的四个字节。步骤2:
TCP服务器需要确认从客户端处收到SYN数据段,从而建立从客户端到服务器的会话。为了达到此目的,服务器应向客户端发送带ACK标志设置的数据段,表明确认编号有效。客户端将这种带确认标志设置的数据段理解为确认信息,即服务器已收到从TCP客户端发出的SYN信息。
确认编号字段的值等于客户端初始序列号加1。此时创建从客户端到服务器的会话。ACK标志将在会话其间保持设置。我们在前面已经学过,客户端和服务器之间的会话实际上是由两个单向的会话组成的:一个是从客户端到服务器的会话,另一个则正好相反。在三次握手过程的第二步中,服务器必须发起从服务器到客户端的响应。为开启会话,服务器应采用与客户端同样的方法使用SYN标志。该操作设置报头中的SYN控制标志,从而建立从服务器到客户端的会话。SYN标志表明序列号字段的初始值已包含在报头中,且该值将用于跟踪会话过程中从服务器返回客户端的数据流。
如右图所示,协议分析器的输出结果中显示了ACK和SYN控制标志的设置,以及相应的序列号和确认号。
步骤3:
最后,TCP客户端发送包含ACK信息的数据段,以示对服务器发送的TCP SYN信息的响应。在该数据段中,不包括用户数据。确认号字段的值比从服务器接收的初始序列号值大1。一旦在客户端和服务器之间建立了双向会话,该通信过程中交换的所有数据段都将包含ACK标志设置。
如图所示,协议分析器的输出结果中显示了ACK控制标志,以及相应的序列号和确认号。
通过以下方式,可以加强数据网络的安全性:
拒绝建立TCP会话;
只允许建立特定服务的会话;
只允许已建立会话之间的通信。
以上安全策略可以应用于所有TCP会话,也可以仅应用于某些选定会话。
若要关闭连接,应设置数据段报头中的FIN(结束)控制标志。为终止每个单向TCP会话,需采用包含FIN数据段和ACK数据段的二次握手。因此,若要终止TCP支持的整个会话过程,需要实施四次交换,以终止两个双向会话。注意:在本部分中,为了更容易理解,采用了客户端和服务器端进行说明。实际上,终止的过程可以在任意两台完成会话的主机之间展开。
1.当客户端的数据流中没有其它要发送的数据时,它将发送带FIN标志设置的数据段;
2.服务器发送ACK信息,确认收到从客户端发出的请求终止会话的FIN信息;
3.服务器向客户端发送FIN信息,终止从服务器到客户端的会话;
4.客户端发送ACK响应信息,确认收到从服务器发出的FIN信息。
当会话中的客户端没有其它要传输的数据时,它将在数据段报头中设置FIN标志。然后,会话中的服务器端将发送包含ACK标志设置的一般数据段信息,通过确认号确认已经收到所有数据。当所有数据段得到确认后,会话关闭。
另一方向的会话采用相同的方式关闭。接收方在数据段的报头中设置FIN标志,然后发送到发送方,表明没有其它需要发送的数据。返回的确认信息确定已接收所有数据,随即该方向的会话关闭。
如右图所示,在数据段报头中设置了FIN和ACK控制标志,并从而关闭了HTTP会话。
也可以通过三次握手方式关闭连接。当客户端没有其它要传输的数据时,它将向服务器发送FIN信息。如果服务器也没有其它要传输的数据,它将发送同时包含FIN和ACK标志设置的响应信息,将两步并作一步。最后,客户端返回ACK信息。