TCP传输大致过程、流量控制与拥塞控制

TCP传输大致过程

  • 在传输过程中,若服务器端没有要发送到客户端的数据(或数据还没准备好,发送缓冲区为空),此时,如果收到C端发送过来的字节数据,返回的TCP报文段只包含一个TCP首部;
  • 发送方只有收到接收方返回的TCP报文段(根据ack字段的值),才会将发送方的发送缓冲区中的已接收的字节数据清除;
  • 双方通信过程中,接收窗口的大小会变化(因为当接收缓冲区内的数据未被上层取走时,下次能接收的数据就会相应变小),因此,发送窗口的大小也要随之改变;
  • 服务器端可对接收的多个TCP报文段进行累积确认(虽然各个报文段可能是乱序到达,但是会按顺序先存放在接收缓冲区,确保最后交给应用层是有顺序的);
  • 当接收缓冲区满时应尽快交付给上层,但并不是得满才交付,实际上只要确保交给上层是有序的即可;
  • 捎带确认:当接收方有待发送数据时(即发送缓冲区不为空),如果收到发送方发送的TCP报文段,会立即返回ACK段(ACK字段值为1)并捎带数据返回给发送方;
  • 超时重传:当发送方发送一个报文段就会启动一个对应计时器,若传输过程中该报文段丢失或者接收方返回的ACK段丢失,计时器会超时重传对应TCP报文段;

推迟确认机制:1、TCP规定,收到一个TCP报文段,如果在0.5秒内有多个报文段到达,可累积确认收到;2、如果接收方有数据需要发送,则立即返回ACK段并捎带确认;3、如果连续收到两个长度为MSS的报文段,则立即返回ACK段确认收到。

注意:以上图为例,序号6的TCP报文段丢失,采用推迟确认机制的话,接收方最后会返回的ACK段(ack=6),发送方收到该ACK段会持续等待,直到序号6的报文段对应计时器超时重传,序号6之后的其他计时器也随之超时重传。

这会导致:1、当出现报文段丢失时,必须等计时器超时才会重传,时间相对较长;2、虽然采用累积确认,但是之后的那些序号会被重复传送,冗余。

解决:快重传机制。

  • 快重传机制(冗余ACK):接收方每收到一个TCP报文段,就立即返回一个ACK段,即使收到的报文段是一个失序的报文段,也要立即返回ACK段。当发送方连续收到3个冗余ACK段(只有失序的报文段返回的才是冗余的ACK段,虽然5返回的ack=6,但它不是冗余ACK段)时,不必等待计时器超时,会立即重传该确认号对应的报文段。

TCP流量控制

通过滑动窗口机制实现。接收方在ACK报文段中设置接收窗口rwnd大小,发送方根据该大小动态调整,避免接收方的缓冲区溢出。

https://blog.csdn.net/2402_82844091/article/details/153877006?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

具体内容可点击之前的文章查看,与文章中请求重传协议那部分基本一样,只要知道滑动窗口的机制就简单明了了。

TCP拥塞控制

如果发送方正确收到所有报文段的确认,认为此时网络通畅;如果收到冗余ACK,则认为此时网络有点拥塞;如果出现报文段丢失超时现象,则认为网络严重拥塞。TCP采用多种算法避免网络拥塞。

拥塞窗口(cwnd):表示发送方在未收到确认(ACK)的情况下可以发送的最大数据量,单位为最大报文段长度(MSS,太网中 MSS=1460 字节)。

TCP发送方在确定发送窗口(swnd)时,取拥塞窗口(cwnd)与接收方接收窗口(rwnd)中的最小值。

拥塞避免算法:

慢启动:

  • cwnd的初始值置为1个MSS,发送方每收到已发送报文段的确认ACK就翻倍cwnd的值;
  • 为避免cwnd增长过快而引起拥塞,发送方需设置一个慢开始阈值(ssthresh),在慢启动阶段,当cwnd的值增长大于等于ssthresh的值,cwnd的增长方式将改为拥塞避免;
  • 当检测到严重拥塞时,会更新ssthresh的值为检测到严重拥塞时的cwnd的一半并将cwnd的值置为1,重启慢启动过程。

拥塞避免:

  • 当cwnd的值等于ssthresh值时,启动拥塞避免过程;
  • 在每个往返时延RTT内,只要收到确认的ACK(即使多个),cwnd的值线性增加1;
  • 只要出现确认超时现象,就认为网络严重拥塞,更新ssthresh的值并将cwnd的值置为1,重新进入慢启动过程。

对于采用快重传机制,连续收到三个冗余ACK,TCP认为此时有点拥塞,处理没有那么严格,采用快速重传快速恢复。

快速重传快速恢复:

  • 快速重传:重传序号为冗余序号的TCP报文段;
  • 快速恢复:更新ssthresh的值为收到三个冗余ACK时的cwnd的值的一半,并重新进入拥塞避免过程。

拥塞控制总结:

初始时cwnd=1,执行慢启动过程,当cwnd=ssthresh时,执行拥塞避免过程;

在拥塞避免过程中,如果出现连续收到三个冗余ACK,则执行快速重传快速恢复过程,并再次执行拥塞避免;

在拥塞避免过程中,如果出现超时重传现象,则执行慢启动过程。

当网络出现拥塞时(有点拥塞或者严重拥塞),都需要更新ssthresh值为出现拥塞时cwnd值的一半。

相关推荐
犀思云2 小时前
如何通过网络即服务平台实现企业数字化转型?
运维·网络·人工智能·系统架构·机器人
皇帝要考研2 小时前
【ISO 13400-2:2019】核心配置项
网络·网络协议
犀思云3 小时前
企业端到端NaaS连接的优势与应用
网络·人工智能·机器人·智能仓储·专线
Godspeed Zhao3 小时前
现代智能汽车系统——总线技术1
网络·汽车·php
JoySSLLian3 小时前
IP SSL证书:一键解锁IP通信安全,高效抵御网络威胁!
网络·人工智能·网络协议·tcp/ip·ssl
汽车仪器仪表相关领域4 小时前
MTX-A 模拟废气温度(EGT)计 核心特性与车载实操指南
网络·人工智能·功能测试·单元测试·汽车·可用性测试
云小逸4 小时前
【网络通信】DNS、SNMP、DHCP 等 UDP 服务解析
网络·网络协议·udp
weixin_395448915 小时前
main.c_cursor_0130
前端·网络·算法
半壶清水6 小时前
[软考网规考点笔记]-操作系统核心知识及历年真题解析
网络·网络协议·算法