TCP总结

      最后更新:2022-06-17 11:39:54 手机定位技术交流文章

      目录

      1. 概述

      2. 延迟与带宽

      2.1. 延迟

      2.2. 带宽

      3. TCP/IP

      4. TCP协议

      4.1.传输控制协议

      4.2. 特点

      4.3. 规定

      4.4.报告格式标准

      4.5.TCP与UDP

      4.6. 特性

      4.6.1.三手

      4.6.2.四波

      4.6.3.交通堵塞预防和控制

      4.6.4.队长封锁

      4.7. 优化建议

      5. HTTP

      5.1. HTTP1.1

      5.2. HTTP2.0

      5.3.HTML、CSS、JavaScript的浏览器处理

      5.4. 性能

      5.5. 优化应用

      1. 概述

      带宽、延迟、TCP和特性(三个握手、慢启动、堵塞预防等),HTTP、优化建议等。

      2. 延迟与带宽

      2.1. 延迟

      定义: 从信息源到目的地发送消息或组件所需的时间。

      构成

      传播延迟 从发送器到接收器发送消息所需的时间取决于信号的传输距离和速度。
      传输延迟 传输消息的所有位数到链路所需的时间是消息长度和链路速度的函数。
      它与客户端与服务器的距离无关,例如,10MB文件需要1Mbit/s链上的10s和100Mbit/s链上的0s。
      处理延迟 处理组总部, 检查位置错误, 确定组目标所需的时间.
      当一个分组到达路由器时,路由器必须检测分组的第一部分,以确定到车站的路由,并且可以检查数据。
      排队延迟 等待团体到达的时间。
      如果该组到达的速度超过路由器的处理能力,该组必须在站区缓冲区排队。

      Unix平台使用straceroute和Windows平台使用stracert。

      2.2. 带宽

      定义:逻辑或物理通信路径的最大吞吐量由整个链路的最低容量决定。

      网络核心的带宽

      光纤是一种传输光信号的光导体。 金属线用于传输电信信号,但信号损失、电磁干涉和维护成本很高。
      光纤通过波分和再组合技术可以同时传输多种不同光波长。 光纤的总带宽等于每个通道的数据传输率,乘以再利用通道的数目。

      网络边缘的带宽

      网络边缘的带宽取决于部署技术,例如拨号连接、光纤到家等。 带宽的可用性取决于客户端与目标服务器之间的最小容量连接。

      通过下图可以更直观地理解带宽和延迟。 在中间的服务器侧带宽是大的,而客户端侧带宽是小的,因此从客户端到服务器的带宽是链路的最大带宽。

      在实际应用中, 追求是高带宽和低延误.

      3. TCP/IP

      TCP/IP传输协议(英语:TCP/IP transmission protocol)或传输控制/网络协议(英语:Transmission control/network protocol)也被称为网络通信协议(network communication protocol)。

      OSI网络模型有七层.

      应用层
      表示层
      会话层
      运输层
      网络层
      数据链路层
      物理层

      TCP/IP协议有四个层次。

      应用层 根据特定协议规格分析字节流, 处理请求, 并根据协议规格返回数据.
      运输层

      端口

      UDP TCP

      网络层

      IP地址

      IP

      链路层 MAC地址

      IP, 互联网协议, 负责网络主机之间的路由选择和地址.

      TCP(Transmission Control Protocol)是一种连接、可靠、基于字节的传输层通信协议,旨在提供可靠的端到端字节流在不可靠的互联网网络上。

      4. TCP协议

      4.1.传输控制协议

      TCP,传输控制协议,负责在不可靠的传输通道上提供可靠的抽象层,网络通信的大部分复杂细节都隐藏在应用程序层中,例如, 损失复发 、 序列传输 、 堵塞控制和避免 、 数据完整等.使用TCP数据流确保所有发送的字节都得到充分接收,而且达到顺序一样。即,TCP专为准确的传输而优化,但未过多顾及时间。

      4.2. 特点

      基于字节流
      面向连接
      可靠通信
      在网络不良时减少带宽成本
      通信连接是两个面向通信的终端,不考虑网络节点和节点

      4.3. 规定

      数据分片 发送器将数据分段,接收器将分段重新组织,而TCP则决定分段大小,分段和重组。
      到达确认 当接收器接收芯片时,它根据芯片数据序列向发送者发送确认。
      超时重发 当发送器发送断片时,它启动过时计时器,如果在计时器过时后没有得到确认,则重新发送断片。
      滑动窗口 在TCP连接中,接收器缓冲大小都是固定的,接收器只允许另一个发送接收器缓冲接收到的数据。
      失序处理 作为IP包传输的TCP芯片可以在接收端序列化,而TCP将接收的芯片重新排序,给应用程序层的数据按正确的顺序排序。
      重复处理 作为IP包传输的TCP芯片可能在接收端产生重复,而TCP处理重复和丢弃重复芯片。
      数据校验 在传输过程中的初始和数据校正和检测数据的变化。 如果接收器验证了校正和错误,丢弃的芯片不会被确认,导致发送器超时重复。

      4.4.报告格式标准

      4.5.TCP与UDP

      连接角度 TCP是一种面向连接的传输控制协议
      UDP是一个不连接的数据包服务
      可靠角度 TCP具有很高的可靠性, 保证传输数据的正确性, 没有故障和损失.
      在UDP传输前未能建立连接,无法检查数据,无法验证机制,损失和混乱。
      网络开销 UDP具有更好的实时性能,比TCP更高效; UDP结构比TCP简单,网络成本更低。

      4.6. 特性

      4.6.1.三手

      所有TCP连接始于三个握手。 在交换数据之前,用户和服务器必须同意最初的序列数目以及其他细节。

      握手过程分别分为三个阶段:

      发送端SYN 客户端选择一个随机序列数x,并发送一个SYN子集,它可能包含其他TCP符号和选项。
      SYN ACK接收器 服务器将 x 加到 1, 选择一个随机序列数 y, 添加自己的符号和选项, 然后返回响应.
      发送端ACK 客户端将1加到x和y,并且在摇摆过程中发送最后的ACK子集。

      在三个手之后,客户端和服务器可以通信。 启动通信的过程适用于所有TCP连接,因此所有适用的TCP应用程序都有性能影响,因为在每次递交申请数据之前必须进行一次完整的巡回旅行。

      由于三个握手造成的延迟,每次创建一个新的TCP连接成本很高。 提高TCP应用程序性能的关键在于重用连接

      4.6.2.四波

      当一个TCP连接被切断时,需要四向波。

      整个过程描述如下:

      AB的两端有TCP连接,A端执行关闭,需要向另一端B发送 FIN消息,序列x
      终端B接收 FIN消息并发送ACK消息,确认编号x+1
      经过一段时间后,端B执行关闭,并向另一端A发送一个连号y的 FIN消息
      结尾A接收 FIN消息,发送ACK消息,并确认编号y+1

      4.6.3.交通堵塞预防和控制

      返回时间可能超过所有主机的最大间隔,因此,主要的机会是在网络中制作越来越多的数据报告副本,整个网络瘫痪。最后,交换节点的所有缓冲区都填满了,必须删除多个子组。当前的小组巡回时间已设置为最大值,主机多次发送每个子组,因此,每个子集的拷贝将到达目标。这就是拥塞崩溃。

      流量控制

      流量控制是防止传送数据信息的机制,由传送器传送到接收器。否则接收器可能会因繁忙、负载和缓冲区定义而无法处理。为实现流量控制,每个与TCP连接的当事人必须通知自己的接收机窗口rwnd,包含存储数据的缓冲空间大小信息。

      第一次建立连接时,两端都将使用自己的系统默认配置发送接收窗口rwnd。数据传输过程中,如果其中一个端不跟踪数据传输,然后它可以通知一个较小的窗口发送器。这个过程通过每个TCP连接的整个生命周期:每个ACK子集将携带相应的最新接收窗口rwnd值,为了动态调整数据流速,将其适应发送器和接收器的容量和处理能力.

      慢启动

      发送者和接收者在连接创建开始时,没有人知道可用的带宽有多大,因此需要一个估计机制,然后根据不断变化的网络动态改变速度。

      基于数据交换,估计客户端与服务器之间可用的带宽是唯一的方法,它也是慢启动算法的设计思想.服务器通过TCP连接启动新的拥挤窗口cwnd变量,将它的值设置为系统维护值(在Linux中内置)。发送器不会通知cwnd变量,也就是说,发送者和接收者不会交换这个值。

      拥挤窗口的大小是cwnd,并且发送器限制在客户端接收ACK之前发送的数据量。

      通过新的TCP连接传输的最大数据量是rwnd和cwnd的最低值,每个服务器接收一个ACK,慢启动算法告诉服务器增加cwnd.慢慢启动连接到保守窗口,然后每轮旅行都会将数据转移的数量翻一番,直到接收机上的流量控制窗口丢失或有一个子集丢失为止。TCP连接的这一阶段称为指数增长阶段,因此,客户端和服务器正在快速接近网络路径的有效带宽。

      下面的图示表明,在TCP连接后,回转拥塞窗口每次被乘倍,当数据包丢失时,回转拥塞窗口会立即减少,回转拥塞窗口每次会逐渐增加。

      许多应用程序层协议,包括HTTP,运行在TCP上,不管带宽有多大,每个TCP连接必须经过慢启动阶段,使得完全利用连接的最大带宽是不可能的。

      慢启动会导致客户端和服务器需要一定时间(例如数十秒或几百毫秒)才能达到最大速度,这对于大量流媒体下载并不明显,但对于短期的http连接、小文件传输等非常不利,经常导致连接在达到最大窗口之前终止。

      一旦你明白慢启动,你就能明白为什么保持活泼、多路径重用可以提高性能。

      慢启动过程数据传输图

      复制连接数据传输图

      为了优化TCP,可以通过系统配置考虑慢启动和增加初始TCP拥挤窗口的大小。

      拥塞预防

      当传输的数据量超过接收机交通控制窗口或丢失一个子集时,时节点预防机制开始干预。

      堵塞预防算法使用数据包作为网络堵塞的标志,为了避免更多的数据损失,必须减少窗口的大小。

      重置拥塞窗口后,堵塞预防机制根据其本身的算法添加一个堵塞窗口,以避免数据包丢失。到了某个时候,这个包又丢失了。所以这个过程从一开始就开始了。调整交通堵塞窗口中的交通堵塞控制及预防,然后消除网络中的包丢失问题,因此, TCP连接的吞吐曲线是锯齿状的。

      拥塞预防的算法

      • 当 AIMD被倍增和增加时,当损失发生时,拥挤窗口被减少一半,每次返回时,将固定值添加到窗口中。
      • 比例降低的PRR改善了丢失包后回收率.

      带宽延迟积

      发送器和接收器的理想窗口大小随返回时间和目标传输速度而不断变化。 发送者发送的数据或接收器接收的数据超过未确认的数据的最大数量,它必须停止并等待其他ACK确认某些子组,然后继续。
      BDP带宽延迟量=数据链容量*端到端延迟
      使用公式,知道任何两个数字,可以计算另一个数字,例如计算BDP为最佳窗口大小。

      4.6.4.队长封锁

      TCP 确保 发送者 数据 的 传输 顺序 符合 接收者 数据 的 传输 顺序 。如果中间组不能到达接收端,然后将下列子组存储在接收器的TCP缓存中,等待丢失的分配被检索并到达接收机.所有这些都发生在TCP级别,应用程序层没有对TCP缓冲区中的子组的了解。你必须等待所有子组到达,然后才能访问它们。它被称为TCP团队领导区。团队领导在简化代码的同时堵塞了,但它带来了未知的延误。

      下图中,发送器发送三个包p1,p2,p3,在传输过程中p1的损失,接收器只接收p2,p3,由于没有收到以前的序列编号的包裹,因此,收到的包只能放在缓冲区。收件人发出p2和p3的确认,发件人收到确认,并知道包裹已交付,由于没有收到p1的确认,因此发射器重新启动p1。之后,接收端收到p1。为了发送数据包,交给应用层使用。

      4.7. 优化建议

      服务器端 使用较新的操作系统
      增加初始的TCP拥堵窗口cwnd,例如10
      当闲置被禁时慢启动重新启动
      启用窗口缩放
      TCP快速打开
      在某些情况下,允许在第一个SYN子集中发送应用程序数据。
      将服务器靠近客户端,减少返回时间
      应用程序调优 减少传输冗余数据
      发送最少的数据,例如压缩
      服务器部署在客户端附近的一个位置,例如CDN
      重用TCP连接
      三振和慢启动会影响性能

      5. HTTP

      5.1. HTTP1.1

      http1.1互联网标准澄清了以前版本的许多误解,它还增加了许多重要的性能优化,例如持久连接、块编码传输、字节范围请求、增强缓存机制、传输编码和请求管道,此外, 还 增加了 内容 、 编码 、 字符集 和 语言 协商 机制 。添加每个请求可查阅的字段,如传输编码、缓存命令、客户端cookie等。

      5.2. HTTP2.0

      主要目标是提高传输性能,实现低延迟和高吞吐量。 虽然主要版本数目已经增加,但所有HTTP头条、值和使用场景都没有改变。
      任何现有的网站和应用程序都可以使用HTTP2,无需修改。

      5.3.HTML、CSS、JavaScript的浏览器处理

      HTML文档作为 DOM文档对象模型进行分析,CSS被分析为CSSOM对象模型。如果js代码介于css和html之间,然后,js执行将阻止文件的分析,这导致渲染时间的延长。所以最好的做法是使用上面的模式和下面的脚本。渲染和脚本执行被风格表封锁,因此,必须使css下载尽可能快。

      页面加载时间PLT

      简单定义在浏览器中加载时,旋转图标停止旋转的时间。 该技术被定义为当浏览器在文件和所有依赖(css、js、图像等)被下载后触发该事件时,在浏览器中触发一个加载事件。

      5.4. 性能

      时间与用户的感觉

      你必须在250ms内渲染页面或提供视觉反馈以确保用户不会离开。 网络越快,pv越高,粘度越强,转换率越高。

      例如,看看HTTP请求的时间,TCP连接的寿命周期时间,例如使用浏览器的开发工具。

      网页应用程序的实现涉及三个主要任务:访问资源、页面布局和渲染以及JavaScript执行。其中渲染和脚本执行可以在同一线程中相互交换,不能同时修改DOM.所以优化运行时间渲染和脚本执行是重要的。但是如果网络资源变得很慢,甚至优化渲染和脚本执行都是徒劳的。因此,快速获取资源是最重要的。

      TCP抓紧机理、流量控制、包丢失引起的包拥堵等特性影响性能。大多数HTTP数据流都是小突然的数据流,TCP被优化用于长期连接和大规模数据传输。网络调度时间在大多数情况下是TCP吞吐量和性能的限制.因此,延迟自然成为HTTP的性能瓶颈。

      若比较下面的两个列图则,可以清楚地发现,页面加载时间越慢,带宽的影响就越短。

      5.5. 优化应用

      无法控制服务器与客户端之间的网络环境,无法控制客户端设备。 您可以从以下方面优化服务器的TCP和TLS优化,对不同的物理层特性,不同的HTTP协议版本和最佳做法等。

      最佳实践

      减少DNS查找 每个域名分析需要一个网络旅行,这增加了网络延迟,也阻止了后续的请求。
      重用TCP连接 尽可能使用永久连接来消除TCP握手和缓慢启动延迟。
      减少HTTP重定向 HTTP的重址花费时间,而不同的域名的重址则花费更多的时间,包括 DNS分析、TCP手握等等的延迟。
      使用CDN内容分配网络 将数据更接近用户,有效减少网络延迟的TCP连接和增加吞吐量。
      删除不必要的资源获取
      客户端缓存 缓存控制的第一部分用于指定缓存时间
      最后修改和ETag首先提供验证机制
      注意缓存时间和验证机制同时指定
      传输压缩过的内容 在传输前压缩内容, 减少传输到最低限度.
      减少不必要的请求费用 较少请求的HTTP初始数据,如cookie,可以保存相当于几个回程延迟的事件。
      并行处理请求和响应

      参考

      web性能权威指南

      TCP(传输控制协议)|百度百科全书

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27540.html

          热门文章

          文章分类