TCP协议是处于传输层的一个很重要的协议,其上层协议为HTTP或HTTPS。
一:TCP头部数据格式
包含了源端口号
目标端口号
序列号:建立连接后,序号代表这一次给对方的TCP数据部分的第一个字节的编号
确认号:建立连接后,期望下一次传过来的数据部分的第一个字节的编号
头部长度
CWR:拥塞窗口,后面讲拥塞控制会说到
ECE:显式拥塞提醒回应
URG:URG=1时,紧急指针字段才有效,表明前多少位的是紧急数据,应当尽快传输
ACK:ACK=1时,确认号才有效
PSH:PSH=1时,接收方应该尽快将这个报文段交给应用层
PST:RST=1时,表明连接中出现问题,需要重连
SYN:用来三次握手
FIN:FIN=1时,表明数据已经发送完毕,要求释放连接
窗口:用来控制流量传输的,后面会讲到
二:可靠传输
采用连续ARQ+滑动窗口协议
老版本使用的是停止等待协议,必须得等一个包发送完成并且接收端回应后才会发送下一个包,如果一段时间没收到接收端的响应,则证明丢包,重新发送,但是效率低下,现在采用的是连续ARQ+滑动窗口协议,大大加快了效率
三:流量控制:
通过确认报文中的窗口字段来控制发送方的发送速率 当窗口为0时,停止发送,并设置定时器询问最新窗口
四:拥塞控制
当网络发生拥堵时会发生丢包的现象,如果不加以控制,丢的包会越来越多甚至产生死锁,TCP为了应对这种情况,采用慢开始+拥塞避免+快速重传+快速恢复技术,统称为拥塞控制,也是通过窗口字段去控制的,实际发送窗口=min(接收窗口,拥塞窗口)
慢开始(慢启动):cwnd的初始值比较小,然后随着数据包被接收方确认(收到一个ACK),cwnd就成倍增长
拥塞避免:ssthresh:慢开始阈值,cwnd达到阈值后,以线性方式增加,丢包后网络可能出现拥塞,阈值乘法减小同时cwnd执行慢开始算法(老版本)
快速重传:
接收方:每收到一个失序的分组后就立即发出重复确认
发送方:只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段
快速恢复
当发送方连续三个重复确认后,执行乘法减小,把ssthres减半,cwnd不恢复初始值,直接开始执行拥塞避免算法
五:链接管理
TCP的三次握手
TCP的四次挥手