【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况

简介: 拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:拥塞控制(重点)

1:情境引入

2:解决方案

3:如何找寻最佳窗口

4:总结

二:延时应答

三:捎带应答

四:面向字节流

1:粘包问题

2:解决方案

(1)分隔符标志

(2)指定包的长度

(3)应用层协议格式

(4)知识回顾

五:异常情况

1:一方出现进程崩溃

2:正常流程关机

3:一方断电

(1)断电的是接收方

(2)断电的是发送方

①问题引入

②心跳包

③特点

4:网线断开

六:应用场景


一:拥塞控制(重点)

通过“流量控制”的学习,我们可以通过从接收方的角度来制约发送方的发送速率,(即:动态控制窗口大小)。接下来我们引入的拥塞控制也是要限制发送方发送数据的速率

1:情境引入

我们知道,数据在传输的过程当中需要经过交换机和路由器的转发,进而可以选择很多条路径到达接受方,现在假设数据在路径上阻塞了,此时就算接收方,接受数据的速度非常快也无济于事。

2:解决方案

假设发送方按照某个窗口大小进行数据发送,发生了丢包情况,就视为“路径拥塞”,此时就要缩小窗口;如果没有拥塞,就扩大窗口

3:如何找寻最佳窗口

image.gif 编辑

(1)慢启动:不知道网络拥塞情况,所以起始传输速率很小,使用小窗口,避免网络带宽吃紧。

(2)如无丢包,指数增大窗口大小(增加传输速率)

(3)指数增大到“阈值”,改用线性增大窗口大小(求稳)

(4)线性增大到一定数值,发生“丢包”,重新把窗口设置为较小值(旧版本是设置为非常小的值,已被废弃,TCP Reno版本重新设置的值是以一个较高的值为起点,看图)

此时指数增长转变为线性增长的阈值也会被重新设置

4:总结

“流量控制”和“拥塞控制”遵循谁的窗口更小,谁说的算

二:延时应答

image.gif 编辑

“延时应答”机制也是以“流量控制”机制和“拥塞控制”机制为基础,通过延迟返回ack来达到,尽可能增大窗口的目的

可以形象想象成,以前是一个数据就对应一个ack,现在是每隔几个数据再返回一个ack,这样不仅提高了效率,还节省了ack的开销

当然这里即使接收的数据没有达到一定的数量,也会返回ack

三:捎带应答

“捎带应答”机制是基于“延时应答”机制的,我们不仅可以通过改变窗口大小来提高数据传输效率,还可以通过尽可能的合并数据包提高传输效率。

image.gif 编辑

正常情况下②③发送数据包之间会有一定时间间隔,通过“延时应答”机制,把②③合并成一个TCP数据包,进行发送

因为ack报文本身并不带有载荷,我们只需要把合并后的数据包中六位标志符中ack的值设置为1,并且设置确认序号以及窗口大小即可,这几个属性与一个response报文并不冲突

注:这里的模型,不能理解成“三次握手”,因为数据传输的连接一般都是“长连接”,中间可能有好几次ack+response

image.gif 编辑

四:面向字节流

1:粘包问题

粘(nian)引入:从之前的学习我们知道,一个TCP数据报到达接受方之后,需要调用server 的API中的read方法,read出来的结果就是应用层数据包

由于read的过程非常灵活,就无法区分出来从哪到哪是一个完整的数据包,

image.gif 编辑

image.gif 编辑

2:解决方案

明确包与包之间的边界

(1)分隔符标志

通过特殊符号作为分隔符,见到分隔符,就视为一个包结束了

例如:之前的写的TCP回显服务器中就应用到了这种思想

image.gif 编辑

(2)指定包的长度

例如:在包的首部,加上一个特殊的空间来表示整个数据的长度

注:粘包问题,不是TCP独有的问题,只要是面向字节流,就会存在这样的问题

注:我们之前学习的UDP数据报包不存在这样的问题,UDP的传输单位是UDP数据报,每一个数据报,只承载一个应用层数据包。

UDP的接收缓冲区类似于一个链表。

(3)应用层协议格式

——xml,json,protobuffer

(4)知识回顾

数据报(Datagram)

UDP无连接的数据传输单元,通常用于网络层,每个数据报独立传输,传输不可靠

数据包(Packet)

是TCP/IP协议通信传输中的数据单位,处于网络层。数据包是一个完整的数据单元,它包含了网络层传输所需的所有信息

有连接,可靠传输

两者关系

数据包是整个的数据单元,而数据报是组成这个数据单元的分组

每一层封装后的数据都可以称作数据报,也就是说,一个完整的数据包是由若干个数据报组成的。

五:异常情况

考虑比“丢包”严重的情况,我们应该如何处理呢?

1:一方出现进程崩溃

进程无论是正常结束还是崩溃,都会触发回收文件资源,关闭文件这样的效果,(即四次挥手)

TCP的连接生命周期比进程更长,虽然进程退出了,但是TCP连接仍然存在,可以进行四次挥手

2:正常流程关机

主机关机,强杀进程,“四次挥手”挥的快,可以在数据结构中删除掉对端的连接信息;

挥的不够快,至少也能发送一个FIN给对方,如果久久收不到ack,会进行“超时重传”,重传几次后还是收不到ack,就单方面的释放连接信息。

3:一方断电

(1)断电的是接收方

发送方发送FIN后,收不到ack,重传后,还是没反应,进入“复位连接”

下面这张图是TCP数据报中六位标志符

image.gif 编辑

RST——复位报文段

URG——TCP中有一些特殊的数据包,携带一些特殊功能的数据

PSH——push催促对方快点发送信息

(2)断电的是发送方

①问题引入

接受方本来就是在阻塞等待“发送方”发送数据,如果发送方“挂了”,接受方怎么区分出,发送方是“挂了”还是暂时刚好没有发送数据。

②心跳包

TCP中,接收方一段时间没有接受到发送方的数据,就会发送一个“心跳包”来确认发送方是否还处于“存活状态”

③特点

心跳包是周期性的发送

没有心跳,视为对端挂了,那就单方面的断开连接

4:网线断开

哦吼~~~~属于是物理打击了

六:应用场景

如果需要可靠传输:首选TCP

需要传送数据包很大:首选TCP

绝大部分的场景都可以优先考虑TCP

UCP相比较于TCP最大的优势就是,传输效率,比如有些场景中,对可靠性要求不高,对效率要求很高,那就可以考虑UDP

如何用UDP来实现可靠性传输(重点)

我们的思路就是借鉴TCP传输的这些特性(不止这些)进行类比

image.gif 编辑

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
1月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
7月前
|
机器学习/深度学习 存储 算法
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
反向传播算法虽是深度学习基石,但面临内存消耗大和并行扩展受限的问题。近期,牛津大学等机构提出NoProp方法,通过扩散模型概念,将训练重塑为分层去噪任务,无需全局前向或反向传播。NoProp包含三种变体(DT、CT、FM),具备低内存占用与高效训练优势,在CIFAR-10等数据集上达到与传统方法相当的性能。其层间解耦特性支持分布式并行训练,为无梯度深度学习提供了新方向。
294 1
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
|
2月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
395 11
|
1月前
|
缓存 人工智能 API
API接口调用中的网络异常及解决方案
淘宝API是淘宝开放平台提供的接口集合,支持商品、交易、用户、营销等数据交互。开发者需注册获取App Key,通过签名认证调用API,结合沙箱测试、OAuth授权与安全策略,实现订单管理、数据监控等应用,提升电商自动化与数据分析能力。
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从零开始构建图注意力网络:GAT算法原理与数值实现详解
本文详细解析了图注意力网络(GAT)的算法原理和实现过程。GAT通过引入注意力机制解决了图卷积网络(GCN)中所有邻居节点贡献相等的局限性,让模型能够自动学习不同邻居的重要性权重。
451 0
从零开始构建图注意力网络:GAT算法原理与数值实现详解
|
2月前
|
安全 测试技术 虚拟化
VMware-三种网络模式原理
本文介绍了虚拟机三种常见网络模式(桥接模式、NAT模式、仅主机模式)的工作原理与适用场景。桥接模式让虚拟机如同独立设备接入局域网;NAT模式共享主机IP,适合大多数WiFi环境;仅主机模式则构建封闭的内部网络,适用于测试环境。内容简明易懂,便于理解不同模式的优缺点与应用场景。
380 0
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
280 7
|
5月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
1001 39