TCP协议解析

796 阅读2分钟

TCP协议是处于传输层的一个很重要的协议,其上层协议为HTTP或HTTPS。

一:TCP头部数据格式

20170501223823511.png

包含了源端口号

目标端口号

序列号:建立连接后,序号代表这一次给对方的TCP数据部分的第一个字节的编号

确认号:建立连接后,期望下一次传过来的数据部分的第一个字节的编号

头部长度

CWR:拥塞窗口,后面讲拥塞控制会说到

ECE:显式拥塞提醒回应

URG:URG=1时,紧急指针字段才有效,表明前多少位的是紧急数据,应当尽快传输

ACK:ACK=1时,确认号才有效

PSH:PSH=1时,接收方应该尽快将这个报文段交给应用层

PST:RST=1时,表明连接中出现问题,需要重连

SYN:用来三次握手

FIN:FIN=1时,表明数据已经发送完毕,要求释放连接

窗口:用来控制流量传输的,后面会讲到

二:可靠传输

采用连续ARQ+滑动窗口协议

84141c6ee9399bd4a07082a761b17813.jpeg

老版本使用的是停止等待协议,必须得等一个包发送完成并且接收端回应后才会发送下一个包,如果一段时间没收到接收端的响应,则证明丢包,重新发送,但是效率低下,现在采用的是连续ARQ+滑动窗口协议,大大加快了效率

三:流量控制:

通过确认报文中的窗口字段来控制发送方的发送速率 当窗口为0时,停止发送,并设置定时器询问最新窗口

四:拥塞控制

当网络发生拥堵时会发生丢包的现象,如果不加以控制,丢的包会越来越多甚至产生死锁,TCP为了应对这种情况,采用慢开始+拥塞避免+快速重传+快速恢复技术,统称为拥塞控制,也是通过窗口字段去控制的,实际发送窗口=min(接收窗口,拥塞窗口)

28b8b4fa6697be9d538945efec6f84fd.jpeg

慢开始(慢启动):cwnd的初始值比较小,然后随着数据包被接收方确认(收到一个ACK),cwnd就成倍增长

拥塞避免:ssthresh:慢开始阈值,cwnd达到阈值后,以线性方式增加,丢包后网络可能出现拥塞,阈值乘法减小同时cwnd执行慢开始算法(老版本)

快速重传:

接收方:每收到一个失序的分组后就立即发出重复确认

发送方:只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段

快速恢复

当发送方连续三个重复确认后,执行乘法减小,把ssthres减半,cwnd不恢复初始值,直接开始执行拥塞避免算法

五:链接管理

TCP的三次握手

52ac7c8f9d59d804c47e27ed8d0e9120.jpeg

TCP的四次挥手

4e602a4bdff41d91325d5ebce34e9c5c.jpeg