精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

SRT協(xié)議的工作流程、數(shù)據(jù)包結構及Wireshark抓包分析

LiveVideoStack ? 來源:LiveVideoStack ? 作者:張博力 ? 2022-05-17 10:08 ? 次閱讀

摘 要:本文從SRT協(xié)議的工作流程談起,著重介紹和解析了SRT協(xié)議的數(shù)據(jù)包結構,并舉例說明如何利用Wireshark抓包軟件進行鏈路故障分析,從而解決實際工作中的問題。

引 言

SRT(Secure Reliable Transport)協(xié)議即安全可靠傳輸協(xié)議,是一種新興的視音頻傳輸協(xié)議,能夠在公共互聯(lián)網(wǎng)環(huán)境下實現(xiàn)高質(zhì)量低延時的實時視音頻傳輸。公網(wǎng)傳輸技術之SRT協(xié)議解析(上)著重討論了如何衡量SRT協(xié)議的可靠程度,以及如何在不同應用場景下配置SRT鏈路的參數(shù)。本文作為下篇,將從SRT協(xié)議的工作流程入手,對SRT協(xié)議的數(shù)據(jù)包結構進行解析,之后舉例介紹如何利用Wireshark軟件進行抓包分析,從而排除鏈路故障或者獲取鏈路信息

1SRT協(xié)議工作流程

SRT協(xié)議中最常用的工作模式為“呼叫-監(jiān)聽”(Caller-Listener)模式,監(jiān)聽方(Listener)會持續(xù)監(jiān)聽本方的固定UDP端口,呼叫方(Caller)通過訪問監(jiān)聽方的公網(wǎng)IP地址和該固定端口來建立SRT連接。呼叫和監(jiān)聽的角色主要在SRT協(xié)議握手階段起作用,無論是編碼端還是解碼端都可以擔任呼叫者或監(jiān)聽者的角色。

圖1表示了SRT協(xié)議的工作流程,整個流程包括握手、參數(shù)交換、數(shù)據(jù)傳輸、連接關閉等步驟。另外在傳輸有效數(shù)據(jù)時,雙方會發(fā)送控制數(shù)據(jù)來完成丟包恢復、連接保持等功能。

17602020-d575-11ec-bce3-dac502259ad0.png

圖1 SRT協(xié)議工作流程

2SRT數(shù)據(jù)包結構

SRT協(xié)議根據(jù)UDT協(xié)議(UDP-based Data Transfer Protocol)改進而來,已經(jīng)在2020年3月10日向IETF提交了RFC草案,這也表示SRT協(xié)議進入了比較穩(wěn)定的發(fā)展軌道。

眾所周知,SRT的傳統(tǒng)優(yōu)勢領域是點對點的實時音視頻傳輸,而近兩年,SRT協(xié)議在上行推流方面有了迅速的發(fā)展,很多主流平臺和公司都支持使用SRT協(xié)議來代替RTMP協(xié)議進行上行推流,其中的關鍵點就是SRT的StreamID功能,而StreamID功能就包含在SRT握手數(shù)據(jù)包的配置擴展模塊中。

總的來說,SRT協(xié)議中包含兩類數(shù)據(jù)包:信息數(shù)據(jù)包(Data Packet)控制數(shù)據(jù)包(Control Packet),他們通過SRT首部的最高位(標志位)來區(qū)分,0代表信息數(shù)據(jù)包,1代表控制數(shù)據(jù)包。控制數(shù)據(jù)包又包含了握手(Handshake)、肯定應答(ACK)、否定應答(NAK)、對肯定應答的應答(ACKACK),保持連接(Keepalive)、關閉連接(Shutdown)等多種類型。

2.1信息數(shù)據(jù)包結構

圖2展示了SRT信息數(shù)據(jù)包的結構,其承載了需要傳輸?shù)挠行?shù)據(jù)。SRT首部長度為16字節(jié),最高位為標志位,SRT信息數(shù)據(jù)包首部包含四個區(qū)域:數(shù)據(jù)包序列號、報文序號、時間戳、目的地端套接字ID

數(shù)據(jù)包序列號:SRT使用基于序列號的數(shù)據(jù)包發(fā)送機制,發(fā)送端每發(fā)送一個數(shù)據(jù)包,數(shù)據(jù)包序列號加1。

報文序號:報文序號獨立計數(shù),在它之前設置了四個標志位(見圖2)。

時間戳:以連接建立時間點(StartTime)為基準的相對時間戳,單位為微秒。

目的地端套接字ID:在多路復用時用來區(qū)分不同的SRT流。

17b5f766-d575-11ec-bce3-dac502259ad0.png

圖2 SRT信息數(shù)據(jù)包

2.2握手數(shù)據(jù)包結構

握手數(shù)據(jù)包分為HSv4版本(SRT版本<1.3)和HSv5版本(SRT版本>=1.3),圖3為HSv5版本握手數(shù)據(jù)包的結構,HSv5握手數(shù)據(jù)包主要包含五個區(qū)域:SRT首部、握手控制信息(cif.hsv5)、握手請求/響應擴展模塊(hsreg/hsrsp)、加密擴展模塊(kmreg/kmrsp)、配置擴展模塊(config)。這里重點介紹前三個區(qū)域,握手數(shù)據(jù)包的結構參見圖3:

17eda936-d575-11ec-bce3-dac502259ad0.png

圖3 HSv5握手數(shù)據(jù)包

1.所有SRT控制數(shù)據(jù)包的首部是基本相同的,均包含四個區(qū)域:控制類型和保留區(qū)域、附加信息、時間戳、目的地端套接字,其中控制類型字段為0代表握手數(shù)據(jù)包。

2.握手控制信息區(qū)域(cif.hsv5)中比較重要的字段如下:

ISN:隨機生成的數(shù)據(jù)包初始序列號,之后所有的信息數(shù)據(jù)包以此為基準計數(shù)。

握手類型:該字段第一個作用是表示該握手數(shù)據(jù)包所處的握手階段(以“呼叫-監(jiān)聽”模式為例,其握手分為誘導階段Induction和結尾階段Conclusion),第二個作用對于用戶來說更為重要,在握手失敗后“握手類型”字段會顯示相應的錯誤碼,錯誤碼所對應的錯誤類型見表1。

錯誤碼 錯誤類型 錯誤碼 錯誤類型
1000 未知原因 1008 對端版本過舊
1001 系統(tǒng)功能錯誤 1009 集合模式套接字沖突
1002 對端拒絕 1010 密碼錯誤
1003 資源分配問題 1011 需要密碼
1004 握手中的錯誤數(shù)據(jù) 1012 Stream標志位沖突
1005 監(jiān)聽方Backlog溢出 1013 擁塞控制類型沖突
1006 內(nèi)部程序錯誤 1014 包過濾器沖突
1007 該套接字已關閉 1015 組沖突

表1 錯誤碼和錯誤類型對應表1

SRT套接字ID:該字段需要和SRT首部中的目的地端套接字ID加以區(qū)分,該字段只作用于握手階段,而目的地端套接字ID作用于數(shù)據(jù)傳輸全過程。

同步cookie:在“呼叫-監(jiān)聽”模式下,出于防止DoS攻擊的目的,只由監(jiān)聽方生成同步cookie,該cookie由監(jiān)聽方的主機、端口和當前時間生成,精確度為1分鐘。

3.握手請求擴展模塊(HSREG)中比較重要的字段如下:

SRT版本:只要有任何一方的SRT版本低于1.3,雙方就會以HSv4版本握手方式來建立連接,HSv4方式握手會有三次或四次往返,而最新的HSv5握手只需要兩次往返。出于兼容性的考慮,即使雙方的SRT版本都高于1.3,第一個握手請求信息也是HSv4格式。

SRT標志位:共有8位標志位,來實現(xiàn)SRT的不同模式和功能。

發(fā)送方向延時和接收方向延時:SRT協(xié)議1.3版本實現(xiàn)了雙向傳輸功能,雙向傳輸可以分別設定不同方向的固定延時。對于常規(guī)的單向傳輸,假設A向B發(fā)送數(shù)據(jù),該方向的延時量Latency應該是A的發(fā)送方向延時(PeerLatency)和B的接收方向延時(RecLatency)的最大值,該延時量在握手階段就已由雙方協(xié)商確定。在單向傳輸時,有一些編解碼器將它的PeerLatency和RecLatency設置成統(tǒng)一的值,這種簡易設置方法并不會影響單向傳輸?shù)墓ぷ鳌?/p>

4.加密擴展模塊KMREQ和配置擴展模塊CONFIG

由于篇幅的原因,最后兩個非必需的擴展模塊不再詳細討論。其中加密擴展模塊(KMREQ)主要負責SRT的AES128/AES192/AES256加密功能的實現(xiàn)。而配置擴展模塊(CONFIG)包含了四種:SRT_CMD_SID、SRT_CMD_CONGESTION、SRT_CMD_FILTER、SRT_CMD_GROUP,其中SRT_CMD_SID擴展模塊就是負責SRT上行推流中不可或缺的StreamID功能,有興趣的朋友可以自行抓包查看。

2.3ACK數(shù)據(jù)包結構

ACK數(shù)據(jù)包是由SRT接收端反饋給發(fā)送端的肯定應答,發(fā)送端收到ACK后便會認為相應數(shù)據(jù)包已經(jīng)成功送達。ACK數(shù)據(jù)包中還包含了接收端估算的鏈路數(shù)據(jù),可以作為發(fā)送端擁塞控制的參考。ACK數(shù)據(jù)包結構見圖4,其中幾個比較重要的字段如下:

1811de14-d575-11ec-bce3-dac502259ad0.png

圖4 ACK控制數(shù)據(jù)包

控制類型:該字段等于2便表示ACK數(shù)據(jù)包。

附加信息:其中包含了獨立計數(shù)的ACK序列號,該序列號主要用于ACK包和ACKACK包的一一對應。

最近一個已接收數(shù)據(jù)包的序列號+1:該字段的值等于最近一個已收到的信息數(shù)據(jù)包的序列號加1,例如ACK包中該字段為6,便表示前5個數(shù)據(jù)包均已收到,發(fā)送端可以將它們從緩沖區(qū)中踢出。需要注意本字段是和數(shù)據(jù)包序列號有關,與ACK序列號無關。

往返時延RTT估值:通過ACK數(shù)據(jù)包和ACKACK數(shù)據(jù)包估算出的鏈路往返時延。

往返時延RTT估值的變化量:該變化量能夠衡量RTT的波動程度,數(shù)值越大表示鏈路RTT越不穩(wěn)定。

接收端可用緩沖數(shù)據(jù):表示目前接收端緩沖區(qū)有多少緩沖數(shù)據(jù)可供解碼,該數(shù)值越大越好,其最大值由延時量參數(shù)(Latency)決定。

鏈路帶寬估值:對本次鏈路帶寬的估算值。

接收速率估值:接收端下行網(wǎng)絡帶寬的估算值。

2.4NAK數(shù)據(jù)包結構

當SRT接收端發(fā)現(xiàn)收到的數(shù)據(jù)包序列號不連續(xù)時,便會判斷有數(shù)據(jù)包丟失,并立刻向發(fā)送方回復否定應答(NAK)數(shù)據(jù)包。此外SRT接收端還會以一定間隔發(fā)送周期NAK報告,其中包括了間隔期的所有丟失包序列號,這種重復發(fā)送NAK的機制主要為了防止NAK數(shù)據(jù)包在反向傳輸中丟失。NAK數(shù)據(jù)包結構見圖5,其控制類型字段等于3,包內(nèi)含有丟失數(shù)據(jù)包的序列號列表。

1855532e-d575-11ec-bce3-dac502259ad0.png

圖5 NAK控制數(shù)據(jù)包

2.5ACKACK數(shù)據(jù)包結構

ACKACK的主要作用是用來計算鏈路的往返時延(RTT),而RTT作為重要的鏈路信息會包含在ACK數(shù)據(jù)包中,ACKACK數(shù)據(jù)包結構參見圖6。首先ACK數(shù)據(jù)包和ACKACK數(shù)據(jù)包都包含有精準的時間戳和ACK序列號,當發(fā)送端傳輸給接收端ACK數(shù)據(jù)包時,接受端會立刻返回一個ACKACK數(shù)據(jù)包,之后發(fā)送端會根據(jù)“ACK序列號”將ACK包和ACKACK包一一對應起來,并通過將他們的時間戳相減從而得到鏈路的往返時延(RTT)。

18c67c20-d575-11ec-bce3-dac502259ad0.png

圖6 ACKACK數(shù)據(jù)包結構

2.6連接保持和連接關閉數(shù)據(jù)包結構

SRT中最后兩個數(shù)據(jù)包類型是連接保持(Keepalive)數(shù)據(jù)包和連接關閉(Shutdown)數(shù)據(jù)包,它們的數(shù)據(jù)包結構參見圖7和圖8。

18f951fe-d575-11ec-bce3-dac502259ad0.png

圖7 連接保持數(shù)據(jù)包結構

191fe3a0-d575-11ec-bce3-dac502259ad0.png

圖8 連接關閉數(shù)據(jù)包結構

3Wireshark抓包分析

Wireshark是被業(yè)界廣泛使用的開源數(shù)據(jù)包分析軟件,它可以截取各類網(wǎng)絡數(shù)據(jù)包,并顯示數(shù)據(jù)包的詳細信息。隨著廣電行業(yè)IP化的不斷推進,Wireshark的使用也越來越頻繁,其重要性可類比于波形監(jiān)視器對于SDI信號的作用,以及碼流分析儀對于TS流信號的作用。

下面列舉了兩個利用Wireshark軟件進行鏈路分析的例子:

3.1場景一 連接失敗

在SRT鏈路的搭建過程中,難免會遇到連接失敗的情況,其原因是多種多樣的,這時我們便可以利用Wireshark的抓包分析功能來判斷錯誤的類型。

圖9是連接失敗后的抓包數(shù)據(jù),抓包視頻可參見下方視頻。首先可以觀察到雙方在不停的交換握手數(shù)據(jù)包,說明握手沒有成功,但另一方面也說明IP地址和端口號是設置正確的,雙方能夠正常通信

在雙方SRT版本都高于1.3的情況下,SRT握手過程需要兩次往返,既有四個握手數(shù)據(jù)包,并且第一個握手數(shù)據(jù)包一定是HSv4版本握手數(shù)據(jù)包,由此我們可以定位出第一個握手數(shù)據(jù)包。接著觀察到第四個握手數(shù)據(jù)包的“Handshake Type”字段是1002-Reject,含義是“對端拒絕”,這表示雙方可能在某個參數(shù)上不匹配而導致了握手失敗。

我們接著查看第二個握手包,這是監(jiān)聽方發(fā)給呼叫方的響應,其中“Encryption Field”區(qū)域為AES-128,即要求對方以AES-128的方式響應加密。再查看第三個握手包,這是呼叫方發(fā)給監(jiān)聽方的,其中“Extended Field”區(qū)域的KMREQ模塊為NOT,表示該握手包沒有加密擴展模塊,即沒有響應對方的加密要求。

經(jīng)過以上的分析,我們可以得知這次連接失敗是因為Listener方要求對端以AES-128的方式響應加密要求,而Caller方并沒有做出加密的響應。如果要成功連接,我們就需要獲知Listener方的加密密碼,并在Caller方選擇AES-128的加密方式。

1960ec88-d575-11ec-bce3-dac502259ad0.png

圖9 場景一:通過抓包分析找出故障原因

3.2場景二 獲取鏈路信息

互聯(lián)網(wǎng)鏈路中單次往返時延(RTT-Round Trip Time)表示了數(shù)據(jù)在發(fā)送端和接收端之間往返一次花費的時間。鏈路的RTT值以及RTT的波動程度決定了SRT鏈路延時量參數(shù)的設置,但實際工作中由于防火墻等原因往往難以直接獲得RTT值,這時我們可以通過Wireshark軟件對ACK數(shù)據(jù)包進行分析來獲得相應信息。

通過圖10可以看到,鏈路的RTT是20.61毫秒,而RTT的變化量是9.786毫秒,這也說明了該條鏈路的RTT并不穩(wěn)定,而RTT波動意味著丟包重傳需要的時間也會隨之波動,從而帶來整條SRT鏈路差錯控制能力的波動,這也意味著我們必須依照該條鏈路的特性進行參數(shù)調(diào)整。

19945a64-d575-11ec-bce3-dac502259ad0.png

圖10 場景二:RTT估值和RTT估值的變化量

總 結

SRT協(xié)議由于其優(yōu)異的性能、較低的軟硬件要求、開源免費的特性,在各個領域的應用越來越廣泛,最近兩年在上行推流方面也有了長足的發(fā)展。掌握好SRT協(xié)議的數(shù)據(jù)包結構能夠幫助我們使用抓包軟件進行故障分析和判斷,從而快速準確地解決實際工作中出現(xiàn)的問題,希望本文能夠給大家?guī)硪恍椭?,也歡迎大家討論和交流。

原文標題:公網(wǎng)傳輸技術之SRT協(xié)議解析(下)

文章出處:【微信公眾號:LiveVideoStack】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:公網(wǎng)傳輸技術之SRT協(xié)議解析(下)

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Wireshark和Tcpdump實例分析

    wireshark是開源軟件,可以放心使用??梢赃\行在Windows和Mac OS上。對應的,linux下的包工具是 tcpdump。使用wireshark的人必須了解網(wǎng)絡協(xié)議,否則
    的頭像 發(fā)表于 02-01 09:31 ?2811次閱讀

    USB軟件分析工具之三:Wireshark-華山派華山劍法

    Wireshark雖然以以太網(wǎng)聞名于江湖,尤其是其分析能力,借助USBPcap其也在USB
    的頭像 發(fā)表于 05-02 21:41 ?3.1w次閱讀
    USB軟件<b class='flag-5'>抓</b><b class='flag-5'>包</b><b class='flag-5'>分析</b>工具之三:<b class='flag-5'>Wireshark</b>-華山派華山劍法

    藍牙數(shù)據(jù)包的抓取與分析!

    本帖最后由 bbsc 于 2017-5-7 17:10 編輯 各位大佬好,我想用電腦抓取藍牙數(shù)據(jù)包,然后用wireshark分析,需要哪些硬件協(xié)助?最好便宜點(學生dang)需要測試的設備支持
    發(fā)表于 05-07 16:55

    wireshark數(shù)據(jù)分析問題

    用網(wǎng)絡調(diào)試助手作為Tcp Server給STM32F429發(fā)送數(shù)據(jù),每次傳輸完21845bytes后,就出現(xiàn)問題。用WireShark數(shù)據(jù)
    發(fā)表于 04-08 04:35

    如何使用WireShark進行網(wǎng)絡

      如何使用WireShark進行網(wǎng)絡:準備工作、wireshark 主界面介紹、封包列表介紹
    發(fā)表于 04-02 07:05

    使用wireshark分析TCP及UDP的資料詳細說明

    本文檔的主要內(nèi)容詳細介紹的是使用wireshark分析TCP及UDP的資料詳細說明。
    發(fā)表于 05-09 17:36 ?27次下載
    使用<b class='flag-5'>wireshark</b><b class='flag-5'>抓</b><b class='flag-5'>包</b><b class='flag-5'>分析</b>TCP及UDP的資料詳細說明

    Wireshark數(shù)據(jù)網(wǎng)絡協(xié)議分析

    。使用它,可以以各種方式抓取用戶所需要的網(wǎng)絡數(shù)據(jù)包。但是用戶往往無法從數(shù)據(jù)包中直接獲取所需要的數(shù)據(jù)。這是由于所有的信息在傳輸過程中,都會被按照各種網(wǎng)絡協(xié)議進行封裝。用戶想要從海量的
    發(fā)表于 10-12 08:00 ?1次下載
    <b class='flag-5'>Wireshark</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>抓</b><b class='flag-5'>包</b>網(wǎng)絡<b class='flag-5'>協(xié)議</b>的<b class='flag-5'>分析</b>

    如何使用WIRESHARK以太網(wǎng)數(shù)據(jù)包?

    Wireshark是一個免費網(wǎng)絡分析軟件,它能擷取網(wǎng)絡封包,并盡可能顯示出最為詳細的網(wǎng)絡封包資料。 要抓到有用的數(shù)據(jù)包還是要有正確的步驟和方法,本文是講述如何配置工業(yè)管理型交換機的
    的頭像 發(fā)表于 11-26 12:03 ?1.6w次閱讀

    Wireshark從入門到精通之網(wǎng)絡協(xié)議分析必備

    Wireshark從入門到精通之網(wǎng)絡協(xié)議分析必備
    發(fā)表于 01-18 13:53 ?9次下載

    ZigBee3.0數(shù)據(jù)包解析

    ZigBee3.0是ZigBee聯(lián)盟推出的可以互聯(lián)互通的標準協(xié)議,用之前的Packet Sniffer包工具是無法解析ZigBee3.0的數(shù)據(jù)包,因ZigBee3.0的安全機制所有的數(shù)據(jù)包
    發(fā)表于 02-28 11:48 ?2568次閱讀
    ZigBee3.0<b class='flag-5'>數(shù)據(jù)包</b>解析

    網(wǎng)絡數(shù)據(jù)包分析軟件wireshark的基本使用

    Wireshark(前稱Ethereal)是一個網(wǎng)絡數(shù)據(jù)包分析軟件。網(wǎng)絡數(shù)據(jù)包分析軟件的功能是截取網(wǎng)絡數(shù)
    的頭像 發(fā)表于 09-29 14:48 ?2869次閱讀

    wireshark導入數(shù)據(jù)包進行分析

    linux的tcpdump命令主要用于網(wǎng)絡問題的調(diào)試中,通過抓取傳輸過程的數(shù)據(jù)包進行分析和調(diào)試。而wireshark則是一款功能強大,使用方便的數(shù)據(jù)包
    的頭像 發(fā)表于 12-27 09:37 ?1945次閱讀

    Wireshark網(wǎng)絡數(shù)據(jù)包分析軟件簡介

    wireshark是一個免費開源的網(wǎng)絡數(shù)據(jù)包分析軟件,功能十分強大。可以截取各種網(wǎng)絡數(shù)據(jù)包,顯示網(wǎng)絡數(shù)據(jù)包的詳細信息。
    的頭像 發(fā)表于 04-26 09:52 ?2493次閱讀
    <b class='flag-5'>Wireshark</b>網(wǎng)絡<b class='flag-5'>數(shù)據(jù)包</b><b class='flag-5'>分析</b>軟件簡介

    超詳細的WireShark使用教程

    Wireshark是非常流行的網(wǎng)絡封包分析軟件,可以截取各種網(wǎng)絡數(shù)據(jù)包,并顯示數(shù)據(jù)包詳細信息。
    的頭像 發(fā)表于 06-06 09:22 ?6174次閱讀
    超詳細的<b class='flag-5'>WireShark</b><b class='flag-5'>抓</b><b class='flag-5'>包</b>使用教程

    五大可替代Wireshark包工具

    Wireshark是非常流行的網(wǎng)卡軟件,具有強大的功能。它可以截取各種網(wǎng)絡數(shù)據(jù)包,并顯示
    的頭像 發(fā)表于 09-27 09:57 ?4081次閱讀
    五大可替代<b class='flag-5'>Wireshark</b>的<b class='flag-5'>抓</b>包工具