TCP/IP五层网络模型------传输层之TCP协议

        在这篇博客中介绍了有关传输层,端口号以及传输层UDP协议的相关概念,本文将介绍传输层的另一重要协议------TCP协议的相关内容。

传输控制协议TCP的特点

1. TCP协议是面向连接的。即在进行数据通信之前,发送进程要与接收进程建立连接。连接建立好之后,才可以进行数据传输。当传输结束时,在释放连接。

2. TCP协议提供可靠的传输服务。即保证数据可靠的送至接收方进程。当数据丢包时或出错时,进行重发等。

3. 面向字节流。当发送进程将一个或多个数据块交付给TCP协议时,TCP只把它当做一串无结构的字节流。它一次发送多少字节的数据是根据接收方的接受能力以及网络的拥塞状况来控制的。与上层交付的数据块大小无关。当上层交付的数据块过大时,TCP就会将其划分的短一些在向下交付。如果上层交付的数据块过长,会先存放在缓冲区中待到有足够多的数据后在向下进行交付。即不是上层交付多少字节的数据块就必须将该数据块整个发送出去。因此,在接收端接受到的数据块的个数可能与发送端发送的数据块个数或大小都不对应。当时二者对应的字节流完全相同。

4. 每一条TCP连接只能有两个端点。即只能一对一。要做到一对多,就要建立多条连接。这与UDP协议是有差别的。TCP连接的端点为套接字(IP地址+端口号)。同一IP地址可以有多个不同的TCP连接。同一端口号也可以出现在多个不同的TCP连接中。但是每一条TCP连接唯一的被通信两端的套接字所确定。

5. TCP协议提供全双工通信。因为在TCP连接的两端都分别有一接收缓冲区和发送缓冲区。可以同时将数据写入发送缓冲区和从接收缓冲区读取数据。发送进程将数据写入发送缓冲区后,再等合适的时机将数据发送出去;接收方将数据读入到接收缓冲区后,在等合适的时机将数据从接收缓冲区读出来交付给上层处理。

TCP协议段格式

        TCP协议端的格式如下图所示:


        其中的各字段表示如下:

16位的源端口号:表示发送方数据是由上层的哪个应用进程交付下来的。

16位的目的端口号:表示数据要交付给接收方的哪个应用进程

32位的序号和32位的确认序号:可以保证请求和应答;按序到达;重传机制;批量的高效率发送。因为TCP进行的全双工通信,即双发都可以发送和接收数据,因此需要一个序号和确认序号对。(具体后面在进行说明)

4位的首部长度:表示TCP的协议报头有多少个32位(或多少个4字节)。4个比特位表示的最大数字为2^4-1即15,单位为4字节,所以TCP协议的首部长度最长为15*4即60字节。上图中的首部长度为20字节,所以该字段的数值为0101(即5*4=20字节)。如果在申请更多的字节,可以使用选项占用的空间。

保留6位:现在还没有用处,以后可能会用到,所以先保留下来。

6个标志位(各占一位):

        URG:紧急标志位。用于表示紧急指针是否有效,该为为1说明有效。

        ACK:确认标志位。一般在数据进行通信的过程中一直有效即一直为1

        PSH:当接收方的接受缓冲区满的时候,发送方会向接收方发送携带该标志位(将该标志位设置为1)的报文段,用于催促接收方赶紧将接受缓冲区中的数据读走。

        PST:复位标志位。当一方需要重新建立连接时,会将携带该标志位(将该标志位设置为1)的报文段发送给对方。携带该标志位的报文段称为复位报文段。

        SYN:同步标志位。当一方请求连接时,会将携带该标志位的同步报文段发送给对方。

        FIN:结束标志位。当一方要断开连接时,会将携带该标志位的结束报文段发送给对方。

16位的窗口大小:发送端发送报文时,将自己的接收缓冲区还有多大的内存填充在该位置。接收方接收到报文段时,就会根据该数据来确定发送多少字节的数据。因为TCP是全双工通信,所以双方都可以作为接收方或发送方。因此,在发送数据时,都要将字节接受缓冲区还剩多大的内存填充在该位置。

16位的校验和:发送端填充。接收端校验。校验不通过,认为数据有问题。此处对数据报头和有效数据部分都进行校验。

16位的紧急指针:表示哪部分数据是紧急数据,是需要被优先发送的。要配合标志位URG才有效。

40字节的选项:当20字节的头部大小不够用时,就在该处进行内存的申请。

猜你喜欢

转载自blog.csdn.net/sandmm112/article/details/80441223