一、定义
背景:
TCP协议工作在运输层,下层的网际层,核心是IP协议,是一个不可靠的协议,因为他只是保证了数据能正确从源主机到达唯一的确定目的主机,但是传输的内容是不是被破坏,是不是按照正确顺序,没有进行处理,所以运输层的TCP协议在使用网际层的IP协议提供的服务同时,还要解决这个不可靠的问题。
TCP协议,Transmission control protocol,传输控制协议。
是一种可靠的运输层协议:他是面向连接的、基于字节流的协议。
- 基于字节流:TCP协议将应用层的数据只看成一连串的字节流,将他们编号并存储在自己的发送缓存中,根据策略,每次从中拿出一部分构建成TCP报文;接收方也是一样,一遍将收到的报文拆开放进自己的缓存中,一边拿出字节流给上方应用层。这个过程中双方字节流内容是完全一致的。
- 面向连接:在通信之前,通信双方必须进行三次握手、建立TCP连接,建立成功之后才能进行数据传输、数据传输结束要进行四次挥手,释放连接。
- TCP显然只支持单播(一对一的通信),逻辑上来看就像是通信双方建立一个专属的传输通道。
尽管网际层的IP协议并不可靠,但是由于使用TCP协议,确保了报文不会出现误码、丢失、乱序、重复等问题,所以说他是可靠的。
二、TCP报文的首部格式
(Ref: https://blog.csdn.net/qq_32998153/article/details/79680704)
TCP的协议的功能在首部的各个字段里都有体现,上面的字段解释如下:
- 源端口:用来标识发送这个报文段的应用进程;(每一个计算机自己有端口号就能确定进程,不同计算机在交互过程,利用IP地址+协议+端口号唯一标识去标识网络中的一个进程,这种唯一标识的模式称为Socket)
- 目的端口:标识接受这个报文段的应用进程;
- 序号(Seq):这个序号指出这个报文段的序号,TCP连接中传送的字节流中的每个字节都按顺序编号;
- 确认号(ACK):指出期望收到下一个报文段的序号,也起到了对前面发来的数据的确认,代表序号续上了;
- 数据偏移:指出报文段的数据部分离起始多远(其实也就是指出这个报文段的头部多长,因为有可变部分);
- 保留:保留给今后使用的;
- 四个短标志位:
- URG:紧急指针;
- ACK:确认标志位,1是说明确认号有效;(tcp规定连接建立后所有报文段的这个标志位都是1)
- PSH:推送标志位,如果是1就会尽快上交应用进程而不是等到接受缓存填满;
- RST:重置连接标志;
- SYN:同步标志位,用来同步序号;
- FIN:终止标志位,用来释放TCP连接。
- 窗口:指出发送这个报文段的那一方的接收窗口,就是接收方用自己的接受能力提示发送方的发送能力,这就是流量控制的核心;
- 检验和:检查整个报文段,判断是否出错(奇偶校验);
- 紧急指针:只有段标志位里面的URG为1的时候这段才有效;
- 选项:增加功能的地方&#