win7系統(tǒng)下載
當(dāng)前位置: 首頁(yè) > 網(wǎng)絡(luò)技術(shù)教程 > 詳細(xì)頁(yè)面

flashP2P協(xié)議rtmfp解析

發(fā)布時(shí)間:2023-01-29 文章來源:xp下載站 瀏覽:

網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。

  1 協(xié)議介紹

  Real-Time Media Flow Protocol(簡(jiǎn)稱RTMFP)是Flash和Flash之間基于UDP的點(diǎn)對(duì)點(diǎn)傳輸協(xié)議,由Adobe公司在2008年在Flash 10.0中發(fā)布,隨后在Flash10.1中加入了Groups功能。

  2 常見用法

  rtmfp在Flash 10中的典型使用場(chǎng)景如下圖:

flashP2P協(xié)議rtmfp解析

  它有如下特點(diǎn):

  l 使用Cirrus或者開源的Cumulus來提供Rendezvous服務(wù)

  l Cirrus或者Cumulus并不提供Peer ID的交換服務(wù),需要提供其它的方式來交換客戶端之間的Peer ID

  l Flash客戶端之間使用NetStream來做點(diǎn)對(duì)點(diǎn)傳輸,Publisher需要給每一個(gè)Subscriber單獨(dú)傳輸一份數(shù)據(jù),這也限制集群的規(guī)模。

  為了解決這個(gè)問題,Adobe在Flash 10.1中提出了Groups的概念,典型的架構(gòu)如下:

flashP2P協(xié)議rtmfp解析

  它有如下特點(diǎn):

  l Cirrus或者開源的Cumulus提供Rendezvous服務(wù)并提供所有連接client列表

  l client從Cirrus或者開源的Cumulus獲取鄰居節(jié)點(diǎn)之后,就可以組成一個(gè)完整的P2P架構(gòu),所有的audio、video和data數(shù)據(jù)都在peer之間交互。

  3 協(xié)議解析

  3.1 基本概念

  l session:session是兩個(gè)UDP地址之間的雙向管道。

  l flow:flow是從一個(gè)實(shí)體到另一個(gè)實(shí)體之間的邏輯路徑。一個(gè)session可以包括多個(gè)flow。

  l packet:網(wǎng)絡(luò)中實(shí)際傳輸?shù)臄?shù)據(jù),一個(gè)packet可以包含多個(gè)message。數(shù)據(jù)傳輸時(shí)都經(jīng)過了128 bit的AES加密

  l message:audio、video和data數(shù)據(jù)。

  3.2 Scrambled Session ID

  rtmfp協(xié)議中每個(gè)包的格式如下:

  packet := scrambled-session-id | encrypted-part

  其中scrambled-session-id是4字節(jié),其后是經(jīng)過AES加密的數(shù)據(jù)體。

  scramble-session-id的生成規(guī)則如下:

  scrambled-session-id = a ^ b ^ c

  這里^代表XOR操作,a是session-id,b和c是encrypted-part的頭8個(gè)bytes。

  當(dāng)目標(biāo)收到這個(gè)包后,unscramble的操作如下:

  session-id = x ^ b ^ c

  其中x是scrambled-session-id,b和c同上。

  使用scramble-session-id的目的為了減少數(shù)據(jù)包流經(jīng)的NAT設(shè)備和layer-4 packet inspector對(duì)數(shù)據(jù)的干擾。

  session-id用于標(biāo)識(shí)通信雙方建立的連接,并確定通信時(shí)使用的加密和解密的key,這些key是通過DH key exchange算法獲得。但在session建立之前,雙方使用一個(gè)公有加密key,即128 bit的字符串”Adobe System 02”。

  3.3 raw part

  encrypted-part經(jīng)過解密之后就得到了raw-part,它的格式如下:

  raw-part := checksum | network-layer-data | padding

  其中checksum有16字節(jié),network-layer-data是變長(zhǎng)數(shù)據(jù),padding都是0xFF,并把network-layer-data補(bǔ)齊為16字節(jié)的倍數(shù),這是因?yàn)閞tmfp使用的是16字節(jié)的加解密key。

  checksum基于network-layer-data和padding計(jì)算。

  3.4 network layer data

  network-layer-data的格式如下:

  network-layer-data = flags | timestamp | timestamp-echo | chunks

  其中flags為1個(gè)字節(jié),其格式如下:

  7 6 5 4 3 2 1 0

  TC TCR reserved reserved TS TSE mode

  l mode:11代表握手包,01代表initiator發(fā)送包,10代表responder發(fā)送包,00不是合法值

  l TSE:包中是否包含timestamp-echo域

  l TS:包中是否包含timestamp域

  l TCR:time critical reverse notification表明發(fā)送方正在從其它地方收到timecritical包

  l TC:time critical forward notification表明發(fā)送方發(fā)送的是timecritical包

  timestamp域有2字節(jié),精度是4ms,他的計(jì)算方式如下:

  timestamp = int(time * 1000 / 4) & 0xFFFF

  timestamp-echo域是server收到包的時(shí)間戳,當(dāng)發(fā)送放收到這個(gè)值之后,發(fā)送方就可以計(jì)算RTT值了。

  chunk類型的格式如下:

  chunk = type | size | payload

  type字段為1個(gè)字節(jié),其中0xFF不可用,這個(gè)是用來區(qū)分chunk數(shù)據(jù)和padding數(shù)據(jù)的標(biāo)記。type的定義如下:

  typemeaning

  0x30initiator hello

  0x70responder hello

  0x38initiator initial keying

  0x78responder initial keying

  0x0fforwarded initiator hello

  0x71forwarded hello response

  0x10normal user data

  0x11next user data

  0x0csession failed on client side

  0x4csession died

  0x01reset keepalive request

  0x41reset keepalive response

  0x5enegative ack

  0x51some ack

  size是2字節(jié)payload長(zhǎng)度。

  payload根據(jù)type的不同有不同的數(shù)據(jù)體。

  3.5 message flow

  session中包括3類消息:

  l handshake:握手包,包括initiator hello, responder hello, initiator initial keying,responder initial keying, responder hello cookie change和responderredirect

  l control:控制包,包括ping, ping reply, rekeying initiate, rekeying response, close, closeacknowledge, forwarded initiator hello.

  l flow:流消息,包括user data, next user data, buffer probe, user data ack, user dataack, flow exception report.

  session的建立是通過握手(handshake)來完成的,正常的messageflow如下:

  如果是在NAT打洞是,cumulus server就作為一個(gè)forwarder,他會(huì)把initiatro hello包轉(zhuǎn)發(fā)到其它的client:

  另外,cumulus server還可以讓client重定向到其它server:


網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢(shì),對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。

本文章關(guān)鍵詞: flashP2P 協(xié)議 rtmfp 解析 
主站蜘蛛池模板: 乱欧美综合| 久久综合综合久久97色| 亚洲国产综合人成综合网站| 色噜噜狠狠色综合日日| 色欲综合久久中文字幕网| 俺来也俺去啦久久综合网| 亚洲国产美国国产综合一区二区| 亚洲欧美日韩综合二区三区| 狠狠色丁香久久婷婷综合_中| 18和谐综合色区| 国产成人亚洲综合一区| 天天综合久久一二三区| 青青综合在线 | 日韩欧美色综合网站| 亚洲香蕉网久久综合影视| 亚洲欧美综合中文| 亚洲成A人V欧美综合天堂麻豆| 欧美亚洲另类久久综合| 国产欧美日韩综合AⅤ天堂| 欧美自拍另类欧美综合图片区| 丁香五月综合缴情综合| 老色鬼久久亚洲AV综合| 亚洲 自拍 另类小说综合图区| 亚洲综合欧美精品一区二区 | 国产综合精品蜜芽| 狠狠色伊人亚洲综合成人| 欧美综合区自拍亚洲综合天堂| 国产AV综合影院| 狠狠色丁香婷婷久久综合五月| 欧美自拍另类欧美综合图片区| 亚洲欧美日韩综合在线观看不卡顿 | 欧美综合在线观看| 伊人久久大香线蕉综合Av| 亚洲第一区欧美国产不卡综合 | 久久久久亚洲AV综合波多野结衣 | 婷婷久久综合九色综合绿巨人| 国产亚洲综合色就色| 亚洲色欲久久久综合网| 国产成人精品综合久久久久| 亚洲欧美精品综合中文字幕| 亚洲综合无码精品一区二区三区|