TCP详解及其在音视频传输中的应用

传输控制协议(TCP,Transmission Control Protocol)是互联网协议栈中至关重要的传输层协议。它提供了可靠、面向连接的数据传输服务,广泛应用于各种网络应用中。对于音视频传输,虽然TCP协议并不是最常用的传输协议(相较于UDP),但在某些场景下,尤其是在可靠性比实时性更重要的场合,TCP仍然是不可或缺的选择。

本文将从TCP协议的基本原理出发,深入探讨其在音视频传输中的具体应用场景、面临的挑战以及优化策略,并结合实际案例,详细分析TCP在音视频传输中的表现和应用。

一. TCP协议基础

1.1 TCP/IP协议栈概述

请添加图片描述

TCP/IP协议栈是网络通信的基础结构,分为四层:应用层、传输层、网络层和链路层。各层功能如下:

  • 应用层:处理具体的网络应用,协议包括HTTP、FTP、SMTP等。音视频传输中,常见的应用层协议包括RTSP、HLS、HTTP等。

  • 传输层:负责数据的传输,提供TCP和UDP两种主要协议。TCP提供可靠传输,而UDP则更注重实时性。

  • 网络层:主要负责路由选择和数据包的转发,IP协议是这一层的核心。

  • 链路层:管理物理网络连接和数据帧的传输。

1.2 IP协议头

请添加图片描述

  • Version : 版本

  • identification、Flags、Fragment Offset 用于分包
    在 IP 协议中,identification(标识)、Flags(标志)和 Fragment Offset(片偏移)字段协同工作,用于实现数据包的分片和重组。

    • identification(标识):这是一个用于标识一个特定数据包的唯一值。当一个数据包被分片时,所有的分片都具有相同的标识值,以便接收端能够识别哪些分片属于同一个原始数据包。

    • Flags(标志):由 3 位组成,分别是 Reserved(保留位)、Don't Fragment(不分片位)和 More Fragments(还有更多分片位)。

      • Don't Fragment 位:如果设置为 1,表示不允许对数据包进行分片。如果路由器遇到无法转发的大数据包且该位被设置,可能会丢弃该数据包并发送 ICMP 错误消息。

      • More Fragments 位:如果设置为 1,表示不是数据包的最后一个分片;如果为 0,则表示是最后一个分片。

      • Fragment Offset(片偏移):指示每个分片相对于原始数据包起始位置的偏移量。以 8 字节为单位,用于接收端正确重组分片。

        当一个数据包的大小超过网络的最大传输单元(MTU)时,就需要进行分片。发送端根据 MTU 将数据包分成多个较小的分片,并为每个分片设置上述字段的值。接收端根据相同的标识值、标志位和片偏移字段,将收到的分片按照正确的顺序重组为原始的数据包。

  • TTL :跳数,控制包跳几次,能找到目标ip

  • Protocol :数据类型,如TCP、UDP等

  • Header Checksum :首部校验和,防止被篡改。

1.3 MTU

MTU(Maximum Transmission Unit,最大传输单元)是指在网络中能够传输的最大数据包大小。可通过ICMP查询最大传输单元,它通过设置IP层的DF【Don’t Fragment】不分片位,如果将这一bit置为一,IP层将不对数据报进行分片

获取MTU的好处是控制在传输过程中不拆包,提高传输效率,以太网MTU默认是1500B

二、TCP协议

2.1 TCP协议头

请添加图片描述

TCP(Transmission Control Protocol,传输控制协议)协议头的字段及其作用如下:

  • 源端口(Source Port):标识发送方应用程序的端口号。

  • 目的端口(Destination Port):标识接收方应用程序的端口号。

  • 序列号(Sequence Number):代表的是发送字节的起始序号,发送的第一个包的初始序号是随机的,在创建连接的三次握手中交换。

  • 确认号(Acknowledgment Number):期望接收的下一个字节的序列号,希望对方发送数据的起始位置

  • 数据偏移(Data Offset):指出 TCP 头部的长度,以 32 位字为单位。

  • 保留(Reserved):保留位,目前未使用。

  • 控制位(Control Bits):

    • URG(Urgent Pointer Field Significant):紧急指针有效。

    • ACK(Acknowledgment Field Significant):确认号有效。

    • PSH(Push Function):推送操作,提示接收方尽快将数据交付给应用层。

    • RST(Reset the Connection):重置连接。

    • SYN(Synchronize Sequence Numbers):用于建立连接时同步序列号。

    • FIN(No More Data from Sender):发送方完成数据发送。

  • 窗口大小(Window):用于流量控制,告诉对方自己能够接收的数据量。

  • 校验和(Checksum):用于检测 TCP 头部和数据部分的错误。

  • 紧急指针(Urgent Pointer):当 URG 标志置 1 时,紧急指针指出紧急数据的位置。

  • 选项(Options):可选字段,用于一些特殊功能,如最大段大小(MSS)等。

这些字段共同协作,实现了 TCP 协议可靠的数据传输、连接管理、流量控制和错误检测等功能。

2.2 TCP协议的工作原理

请添加图片描述

TCP协议是面向连接的,旨在提供可靠的数据传输服务。其核心工作原理包括连接管理(通过三次握手建立连接和四次挥手断开连接)、数据流的可靠传输(通过序列号和确认机制保证数据的有序和完整)、流量控制、拥塞控制和错误恢复等。

2.2.1 三次握手(Three-Way Handshake)

在这里插入图片描述
TCP连接的建立通过三次握手完成:

  1. SYN(同步):客户端向服务器发送一个SYN包,其中SYN标志位设置为1,序列号随机生成。客户端进入SYN_SEND状态。本例中,seq设置为0

  2. SYN-ACK(同步-确认):服务器收到SYN包后,回复一个SYN+ACK包,其中SYN和ACK标志位都设置为1,序列号为随机生成的值,本例中设置为0,确认号为客户端的序列号+1。服务器进入SYN_RECV状态。

  3. ACK(确认):客户端收到SYN-ACK报文后,再发送一个ACK报文,确认服务器的序列号,确认号为服务器的序列号+1,连接建立。

三次握手的过程主要保证的点确保双方都准备好进行数据传输,并且在传输之前已经同步了初始序列号,以保证数据的有序传输。

2.2.2 四次挥手(Four-Way Handshake)

请添加图片描述
TCP连接的关闭需要通过四次挥手来完成:

  1. FIN(终止):主动关闭方(通常是客户端)发送一个 FIN (Finish)报文段,表示没有数据要发送了,想要关闭连接。

  2. ACK:被动关闭方收到 FIN 后,返回一个 ACK 确认报文段,表示已经收到对方的关闭请求。

  3. FIN:被动关闭方此时可能还有数据要发送,等数据发送完毕后,也发送一个 FIN 报文段给主动关闭方。

  4. ACK:主动关闭方收到被动关闭方的 FIN 后,返回一个 ACK 确认报文段。即主动关闭方接收到FIN包后,回复一个ACK包后,需要等待2个MSL时间。这是因为这个包的ACK,被动关闭方可能没有收到,此时被动关闭方会重新发送FIN消息。这样能确保双方都正确的处理了关闭的请求。MSL指的是Maximum Segment Lifetime,即最大分段生存时间,通常取一个较大的值,如2分钟,以确保网络中的所有数据包都已经完成传输。

三、 TCP协议的核心机制

3.1 序列号与确认机制

TCP使用序列号(Sequence Number)来标识数据包的顺序。每个数据包都有唯一的序列号,接收方通过确认号(Acknowledgment Number)来告知发送方已经接收到的数据。这个机制保证了数据按序到达,即使网络中存在丢包或乱序的情况。

比如如下例子,
请添加图片描述

从这里来看,第一个包发送的 seq 为 18498 , len 等于 59 。那么此包的 ack 包的值就应当是 18557(18498 + 59),因为 ACK 的定义是:

期望接收的下一个字节的序列号。

这意味着,这 59 个字节我已经收到,我所期望收到的下一个包是 18557 。

通过这样的机制,能够保证数据的可靠性。

3.2 流量控制

流量控制是一种TCP的可靠性传输机制,用于控制发送方向接收方发送数据的速率,以避免发送方发送的数据过多、过快而导致接收方无法及时处理和接收。

3.2.1 TCP的分段和重排机制

TCP(传输控制协议)的分段和重排机制是确保数据可靠传输的重要特性。

分段机制

当应用程序要发送的数据超过了网络的最大传输单元(MTU)时,TCP 会将数据分割成较小的段(segments)进行传输。每个段都包含一个序列号,用于标识该段在整个数据中的位置。

重排机制

由于网络的复杂性,TCP 段可能会以乱序的方式到达接收方。接收方根据每个段的序列号对它们进行重排,以恢复原始的数据顺序。

例如,假设要发送的数据为 “HelloWorld”,MTU 限制为 5 个字符。

发送方会将数据分段为:

段 1:“Hello” (序列号为 1)

段 2:“World” (序列号为 6)

在网络传输中,段 2 可能先到达接收方。接收方根据序列号知道段 1 还未到达,会先缓存段 2。当段 1 到达后,接收方按照序列号将它们重排成原始的顺序 “HelloWorld”,然后交付给应用程序。

这样的分段和重排机制保证了数据在各种网络条件下都能准确、有序地传输。

3.2.2 滑动窗口机制

从前面的内容来看,似乎 TCP 的每一个包都需要 ACK ,如此一来效率就显得比较低下了,网络上将会充斥着大量的 ACK 包数据,所以在实际情况中,往往是多个包才回一次 ACK 。

为了解决这个问题,TCP根据缓冲区的思想,引入了窗口,它是操作系统开辟的一个缓存空间。窗口大小值表示无需等待确认应答,而可以继续发送数据的最大值。

举个例子,

发送方和接收方之间建立了 TCP 连接,接收方告知发送方其接收窗口大小为 5 个数据包。发送方开始发送数据,最初发送了 3 个数据包。接收方成功接收并处理了这 3 个数据包,同时向发送方发送确认,并告知发送方其接收窗口还有 2 个数据包的空间。发送方收到确认后,继续发送 2 个数据包。在这个过程中,接收窗口的大小会根据接收方的处理能力和缓冲区情况动态变化,发送方根据接收方通告的窗口大小来调整发送速率,这就是 TCP 滑动窗口的工作流程。

3.2.3 流量控制的过程
  1. 连接建立阶段

    • 三次握手: 发送方和接收方通过三次握手建立连接,同时双方协商初始窗口大小。
  2. 数据传输阶段

    • 发送数据:
      • 发送方在当前窗口大小允许的范围内发送数据(因为如果对方不收,你需要保证信息不丢失)
      • 每次发送的数据片段 (Segment) 都有一个序列号 (Sequence Number)。
    • 接收数据:
      • 接收方接收数据片段,并根据序列号确认顺序。
      • 接收方接收窗口大小 (Receive Window Size) 指示其可以接收的剩余数据量。
    • ACK 确认:
      • 接收方向发送方发送 ACK 确认包,表明已成功接收到的最后一个数据片段的序列号,以及其可接收的剩余窗口大小。

      • 发送方根据 ACK 调整发送窗口大小。

  3. 窗口调整

    • 窗口缩小: 如果接收方的接收缓冲区满了,接收窗口大小会减少,甚至可能为 0,发送方需要暂停发送数据。
    • 窗口扩大:- 当接收方处理完一部分数据后,接收窗口大小会增大,发送方可以继续发送数据。
  4. 拥塞控制:

    • 如果网络中发生拥塞,发送方会减少其拥塞窗口 (Congestion Window),从而降低发送速率。
    • 拥塞窗口的调整通常使用算法,如慢启动 (Slow Start)、拥塞避免 (Congestion Avoidance)、快速重传 (Fast Retransmit)、快速恢复 (Fast Recovery) 等。
  5. 连接终止阶段

    • 四次挥手: 发送方和接收方通过四次挥手来安全终止连接,并释放相关资源。

四. TCP在音视频传输中的应用

4.1 流媒体传输中的TCP

流媒体传输是指在播放的同时传输音视频内容。常见的流媒体协议如HLS(HTTP Live Streaming)和DASH(Dynamic Adaptive Streaming over HTTP)都基于TCP协议传输。

4.1.1 HLS协议

HLS是由Apple开发的一种流媒体传输协议,广泛用于视频点播和直播服务。HLS将多媒体内容分割成一系列小的TS(Transport Stream)文件,这些文件通过HTTP协议(基于TCP)传输给客户端。客户端在接收到TS文件后,进行解码并播放。

4.1.2 DASH协议

DASH类似于HLS,也是一种自适应流媒体传输技术,但它支持更广泛的编码格式和流协议。DASH通过HTTP协议传输媒体文件段,同样依赖TCP的可靠传输特性。

4.2 实时音视频通信中的TCP应用

实时音视频通信通常更依赖于UDP协议以保证低延迟传输。然而,在某些情况下,如防火墙阻挡UDP流量、需要保证数据的可靠性等场景下,TCP仍然被使用。

4.2.1 WebRTC中的TCP备用方案

WebRTC是一种用于实时通信的开源框架,广泛应用于视频会议、在线教育等场景。虽然WebRTC主要使用UDP传输音视频数据,但在某些防火墙或NAT(网络地址转换)无法穿越的环境下,WebRTC会使用TCP作为备用传输方案。

4.2.2 RTSP协议中的TCP应用

RTSP(Real-Time Streaming Protocol)是一种用于控制多媒体流传输的协议,常用于监控、直播等实时音视频传输场景。RTSP通常搭配RTP(Real-Time Protocol)使用,RTP可以通过UDP或TCP进行传输。使用TCP传输RTP数据时,尽管实时性可能有所牺牲,但能够确保数据包的可靠传输,适用于对数据丢失较为敏感的场景。

五、 TCP协议在音视频传输中的优化

5.1 基于TCP的拥塞控制优化

5.1.1 BBR拥塞控制算法

BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种由Google开发的拥塞控制算法,与传统的TCP拥塞控制算法(如Cubic)不同,BBR通过动态监测带宽和RTT来调整发送速率。BBR能够在低延迟和高带宽环境下表现出色,适用于需要高传输效率的流媒体传输。

5.2 TCP Fast Open

TCP Fast Open(TFO)是一种通过在三次握手过程中传输数据来减少连接延迟的技术。对于需要频繁建立短连接的音视频传输场景,如小视频片段的传输,TFO能够有效降低延迟,提升用户体验。

比如在短视频应用中,每次播放短视频都需要建立新的TCP连接,而传统的三次握手过程会增加额外的延迟。通过引入TCP Fast Open技术,短视频应用能够在连接建立的同时传输视频数据,缩短了视频加载时间,提升了用户的观看体验。

5.3 QUIC协议:TCP的替代方案

QUIC(Quick UDP Internet Connections)是Google开发的一种基于UDP的传输协议,集成了TCP和TLS的功能,优化了连接建立时间和数据传输效率。QUIC在音视频传输中展现出了卓越的性能,尤其是在低延迟和高丢包率的网络环境下。YouTube作为全球最大的视频分享平台,面临着复杂多变的网络环境。通过引入QUIC协议,YouTube能够在连接建立和数据传输方面显著减少延迟,特别是在移动网络和公共Wi-Fi环境中,QUIC的性能优势更加明显,用户能够更快地加载和播放视频,提升整体使用体验。

5.4 KCP协议:自私的TCP

KCP 是一个快速可靠协议,基于UDP协议实现,能以比 TCP 浪费 10% - 20% 的带宽的代价,换取平均延迟降低 30% - 40%,且最大延迟降低三倍的传输效果。在一些远程控制、物联网等场景中,如果对实时性和可靠性有特定需求,也可能会考虑使用 KCP 协议来替代传统的 TCP 协议。

6. 结论

TCP协议作为互联网的基础传输协议,以其可靠性和有序性广泛应用于各种网络通信场景。在音视频传输中,虽然TCP并不是首选,但在某些需要高可靠性和数据完整性的场合,TCP仍然发挥着重要作用。通过结合HLS、DASH等流媒体技术,以及优化拥塞控制算法和引入TCP Fast Open等新技术,TCP能够在音视频传输中提供更好的服务。

随着网络技术的发展,新的传输协议如QUIC正在逐渐替代传统的TCP,尤其在需要低延迟和高传输效率的音视频应用中表现出色。然而,理解和掌握TCP的工作原理及其在音视频传输中的应用,对于开发者来说仍然是至关重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397095.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS实验——部署DR模式集群

目录 一、实验环境 二、配置 1、LVS 2、router 3、client 4、RS 三、配置策略 四、测试 1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP 2.Web服务器采用和DIP相同的网段和Director连接 3.每个Web服务器配置VIP 4.每个web服务器可以出外网…

《Advanced RAG》-11-RAG查询分类和细化

总结 文章介绍了两种高级的检索增强生成(RAG)技术:自适应 RAG 和 RQ-RAG,以及它们在问题复杂性学习和查询细化方面的应用和优势,以及如何通过小型模型的训练来提高这些技术的性能。 摘要 传统 RAG 技术虽然能够减少大型…

「MyBatis」数据库相关操作2

🎇个人主页 🎇所属专栏:Spring 🎇欢迎点赞收藏加关注哦! #{} 和 ${} 我们前面都是采用 #{} 对参数进行赋值,实际上也可以用 ${} 客户端发送⼀条 SQL 给服务器后,大致流程如下: 1.…

51单片机之动态数码管显示

一、硬件介绍 LED数码管是一种由多个发光二极管(LED)封装在一起,形成“8”字型的显示器件。它广泛用于仪表、时钟、车站、家电等场合,用于显示数字、字母或符号。 通过控制点亮a b c d e f g dp来显示数字,本实验开发板…

前端八股文笔记【三】

JavaScript 基础题型 1.JS的基本数据类型有哪些 基本数据类型:String,Number,Boolean,Nndefined,NULL,Symbol,Bigint 引用数据类型:object NaN是一个数值类型,但不是…

十三、代理模式

文章目录 1 基本介绍2 案例2.1 Sortable 接口2.2 BubbleSort 类2.3 SortTimer 类2.4 Client 类2.5 Client 类的运行结果2.6 总结 3 各角色之间的关系3.1 角色3.1.1 Subject ( 主体 )3.1.2 RealObject ( 目标对象 )3.1.3 Proxy ( 代理 )3.1.4 Client ( 客户端 ) 3.2 类图 4 动态…

Java网络编程、TCP、UDP、Socket通信---初识版

标题 InetAddress----IP地址端口号协议(UDP/TCP)JAVA操作-UDP一发一收模式多发多收 JAVA操作-TCP一发一收多发多收 实现群聊功能BS架构线程池优化 InetAddress----IP地址 端口号 协议(UDP/TCP) JAVA操作-UDP 一发一收模式 多发多收…

React 性能优化

使用 useMemo 缓存数据 (类似 vue 的 computed)使用 useCallback 缓存函数异步组件 ( lazy )路由懒加载( lazy )服务器渲染 SSR用 CSS 模拟 v-show 循环渲染添加 key使用 Fragment (空标签)减少层级 不在JSX 中定义函数&#xff0…

一篇教会搭建ELK日志分析平台

日志分析的概述 日志分析是运维工程师解决系统故障,发现问题的主要手段日志主要包括系统日志、应用程序日志和安全日志系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因经常分析日志可以了解服务器的负荷,性…

使用本地大模型从论文PDF中提取结构化信息

1 安装ollama 点击前往网站 https://ollama.com/ ,下载ollama软件,支持win、Mac、linux 2 下载LLM ollama软件目前支持多种大模型, 如阿里的(qwen、qwen2)、meta的(llama3、llama3.1), 读者根据自己电脑…

C语言:求最大数不用数组

(1)题目: 输入一批正数用空格隔开,个数不限,输入0时结束循环,并且输出这批整数的最大值。 (2)代码: #include "stdio.h" int main() {int max 0; // 假设输入…

Qt——多线程

一、QThread类 如果要设计多线程程序,一般是从QThread继承定义一个线程类,并重新定义QThread的虚函数 run() ,在函数 run() 里处理线程的事件循环。 应用程序的线程称为主线程,创建的其他线程称为工作线程。主线程的 start() 函数…

计算机网络408考研 2014

1 计算机网络408考研2014年真题解析_哔哩哔哩_bilibili 1 111 1 11 1

MyBatis:Maven,Git,TortoiseGit,Gradle

1,Maven Maven是一个非常优秀的项目管理工具,采用一种“约定优于配置(CoC)”的策略来管理项目。使用Maven不仅可以把源代码构建成可发布的项目(包括编译、打包、测试和分发),还可以生成报告、生…

短视频SDK,支持Flutter跨平台框架,加速产品上线进程

在数字内容爆炸式增长的今天,短视频已成为连接用户、传递情感、展现创意的重要桥梁。为助力开发者快速融入这股潮流,美摄科技匠心打造了一款专为Flutter框架优化的短视频SDK解决方案,旨在降低技术门槛,加速产品迭代,让…

主题与分区

主题和分区是Kafka的两个核心概念,分区的划分不仅为Kafka提供了可伸缩性、水平扩展的功能,还通过多副本机制来为Kafka提供数据冗余以提高数据可靠性。 主题创建 主题和分区都是提供给上层用户的抽象,而在副本层面或更加准确地说是Log层面&a…

Unity效果优化之抗锯齿

Unityde 基于HDRP渲染管线的抗锯齿处理的设置参考图: 前提:需要导入HDRP的插件包才行, 该参数设置能保证在PC版上抗锯齿效果非常好, 英文版:

AWS Lambda 十年回顾:功能总览、更新记录与入门指南

这次,我为2014年11月发布的AWS Lambda创建了一个历史时间表。AWS Lambda 是一项无服务器、全托管的代码执行服务,今年2024年11月将迎来其宣布发布的十周年纪念。虽然提前了一些,但为了提前庆祝这一重要时刻,我写了这篇文章。 文章…

论文解读 | ACL 2024:自我蒸馏在语言模型微调中架起分布差异的桥梁

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 杨兆瑞 浙江大学CAD&CG全国重点实验室博士生 导师为陈为教授 概述 大型语言模型(LLMs)的兴起彻底改变了自然语言处理领域,但对它们进行特定任务的微调常常面临在平衡性能…

C++ | (一)C++入门基础

从本篇文章开始,我们正式进行C的系统学习。C是在C语言的基础上添加了面向对象编程的特性,是C语言的延伸,并遵循C语言的绝大多数语法。如果想学习C,必须要有一定的C语言基础,这样学起来才不会太过痛苦。 本文章即假设读…