TCP协议

来源:互联网 发布:淘宝招聘兼职 编辑:程序博客网 时间:2024/06/08 19:37

1.概述
2.TCP首部
3.序列号与确认应答
4.超时重传
5.连接管理
6.窗口控制
7.流量控制
8.拥塞控制

1.概述

  TCP和UDP都使用相同的网络层IP,但是与UDP不同的是,TCP是面向连接的,可靠的字节流协议。因此,在传输数据之前通信双方必须建立一个TCP连接。TCP通过检验和,序列号,确认应答,重发机制,连接管理以及窗口控制等机制实现可靠性传输。

 TCP通过以下方式提供可靠性:
  

  1. 应用程序被分割成TCP认为最合适发送的数据块,即进行TCP分段。这点与UDP完全不同,应用程序产生的UDP数据报长度将保持不变,在IP层将UDP数据报加上IP首部后,必要时对其进行IP分片。
  2. 当TCP发出一个报文段后,它会启动一个定时器,等待目的端确认收到这个报文段,如果没能及时收到该确认信息,则将重发这个报文段。即超时重传。
  3. 当TCP接收端收到发自连接另一端的TCP报文段时,它将发送一个确认,这个确认不是立即发送的,通常会推迟几分之一秒。即确认应答。
  4. TCP将保持它的首部和数据的校验和。这是一个端到端的校验和,目的是检查数据在传输过程中的任何变化。如果收到的报文段的校验和有差错,TCP将丢弃该报文段,同时不发送确认收到的消息,从而使发送端超时重发。
  5. 由于TCP报文段作为IP数据报来传输,IP数据报的到达可能会失序,如果必要,TCP将对收到的数据进行重排序,将收到的数据以正确的顺序交给应用层。
  6. 由于IP数据报有可能重复,TCP的接收端必须丢弃重复的数据。
  7. TCP能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许另一端发送接收缓冲区所能接纳的数据,这将防止较快主机致使较慢主机的缓冲区溢出。即流量控制。

2.TCP首部

TCP首部如下图所示:
这里写图片描述

TCP首部比UDP首部复杂很多,并且没有表示包长度和数据长度的字段,可由IP层获取TCP的包长度,并由TCP包长度可知数据的长度。下面对TCP首部的各个字段进行简单介绍:

  • 源端口号:表示发送端端口号,字段长16位;
  • 目的端口号:表示接收端端口号,字段长16位;
  • 序列号:字段长32位,是指发送数据的位置,即标识从发送端向接收端发送的字节流。每发送一次数据,就累加一次该数据字节数的大小。序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然不携带数据,但是也会作为一个字节增加相应的序列号。由此可知,建立TCP连接最主要的目的是为了初始化序列号;
  • 确认应答:该字段长32位,是指下一次应该收到的数据的序列号。实际上,它是指已都到确认号减一为止的数据。发送端收到确认应答后可以认为在这个序列号以前的数据都已经被正常接收;
  • 首部长度(数据偏移):该字段表示TCP所处传输的数据部分应该从TCP包的哪个位置开始计算,可以把它看作是TCP首部的长度。该字段长4位,单位是4字节(即32位)。不包括选项字段的话,TCP首部长度为20个字节,因此,数据偏移字段可设置为5。反之,若该字段值为5(5 × 4 = 20字节),那么说明从TCP包的一开始到20字节位置都是TCP首部,余下的部分为TCP数据;
  • 保留:该字段主要是为了以后拓展时使用,其长度为4位,一般设为0,但即使收到的包在该字段不为0,此包也不会被丢弃;
  • 控制位:字段长为8位,每一位从左到右分别为CWR, ECE, URG, ACK, PSH, RST, SYN, FIN. 这些控标志也叫做控制位。当他们的对应位上值为1时,具体含义如下:
    • CWR: CWR标志和后面的ECE标志都用于IP首部的ECN字段,接收到对方发来的数据包ECE标志为1时,则设置要发送的数据包的CWR标志为1,通知对方已将拥塞窗口缩小;
    • ECE: 若其值为1则会通知对方,从对方到这边的网络有阻塞。在收到的数据包的IP首部中ECN为1时将TCP首部中的ECE设为1;
    • URG : 该位标志设为1,表示包中有需要紧急处理的数据,对于需要紧急处理的数据,与后面的紧急指针有关;
    • ACK : 该位设为1,确认应答的字段有效,TCP规定除了最初建立连接时的SYN包之外该位必须设为1;
    • PSH : 该位设为1,表示需要将收到的数据立刻传给上层应用协议,若设为0,则先将数据进行缓存;
    • RST : 该位设为1,表示TCP连接出现异常必须强制断开连接;
    • SYN : 用于建立连接,该位设为1,表示希望建立连接,并在其序列号的字段进行序列号初值设定;
    • FIN : 该位设为1,表示今后不再有数据发送,希望断开连接。当通信结束时希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答之后可以断开连接。不过,主机收到FIN设置为1的TCP段后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因为已成功发送而被自动删除后再发送FIN包。
  • 窗口大小:该字段长16位,用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。TCP不允许发送超过该窗口大小的数据。若窗口为0,则表示可以发送窗口探测,以了解最新窗口大小,但这个数据必须是1个字节
  • 检验和 : TCP的检验和与UDP检验和一样,也是采用伪首部,但是TCP的检验和无法关闭。TCP伪首部的信息和UDP一样,包括:源IP地址,目的IP地址,填充,协议号以及TCP包长度;
  • 紧急指针: 该字段为16位,只有在URG控制位为1时有效。该字段的数值表示本报文段中紧急数据的指针。从数据部分的首位到紧急指针所在的位置为止是紧急数据。因此,紧急指针是指出了紧急数据的末尾在报文段中的位置

3.序列号和确认应答

  在TCP中,当发送端的数据到达接收端主机时,接收端主机会返回一个已收到消息通知,该消息就是确认应答(ACK)。TCP通过确认应答和序列号实现可靠的数据传输,若发送端发出数据之后得到接收端的确认应答,则表示该数据已成功到达接收端,否则可能丢失数据。
  
  这里写图片描述

4.超时重传

  超时重传的时间是指在重发数据之前,等待确认应答到来的那个特定的时间间隔。若发送端将数据发送出去之后,在特定的时间内没有收到接收端的确认应答,则发送端会重新发送该数据,这就是超时重传机制。

5.连接管理

  TCP协议是提供面向连接的通信传输,面向连接是指双方在进行传输数据之前必须建立连接。有关TCP的建立连接和释放连接放到后面讲解。

6.窗口控制

  TCP传输数据是以一个段为单位,每发送一个段就进行一次确认应答的处理,这样使通信时包的往返时间很长导致降低通信性能。为了解决这个问题,TCP引入了窗口控制,确认应答不再是以每个分段,而是以更大的单位进行确认,这样缩短转发时间,也就是说,发送端主机在发送了一个段之后不必要一直等待确认应答,而是继续发送数据段。窗口大小是指无需等待确认应答而可以发送数据的最大值。

 这里写图片描述

这里写图片描述
 
  采用窗口控制机制必须实现缓冲区。在图4中,窗口内的数据即便是没有收到确认应答也可以发送出去。此外从该窗口能看到的数据是因某种原因已在传输中丢失,所以发送段未收到确认应答,这种情况也需要重新发送。为此,发送端主机在等到确认应答返回之前,必须在缓冲区中保留这部分数据。在滑动窗口意外的部分包括尚未发送的数据和已经确认对端已经收到的数据,大概数据发出后若如期收到确认应答就可以不用进行重发,此时数据可以从缓冲区中删除。收到确认应答后,将窗口滑到确认应答的序号的位置,这样就可以顺序地将多个段同时发送提供通信性能。这种机制也称为滑动窗口机制。

7.流量控制

  流量控制可以让发送端根据接收端的实际接收能力控制发送的数据量。它的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过该大小的数据,该限制大小即为窗口大小,即窗口大小由接收端主机决定。TCP首部中,专门有一个字段来通知窗口大小,接收主机将自己可以接收的缓冲区大小放在该字段中通知发送端。当接收端的缓冲区面临数据溢出时,窗口大小的值也是随之改变,设置为一个更小的值通知发送端,从而控制数据的发送量,这样达到流量的控制。

8.拥塞控制

  为了防止网络拥塞,TCP采用一种慢启动算法,对发送数据量进行控制。为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为1个数据段发送数据,之后每收到一次确认应答,拥塞窗口的值就加1.在发送数据包时,将拥塞窗口的大小与接收端主机通知窗口大小进行比较,然后选择较小的值来控制数据量的发送。

0 0
原创粉丝点击