购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.2 TCP连接的建立

介绍TCP的头部格式,无非是为了说明它的工作方式,下面我们结合上面介绍的一部分内容,特别是其中的几个标记位,来介绍TCP的工作流程。

TCP既然称为面向连接的协议,必然就会在通信之前先建立连接。总的来说,一个TCP连接通常会经历三个阶段,分别为连接建立、数据传输及连接释放。我们先从TCP连接的建立过程说起。注意,为了简化叙述,在这个过程中,我们只把重点放在与连接建立相关的序列号、确认号及相应的标记位上,不考虑连接的端口号与其他头部字段。

如图2-5所示,TCP连接建立的过程常常称为“ 三次握手 ”。假设客户端要和服务器建立TCP连接,而三次握手就是客户端与服务器之间交换ISN(初始序列号)的过程。假设客户端的ISN值为x,服务器的ISN值为y,那么三次握手的过程可以描述如下。

图2-5 TCP连接建立

第一次握手

客户端向服务器发送一个数据包,是为了与对方建立TCP连接。为了说明这个意图,这个数据包会在头部字段中说明以下几点。

● 我希望和你建立TCP连接(将头部的SYN标记设置为1)。

● 我把我的初始序列号提供给你(将序列号字段的值设置为自己的初始序列号值x。注意,我们之前说过,序列号表示数据的第一个字节,但TCP规定,TCP连接建立的第一个SYN数据包不能携带数据部分,但它也会占用一个序列号)。

注意,这个数据包头部的ACK字段的值就是0,因为这是双方的第一次交流,没有先前的信息可以确认。

第二次握手

服务器收到了客户端发送的数据包,同意与客户端建立连接。这时,服务器也会向客户端发送一个数据包。这个数据包旨在说明下面几点。

● 同意和你建立TCP连接(将头部的SYN标记设置为1)。

● 你发来的请求信息已阅,期待收到你的下一个数据包(将ACK标记设置为1,确认号的值设置为x+1)。

● 我也把我的初始序列号提供给你(将序列号字段的值设置为自己的初始序列号值y。注意,TCP又规定了,这也是个SYN数据包,所以这个数据包也不能携带数据部分,但它也会占用一个序列号)。

第三次握手

客户端在收到服务器发送的数据包后,知道服务器同意与自己建立TCP连接,并与自己交换了初始序列号,此时它会向服务器发送三次握手过程中的最后一个数据包,这是为了告诉对方下述信息。

● 你发来的回复信息已阅,期待收到你的下一个数据包(将头部的ACK标记设置为1,确认号的值设置为y+1)。

● 这是根据你的要求发送给你的下一个数据包(将序列号值设置为x+1。注意,这个数据包不再是SYN数据包了,因此它如果不携带数据,就不会占用序列号,这里我们姑且假设它携带了数据)。

显然,三次握手是通过TCP传输数据的前奏。连接建立之后,双方就可以开始在这个连接的基础之上传输数据了。那么,数据传输完成之后呢? mImNlZ7VQMaIXaXG+Y9eE7SX4MjrU5tK+Lmgg2FjBhlVeTDN3SQuLgH6PDrLHe40

点击中间区域
呼出菜单
上一章
目录
下一章
×