安全可靠的SRT实时传输协议

Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密,运用FEC进行前向纠错,并且有流量控制、拥塞控制。类似于QUIC协议,SRT采用UDP代替TCP,在应用层提供发送确认机制、ARQ自动重传,减少端到端的延迟。

SRT探测实时网络带宽状况,有利于补偿网络拥塞引起的jitter网络抖动和带宽下降。为了实现低延迟码流传输,SRT协议会携带delay、jitter、丢包等信息。SRT提供多路复用机制,允许多个请求共享相同的端口。

目录

一、数据包结构

1、data packet

2、control packet

二、Handshake

1、握手数据包结构

2、加密算法

3、握手类型

 三、Keep-Alive

四、ACK于NAK

1、ACK确认应答

2、NAK否定应答

五、丢包请求

六、拥塞控制

1、慢启动

2、拥塞避免

七、Shutdown


一、数据包结构

SRT的数据包分为data和control两种类型,结构如下:

1、data packet

data数据包格式如下:

Packet Sequence Number:占31位,序列号。

PP:占2位,数据包位置标志位。“10”代表第一个数据包,“00”代表中间数据包,“01”代表最后一个数据包,“11”代表单个数据包。

O:占1位,顺序标志位。

KK:占2位,加密密钥标志位。“00”代表不用加密,“01”代表偶数密钥,“10”代表奇数密钥。

R:占1位,重传包标志位。

Message Number:占26位,消息的序列号。

Timestamp:占32位,时间戳。

Destination Socket ID:占32位,目标socket标识。

2、control packet

控制数据包格式如下:

Control Type:占15位,控制包类型。

Subtype:占16位,特定数据包类型。

Type-specific Information:占32位,特定数据包信息。

Timestamp:占32位,时间戳。

Destination Socket ID:占32位,目标socket标识。

Control Information Field:有效长度。

其中,Control Type控制包类型如下表所示:

二、Handshake

1、握手数据包结构

Handshake握手属于控制包类型(control type=0x0000),用于交换双方配置信息、连接参数。握手的数据包结构如下:

2、加密算法

其中,Encryption Field包括AES的128位、192位和256位,如下表所示:

3、握手类型

握手类型占32位,类型如下:

 三、Keep-Alive

Keep-Alive属于控制包,在上一次数据包超时后发送,用于心跳保活。结构如下:

四、ACK于NAK

1、ACK确认应答

Acknowledgment(ACK) 属于控制包,用于表示数据包到达确认。所有ACK包可能会携带额外信息,比如RTT、链路容量、传输速率。ACK控制包结构如下:

其中,ACK包类型包括:

  • Full ACK:每10ms发送一次
  • Light ACK:仅保护应答包序号
  • Small ACK:可用缓冲区大小

2、NAK否定应答

Negative Acknowlegement(NAK)也是属于控制包,用于表示否定应答(没有收到数据包)。与TCP的NACK否定应答不同的是,SRT采用NAK表示否定应答。NAK控制包结构如下:

五、丢包请求

Message Drop Request用于丢包请求,比如TTL触发一个或多个数据包重传超时。发送端发起丢包请求,告诉接收端这些数据包要丢弃。结构如下:

六、拥塞控制

 拥塞控制包括两种类型:Live Congestion Control(LiveCC)和File Congestion Control(FileCC)。

1、慢启动

Slow Start,慢启动阶段,拥塞窗口CWND_SIZE初始化为16。拥塞窗口上限为MAX_CWND_SIZE,最大接收缓冲区为12MB。

ACK包的经历步骤如下:

  1. 如果上次发送速率的间隔小于RC_INTERVAL,保持当前发送速率
  2. 更新lastRCTime: lastRCTime = currTime
  3. 更新拥塞窗口大小:CWND_SIZE += ACK_SEQNO - LAST_ACK_SEQNO
  4. 更新上次ACK序号:LAST_ACK_SEQNO = ACK_SEQNO
  5. 如果CWND_SIZE > MAX_CWND_SIZE,进入拥塞避免阶段

如果接收到NAK包,或者RTO重传超时,也会结束慢启动,进入拥塞避免。

2、拥塞避免

拥塞避免阶段,收到ACK包经历的步骤如下:

  1. 如果上次发送速率的间隔小于RC_INTERVAL,保持当前发送速率
  2. 更新lastRCTime: lastRCTime = currTime
  3. 更新拥塞窗口大小:CWND_SIZE = RECEIVE_RATE * (RTT + RC_INTERVAL) / 1000000 + 16
  4. 如果发生丢包,PKT_SND_PERIOD保持不变,bLoss置为False
  5. 如果没有丢包,更新PKT_SND_PERIOD
  6. 如果设置最大带宽MAX_BW,则限制PKT_SND_PERIOD为最小允许周期

其中PKT_SND_PERIOD计算公式如下:

 inc = 0;
 lossBandwidth = 2 * (1000000 / LastDecPeriod);
 linkCapacity = min(lossBandwidth, EST_LINK_CAPACITY);
 B = linkCapacity - 1000000 / PKT_SND_PERIOD;
 if ((PKT_SND_PERIOD > LastDecPeriod) && ((linkCapacity / 9) < B))
 B = linkCapacity / 9;
 if (B <= 0)
   inc = 1 / S;
 else
 {
   inc = pow(10.0, ceil(log10(B * S * 8))) * 0.0000015 / S;
   inc = max(inc, 1 / S);
 }
 PKT_SND_PERIOD = (PKT_SND_PERIOD * RC_INTERVAL) /
 (PKT_SND_PERIOD * inc + RC_INTERVAL);

七、Shutdown

Shutdown控制包,用于表示断开连接。结构如下:

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HUST(可靠数据传输协议设计)是一种可靠的数据传输协议,通过其设计可以实现数据的可靠传输和有效管理。HUST协议具有以下特点: 1. 可靠性:HUST协议采用了多种技术来确保数据的可靠传输。它使用数据包序列号和确认机制来检测和纠正丢失、重复或损坏的数据包。还引入了超时重传机制,确保数据在传输过程中不会丢失。 2. 效率:HUST协议充分利用了网络资源,提高了数据传输的效率。它采用了流水线方式传输数据,即发送方可以连续发送多个数据包,而无需等待前一个数据包的确认。这样可以显著降低传输延迟,提高传输速率。 3. 管理机制:HUST协议还实现了一些管理机制,用于控制数据传输过程中的流量。它采用了滑动窗口机制,可以限制发送方的发送速率,避免网络拥塞。此外,HUST协议还支持流量控制和拥塞控制,确保网络资源的合理利用,提供最佳的传输性能。 4. 安全性:HUST协议为数据传输提供了一定的安全性保障。它支持数据的加密和身份验证,防止数据被窃取或篡改。通过使用安全的加密算法和认证机制,HUST协议可以确保数据在传输过程中的机密性和完整性。 总的来说,HUST协议是一种可靠、高效、安全的数据传输协议。通过它的设计,可以实现数据的可靠传输和有效管理,提供最佳的用户体验和网络性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值