幀同步演算法
⑴ 計算機網路(三)數據鏈路層
結點:主機、路由器
鏈路:網路中兩個結點之間的物理通道,鏈路的傳輸介質主要有雙絞線、光纖和微波。分為有線鏈路、無線鏈路。
數據鏈路:網路中兩個結點之間的邏輯通道,把實現控制數據傳輸協議的硬體和軟體加到鏈路上就構成數據鏈路。
幀:鏈路層的協議數據單元,封裝網路層數據報。
數據鏈路層負責通過一條鏈路從一個結點向另一個物理鏈路直接相連的相鄰結點傳送數據報。
數據鏈路層在物理層提供服務的基礎上向網路層提供服務,其最基本的服務是將源自網路層來的數據可靠地傳輸到相鄰節點的目標機網路層。其主要作用是加強物理層傳輸原始比特流的功能,將物理層提供的可能出錯的物理連接改造成為 邏輯上無差錯的數據鏈路 ,使之對網路層表現為一條無差錯的鏈路。
封裝成幀就是在一段數據的前後部分添加首部和尾部,這樣就構成了一個幀。接收端在收到物理層上交的比特流後,就能根據首部和尾部的標記,從收到的比特流中識別幀的開始和結束。首部和尾部包含許多的控制信息,他們的一個重要作用:幀定界(確定幀的界限)。
幀同步:接收方應當能從接收到的二進制比特流中區分出幀的起始和終止。
組幀的四種方法:
透明傳輸是指不管所傳數據是什麼樣的比特組合,都應當能夠在鏈路上傳送。因此,鏈路層就「看不見」有什麼妨礙數據傳輸的東西。
當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時,就必須採取適當的措施,使收方不會將這樣的數據誤認為是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。
概括來說,傳輸中的差錯都是由於雜訊引起的。
數據鏈路層編碼和物理層的數據編碼與調制不同。物理層編碼針對的是單個比特,解決傳輸過程中比特的同步等問題,如曼徹斯特編碼。而數據鏈路層的編碼針對的是一組比特,它通過冗餘碼的技術實現一組二進制比特串在傳輸過程是否出現了差錯。
較高的發送速度和較低的接收能力的不匹配,會造成傳輸出錯,因此流量控制也是數據鏈路層的一項重要工作。數據鏈路層的流量控制是點對點的,而傳輸層的流量控制是端到端的。
滑動窗口有以下重要特性:
若採用n個比特對幀編號,那麼發送窗口的尺寸W T 應滿足: 。因為發送窗口尺寸過大,就會使得接收方無法區別新幀和舊幀。
每發送完一個幀就停止發送,等待對方的確認,在收到確認後再發送下一個幀。
除了比特出差錯,底層信道還會出現丟包 [1] 問題
「停止-等待」就是每發送完一個分組就停止發送,等待對方確認,在收到確認後再發送下一個分組。其操作簡單,但信道利用率較低
信道利用率是指發送方在一個發送周期內,有效地發送數據所需要的時間占整個發送周期的比率。即
GBN發送方:
GBN接收方:
因連續發送數據幀而提高了信道利用率,重傳時必須把原來已經正確傳送的數據幀重傳,是傳送效率降低。
設置單個確認,同時加大接收窗口,設置接收緩存,緩存亂序到達的幀。
SR發送方:
SR接收方:
發送窗口最好等於接收窗口。(大了會溢出,小了沒意義),即
傳輸數據使用的兩種鏈路
信道劃分介質訪問控制將使用介質的每個設備與來自同一通信信道上的其他設備的通信隔離開來,把時域和頻域資源合理地分配給網路上的設備。
當傳輸介質的帶寬超過傳輸單個信號所需的帶寬時,人們就通過在一條介質上同時攜帶多個傳輸信號的方法來提高傳輸系統的利用率,這就是所謂的多路復用,也是實現信道劃分介質訪問控制的途徑。多路復用技術把多個信號組合在一條物理信道上進行傳輸,使多個計算機或終端設備共享信道資源,提高了信道的利用率。信道劃分的實質就是通過分時、分頻、分碼等方法把原來的一條廣播信道,邏輯上分為幾條用於兩個結點之間通信的互不幹擾的子信道,實際上就是把廣播信道轉變為點對點信道。
頻分多路復用是一種將多路基帶信號調制到不同頻率載波上,再疊加形成一個復合信號的多路復用技術。在物理信道的可用帶寬超過單個原始信號所需帶寬的情況下,可將該物理信道的總帶寬分割成若千與傳輸單個信號帶寬相同(或略寬)的子信道,每個子信道傳輸一種信號,這就是頻分多路復用。
每個子信道分配的帶寬可不相同,但它們的總和必須不超過信道的總帶寬。在實際應用中,為了防止子信道之間的千擾,相鄰信道之間需要加入「保護頻帶」。頻分多路復用的優點在於充分利用了傳輸介質的帶寬,系統效率較高;由於技術比較成熟,實現也較容易。
時分多路復用是將一條物理信道按時間分成若干時間片,輪流地分配給多個信號使用。每個時間片由復用的一個信號佔用,而不像FDM那樣,同一時間同時發送多路信號。這樣,利用每個信號在時間上的交叉,就可以在一條物理信道上傳輸多個信號。
就某個時刻來看,時分多路復用信道上傳送的僅是某一對設備之間的信號:就某段時間而言,傳送的是按時間分割的多路復用信號。但由於計算機數據的突發性,一個用戶對已經分配到的子信道的利用率一般不高。統計時分多路復用(STDM,又稱非同步時分多路復用)是TDM 的一種改進,它採用STDM幀,STDM幀並不固定分配時隙,面按需動態地分配時隙,當終端有數據要傳送時,才會分配到時間片,因此可以提高線路的利用率。例如,線路傳輸速率為8000b/s,4個用戶的平均速率都為2000b/s,當採用TDM方式時,每個用戶的最高速率為2000b/s.而在STDM方式下,每個用戶的最高速率可達8000b/s.
波分多路復用即光的頻分多路復用,它在一根光纖中傳輸多種不同波長(頻率)的光信號,由於波長(頻率)不同,各路光信號互不幹擾,最後再用波長分解復用器將各路波長分解出來。由於光波處於頻譜的高頻段,有很高的帶寬,因而可以實現多路的波分復用
碼分多路復用是採用不同的編碼來區分各路原始信號的一種復用方式。與FDM和 TDM不同,它既共享信道的頻率,又共享時間。下面舉一個直觀的例子來理解碼分復用。
實際上,更常用的名詞是碼分多址(Code Division Multiple Access.CDMA),1個比特分為多個碼片/晶元( chip),每一個站點被指定一個唯一的m位的晶元序列,發送1時發送晶元序列(通常把o寫成-1) 。發送1時站點發送晶元序列,發送o時發送晶元序列反碼。
純ALOHA協議思想:不監聽信道,不按時間槽發送,隨機重發。想發就發
如果發生沖突,接收方在就會檢測出差錯,然後不予確認,發送方在一定時間內收不到就判斷發生沖突。超時後等一隨機時間再重傳。
時隙ALOHA協議的思想:把時間分成若干個相同的時間片,所有用戶在時間片開始時刻同步接入網路信道,若發生沖突,則必須等到下一個時間片開始時刻再發送。
載波監聽多路訪問協議CSMA(carrier sense multiple access)協議思想:發送幀之前,監聽信道。
堅持指的是對於監聽信道忙之後的堅持。
1-堅持CSMA思想:如果一個主機要發送消息,那麼它先監聽信道。
優點:只要媒體空閑,站點就馬上發送,避免了媒體利用率的損失。
缺點:假如有兩個或兩個以上的站點有數據要發送,沖突就不可避免。
非堅持指的是對於監聽信道忙之後就不繼續監聽。
非堅持CSMA思想:如果一個主機要發送消息,那麼它先監聽信道。
優點:採用隨機的重發延遲時間可以減少沖突發生的可能性。
缺點:可能存在大家都在延遲等待過程中,使得媒體仍可能處於空閑狀態,媒體使用率降低。
p-堅持指的是對於監聽信道空閑的處理。
p-堅持CSMA思想:如果一個主機要發送消息,那麼它先監聽信道。
優點:既能像非堅持演算法那樣減少沖突,又能像1-堅持演算法那樣減少媒體空閑時間的這種方案。
缺點:發生沖突後還是要堅持把數據幀發送完,造成了浪費。
載波監聽多點接入/碰撞檢測CSMA/CD(carrier sense multiple access with collision detection)
CSMA/CD的工作流程:
由圖可知,至多在發送幀後經過時間 就能知道所發送的幀有沒有發生碰撞。因此把乙太網端到端往返時間為 稱為爭周期(也稱沖突窗口或碰撞窗口)。
截斷二進制指數規避演算法:
最小幀長問題:幀的傳輸時延至少要兩倍於信號在匯流排中的傳播時延。
載波監聽多點接入/碰撞避免CSMA/CA(carrier sense multiple access with collision avoidance)其工作原理如下
CSMA/CD與CSMA/CA的異同點:
相同點:CSMA/CD與CSMA/CA機制都從屬於CSMA的思路,其核心是先聽再說。換言之,兩個在接入信道之前都須要進行監聽。當發現信道空閑後,才能進行接入。
不同點:
輪詢協議:主結點輪流「邀請」從屬結點發送數據。
令牌:一個特殊格式的MAC控制幀,不含任何信息。控制信道的使用,確保同一時刻只有一個結點獨占信道。每個結點都可以在一定的時間內(令牌持有時間)獲得發送數據的權利,並不是無限制地持有令牌。應用於令牌環網(物理星型拓撲,邏輯環形拓撲)。採用令牌傳送方式的網路常用於負載較重、通信量較大的網路中。
輪詢訪問MAC協議/輪流協議/輪轉訪問MAC協議:基於多路復用技術劃分資源。
隨機訪問MAC協議: 用戶根據意願隨機發送信息,發送信息時可獨占信道帶寬。 會發生沖突
信道劃分介質訪問控制(MAC Multiple Access Control )協議:既要不產生沖突,又要發送時佔全部帶寬。
區域網(Local Area Network):簡稱LAN,是指在某一區域內由多台計算機互聯成的計算機組,使用廣播信道。其特點有
決定區域網的主要要素為:網路拓撲,傳輸介質與介質訪問控制方法。
區域網的分類
IEEE 802標准所描述的區域網參考模型只對應OSI參考模型的數據鏈路層與物理層,它將數據鏈路層劃分為邏輯鏈路層LLC子層和介質訪問控制MAC子層。
乙太網(Ethernet)指的是由Xerox公司創建並由Xerox、Intel和DEC公司聯合開發的基帶匯流排區域網規范,是當今現有區域網採用的最通用的通信協議標准。乙太網絡使用CSMA/CD(載波監聽多路訪問及沖突檢測)技術。 乙太網只實現無差錯接收,不實現可靠傳輸。
乙太網兩個標准:
乙太網提供無連接、不可靠的服務
10BASE-T是傳送基帶信號的雙絞線乙太網,T表示採用雙絞線,現10BASE-T 採用的是無屏蔽雙絞線(UTP),傳輸速率是10Mb/s。
計算機與外界有區域網的連接是通過通信適配器的。
在區域網中,硬體地址又稱為物理地址,或MAC地址。MAC地址:每個適配器有一個全球唯一的48位二進制地址,前24位代表廠家(由IEEE規定),後24位廠家自己指定。常用6個十六進制數表示,如02-60-8c-e4-b1-21。
最常用的MAC幀是乙太網V2的格式。
IEEE 802.11是無線區域網通用的標准,它是由IEEE所定義的無線網路通信的標准。
廣域網(WAN,Wide Area Network),通常跨接很大的物理范圍,所覆蓋的范圍從幾十公里到幾千公里,它能連接多個城市或國家,或橫跨幾個洲並能提供遠距離通信,形成國際性的遠程網路。
廣域網的通信子網主要使用分組交換技術。廣域網的通信子網可以利用公用分組交換網、衛星通信網和無線分組交換網,它將分布在不同地區的區域網或計算機系統互連起來,達到資源共享的目的。如網際網路(Internet)是世界范圍內最大的廣域網。
點對點協議PPP(Point-to-Point Protocol)是目前使用最廣泛的數據鏈路層協議,用戶使用撥號電話接入網際網路時一般都使用PPP協議。 只支持全雙工鏈路。
PPP協議應滿足的要求
PPP協議的三個組成部分
乙太網交換機
沖突域:在同一個沖突域中的每一個節點都能收到所有被發送的幀。簡單的說就是同一時間內只能有一台設備發送信息的范圍。
廣播域:網路中能接收任一設備發出的廣播幀的所有設備的集合。簡單的說如果站點發出一個廣播信號,所有能接收收到這個信號的設備范圍稱為一個廣播域。
乙太網交換機的兩種交換方式:
直通式交換機:查完目的地址(6B)就立刻轉發。延遲小,可靠性低,無法支持具有不同速率的埠的交換。
存儲轉發式交換機:將幀放入高速緩存,並檢查否正確,正確則轉發,錯誤則丟棄。延遲大,可靠性高,可以支持具有不同速率的埠的交換。
⑵ 網路七層協議具體是什麼
OSI是一個開放性的通行系統互連參考模型,他是一個定義的非常好的協議規范。OSI模型有7層結構,每層都可以有幾個子層。下面我簡單的介紹一下這7層及其功能。
OSI的7層從上到下分別是
7 應用層
6 表示層
5 會話層
4 傳輸層
3 網路層
2 數據鏈路層
1 物理層
其中高層,既7、6、5、4層定義了應用程序的功能,下面3層,既3、2、1層主要面向通過網路的端到端的數據流。下面我給大家介紹一下這7層的功能:
(1)應用層:與其他計算機進行通訊的一個應用,它是對應應用程序的通信服務的。例如,一個沒有通信功能的字處理程序就不能執行通信的代碼,從事字處理工作的程序員也不關心OSI的第7層。但是,如果添加了一個傳輸文件的選項,那麼字處理器的程序員就需要實現OSI的第7層。示例:telnet,HTTP,FTP,WWW,NFS,SMTP等。
(2)表示層:這一層的主要功能是定義數據格式及加密。例如,FTP允許你選擇以二進制或ASII格式傳輸。如果選擇二進制,那麼發送方和接收方不改變文件的內容。如果選擇ASII格式,發送方將把文本從發送方的字元集轉換成標準的ASII後發送數據。在接收方將標準的ASII轉換成接收方計算機的字元集。示例:加密,ASII等。
(3)會話層:他定義了如何開始、控制和結束一個會話,包括對多個雙向小時的控制和管理,以便在只完成連續消息的一部分時可以通知應用,從而使表示層看到的數據是連續的,在某些情況下,如果表示層收到了所有的數據,則用數據代表表示層。示例:RPC,SQL等。
(4)傳輸層:這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的數據流的輸入進行復用,還包括對收到的順序不對的數據包的重新排序功能。示例:TCP,UDP,SPX。
(5)網路層:這層對端到端的包傳輸進行定義,他定義了能夠標識所有結點的邏輯地址,還定義了路由實現的方式和學習的方式。為了適應最大傳輸單元長度小於包長度的傳輸介質,網路層還定義了如何將一個包分解成更小的包的分段方法。示例:IP,IPX等。
(6)數據鏈路層:他定義了在單個鏈路上如何傳輸數據。這些協議與被討論的歌種介質有關。示例:ATM,FDDI等。
(7)物理層:OSI的物理層規范是有關傳輸介質的特性標准,這些規范通常也參考了其他組織制定的標准。連接頭、針、針的使用、電流、電流、編碼及光調制等都屬於各種物理層規范中的內容。物理層常用多個規范完成對所有細節的定義。示例:Rj45,802.3等。
OSI分層的優點:
(1)人們可以很容易的討論和學習協議的規范細節。
(2)層間的標准介面方便了工程模塊化。
(3)創建了一個更好的互連環境。
(4)降低了復雜度,使程序更容易修改,產品開發的速度更快。
(5)每層利用緊鄰的下層服務,更容易記住個層的功能。
大多數的計算機網路都採用層次式結構,即將一個計算機網路分為若干層次,處在高層次的系統僅是利用較低層次的系統提供的介面和功能,不需了解低層實現該功能所採用的演算法和協議;較低層次也僅是使用從高層系統傳送來的參數,這就是層次間的無關性。因為有了這種無關性,層次間的每個模塊可以用一個新的模塊取代,只要新的模塊與舊的模塊具有相同的功能和介面,即使它們使用的演算法和協議都不一樣。
網路中的計算機與終端間要想正確的傳送信息和數據,必須在數據傳輸的順序、數據的格式及內容等方面有一個約定或規則,這種約定或規則稱做協議。網路協議主要有三個組成部分:
1、語義:
是對協議元素的含義進行解釋,不同類型的協議元素所規定的語義是不同的。例如需要發出何種控制信息、完成何種動作及得到的響應等。
2、語法:
將若干個協議元素和數據組合在一起用來表達一個完整的內容所應遵循的格式,也就是對信息的數據結構做一種規定。例如用戶數據與控制信息的結構與格式等。
3、時序:
對事件實現順序的詳細說明。例如在雙方進行通信時,發送點發出一個數據報文,如果目標點正確收到,則回答源點接收正確;若接收到錯誤的信息,則要求源點重發一次。
70年代以來,國外一些主要計算機生產廠家先後推出了各自的網路體系結構,但它們都屬於專用的。
為使不同計算機廠家的計算機能夠互相通信,以便在更大的范圍內建立計算機網路,有必要建立一個國際范圍的網路體系結構標准。
國際標准化組織ISO 於1981年正式推薦了一個網路系統結構----七層參考模型,叫做開放系統互連模型(Open System Interconnection,OSI)。由於這個標准模型的建立,使得各種計算機網路向它靠攏, 大大推動了網路通信的發展。
OSI 參考模型將整個網路通信的功能劃分為七個層次,見圖1。它們由低到高分別是物理層(PH)、鏈路層(DL)、網路層(N)、傳輸層(T)、會議層(S)、表示層(P)、應用層(A)。每層完成一定的功能,每層都直接為其上層提供服務,並且所有層次都互相支持。第四層到第七層主要負責互操作性,而一層到三層則用於創造兩個網路設備間的物理連接.
1.物理層
物理層是OSI的第一層,它雖然處於最底層,卻是整個開放系統的基礎。物理層為設備之間的數據通信提供傳輸媒體及互連設備,為數據傳輸提供可靠的環境。
1.1媒體和互連設備
物理層的媒體包括架空明線、平衡電纜、光纖、無線信道等。通信用的互連設備指DTE和DCE間的互連設備。DTE既數據終端設備,又稱物理設備,如計算機、終端等都包括在內。而DCE則是數據通信設備或電路連接設備,如數據機等。數據傳輸通常是經過DTE——DCE,再經過DCE——DTE的路徑。互連設備指將DTE、DCE連接起來的裝置,如各種插頭、插座。LAN中的各種粗、細同軸電纜、T型接、插頭,接收器,發送器,中繼器等都屬物理層的媒體和連接器。
1.2物理層的主要功能
1.2.1為數據端設備提供傳送數據的通路,數據通路可以是一個物理媒體,也可以是多個物理媒體連接而成.一次完整的數據傳輸,包括激活物理連接,傳送數據,終止物理連接.所謂激活,就是不管有多少物理媒體參與,都要在通信的兩個數據終端設備間連接起來,形成一條通路.
1.2.2傳輸數據.物理層要形成適合數據傳輸需要的實體,為數據傳送服務.一是要保證數據能在其上正確通過,二是要提供足夠的帶寬(帶寬是指每秒鍾內能通過的比特(BIT)數),以減少信道上的擁塞.傳輸數據的方式能滿足點到點,一點到多點,串列或並行,半雙工或全雙工,同步或非同步傳輸的需要.
1.3物理層的一些重要標准
物理層的一些標准和協議早在OSI/TC97/C16 分技術委員會成立之前就已制定並在應用了,OSI也制定了一些標准並採用了一些已有的成果.下面將一些重要的標准列出,以便讀者查閱.ISO2110:稱為"數據通信----25芯DTE/DCE介面連接器和插針分配".它與EIA(美國電子工
業協會)的"RS-232-C"基本兼容。ISO2593:稱為"數據通信----34芯DTE/DCE----介面連接器和插針分配"。ISO4092:稱為"數據通信----37芯DTE/DEC----介面連接器和插針分配".與EIARS-449兼容。CCITT V.24:稱為"數據終端設備(DTE)和數據電路終接設備之間的介面電路定義表".其功能與EIARS-232-C及RS-449兼容於100序列線上.
2.數據鏈路層
數據鏈路可以粗略地理解為數據通道。物理層要為終端設備間的數據通信提供傳輸媒體及其連接.媒體是長期的,連接是有生存期的.在連接生存期內,收發兩端可以進行不等的一次或多次數據通信.每次通信都要經過建立通信聯絡和拆除通信聯絡兩過程.這種建立起來的數據收發關系就叫作數據鏈路.而在物理媒體上傳輸的數據難免受到各種不可靠因素的影響而產生差錯,為了彌補物理層上的不足,為上層提供無差錯的數據傳輸,就要能對數據進行檢錯和糾錯.數據鏈路的建立,拆除,對數據的檢錯,糾錯是數據鏈路層的基本任務。
2.1鏈路層的主要功能
鏈路層是為網路層提供數據傳送服務的,這種服務要依靠本層具備的功能來實現。鏈路層應具備如下功能:
2.1.1鏈路連接的建立,拆除,分離。
2.1.2幀定界和幀同步。鏈路層的數據傳輸單元是幀,協議不同,幀的長短和界面也有差別,但無論如何必須對幀進行定界。
2.1.3順序控制,指對幀的收發順序的控制。
2.1.4差錯檢測和恢復。還有鏈路標識,流量控制等等.差錯檢測多用方陣碼校驗和循環碼校驗來檢測信道上數據的誤碼,而幀丟失等用序號檢測.各種錯誤的恢復則常靠反饋重發技術來完成。
2.2數據鏈路層的主要協議
數據鏈路層協議是為發對等實體間保持一致而制定的,也為了順利完成對網路層的服務。主要協議如下:
2.2.1ISO1745--1975:"數據通信系統的基本型控制規程".這是一種面向字元的標准,利用10個控制字元完成鏈路的建立,拆除及數據交換.對幀的收發情況及差錯恢復也是靠這些字元來完成.ISO1155, ISO1177, ISO2626, ISO2629等標準的配合使用可形成多種鏈路控制和數據傳輸方式.
2.2.2ISO3309--1984:稱為"HDLC 幀結構".ISO4335--1984:稱為"HDLC 規程要素 ".ISO7809--1984:稱為"HDLC 規程類型匯編".這3個標准都是為面向比特的數據傳輸控制而制定的.有人習慣上把這3個標准組合稱為高級鏈路控制規程.
2.2.3ISO7776:稱為"DTE數據鏈路層規程".與CCITT X.25LAB"平衡型鏈路訪問規程"相兼容.
2.3鏈路層產品
獨立的鏈路產品中最常見的當屬網卡,網橋也是鏈路產品。MODEM的某些功能有人認為屬於鏈路層,對些還有爭議.數據鏈路層將本質上不可靠的傳輸媒體變成可靠的傳輸通路提供給網路層。在IEEE802.3情況下,數據鏈路層分成了兩個子層,一個是邏輯鏈路控制,另一個是媒體訪問控制。下圖所示為IEEE802.3LAN體系結構。
AUI=連接單元介面 PMA=物理媒體連接
MAU=媒體連接單元 PLS=物理信令
MDI=媒體相關介面
3.網路層
網路層的產生也是網路發展的結果.在聯機系統和線路交換的環境中,網路層的功能沒有太大意義.當數據終端增多時.它們之間有中繼設備相連.此時會出現一台終端要求不只是與唯一的一台而是能和多台終端通信的情況,這就是產生了把任意兩台數據終端設備的數據鏈接起來的問題,也就是路由或者叫尋徑.另外,當一條物理信道建立之後,被一對用戶使用,往往有許多空閑時間被浪費掉.人們自然會希望讓多對用戶共用一條鏈路,為解決這一問題就出現了邏輯信道技術和虛擬電路技術.
3.1網路層主要功能
網路層為建立網路連接和為上層提供服務,應具備以下主要功能:
3.1.1路由選擇和中繼.
3.1.2激活,終止網路連接.
3.1.3在一條數據鏈路上復用多條網路連接,多採取分時復用技術 .
3.1.4差錯檢測與恢復.
3.1.5排序,流量控制.
3.1.6服務選擇.
3.1.7網路管理.
3.2網路層標准簡介
網路層的一些主要標准如下:
3.2.1 ISO.DIS8208:稱為"DTE用的X.25分組級協議"
3.2.2 ISO.DIS8348:稱為"CO 網路服務定義"(面向連接)
3.2.3 ISO.DIS8349:稱為"CL 網路服務定義"(面向無連接)
3.2.4 ISO.DIS8473:稱為"CL 網路協議"
3.2.5 ISO.DIS8348:稱為"網路層定址"
3.2.6 除上述標准外,還有許多標准。這些標准都只是解決網路層的部分功能,所以往往需要在網路層中同時使用幾個標准才能完成整個網路層的功能.由於面對的網路不同,網路層將會採用不同的標准組合.
在具有開放特性的網路中的數據終端設備,都要配置網路層的功能.現在市場上銷售的網路硬設備主要有網關和路由器.
4.傳輸層
傳輸層是兩台計算機經過網路進行數據通信時,第一個端到端的層次,具有緩沖作用。當網路層服務質量不能滿足要求時,它將服務加以提高,以滿足高層的要求;當網路層服務質量較好時,它只用很少的工作。傳輸層還可進行復用,即在一個網路連接上創建多個邏輯連接。 傳輸層也稱為運輸層.傳輸層只存在於端開放系統中,是介於低3層通信子網系統和高3層之間的一層,但是很重要的一層.因為它是源端到目的端對數據傳送進行控制從低到高的最後一層.
有一個既存事實,即世界上各種通信子網在性能上存在著很大差異.例如電話交換網,分組交換網,公用數據交換網,區域網等通信子網都可互連,但它們提供的吞吐量,傳輸速率,數據延遲通信費用各不相同.對於會話層來說,卻要求有一性能恆定的界面.傳輸層就承擔了這一功能.它採用分流/合流,復用/介復用技術來調節上述通信子網的差異,使會話層感受不到.
此外傳輸層還要具備差錯恢復,流量控制等功能,以此對會話層屏蔽通信子網在這些方面的細節與差異.傳輸層面對的數據對象已不是網路地址和主機地址,而是和會話層的界面埠.上述功能的最終目的是為會話提供可靠的,無誤的數據傳輸.傳輸層的服務一般要經歷傳輸連接建立階段,數據傳送階段,傳輸連接釋放階段3個階段才算完成一個完整的服務過程.而在數據傳送階段又分為一般數據傳送和加速數據傳送兩種。傳輸層服務分成5種類型.基本可以滿足對傳送質量,傳送速度,傳送費用的各種不同需要.傳輸層的協議標准有以下幾種:
4.1 ISO8072:稱為"面向連接的傳輸服務定義"
4.2 ISO8072:稱為"面向連接的傳輸協議規范"
5.會話層
會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續恢復通信。這種能力對於傳送大的文件極為重要。會話層,表示層,應用層構成開放系統的高3層,面對應用進程提供分布處理,對話管理,信息表示,恢復最後的差錯等.
會話層同樣要擔負應用進程服務要求,而運輸層不能完成的那部分工作,給運輸層功能差距以彌補.主要的功能是對話管理,數據流同步和重新同步。要完成這些功能,需要由大量的服務單元功能組合,已經制定的功能單元已有幾十種.現將會話層主要功能介紹如下.
5.1為會話實體間建立連接。為給兩個對等會話服務用戶建立一個會話連接,應該做如下幾項工作:
5.1.1將會話地址映射為運輸地址
5.1.2選擇需要的運輸服務質量參數(QOS)
5.1.3對會話參數進行協商
5.1.3識別各個會話連接
5.1.4傳送有限的透明用戶數據
5.2數據傳輸階段
這個階段是在兩個會話用戶之間實現有組織的,同步的數據傳輸.用戶數據單元為SSDU,而協議數據單元為SPDU.會話用戶之間的數據傳送過程是將SSDU轉變成SPDU進行的.
5.3連接釋放
連接釋放是通過"有序釋放","廢棄","有限量透明用戶數據傳送"等功能單元來釋放會話連接的.會話層標准為了使會話連接建立階段能進行功能協商,也為了便於其它國際標准參考和引用,定義了12種功能單元.各個系統可根據自身情況和需要,以核心功能服務單元為基礎,選配其他功能單元組成合理的會話服務子集.會話層的主要標准有"DIS8236:會話服務定義"和"DIS8237:會話協議規范".
6.表示層
表示層的作用之一是為異種機通信提供一種公共語言,以便能進行互操作。這種類型的服務之所以需要,是因為不同的計算機體系結構使用的數據表示法不同。例如,IBM主機使用EBCDIC編碼,而大部分PC機使用的是ASCII碼。在這種情況下,便需要會話層來完成這種轉換。
通過前面的介紹,我們可以看出,會話層以下5層完成了端到端的數據傳送,並且是可靠,無差錯的傳送.但是數據傳送只是手段而不是目的,最終是要實現對數據的使用.由於各種系統對數據的定義並不完全相同,最易明白的例子是鍵盤,其上的某些鍵的含義在許多系統中都有差異.這自然給利用其它系統的數據造成了障礙.表示層和應用層就擔負了消除這種障礙的任務.
對於用戶數據來說,可以從兩個側面來分析,一個是數據含義被稱為語義,另一個是數據的表示形式,稱做語法.像文字,圖形,聲音,文種,壓縮,加密等都屬於語法范疇.表示層設計了3類15種功能單位,其中上下文管理功能單位就是溝通用戶間的數據編碼規則,以便雙方有一致的數據形式,能夠互相認識.ISO表示層為服務,協議,文本通信符制定了DP8822,DP8823,DIS6937/2等一系列標准.
7.應用層
應用層向應用程序提供服務,這些服務按其向應用程序提供的特性分成組,並稱為服務元素。有些可為多種應用程序共同使用,有些則為較少的一類應用程序使用。應用層是開放系統的最高層,是直接為應用進程提供服務的。其作用是在實現多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務.其服務元素分為兩類:公共應用服務元素CASE和特定應用服務元素SASE.CASE提供最基本的服務,它成為應用層中任何用戶和任何服務元素的用戶,主要為應用進程通信,分布系統實現提供基本的控制機制.特定服務SASE則要滿足一些特定服務,如文卷傳送,訪問管理,作業傳送,銀行事務,訂單輸入等.
這些將涉及到虛擬終端,作業傳送與操作,文卷傳送及訪問管理,遠程資料庫訪問,圖形核心系統,開放系統互連管理等等.應用層的標准有DP8649"公共應用服務元素",DP8650"公共應用服務元素用協議",文件傳送,訪問和管理服務及協議.
討論:OSI七層模型是一個理論模型,實際應用則千變萬化,因此更多把它作為分析、評判各種網路技術的依據;對大多數應用來說,只將它的協議族(即協議堆棧)與七層模型作大致的對應,看看實際用到的特定協議是屬於七層中某個子層,還是包括了上下多層的功能。
這樣分層的好處有:
1.使人們容易探討和理解協議的許多細節。
2.在各層間標准化介面,允許不同的產品只提供各層功能的一部分,(如路由器在一到三層),或者只提供協議功能的一部分。(如Win95中的Microsoft TCP/IP)
3. 創建更好集成的環境。
4. 減少復雜性,允許更容易編程改變或快速評估。
5. 用各層的headers和trailers排錯。
6.較低的層為較高的層提供服務。
7. 把復雜的網路劃分成為更容易管理的層。
⑶ 關於網路游戲中的同步機制
當我們在做一些跟網路游戲相關的機器學習任務的時候,有時需要對整個游戲系統的運行機制有所了解才能更好的應對,對於網游而言,首當其沖的機制便是同步了。當然,大部分的機器學習從業者是不會懂游戲開發的,更不會不懂同步機制,此文我將基於我個人的一些研究和理解對網游中的同步機製做一個簡單的介紹,以便大家更加順利的開展游戲相關的機器學習任務。
與單機游戲不同,網路游戲有很多人通過遠程的方式參與游戲,不管是伺服器還是玩家,用的都是自己獨立的設備,也就是說所有的客戶端和伺服器都是各自獨立的游戲世界,要讓游戲玩下去就得保證所有的游戲世界都是一致的,於是便有了 同步 。
在理想的情況下,所有人操作的游戲世界,在同一時刻應該是完全步調一致的,但由於網路延遲以及其他不同設備環境的差異,完全一致時不可能的,而 同步 的目的是希望盡可能的一致,而對一致性的要求,不同的游戲類型也會有不同的要求。
通常幀同步和狀態同步是這樣區分的:
當然這兩種方式並非是非此即彼的,在一些復雜的網路游戲中,混用兩種方式也是比較常見的。
盡管為了游戲體驗,游戲客戶端可能會做很多體驗上的改進操作,跟我下面講的並不會完全一致,但歸根揭底,幀同步和狀態同步必然會遵循上述幾點,在設計演算法時無需在意那些為了優化體驗的細節。
以下是一些具有代表性游戲的同步方式:
幀同步是比較容易理解的,所有的客戶端都是一個完整獨立的系統,並且我們指導游戲中的隨機性均是偽隨機,在seed確定的情況下,每個系統的狀態的改變只取決於游戲的輸入,也就是說我們通過伺服器來轉發所有玩家的操作輸入客戶端游戲系統,那麼就能保障所有的客戶端都是同步的。
比如某個時刻,玩家0做了操作x, 整個同步過程如下:
顯而易見的,因為只同步了用戶的操作,這個數據傳輸量其實是很少的,所以很省流量,除非玩家特別多...
對於絕大多數的狀態同步游戲,它的邏輯計算完全放在伺服器上,因此也十分好理解。客戶端只是相當於一個表現層,用來展示伺服器發送過來的數據。就像我們打開一個網頁,網頁上的數據都是從伺服器發過來的,因此我們本地是沒辦法作弊的,除非黑了伺服器,因此這種狀態同步的游戲基本上是沒有外掛的。
但是有一種特殊的情況,就是FPS類型的游戲,如果靠伺服器來運算,整個延遲下來就沒法正常玩了...因此它的戰斗邏輯會在客戶端,而只向伺服器匯報結果,因此類似吃雞的這種游戲會有很多的外掛。
對於戰斗邏輯在伺服器的狀態同步游戲,它的安全性是十分高的,因為想作弊就得黑入伺服器,這個難度可想而知。但是FPS類型游戲部分戰斗邏輯在客戶端,這個會好被外掛修改,這也是FPS游戲外掛多難以根治的主要原因。
而幀同步的游戲整個計算邏輯在客戶端,因此,開掛者因為可以獲得全系統的信息,於是就可以很容易做開圖之類的外掛。
⑷ 使用rtcp實現音視頻同步
音視頻同步是指音視頻的rtp時間戳同步. audio/video rtp 時間戳不能自己同步,需要audio/video rtcp同步。
發送端以一定的頻率發送RTCP SR(Sender Report)這個包,SR分為視頻SR和音頻SR,SR包內包含一個RTP時間戳和對應的NTP時間戳,可以用<ntp,rtp>對做音視頻同步.(同步過程在後面)
Rtcp sr 格式
例如:一個音頻包打包20ms的數據.采樣率48k.對應的采樣數為 48000 * 20 / 1000 = 960,也就是說每個音頻包里攜帶960個音頻采樣,因為1個采樣對應1個時間戳,那麼相鄰兩個音頻RTP包的時間戳之差就是960。
視頻采樣率是幀率,視頻時間戳的單位為1/90k秒.比如: 25幀,每幀40ms.40ms有多少時間戳的基本單位呢? 40除以1/90k等於3600.
擴展內容:
Single Nalu:如果一個視頻幀包含1個NALU,可以單獨打包成一個RTP包,那麼RTP時間戳就對應這個幀的採集時間;
FU-A:如果一個視頻幀的NALU過大(超過MTU)需要拆分成多個包,可以使用FU-A方式來拆分並打到不同的RTP包里,那麼這幾個包的RTP時間戳是一樣的;
STAP-A:如果某幀較大不能單獨打包,但是該幀內部單獨的NALU比較小,可以使用STAP-A方式合並多個NALU打包發送,但是這些NALU的時間戳必須一致,打包後的RTP時間戳也必須一致
NTP時間戳是從1900年1月1日00:00:00以來經過的秒數.
rtp是相對時間,ntp是絕對時間.rtp時間戳和ntp時間戳表示的意義是相同的. 可以互相轉換,rtp=f(ntp) 類似中文名張三,英文名zhangjohn.
rtp時間戳如何轉換成pts即顯示時間的呢? pts= rtp 時間戳 *timebase.
例如:flv封裝格式的time_base為{1,1000},ts封裝格式的time_base為{1,90000}.
flv: pkt_pts=80,pkt_pts_time=80/1000=0.080000;
pkt_pts=120,pkt_pts_time=0.120000;
pkt_pts=160,pkt_pts_time=0.160000;
pkt_pts=200,pkt_pts_time=0.200000
ts: pkt_pts=7200,pkt_pts_time=7200/90000=0.080000;
pkt_pts=10800,pkt_pts_time=0.120000;
pkt_pts=14400,pkt_pts_time=0.160000;
pkt_pts=18000,pkt_pts_time=0.200000
總結:ntp,rtp,pts表示的是同一幀的時間.ntp是絕對時間,rtp是相對時間,pts是播放時間.rtp是用頻率表示,pts是用秒錶示.
如果音視頻都從0同步開始,rtp等於pts.
如果不是同步開始,pts需要rtp 同步加減一個offer.具體實例看下文. rtp和pts是編解碼時間即播放時間,不是傳輸時間,傳輸延時與rtp時間戳沒關系.
音視頻時間戳增長rtp增量是不同的,所以需要換算成ntp時間同步.
音視頻同時編碼,而且視頻播放頻率始終不變. 使用rtp時間戳同步就行.
因為音視頻被映射到同一個時間軸上了,音頻和視頻幀間的相對關系很清楚.
同時RTP規范要求時間戳的初始值應該是一個隨機值,那麼假設音頻幀時間戳的初始值是隨機值1234,視頻幀時間戳的初始值是隨機值5678,看起來應該是下面這樣
2.1 音視頻不是同時產生
RTP規范並沒有規定第一個視頻幀的時間戳和第一個音頻幀的時間戳必須或者應該對應到絕對時間軸的同一個點上 。
也就是說開始的一小段時間內可能只有音頻或者視頻,比如開始攝像頭沒有開,只有音頻沒有視頻.也可能的開始網路丟包,同時視頻的降低幀率,有可能出現這樣的時間戳序列:0,丟包+降幀率,16200,... 第一個視頻幀rtp timestamp 是16200,就無法映射到絕對時間軸上.
實際情況如下圖:
音視頻同步應用分成兩種:一種是用於傳輸,一種是用於播放器.
1 用於傳輸
傳輸本來可以不用同步直接轉給播放器處理,但是給第三方庫的時候需要同步,比如將流轉給ffmpeg。ffmpeg 要求轉入的流的第一幀,必須audio,video 是同步的. 不能audio從0ms開始,video從1ms開始,那樣送流給ffmpeg一定音視頻不同步.所以給ffmpeg之前,需要做音視頻同步.根據上面的方法就可以實現。
notes: ffmpeg源碼要求第一幀同步開始: https://www.jianshu.com/p/67d3e6a1d72e
2 播放器的同步播放
播放器在上面同步的基礎上,還需要增加緩存. 緩存設計分成兩種情況,視頻快於音頻和音頻快於視頻.
i) 視頻快於音頻那麼擴大視頻緩沖區,縮短音頻緩沖區,讓視頻幀等一等音頻幀。
ii) 音頻快於視頻那麼擴大音頻緩沖區,縮短視頻緩沖區,讓音頻幀等一等音頻幀
QA1:什麼情況會出現不同步,為什麼要同步?
比如視頻第1ms才有數據,但是在第0ms播放,其他幀都是提前1ms,變成音視頻不同步.
QA2:什麼時候同步,需要多少次同步?
第一幀開始同步。根據上面的演算法,第幾個rtcp包都能同步,從哪裡開始同步後面就跟著全同步了.
播放當然需要從開始同步哈,所以都是從第一幀同步。
只需要同步一次,後面就是對於基準0的播放時間了。
QA3: 音視頻同步與幀率的關系?
動態幀率與時間戳同步沒關系,播放器會根據fps讀取正確的ts。幀率不同只是視頻包多少不同,每個包的time stamp和ntp時間都是一一對應的.
QA4: 傳輸延時與rtp時間戳有沒有關系?
ats:20,40,60,...
vts: 41,82,123....
會不會出現這種時間序列,累計造成時間戳不同步。
這個數列是不對.
40ms肯定能編解碼完成,不是編解碼要41ms。而是開始第一幀發送的晚造成41ms.
數列應該是41,81,121...
QA5: 兩個不同的主播合流,如果有一個主播的時間戳不準確如何同步?
比如:第一個13:00:00: 編碼:40ms第一幀
第二個在13:00:00:30ms開始編碼,但是它的時間有問題,顯示0:0:0:0開始
如何將13:00:00:30ms map 0:0:0:0.
沒有實際經驗。原理應該和音視頻同步類似,同步到其中一個主播時間軸即可。
哪位網友有經驗歡迎補充
uint32_t ntp_compact_audio = get_compact_ntp_time( ntp_audio );
uint32_t ntp_compact_video = get_compact_ntp_time( ntp_video );
//v_sr_ts is rtp ts
base_timestamp_video = v_sr_ts - diff_ts
⑸ Tcp和Udp各有什麼優缺點MOBA游戲可以用嗎
在實時性方面,tcp協議的網路抗性欠佳,對MOBA類或其他實時性要求較高的游戲,一般是不建議使用tcp作為協議載體。事實上,王者榮耀的PVP通信協議也確實是基於udp封裝的;同樣,最近大家喜聞樂見的《絕地求生》,也是基於udp的。
不同類型的游戲因為玩法、競技程度不一樣,採用的同步演算法不一樣,對網路延遲的要求也不一樣。例如,MOBA類游戲多使用幀同步為主要同步演算法,競技性也較高,無論從流暢性,還是從公平性要求來說,對響應延遲的要求都最高,根據業內經驗,當客戶端與伺服器的網路延遲超過150ms時,會開始出現卡頓,當延遲超過250ms時,會對玩家操作造成較大影響,游戲無法公平進行。類似地,「吃雞」游戲(如《絕地求生》)玩法對玩家坐標、動作的同步要求極高,延遲稍大導致的數據不一致對體驗都會造成較大影響,其實時性要求接近MOBA類游戲。而對於傳統mmorpg來說,多採用狀態同步演算法,以屬性養成和裝備獲取為關注點,也有一定競技性,出於對游戲流暢性的要求,對延遲也有一定要求,同步演算法的優化程度不一樣,這一要求也不一樣,一般情況下為保證游戲正常進行,需要響應延遲保持在300ms以下。相比之下,對於爐石傳說、鬥地主、夢幻西遊等回合制游戲來說,同時只有一個玩家在操作雙方數據,無數據競爭,且時間粒度較粗,甚至可通過特效掩蓋延遲,因此對網路延遲的要求不高,即便延遲達到500ms~1000ms,游戲也能正常進行。
不同傳輸層協議在可靠性、流量控制等方面都有差別,而這些技術細節會對延遲造成影響。tcp追求的是完全可靠性和順序性,丟包後會持續重傳直至該包被確認,否則後續包也不會被上層接收,且重傳採用指數避讓策略,決定重傳時間間隔的RTO(retransmission timeout)不可控制,linux內核實現中最低值為200ms,這樣的機制會導致丟包率短暫升高的情況下應用層消息響應延遲急劇提高,並不適合實時性高、網路環境復雜的游戲。
除了這些以外,這里有一位行業資深架構師寫了關於這個問題的分析《關於MOBA游戲的tcp協議—實測數據》,推薦給你可以參考下。
⑹ 在脈沖編碼調制方法中,如果規定的量化級是64個,則需要使用多少位編碼
6位編碼。
脈沖編碼調制就是數模轉換,主要經過3個過程:抽樣、量化和編碼。抽樣過程將連續時間模擬信號變為離散時間、連續幅度的抽樣信號,量化過程將抽樣信號變為離散時間、離散幅度的數字信號,編碼過程將量化後的信號編碼成為一個二進制碼組輸出。
PCM的優點就是音質好,缺點就是體積大。PCM可以提供用戶從2M到155M速率的數字數據專線業務,也可以提供話音、圖象傳送、遠程教學等其它業務。PCM有兩個標准(表現形式):E1和T1。
脈沖編碼調制(Pulse Code Molation)是最常用、最簡單的波形編碼。它是一種直接、簡單地把語音經抽樣、A/D轉換得到的數字均勻量化後進行編碼的方法,是其他編碼演算法的基礎。
(6)幀同步演算法擴展閱讀:
脈沖編碼調制編碼原理與規則:PCM數字介面是G.703標准,通過75Ω同軸電纜或120Ω雙絞線進行非對稱或對稱傳輸,傳輸碼型為含有定時關系的HDB3碼,接收端通過解碼可以恢復定時,實現時鍾同步。
Fb為幀同步信號,C2為時鍾信號,速率為2.048Mbps,數據在時鍾下降沿有效,E1介面具有PCM幀結構,一個復幀包括16個幀,一個幀為125μs,分為32個時隙,其中偶幀的零時隙傳輸同步信息碼0011011,奇幀的零時隙傳輸對告碼,16時隙傳輸信令信息,其它各時隙傳輸數據,每個時隙傳輸8比特數據。
⑺ IEEE1588V1-V2理解
IEEE 1588 是一個精密時間協議 (PTP),用於同步計算機網路中的時鍾。 在區域網中,它能將時鍾精確度控制在亞微秒范圍內,使其適於測量和控制系統。 IEEE 1588 標准為時鍾分配定義了一個主從式架構,由一個或多個網段及一個或多個時鍾組成。
TSN 網路中時間同步協議使用 IEEE 802.1AS 協議,它基於 IEEE 1588 協議進行精簡和修改,也稱為 gPTP 協議。
IEEE 1588 協議簡稱精確時鍾協議 PTP(Precision Timing Protocol),它的全稱是「網路測量和控制系統的精密時鍾同步協議標准」(IEEE 1588 Precision Clock Synchronization Protocol)。其工作的基本原理,是通過主從節點之間進行同步數據幀的發送,記錄數據幀的發送時間和接收時間信息進行,並且將該時間信息添加到該數據幀中。從節點獲取這些時間信息,並計算從節點本地時鍾與主時鍾的時間偏差和網路節點之間的傳輸延時,對本地時鍾進行糾正,使之與主節點時鍾同步。一個 PTP 網路只能存在一個主時鍾。
PTP 協議主要分為兩大部分來實現時鍾同步功能:
1、建立同步體系:
協議使用最佳主時鍾演算法(Best Master Clock Algorithm,BMCA),通過選取主時鍾,建立主從拓撲關系,進而在整個 PTP 網路中建立起同步體系。
2、同步本地時鍾:
協議使用本地時鍾同步演算法(Local Clock Synchronization Algorithm,LCS),通過 PTP 數據報文在網路主從節點之間的交換,計算各從節點本地時鍾與主時鍾間的時間偏差,調整本地時鍾,使之與主時鍾同步。
整個 PTP 網路內的時鍾可按照其上 PTP 通信埠的數目來劃分成普通時鍾(Ordinary Clock,OC)與邊界時鍾(Boundary Clock,BC):普通時鍾只存在一個,而邊界時鍾則存在多個。一般在確定性不高的網路節點處使用邊界時鍾,例如交換機或者路由器一般用作邊界時鍾,如下圖所示。在每個埠上,PTP 通信都是獨立進行的。
1、邊界時鍾:
邊界時鍾上只允許存在一個從埠,與上級節點的主埠通信,將其本地時鍾與級主埠進行同步。其餘埠為主埠,與下游節點的從埠進行通信。邊界時鍾可以連接不同的網路協議。
2、同步體系建立流程:
(1)初始狀態,各個節點埠會在指定的時間內偵聽網路中的 Sync 數據幀; 若接收到 Sync 數據幀,節點埠將根據最佳主時鍾演算法決定埠狀態。若沒有收到 Sync 數據幀,該節點狀態變更為 Pre_Master,並將自己假定為主時鍾節點。此時節點埠狀態表現為主時鍾,但是並不發送 Sync 幀。
(2)埠狀態在一定時間內保持 Pre_Master:
若在埠指定時間內接收到 Sync 數據幀,則該埠狀態由最佳主時鍾演算法決定。
若判定埠為主時鍾,則將周期性地發送 Sync 幀;若判定為從時鍾,則接受 Sync 幀,並計算偏差,糾正本地時鍾。
若在該時間段內埠沒有收到 Sync 數據幀,則將狀態變更為主時鍾,並且開始定時發送 Sync 數據幀。
(3)主時鍾和從時鍾的狀態隨著時鍾性能與運行狀態的變化而變化。下圖展示了 BMCA 中狀態轉移。
3、時間同步建立流程:
如下圖PTP同步原理
如圖所示,Master為網路中的同步時鍾源,可以認為其與UTC或者GPS時無限接近。Slave為網路中需要被同步設備。假設從Master到Slave的路徑符合對稱路徑,那麼路徑上的延時我們設Delay,然後設備Master和設備Slave之間待同步的時間差值為Offset,即Slave比Master在同一時刻慢Offset。
可以算出
Slave設備根據算出的Offset即可以進行本地時鍾校準。但是1588V1協議依賴於鏈路的對稱性,即Master到Slave與Slave到Master時延一致,這在實際網路狀況下很難滿足,故需要額外的不對稱演算法進行鏈路延時差計算和補償校準。
IEEE1588V2在IEEE1588V1版本上做了改進和擴展。主要包括:
1.新增點到點路徑延時測量的獨立消息模式。
埠 A 與埠 B 間的路徑延遲時間 Delay 為
在 PTPv1 中,平均路徑延遲測量時通過 Sync 幀與 Delay_Req 幀配合使用的,但是在 PTPv2 中卻不需要 Sync 幀的參與,僅通過 PDelay_Req 數據幀系列來進行測量。這是一個獨立的延遲測量過程,不依賴 Sync 幀和同步體系建立的參與,使得測量精度有所提高,並且可以經過多次測量求得平均值得到更為准確的路徑延遲。另一方面,如果網路中的同步體系發生改變,這時不需要重新計算該節點間的路徑延遲,直接使用之前已測得的延遲數據,大大增強了協議執行的效率,使得協議更為方便靈活。在PTPv2 中,利用 PDelay_req 數據幀系列已成為主要的測量路徑延遲方法。
2、新增透明時鍾模型
在 PTPv1 中,網路中間節點均採用邊界時鍾模型。與網路中唯一的主時鍾,即一個普通時鍾連接的邊界時鍾,其上唯一的從埠接收主節點發送的同步數據幀,與主時鍾實現同步,其餘的主埠和與之相連的其他邊界時鍾發送同步數據幀,最後同步到網路邊緣的普通時鍾,這樣便實現了整個網路的時間同步。這種方法雖然可行,但是由於這種方式是逐級同步,所以距離主時鍾越遠的節點,同步精度越低。
當網路中的一些節點不需要進行時鍾同步或者不具備同步功能時,便可採用透明時鍾模型。透明時鍾不像 BC/OC 模式那樣,需要每個節點都與主時鍾進行同步,它的埠只對協議數據幀進行轉發,並將計算出的數據幀滯留時間添加在校正域中。這種方式將 PTP 數據幀的處理變得更為簡單,降低了網路中 PTP 協議的實施難度,同時提高了各從節點的同步精度。
透明時鍾有模型兩種:端對端透明時鍾,和點對點透明時鍾。
(1)端對端(E2E)透明時鍾
E2E 透明時鍾對網路中普通數據幀不做任何處理,僅進行轉達讓其正常通過。但是對於 PTP 事件數據幀,則將他們從接收埠到發送埠間的駐留延遲時間累加到數據幀中的修正域,用以彌補 PTP 數據幀在經過其自身所帶來的延遲誤差。
(2)點對點(P2P)透明時鍾
點對點(P2P)透明時鍾只轉發特定的 PTP 報文,包括 Sync 幀、Follo_Up 幀和Announce 幀等。並且會採用 Pdelay_Req 數據幀系列計算每個埠與所連接的埠間的路徑延遲時間,再與埠間延遲時間合並添加到時間修正域,來補償數據幀從源埠到點對點透明時鍾出埠的時間延遲。
3、增加單步時鍾模型
單步時鍾模型解決了 Follow_Up 幀與 Sync 幀匹配問題。PTP 協議基本的同步過程採用雙步模式,即主時鍾節點發送 Sync 幀,和帶有 Sync 幀發送時間的Follow_Up幀。這種方式雖然能提高 Sync 幀時間戳標記的精度,提高同步效果,但是在網路負載較大的情況下,數據幀很有可能發生丟失或者阻塞,造成兩種數據幀的匹配出現差錯。
在 PTP 數據幀中設置一個標志,來使用單步模式,將 Sync 幀的發送時間與數據幀中的時間標簽的差值作為傳輸延遲,並將其累加到修正域中。這樣主時鍾便通過單獨的 Sync 幀而不需要 Follow_Up 進行時間的同步校準工作。
單步模式可以減少網路流量,提高網路負載較大時同步的可靠性。單步模式需要額外的輔助硬體,來幫助計算時間修正值並將其累加到校正域中,這對網路的實時性有比較高的要求。
BMCA,即最佳主時鍾演算法,它選擇網路中性能最佳的時鍾作為主時鍾,並以
此建立網路拓撲,生成同步體系,進而實現時鍾同步功能。
最佳主時鍾的選取是通過Announce幀在網路中各節點的傳輸,比較各個節點上的時鍾屬性(比如是否將時鍾指定為主或者從時鍾),用於標識精度的時鍾等級,以及用於標識時鍾源類型的時鍾類型(比如銣鍾、銫鍾等),還有表示時鍾偏移、方差等的時鍾特性、時鍾地址以及時鍾埠號等特徵來選擇最佳主時鍾,當其他時鍾特徵都一樣是,協議會將埠號最小的節點時鍾作為主時鍾。IEEE 1588協議會以主時鍾節點作為根節點形成樹形拓撲結構,並且為避免生成迴路,那些競爭失敗的節點埠,協議將他們定義為被動或者禁用狀態。
⑻ 游戲開發好學嗎
對於計算機專業的學生來說不難,自學成才就比較困難了。
游戲開發和其他軟體開發的基礎基本一樣,無非是計算機網路、多線程、數據結構和演算法、面向對象設計、軟體工程、軟體測試、幾種常用編程語言等等,本科教學都會學到。
游戲程序的邏輯可能比傳統軟體復雜一些,需要更復雜的演算法、更高的性能、更好的面向對象設計、更高效的網路模型 線程模型。
也有一些其他軟體很少用到的技術,比如3D游戲渲染用到線性代數,網游的幀同步、狀態同步演算法,游戲循環,粒子特效,尋路演算法,模擬碰撞。
如果你也想開發一款屬於自己的游戲或者小程序,可以通過第三方專業開發平台來實現開發需求:廈門在乎科技-專注小程序、app、網站開發
⑼ I幀,P幀,B幀,視頻碼率,幀率和解析度 區別和理解
視頻壓縮中,每幀代表一幅靜止的圖像。而在實際壓縮時,會採取各種演算法減少數據的容量,其中IPB就是最常見的。
簡單地說, I幀 是關鍵幀,屬於 幀內壓縮 。就是和AVI的壓縮是一樣的。 P是 向前搜索的意思 。B是 雙向搜索 。他們都是 基於I幀來壓縮數據 。
I幀表示關鍵幀 ,你可以理解為這一幀畫面的完整保留; 解碼時只需要本幀數據就可以完成(因為包含完整畫面)
P幀 表示的是 這一幀跟之前的一個關鍵幀(或P幀)的差別 , 解碼時 需要用 之前緩存的畫面疊加上本幀定義的差別,生成最終畫面 。(也就是 差別幀 , P幀沒有完整畫面數據 ,只有 與前一幀的畫面差別的數據 )
B幀是雙向差別幀 ,也就是 B幀記錄的是本幀與前後幀的差別 (具體比較復雜,有4種情況),換言之, 要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之後的畫面 ,通過 前後畫面的與本幀數據的疊加取得最終的畫面 。B幀 壓縮率高,但是解碼時CPU會比較累 ~。
從上面的解釋看,我們知道I和P的解碼演算法比較簡單,資源佔用也比較少,I只要自己完成就行了,P呢,也只需要解碼器把前一個畫面緩存一下,遇到P時就使用之前緩存的畫面就好了,如果視頻流只有I和P,解碼器可以不管後面的數據,邊讀邊解碼,線性前進。
但網路上的電影很多都採用了B幀,因為B幀記錄的是前後幀的差別 ,比P幀能節約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,因為在解碼時,不僅要用之前緩存的畫面,還要知道下一個I或者P的畫面(也就是說要預讀預解碼),而且,B幀不能簡單地丟掉, 因為B幀其實也包含了畫面信息,如果簡單丟掉,並用之前的畫面簡單重復,就會造成畫面卡(其實就是丟幀了) ,並且由於網路上的電影為了節約空間,往往使用相當多的B幀, B幀用的多,對不支持B幀的播放器就造成更大的困擾,畫面也就越卡 。
一般平均來說, I的壓縮率是7(跟JPG差不多),P是20,B可以達到50 ,可見使用B幀能節省大量空間,節省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。
下面舉例說明:
在如上圖中,GOP (Group of Pictures)長度為13,S0~S7 表示 8個視點,T0~T12 為 GOP的 13個時刻。每個 GOP包含幀數為視點數 GOP 長度的乘積。在該圖中一個 GOP 中,包含94 個 B幀。B 幀佔一個 GOP 總幀數的 90.38%。GOP 越長,B 幀所佔比例更高,編碼的率失真性能越高。下圖測試序列 Race1 在不同 GOP 下的率失真性能對比。
總結 : I幀,P幀,B幀 理解看粗體字的標記,關鍵的點都標出了,一定要看重點。
解析度: 影響圖像大小,與圖像大小成正比:解析度越高,圖像越大;解析度越低,圖像越小。
視頻碼率:(1:傳輸碼率;2:編碼碼率)
碼率:影響體積,與體積成正比:碼率越大,體積越大;碼率越小,體積越小。
傳輸碼率: 碼率就是數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。也就是取樣率(並不等同與采樣率,采樣率的單位是Hz,表示每秒采樣的次數),單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真,圍繞這個核心衍生出來cbr(固定碼率)與vbr(可變碼率), 「碼率」就是失真度,碼率越高越清晰,反之則畫面粗糙而多馬賽克。
編碼碼率:單位時間的數據位數,(下面的結論是針對編碼碼率來說的跟傳輸碼率沒啥關系)
1:在碼率一定的情況下,解析度與清晰度成反比關系:解析度越高,圖像越不清晰,解析度越低,圖像越清晰。(一幀圖像就那麼多數據,解析度(面積大)越高,碼率一定,相對圖像越不清晰了)
2:在解析度一定的情況下,碼率與清晰度成正比關系,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。
幀率: 影響畫面流暢度,與畫面流暢度成正比,幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果碼率為變數,則幀率也會影響體積,幀率越高,每秒鍾經過的畫面越多,需要的碼率也越高,體積也越大。 幀率: 就是在1秒鍾時間里傳輸的圖片的幀數,也可以理解為圖形處理器每秒鍾能夠刷新幾次。
1. 音頻 碼率 計算公式:
音頻碼率=采樣率 x 位深度 x 聲道= 44.1Khz x 16位 x 2聲道 = 1411.2 Kbps
2.文件大小 = 碼率 x 時長(s) = 文件大小 = 碼率 x 時長(s) = (Kbps )= (Kbps )/ 1024 Kb = (MB)
2.視頻文件大小計算
文件大小 = 碼率 x 時長(s)/8 = (Kbps )= (Kbps )/ 1024 Kb = (MB)
問題編解碼的音視頻同步問題原理
帶來一個問題:在視頻流中,先到來的 B 幀無法立即解碼,需要等待它依賴的後面的 I、P 幀先解碼完成,這樣一來播放時間與解碼時間不一致了,順序打亂了,那這些幀該如何播放呢?這時就需要我們來了解另外兩個概念:DTS 和 PTS。
DTS、PTS 的概念
DTS、PTS 的概念如下所述:
DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在於告訴播放器該在什麼時候解碼這一幀的數據。
PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什麼時候顯示這一幀的數據。
需要注意的是:雖然 DTS、PTS 是用於指導播放端的行為,但它們是在編碼的時候由編碼器生成的。
當視頻流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。
比如一個視頻中,幀的顯示順序是:I B B P,現在我們需要在解碼 B 幀時知道 P 幀中信息,因此這幾幀在視頻流中的順序可能是:I P B B,這時候就體現出每幀都有 DTS 和 PTS 的作用了。DTS 告訴我們該按什麼順序解碼這幾幀圖像,PTS 告訴我們該按什麼順序顯示這幾幀圖像。順序大概如下:
PTS:1423
DTS:1234
Stream: I P B B
音視頻的同步
上面說了視頻幀、DTS、PTS 相關的概念。我們都知道在一個媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預測,所以音頻幀的 DTS、PTS 順序是一致的。
音頻視頻混合在一起播放,就呈現了我們常常看到的廣義的視頻。在音視頻一起播放的時候,我們通常需要面臨一個問題:怎麼去同步它們,以免出現畫不對聲的情況。
要實現音視頻同步,通常需要選擇一個參考時鍾,參考時鍾上的時間是線性遞增的,編碼音視頻流時依據參考時鍾上的時間給每幀數據打上時間戳。在播放時,讀取數據幀上的時間戳,同時參考當前參考時鍾上的時間來安排播放。這里的說的時間戳就是我們前面說的 PTS。實踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時鍾。
⑽ 基於ECS模型的卡牌戰斗框架4
卡牌類游戲如果僅僅是單人游戲,那便也沒什麼技術含量了。從拉用戶的角度,如果沒有實時多人游戲玩法便也失去了游戲一大塊吸引力。
通過這些年對卡牌類游戲的積淀,幀同步是這類游戲最常用的多人游戲同步方案。如果是回合類型游戲,那麼狀態同步便大概率是首選項了,但它的實現復雜度在這類游戲中卻又不及幀同步技術了。所以這一章,就記錄我所開發的幾個項目所設計的幀同步方案與細節。
我們將項目中所有的浮點數類型全都統一成了定點數,這樣就確保我們的邏輯運算不會因平台的不同而導致計算結果的差異。之所以不同平台對浮點數的運算有差異,則是因為各廠商底層硬體對浮點數的運算不一致導致。雖然大家計算結果都差不多,但是到了小數點最後幾位總會有所不同。如果採用double進行計算,雖然double精度更高,但依舊免不了會在最後幾位出現不一致的情況,只是這時已經是小數點後二三十位的事情了。
正是基於這個原因,我們最開始先使用double作為浮點數據類型,後又使用定點數進行替換。因為我的定點數實現的有效精度只能到小數點後5位,所以即便底層硬體會對浮點數運算產生誤差,卻依舊會被定點數強制統一而不必擔心更小精度運算不一致所導致的問題。
定點數方案在網上可以找到一大堆,而且也對定點數方案的利弊進行過多方分析,此處不作贅述,只是網上多用10000作為定點數的放大倍數,這是我的定點數實現與網上所不同的地方。
在我實現的定點數中,採取了一個特殊的放大倍數,即 2^16 。這樣一個放大倍數,最大的好處就是定點數之間的大多數運算,都可以採用位運算的形式進行放大縮小,於性能上更合適一些。此外,2的16次方作為放大倍數,可以使小數的有效位保持到小數點後5位,從計算精度的角度考慮,這樣一個范圍也是滿足我們項目開發需求的。至於不同項目的放大倍數,可以根據需要可以調整為其他的2的n此冪均可。
採用2的整數次冪,會在定點數的乘、除、開方、比較大小運算中提高計算性能,遠比乘除10000效率來得高。特別說明的是,這里我們的開方直接調用了C#數學庫中的開方操作,不同的是在開方前我們就需要對待開方的數左移16位,這樣開方得到的結果才是滿足定點數放大倍數的值。
基於以上幾點,我們才會使用long作為定點數內部的數據存儲類型,而定點數所表示數字的范圍,與int類型一致。如果使用定點數存儲了一個大於int最大值的數,那麼很可能就會在後續的計算中因移位而產生計算錯誤。
當實現了自己的定點數方案之後,就需要根據它的精度去生成 三角函數查詢表 。這里我僅生成了sin查詢表,而計算其他三角函數時根據sin值就可求得具體值。
在實現定點數的過程中,還有很多值得參考的內容:
採用幀同步方案後,網路方案就是一個需要關注的議題。
幀同步方案下,客戶端和伺服器之間無論每幀都同步信息,還是有數據變動時再同步信息,都需要頻繁地使用網路進行數據交互。傳統TCP方案下,TCP本身發送機制有延時,所以就需要使用KCP來實現高實時性,但是代價(按照官方說法)就是額外消耗10%-20%的帶寬。
但是需要說明的是,在丟包率上升的情況下,KCP因其底層數據包的組織與發送形式,會導致流量變大,這種情形下反而不如使用TCP的綜合效率。這是選用KCP方案的一個缺陷。
我的項目中,最終設計了兩套網路結構,KCP與TCP。這里就需要客戶端採集與伺服器的網路狀態數據(ping值)。當丟包率與延遲不嚴重時(可根據項目實際情況設定閾值),網路採用KCP;一旦網路狀態超過閾值,則將底層網路方案切換為TCP。這種方案的設計目的,主要就是為了解決丟包率上升時KCP流量過大的問題,但是具體情況需要根據項目類型與具體需求而定。
戰斗邏輯處,我們已經講過定幀的概念了,但是那裡的定幀主要針對的是邏輯的定幀執行。
幀同步也需要定幀的概念。只有當所有客戶端與伺服器幀率統一時,大家的行為才能被約束一致。因此,我們就需要將幀同步的定幀與邏輯的定幀加以區分,下面我就用「邏輯幀」指代邏輯的幀,而使用」服務幀「指代幀同步的幀。
最簡易的方案,就是設計之初就令邏輯幀與服務幀的幀率統一。這樣做的好處,就是免去了兩個幀速率不一所導致的匹配問題,伺服器每驅動一幀,邏輯幀就運行一幀,實現起來簡單方便。
但是,服務幀的設計一般是要從通訊性能出發的,天生幀率會比較低,而邏輯幀因項目需求不同而不穩定,大概率是比較高的幀率。所以,服務幀與邏輯幀的幀率不匹配是常態,這就需要用到一些轉接件來實現我們的需求了。
還記得 第一章 我曾提到的介面 ILogicMgr 嗎,它的派生類的作用之一,就是提供一個「幀率差速器」,以使得游戲邏輯能夠在服務幀與邏輯幀不同的幀率下平穩運行。幀率差速器以幀率最快的一方的速率為基礎速率進行心跳,每次心跳時返回本次心跳結果。幀率差速器的心跳結果分為三種:
因為我們的項目是鎖幀方案,服務幀先行,所以差速器心跳流程圖如下:
差速器是鎖幀模式下的一個重點,因為它的存在,才能夠讓邏輯幀與服務幀按照順序執行。也因為差速器內部有時間管理,所以才能夠實現服務幀的鎖幀功能。這部分內容依靠的就是伺服器同步的 當前最大幀號 數據,以最大幀號作為限制。如果網路出現波動,那麼客戶端邏輯就會卡在最大幀號對應的時間點,直到收到了伺服器最新的最大幀號數據。
追幀 也是在此處完成,即如果客戶端發現落後伺服器幀數比較多,就需要在此處設計演算法加速邏輯的運行,使得一次心跳執行更多的邏輯幀。但是需要注意不要一次把所有邏輯幀都跑完,這樣會造成客戶端顯示效果上的撕裂感。
上文在講 幀率差速器 時,已說明了服務幀與邏輯幀的概念,而且我們也明確了差速器是需要用在介面 ILogicMgr 的派生類中的,所以邏輯部分自然也是集成在這里的。
當差速器每次心跳結果是邏輯幀時,就是我們調用邏輯的心跳的時機。以此便完成了幀同步方案下邏輯的集成。也因為邏輯的心跳是在 ILogicMgr 中被驅動的,所以無論追幀或是心跳時間控制,都可以在此處根據需求進行開發。
我在項目中採用的幀同步方案已在上文進行了較為詳細的說明。
需要指出的是,在服務幀概念下,我們的方案是以 伺服器領先客戶端 實現鎖幀效果的。這種實現方案最為簡單也最為有效。當我們面對的項目是一個對實時性要求不高的項目時,這種鎖幀方案可以簡單有效地實現我們的需求,也不會對玩家造成太多的感受上的負面影響。
如果項目實時性要求高怎麼辦?
類似ACT或MOBA類游戲,玩家需要能夠及時獲得技能釋放的反饋,否則延遲的技能釋放會撕裂快節奏的游戲體驗。這種情況下就需要我們設計全新的思路。而在此之前,我們需要明確快照的概念。
快照,即當前數據的拷貝。我們之所以需要快照,是因為我們後續會需要在某個時間點保存所有的數據,然後在另一個時間點通過保存的數據還原戰場的數據。
基於戰斗框架,快照我們其實只需要邏輯的數據快照即可,這樣即便邏輯通過快照進行了數據回滾,也可以將數據同步給顯示層進行還原。ECS架構本身因為對數據與邏輯進行了完整的分離,所以快照與數據回滾的實現方案可以參考 第二章 內容,此處不作贅述。
下文我們將介紹一個可以改進的幀同步策略,就需要用到數據快照與回滾。
還有一種幀同步策略,即在服務幀概念下,客戶端時間領先於伺服器時間。這種情況下,客戶端所有的邏輯可以看做是一種預演,而伺服器下發的則是過去某幀的信息。
假設客戶端是第 n+2 幀,伺服器下發的是第 n 幀。
以上就是客戶端優先的幀同步策略,但是這里也需要考慮幾個實現的問題:
以上就是我對幀同步相關的記錄與思考, 下一篇 便聚焦開發工具進行說明。