TCP协议
本文内容如下:
1)TCP协议概念
2)TCP头部结构和字段介绍
3)TCP流量控制
滑动窗口
4)TCP拥塞控制
慢启动、拥塞避免、快重传、快恢复
有关TCP的三次握手四次挥手单独写了一篇博客:【TCP协议】---TCP三次握手和四次挥手
有关TCP粘包和黏包,也单独写一篇博客,下一篇博客就写有关粘包黏包问题。
一、TCP概念
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。
首先来看看OSI的七层模型
我们需要知道TCP工作在网络OSI的七层模型中的第四层——传输层,IP在第三层——网络层,ARP 在第二层——数据链路层;同时,我们需要简单的知道,数据从
应用层发下来,会在每一层都会加上头部信息,进行 封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封 装的过程。
在OSI七层模型中,每一层的作用和对应的协议如下:
二、TCP头部结构和字段介绍
从上面图片可以看出,TCP协议是封装在IP数据包中。
下图是TCP报文数据格式。TCP首部如果不计选项和填充字段,它通常是20个字节。
下面分别对其中的字段进行介绍:
源端口和目的端口
各占2个字节,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。有时一个IP地址和一个端口号也称为socket(插口)。
序号(seq)
占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而且数据共100字节,
则下一个报文段的序号就是400;序号是32bit的无符号数,序号到达2^32-1后从0开始。
确认序号(ack)
占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。
只有ACK标志为1时,确认序号才有效。
数据偏移
占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,
也就是4个字节&#x