IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【计算机网络】TCP可靠传输 -> 正文阅读

[网络协议]【计算机网络】TCP可靠传输

TCP可靠传输

一、TCP可靠传输概览

可靠传输:接收方收到的字节流和发送方发出的字节流是完全一样的

TCP保证可靠传输的机制有如下几种:

  • 校验和Checksum
  • 序列号和确认应答机制
  • 重传机制
  • 流量控制(滑动窗口协议)
  • 拥塞控制

二、校验和

若校验和有错误,说明TCP的首部和数据在发送端和接收端之间发生了变动,TCP报文段会被直接丢弃

TCP在计算校验和时,需要加上一个12字节的伪首部

请添加图片描述

12字节伪首部包括:

  • 源IP地址
  • 目的IP地址
  • 保留字节(置0)
  • 传输层协议号(TCP是6)
  • TCP报文长度(首部 + 数据)

伪首部的目的是为了增加TCP校验和的检错能力:如根据目的IP地址检查这个TCP报文是不是传给我的、根据传输层协议号检查传输层协议是否选对

伪首部只在校验的时候使用

三、序列号和确认应答机制

请添加图片描述

请添加图片描述

四、重传机制

重传机制:

  • 超时重传
  • 快速重传

1??超时重传

TCP发送方在发送报文的时候,设定一个定时器,如果在规定的时间内没有收到来自接收方发来的ACK确认报文,发送方就会重传这个已经发送的报文段

有两种情况:

  • 第一种情况:报文段丢失

请添加图片描述

  • 第二种情况:ACK确认报文丢失

请添加图片描述

进行多长时间进行重传比较好?(RTO超时重传时间)

RTT(Round-Trip Time):往返时延,报文段的往返时间

请添加图片描述
请添加图片描述

RTO的时间应略大于RTT的时间

若过大:网络空闲时间增大,降低网络传输效率

若过小:不必要的重传,导致网络负荷增大

请添加图片描述
请添加图片描述

若超时重传的数据又超时的话,TCP的策略是重传的超时时间间隔加倍(1s,2s,4s,8s……)

存在问题:超时周期相对较长,有没有方法可以减少超时重传的等待时间呢?快速重传

2??快速重传

快速重传不以时间为驱动,而是以数据驱动进行重传

原理:每当接收方收到比期望序号大的失序报文段到达时,就向发送方发送冗余ACK,指明下一个期待字节的序号

请添加图片描述

请添加图片描述

五、滑动窗口协议

1??累积确认

收到上一个报文段的确认报文再发送下一报文段的模式效率低下

引入窗口:无需等待确认应答,可以连续发送数据的最大值

窗口的实现实际上是操作系统开辟的一个内核缓冲区,发送方在等待确认应答报文返回之前,必须在缓冲区中保留已经发送的数据,如果在规定时间间隔内收到确认应答报文,就可以将数据从缓冲区清除

请添加图片描述

简单说,只要发送方接收到了ACK 600的确认应答,就意味着第600字节之前的所有数据都被接收方收到了,这个模式叫做累积确认或者累积应答

2??发送方的滑动窗口

四部分数据:

  • 已发送并收到ACK
  • 已发送还没有收到ACK
  • 未发送但在接收方处理范围内
  • 未发送且超出接收方处理范围

请添加图片描述

当发送方将数据都发送出去之后,可用窗口大小为0,表明已经耗尽窗口,在没收到ACK确认之前无法继续发送数据

请添加图片描述

3??接收方的滑动窗口

分为三部分:

  • 已经接受并发送确认的数据(只要接收就必须发送确认)
  • 未接受但可以接收的数据
  • 未接受但不可以接收的数据(超过了接收方窗口大小)

请添加图片描述

同样的,接收方的滑动窗口在成功接收并确认的数据后,窗口右移

举个例子:

请添加图片描述

六、流量控制

场景:A一直向B发送数据,不考虑B的接受能力,就会使得B的缓冲区满而无法再接受数据,从而导致大量的数据丢包,引发重传机制。而在重传的过程中,B的缓冲区情况仍未好转,则会将大量的时间浪费在重传数据上,降低传送数据的效率

引入流量控制机制:B告诉A自己接收缓冲区大小,使得A可以控制发送的数据量

流量控制:控制发送方发送速率,保证接收方来得及接收

TCP实现流量控制主要就是通过 滑动窗口协议

请添加图片描述
请添加图片描述

七、拥塞控制

1??概念

拥塞:(需求太大)对网络中某一资源的需求超过该资源所能提供的可用部分,使得网络性能变差

出现拥塞:控制发送方的速率

区分流量控制和拥塞控制:

  • 流量控制:让接收方能来得及接收
  • 拥塞控制:控制发送方的发送速率,防止过多的数据注入到网络中(学生抢课

为了调节发送方所要发送数据的量,定义了拥塞窗口cwnd的概念,它会根据网络的拥塞程度动态变化:

  • 出现拥塞,cwnd??
  • 未出现拥塞,cwnd??

在引入拥塞窗口之前,发送窗口大小和接收窗口大小基本是相等的关系(接收窗口大小决定),在引入拥塞窗口之后,发送窗口的大小就等于:min(拥塞窗口大小,接收窗口大小)

2??TCP拥塞控制四种算法

四种算法:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

1.慢开始

思路:TCP刚建立好连接后,如果立即将大量数据字节注入网络会引起网络阻塞。我们可以一点点的试探,提供数据报发送的数量,由小到大逐渐增大拥塞窗口的数值,cwnd初始设为1,每经过一个传播轮次,cwnd加倍(按指数增长)

请添加图片描述

设置慢启动轮限ssthresh状态变量:

  • 当 cwnd < ssthresh 时,使用慢启动算法
  • 当 cwnd > ssthresh 时,使用拥塞避免算法

2.拥塞避免算法

思路:让拥塞窗口cwnd缓慢增大,即每经过一个往返时间 + 1

请添加图片描述

🐷无论是慢启动算法还是拥塞避免算法,只要出现网络拥塞(触发了超时重传机制),ssthresh和cwnd就会发生改变:

  • ssthresh = cwnd / 2
  • cwnd = 1

请添加图片描述

3.快重传和快恢复

这两种算法一般同时使用

快重传

请添加图片描述

快恢复

ssthresh和cwnd的值发生改变:

  • cwnd = cwnd / 2
  • ssthresh = cwnd

请添加图片描述

【参考】计算机基础网站学习
https://cswiki.top/

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:30:01  更:2022-04-29 12:30:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:55:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码