网络原理-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拥塞控制的这种过程,就像是热恋的感觉.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
71 3
|
22天前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
53 5
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
79 3
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
83 2
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
50 13
|
1月前
|
运维 物联网 网络虚拟化
网络功能虚拟化(NFV):定义、原理及应用前景
网络功能虚拟化(NFV):定义、原理及应用前景
66 3
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
2月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
216 1
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。