TCP:Transmission Control Protocol 传输控制协议,TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议。
一、TCP协议的特点:
6.紧急数据传送功能。(通过头部中的的控制位中的URG和16bit的紧急指针位控制)
二、TCP的头部结构:
TCP共有20字节的固定头部
16bit:源端口号
16bit:目的端口号
32bit:序列号
32bit:确认号
4bit: 头部大小
6bit:保留字段
6bit:控制字段
fin:1, 用于关闭TCP连接
urg:1, 紧急指针有效
16bit:窗口大小
16bit:检验和
16bit:紧急指针
三、TCP协议的实现原理
TCP是面向连接的,故要利用TCP协议传输数据,需要首先建立连接,数据传输完后关闭连接。
1>以下是3次挥手建立连接的过程:
1.首先客户端发送一个初始化随机序列号和SYN位为1的数据包给服务器端,注意如果该数据包只包含TCP头部,不包含数据的话。那么数据包的大小默认为1.
2.服务器端接受到客户端发送的数据包后,随机生成一个序列号,并且将ACK=上次接受的序列号+1。
发回一个SYN+ACK,完成第二次握手。不含数据时,数据包的大小为1.
3.客户端接受到服务器端的数据包后,发回一个ACK+序列号数据包,连接建立,如果不包含数据,那么默认数据包是不占大小的。
2>4次挥手关闭连接:
1.客户端在发送完数据之后,发送一个FIN数据包,请求服务器端关闭连接。数据包占一个序列号。
2.服务器端在接受FIN之后,通知进程关闭连接,并且发回一个ACK数据包,客户端接收到ACK数据包。处于半连接状态。
3.服务器端连接关闭,发送一个FIN数据包,数据包大小占一个序列号。
4.客户端接受到FIN数据包后,发回一个ACK确认包。
3>差错控制:
4>拥塞控制:
TCP提供拥塞控制功能,这是无连接的UDP协议所不具备的,TCP通过控制拥塞窗口的大小来实现拥塞控制。主要的一些机制有慢启动,拥塞避免,快速恢复。
拥塞窗口:拥塞窗口的大小决定了发送端一次可以发送多少TCP数据包。
1.慢启动:拥塞窗口初始大小为1,然后每当从对方收到一个ACK确认包,拥塞窗口大小加1,这样1变2,2变成4,拥塞窗口的大小成指数级增长。当增长到一个阈值时,进入拥塞避免状态。如果期间碰到超时现象,阈值变成当前窗口大小的一半,然后重启慢启动。
2.拥塞避免:当拥塞窗口大于阈值时,便停止慢启动,进入增性加乘性减阶段。即每接收到一个数据包拥塞窗口增加 1/拥塞窗口的大小,即线性增长。如果碰到3次重复ACK那么进入快速恢复状态。如果超时重启慢启动过程。
3.快速恢复: