网络原理-TCP/IP(4)

简介: 网络原理-TCP/IP(4)

TCP原理

滑动窗口

之前我们讲过了确认应答策略,对发送的每一个数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段.  确认应答,超时重传,连接管理这样的特性都是为了保证可靠运输,但就是付出了传输效率(单位时间能传输数据的多少)的代价,因为确认应答机制导致了时间大量都花在ACK上.

既然这样一发一收的效率比较低,那么我们一次发送多条数据,就可以大大提高性能(其实是将多个等待的时间重叠在一起了). (这是降低损失的策略而不是增加速率的策略).

由上图,这就是滑动窗口方法传递数据的原理,就是把多次请求的等待时间使用同一份时间来等了,减少了总的等待时间.

1.窗口大小指的是无需等待确认应答而可以继续发送数据的最大值.上图的窗口大小就是4000个字节(4个段);

2.发送前四个段时,不需要等待任何ACK,直接发送;

3.收到第一个ACK时,滑动窗口向后移动,继续发送第五个段的数据;以此类推;

4.操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认过的数据,才能从缓冲区删掉;

5.窗口越大,则网络的吞吐量越高;

那么如果出现了丢包,如何进行重传?这里分两种情况讨论.

情况一:数据包已经到达,ACK被丢了.

这种情况下,部分ACK丢了并不要紧,因为可以通过后续的ACK进行确认;(注意理解:ACK应答报文中的确认序号的含义:eg:2001->2001之前的数据都接收到了(就包含了1001确认序号的情况)).

情况二:数据包直接丢了.

1.当某一段报文段丢失以后,发送端会一直收到1001这样的ACK,就像是在提醒发送端"我想要的是1001"一样.

2.如果发送端主机连续三次收到了同样一个"1001"这样的应答,就会将对应的数据1001-2000重新发送;

3.这个时候接收端收到1001之后,再次返回的ACK就是7001了(因为2001-7000)接收端其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中.

这种机制称为"高速重发控制"(也叫"快重传");

流量控制(流控)

我们知道,通过滑动窗口可以提高传输效率,窗口大小越大,更多数据复用同一块时间等待效率越高.但是窗口可以无限大吗?不能.因为可靠传输的前提->任何提高效率的行为都不影响可靠性.

接收端处理数据的速度是有限的,如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包(因为接收端处理不过来了),继而引起丢包重传等一系列连锁反应.

因此TCP支持根据接收端的处理能力,来决定发送端的发送速度.这个机制就叫做流量控制(Flow Control).

接收端将自己可以接收的缓冲区大小放入TCP首部中的"窗口大小"字段,通过ACK端通知发送端;

窗口大小字段越大,说明网络的吞吐量越高;

接收端一旦发现自己的缓冲区快满了,就将窗口大小设置成一个更小的值通知给发送端;

发送端接受到这个窗口之后,就会减慢自己的发送速度;

如果接收端缓冲区满了,就会把窗口设置为0;这时发送方不再发送数据,但需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端.

接收端如何把窗口大小告诉发送端呢?回忆我们的TCP首部中,有一个16位的窗口字段,就是为了存放窗口大小信息;

那么问题来了,16位数字最大表示65535,那么TCP窗口最大就是65535字节吗?

实际上,TCP首部40字节选项中还包含了一个窗口扩大因子M,实际窗口大小就是窗口字段的值左移M位.

拥塞控制

之前讲到的流量控制是站在接收方的角度来制约发送速度的,虽然它能够高效可靠的发送大量数据,但是如果在开始阶段就发送大量的数据,仍然可能引发问题.

因为网络上有很多的计算机,可能当前网络状态就比较拥堵.在不清楚当前网络状态的情况下,贸然发送大量的数据,是很有可能雪上加霜的.

TCP引入慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据.(核心思路:把中间经过的所有的设备,视为整体,然后通过实验的方式找到合适的速率).

1.此处引入一个概念为拥塞窗口.

2.发送开始时,定义拥塞窗口为1;

3.每收到一个ACK应答,拥塞窗口+1;

4.每次发送数据包的时候,将拥塞窗口和接收端主机反馈做比较,取较小的值作为实际发送的窗口.

5.如按某窗口大小发送数据之后,出现丢包,就视为中间路径拥堵,就减小窗口大小.

像上面这样的拥塞窗口的增长速度,是指数级别的,"慢启动"只是指初始时慢,但是增长速度非常快.

1.为了不增长的那么快,因此不能使拥塞窗口单纯的加倍.

2.此处引入一个叫做慢启动的阈值.

3.当拥塞窗口超过这个阈值的时候,不再按指数方式增长,而是按照线性方式增长.

4.当TCP开始启动的时候,慢启动阈值等于窗口的最大值.

5.在每次超时重发时,慢启动阈值会变为原来的一半,同时拥塞窗口置回1;(这个是旧版本了)

少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络堵塞; 形成了一种动态平衡:拥塞窗口的大小始终在变,主要是因为拥塞情况在变.

当TCP通信开始时,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立即下降.

拥塞控制,归根结底是TCP协议想尽可能快的把数据传给对方,但是又要避免给网络造成太大压力的折中方案.

TCP拥塞控制的这种过程,就像是热恋的感觉.

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
机器学习/深度学习 存储 算法
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
反向传播算法虽是深度学习基石,但面临内存消耗大和并行扩展受限的问题。近期,牛津大学等机构提出NoProp方法,通过扩散模型概念,将训练重塑为分层去噪任务,无需全局前向或反向传播。NoProp包含三种变体(DT、CT、FM),具备低内存占用与高效训练优势,在CIFAR-10等数据集上达到与传统方法相当的性能。其层间解耦特性支持分布式并行训练,为无梯度深度学习提供了新方向。
206 1
NoProp:无需反向传播,基于去噪原理的非全局梯度传播神经网络训练,可大幅降低内存消耗
|
4月前
|
域名解析 网络协议 安全
计算机网络TCP/IP四层模型
本文介绍了TCP/IP模型的四层结构及其与OSI模型的对比。网络接口层负责物理网络接口,处理MAC地址和帧传输;网络层管理IP地址和路由选择,确保数据包准确送达;传输层提供端到端通信,支持可靠(TCP)或不可靠(UDP)传输;应用层直接面向用户,提供如HTTP、FTP等服务。此外,还详细描述了数据封装与解封装过程,以及两模型在层次划分上的差异。
670 13
|
4月前
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
126 35
|
4月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
126 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
6月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
473 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
7月前
|
网络协议 安全 网络安全
应用程序中的网络协议:原理、应用与挑战
网络协议是应用程序实现流畅运行和安全通信的基石。了解不同协议的特点和应用场景,以及它们面临的挑战和应对策略,对于开发者和用户都具有重要意义。在未来,随着技术的不断发展,网络协议也将不断优化和创新,为数字世界的发展提供更强大的支持。
207 1
|
8月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
2276 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
9月前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
9月前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
9月前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。

热门文章

最新文章