和UDP不同,TCP要考虑到网络的拥塞状况。发送方允许发送的数据量不仅要收接收方的控制(流量控制),而且还要有网络的拥塞状况(如果有的话)决定。

1、报文段:格式、封装、TCP的链接:TCP是面向连接的协议。面向连接的运输层协议在源点和终点之间建立了一条虚路径。同属于一个报文段的所有报文都沿着这条路径发送。为整个报文使用一条虚路径能够更容易的事实确认过程以及对损伤或丢失报文的重传。

2、连接建立:TCP以全双工方式传送数据。当俩个后台主机TCP建立连接后,他们应当能够同时向对方发送报文段。也就是说,在任何数据传送之前,双方必须对通信进行初始化,并得到对方的认可。

(1)三次握手:服务器程序告诉他的TCP自己已准备好接受链接。这个请求称为被动打开请求。虽然服务器的TCP已准备好接受来自世界上任何一个机器的链接,但是他自己并不能完成这个链接。客户程序发出的请求称为主动打开,打算与某个开放的服务器进行连接的客户告诉他的TCP,自己需要连接到某个特定的服务器上。TCP现在可以开始进行如图的过程。

1、客户发送第一个报文段(SYN报文段),在这个报文段中只有SYN标志置位1。这个报文段的作用是同步序号。在我们的例子中,客户选择了一个随机数作为第一个序号,并把这个序号发送给服务器。这个序号称为初始序号(ISN)。注意:这个报文段中不包括确认号,也没有定义窗口的大小。只有当一个报文段中包含了确认时候,定义窗口大小才有意义。这个报文段还可以包含一些选项。

SYN报文不携带任何数据,但是它要消耗一个序号。

2、服务器发送的第二个报文段,就是SYN+ACK报文段,其中的俩个标志(SYN和ACK)置为1。这个报文段有俩个目的。(1)首先它是另一个方向上通信的SYN报文段。服务器使用这个报文段来同步他的初始序号,以便从服务器向客户发送字节。(2)其次,服务器还通过ACK标志来确认已收到来自客户端的SYN报文段,同时给出期望从客户端收到的下一个序号。因为这个报文段包含了确认,所以他还需要定义接收窗口的大小。

3、客户发送第三个报文段。这仅仅是一个ACK报文段。他使用ACK标志和确认好字段来确认收到了第二个报文段。请注意:这个报文段的序号和SYN保温段使用的序号一样,也就是说,这个ACK报文段不消耗任何序号,客户还要必须定义客户