成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PTPIP協(xié)議中文版

plus2047 / 1532人閱讀

摘要:操作請(qǐng)求只能由啟動(dòng)器設(shè)備發(fā)起事件被響應(yīng)端設(shè)備用于把有關(guān)它狀態(tài)的改變通知啟動(dòng)器設(shè)備。會(huì)話將在啟動(dòng)器設(shè)備請(qǐng)求操作事務(wù)時(shí)被關(guān)閉,并且使用響應(yīng)端設(shè)備發(fā)出的一個(gè)有效響應(yīng)成功結(jié)束該請(qǐng)求。標(biāo)準(zhǔn)協(xié)議節(jié)斷開事件。

歡迎關(guān)注公眾號(hào): nullobject 。
文章首發(fā)在個(gè)人博客 https://www.nullobject.cn,公眾號(hào)nullobject同步更新。
PTP/IP (PTP over IP) 是一個(gè)通過(guò)IP連接,建立在 Picture Transfer Protocol (PTP) 上的傳輸層
英文原版協(xié)議下載
0 說(shuō)明

本文檔由nullobject對(duì)應(yīng)PTP-IP標(biāo)準(zhǔn)協(xié)議1.0版本進(jìn)行學(xué)習(xí)整理,原版協(xié)議為英文版,學(xué)習(xí)時(shí)依靠自己理解和使用有道云翻譯,對(duì)理解不到位、翻譯有問(wèn)題的地方麻煩批評(píng)指正?!?by nullobject in 2019-06-03 15:29

1 PTP-IP協(xié)議簡(jiǎn)介 1.1 目的

本文檔描述了一個(gè)基于IP網(wǎng)絡(luò)的ISO-15740/PIMA 1574:2000/圖片傳輸協(xié)議(PTP)的實(shí)現(xiàn)。

PTP被設(shè)計(jì)用來(lái)提供與數(shù)字靜止攝影設(shè)備的標(biāo)準(zhǔn)通信。該協(xié)議指定了標(biāo)準(zhǔn)的圖像引用行為、操作、響應(yīng)、事件、設(shè)備屬性、數(shù)據(jù)集和數(shù)據(jù)格式,以確?;ゲ僮餍?,還提供了可選的操作和格式,以及擴(kuò)展機(jī)制。

1.2 格式規(guī)范

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, “OPTIONAL” in this document are to be interpreted as described in “Key words for use in RFCs to Indicate Requirement Levels”[5].

1.3 參考

下表列舉了本文檔的參考資料:

ID/Description
[1] PTP protocol, PIMA 15740:2000
[2] Computer Networks, Andrew S. Tanenbaum, ISBN:0130661023, Prentice Hall Aug 09,2002
[3] UPnP Standard, http://www.upnp.org/resources/documents.asp
[4] ZeroConf Standard, http://www.zeroconf.org
[5] Formatting Conventions. http://www.faqs.org/rfcs/rfc21129.html
1.4 手寫字母縮寫和縮寫詞
縮寫 含義
TCP Transfer Control Protocol
UDP User Datagram Protocol
IP Internet Procotol
PnP Plug and Play
PTP Picture Transfer Protocol
PTP-IP IP Picture Transfer Protocol
PIMA Photographic and Imaging Manufacture Association
DHCP Dynamic Host Configuration Protocol
v4LL IPv4 Link-Local Address
1.5 參與人員

Petronel Bigioi – FotoNation Ireland

George Susanu – FotoNation Ireland

Alexei Pososin – FotoNation Ireland

Denis McHugh – FotoNation Ireland

Eran Steinberg – FotoNation US

Yury Prilusky – FotoNation US

1.6 照片傳輸協(xié)議(“PTP”)條款

PTP規(guī)范定義了設(shè)備角色、操作、圖像格式和其他相機(jī)特定的數(shù)據(jù)類型和結(jié)構(gòu)。在PTP的TCP/IP實(shí)現(xiàn)中,所有術(shù)語(yǔ)和定義都按照PTP規(guī)范中定義的那樣使用。

1.6.1 設(shè)備規(guī)則

從通信的角度來(lái)看,設(shè)備可以充當(dāng)啟動(dòng)器設(shè)備(Initiator)或響應(yīng)端設(shè)備(Responder),啟動(dòng)器設(shè)備相當(dāng)于一個(gè)客戶端,響應(yīng)端設(shè)備相當(dāng)于服務(wù)端。啟動(dòng)器設(shè)備是向響應(yīng)端設(shè)備發(fā)起操作請(qǐng)求的設(shè)備。響應(yīng)端設(shè)備則是能夠響應(yīng)這些操作請(qǐng)求的設(shè)備。一個(gè)設(shè)備可能只是一個(gè)啟動(dòng)器設(shè)備,或者只是一個(gè)響應(yīng)端設(shè)備,或者兩者兼?zhèn)洌荒茉谕粋€(gè)設(shè)備連接上同時(shí)擔(dān)任兩種角色。

操作請(qǐng)求只能由啟動(dòng)器設(shè)備發(fā)起;事件被響應(yīng)端設(shè)備用于把有關(guān)它狀態(tài)的改變通知啟動(dòng)器設(shè)備。

1.6.2 會(huì)話(Session)

根據(jù)PTP協(xié)議,會(huì)話被定義為兩個(gè)設(shè)備之間的邏輯連接,操作和事件事務(wù)可以通過(guò)該邏輯連接進(jìn)行通信。根據(jù)PTP規(guī)范,一個(gè)響應(yīng)端設(shè)備可以支持多個(gè)并發(fā)會(huì)話,每個(gè)會(huì)話都有自己的狀態(tài)。

當(dāng)啟動(dòng)器設(shè)備請(qǐng)求OpenSession操作事務(wù)時(shí)將會(huì)打開一個(gè)會(huì)話,并且使用響應(yīng)端設(shè)備發(fā)出的一個(gè)有效響應(yīng)成功結(jié)束該請(qǐng)求。

會(huì)話將在啟動(dòng)器設(shè)備請(qǐng)求CloseSession操作事務(wù)時(shí)被關(guān)閉,并且使用響應(yīng)端設(shè)備發(fā)出的一個(gè)有效響應(yīng)成功結(jié)束該請(qǐng)求。當(dāng)啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備之間的連接被關(guān)斷開時(shí)會(huì)話也會(huì)被關(guān)閉(例如通信超時(shí))。

大多數(shù)操作需要在一個(gè)開放會(huì)話上下文中執(zhí)行。不過(guò),不需要打開會(huì)話就可以通過(guò)GetDeviceInfo操作獲取設(shè)備功能。

支持多會(huì)話的設(shè)備必須能夠使它們彼此保持異步和不透明。

1.6.3 會(huì)話ID(SessionID)

通常,如果使用相同傳輸級(jí)別的通信通道,則會(huì)話ID旨在使響應(yīng)端設(shè)備能夠按適當(dāng)?shù)捻樞蚍职l(fā)來(lái)自不同啟動(dòng)器設(shè)備的請(qǐng)求。對(duì)于打開不同通信通道的傳輸,對(duì)于每個(gè)會(huì)話,不需要重新設(shè)置會(huì)話ID,因?yàn)轫憫?yīng)端設(shè)備將能夠處理多個(gè)會(huì)話。

PTP的PTP- IP傳輸實(shí)現(xiàn)不會(huì)將會(huì)話ID發(fā)送到響應(yīng)端設(shè)備。響應(yīng)端設(shè)備可以通過(guò)控制它允許的最大PTP- IP連接數(shù)來(lái)限制并發(fā)PTP會(huì)話的數(shù)量。

如果啟動(dòng)器設(shè)備的PTP-IP層發(fā)現(xiàn)響應(yīng)端設(shè)備不接受新的PTP-IP連接,它將向PTP層發(fā)送傳輸特定的錯(cuò)誤代碼。在建立傳輸指定連接之后,啟動(dòng)端設(shè)備可以向遠(yuǎn)程響應(yīng)端設(shè)備發(fā)出GetDeviceInfoOpenSession請(qǐng)求。在這個(gè)階段中,響應(yīng)端設(shè)備可能返回一個(gè)設(shè)備繁忙(Device_Busy)的PTP錯(cuò)誤作為對(duì)OpenSession的響應(yīng)(如果響應(yīng)端設(shè)備對(duì)它能夠支持的并發(fā)PTP會(huì)話的數(shù)量有限制)。在這種情況下,啟動(dòng)端設(shè)備應(yīng)該釋放PTP連接,并稍后重試。

1.6.4 事務(wù)(Transactions)

事務(wù)是PTP協(xié)議中操作的基本單位,PTP協(xié)議規(guī)定的所有操作都基于事務(wù)進(jìn)行。事務(wù)操作請(qǐng)求由啟動(dòng)器設(shè)備(Initiator)發(fā)起,傳送到到響應(yīng)端設(shè)備(Responder),在一個(gè)會(huì)話(Session)中,同一時(shí)間只能有一個(gè)事務(wù)操作在執(zhí)行,操作事務(wù)在一個(gè)會(huì)話中默認(rèn)是同步的。

一個(gè)事務(wù)通常由三個(gè)階段組成:Operation RequestOperation Response、Data Phase,如下圖:

取決于事務(wù)操作本身,Data Phase這一可選階段可能不會(huì)存在于一個(gè)事務(wù)流程中,即事務(wù)只有Operation RequestOperation Response。而當(dāng)事務(wù)中存在Data Phase時(shí),數(shù)據(jù)可能從初始化器Initiator發(fā)送到響應(yīng)設(shè)備Responder(即I–>R),或者反過(guò)來(lái)R–>I,但同一個(gè)操作中數(shù)據(jù)只能在一個(gè)方向上傳輸。

1.6.5 事務(wù)ID(TransactionID)

事務(wù)ID(TransactionID)用于在一個(gè)給定的會(huì)話中標(biāo)識(shí)不同事務(wù),與在PTP協(xié)議的第9.3.1項(xiàng)中定義的事務(wù)ID相同,是一個(gè)32位無(wú)符號(hào)整型數(shù)字。事務(wù)ID在給定的會(huì)話中是唯一且連續(xù)的數(shù)字序列,其范圍從0x00000001到0xFFFFFFFE,0x00000000和0xFFFFFFFF作為保留值不被使用。

1.7 與PTP協(xié)議一致性

在PTP標(biāo)準(zhǔn)協(xié)議的7[1]節(jié)中,為底層傳輸層定義了這些需求。

PTP標(biāo)準(zhǔn)協(xié)議 7.1節(jié):斷開事件。PTP協(xié)議的這一節(jié)要求傳輸層必須向上層的報(bào)告設(shè)備斷開。這是通過(guò)PTP-IP 層生成設(shè)備斷開通知來(lái)實(shí)現(xiàn)的。

PTP標(biāo)準(zhǔn)協(xié)議 7.2節(jié):穩(wěn)定、無(wú)錯(cuò)誤通道。PTP協(xié)議的這節(jié)要求需要可靠,無(wú)錯(cuò)誤的通道。在PTP-IP中,這通過(guò)使用配置了Keep Alive選項(xiàng)的TCP連接來(lái)實(shí)現(xiàn)。

PTP標(biāo)準(zhǔn)協(xié)議 7.3節(jié):異步事件的支持。PTP要求支持異步事件,在PTP-IP中,事件連接被定義為用于傳輸異步事件,并且與命令/數(shù)據(jù)通道是異步的。

PTP標(biāo)準(zhǔn)協(xié)議 7.4節(jié):設(shè)備發(fā)現(xiàn)和枚舉。PTP要求支持設(shè)備發(fā)現(xiàn)和枚舉服務(wù),在PTP-IP中,設(shè)備發(fā)現(xiàn)和枚舉使用對(duì)IP網(wǎng)絡(luò)可用的通用解決方案來(lái)實(shí)現(xiàn),可以使用一個(gè)基于設(shè)備發(fā)現(xiàn)協(xié)議[5]的自定義UDP協(xié)議。

PTP標(biāo)準(zhǔn)協(xié)議 7.5節(jié):傳輸特定。PTP要求圖像設(shè)備傳輸?shù)膶?shí)現(xiàn)符合相關(guān)機(jī)構(gòu)發(fā)布的特定使用傳輸規(guī)范。本文檔說(shuō)明了如何使用位于TCP/IP協(xié)議棧上層的PTP-IP傳輸。

2 PTP-IP實(shí)現(xiàn) 2.1 PTP-IP協(xié)議模型

在PTP-IP的實(shí)現(xiàn)中,用戶程序與PTP-IP層之間的通信基于PTP事務(wù)模型實(shí)現(xiàn),參考PTP協(xié)議的9.3[1]節(jié),該通信模型如下圖:

本文檔的目的在于制定和說(shuō)明PTP-IP通信協(xié)議,應(yīng)用程序和PTP-IP層(編程接口,API)之間交互的實(shí)現(xiàn)并不在本文檔的內(nèi)容范圍內(nèi)。本文檔僅以互操作性的方式規(guī)定兩個(gè)PTP-IP實(shí)體之間的通信。不過(guò),PTP層(用戶應(yīng)用程序)和PTP-IP層之間的接口可能由以下基本類型組成:

操作請(qǐng)求(Operation Request)

每當(dāng)進(jìn)行請(qǐng)求操作時(shí),啟動(dòng)器設(shè)備(Initiator)中的應(yīng)用程序就會(huì)發(fā)送一個(gè)操作請(qǐng)求,隨即該請(qǐng)求被響應(yīng)端設(shè)備(Responder)接受。操作請(qǐng)求中通常包含一組與該操作相關(guān)的參數(shù)。

操作響應(yīng)(Operation Responses)

每當(dāng)接收到一個(gè)操作請(qǐng)求,響應(yīng)端設(shè)備(Responder)會(huì)發(fā)送一個(gè)操作響應(yīng)作為該操作請(qǐng)求的回應(yīng)。對(duì)于啟動(dòng)器設(shè)備(Initiator)中應(yīng)用程序發(fā)起的每個(gè)操作請(qǐng)求,都需要回復(fù)一個(gè)操作響應(yīng)。操作響應(yīng)中總是會(huì)包含其對(duì)應(yīng)的操作請(qǐng)求的結(jié)果代碼,并且可能會(huì)包含一組參數(shù)。

數(shù)據(jù)讀入(Data-In)

數(shù)據(jù)讀入(Data-In)是相對(duì)于用于應(yīng)用程序而言的,即數(shù)據(jù)流向是從響應(yīng)端設(shè)備(Responder)到啟動(dòng)器設(shè)備(Initiator)。

數(shù)據(jù)寫出(Data-Out)

數(shù)據(jù)寫出(Data-Out)的數(shù)據(jù)流與數(shù)據(jù)讀入(Data-In)相反。

事件(Events)

PTP-IP中的事件是指有關(guān)響應(yīng)端設(shè)備(Responder)的狀態(tài)變更的通知,事件由響應(yīng)端設(shè)備啟動(dòng)。

設(shè)備連接/斷開(Device Connect/Disconnect)

設(shè)備的連接/斷開是平臺(tái)相關(guān)類型的事件。這兩個(gè)事件并不直接在啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備之間通信,而是當(dāng)檢測(cè)到設(shè)備被連接/斷開時(shí)由各自的PTP-IP層生成。

操作和事件兩種事務(wù)的類型的定義在PTP協(xié)議文檔的10.1112 [1]節(jié)中可以找到,并且PTP協(xié)議在14 [1]節(jié)中為設(shè)備標(biāo)準(zhǔn)的一致性確定了一組操作和事件。

2.2 PTP-IP傳輸模型

PTP標(biāo)準(zhǔn)協(xié)議文檔的7 [1]節(jié)定義了PTP標(biāo)準(zhǔn)傳輸需求,而PTP-IP則是基于使用TCP層作為傳輸層實(shí)現(xiàn):

與PTP一樣,PTP-IP也期望從其傳輸層獲得可靠、穩(wěn)定無(wú)錯(cuò)誤的通信通道,而TCP(位于TCP/IP協(xié)議棧中)正是可以滿足這些需求的自然傳輸層。TCP是一個(gè)基于流的傳輸層,它提供多個(gè)通信通道(TCP Connection)和無(wú)錯(cuò)誤的數(shù)據(jù)傳輸。

在PTP-IP中,兩個(gè)設(shè)備之間的所有通信都通過(guò)兩個(gè)TCP連接(邏輯數(shù)據(jù)通道)進(jìn)行:

由于事件本身具有異步性質(zhì),事件的數(shù)據(jù)包與操作/數(shù)據(jù)事務(wù)數(shù)據(jù)包分開分別通過(guò)兩個(gè)多帶帶的通道傳輸。

2.2.1 命令/數(shù)據(jù)連接(Command/Data TCP Connection)

PTP-IP的 命令/數(shù)據(jù)連接用于傳輸PTP操作請(qǐng)求、響應(yīng)和數(shù)據(jù)事務(wù),以及特定于PTP-IP的數(shù)據(jù)包。該連接由啟動(dòng)器設(shè)備(Initiator)建立,并標(biāo)志本地及響應(yīng)端設(shè)備(Responder)的IP地址和端口號(hào)。響應(yīng)端設(shè)備(Responder)的IP地址和端口號(hào)通常是通過(guò)設(shè)備發(fā)現(xiàn)機(jī)制來(lái)確定。

2.2.2 事件連接(Event TCP Connection)

PTP-IP的事件連接作為啟動(dòng)器設(shè)備(Initiator)開啟的與響應(yīng)端設(shè)備(Responder)之間的第二個(gè)連接,用于傳輸PTP事件,以及特定于PTP-IP的數(shù)據(jù)包。與命令/數(shù)據(jù)連接相同,事件連接由啟動(dòng)器設(shè)備(Initiator)發(fā)起建立, 并標(biāo)志本地和響應(yīng)端設(shè)備(Responder)的IP地址和端口號(hào),響應(yīng)端設(shè)備(Responder)的IP地址和端口號(hào)通常是通過(guò)設(shè)備發(fā)現(xiàn)機(jī)制來(lái)確定。

2.2.3 傳輸通道管理
2.2.3.1 建立PTP-IP連接

在啟動(dòng)器設(shè)備(Initiator)與響應(yīng)端設(shè)備(Responder)之間的通信中,每當(dāng)需要這些傳輸通道時(shí),啟動(dòng)器設(shè)備(Initiator)將負(fù)責(zé)發(fā)起與響應(yīng)端設(shè)備(Responder)的PTP-IP/TCP連接。如前文所述,PTP-IP的傳輸通道使用TCP連接實(shí)現(xiàn):一個(gè)通道用于命令/數(shù)據(jù)傳輸,另一個(gè)則用于事件傳輸。每個(gè)通道都會(huì)標(biāo)志本地以及響應(yīng)端設(shè)備(Responder)IP地址和端口號(hào)。從PTP-IP的通信模型中可以看到,啟動(dòng)器設(shè)備(Initiator)的PTP-IP實(shí)際上是一個(gè)TCP客戶端,對(duì)應(yīng)地響應(yīng)端設(shè)備(Responder)的PTP-IP則是一個(gè)TCP服務(wù)器。響應(yīng)端設(shè)備(Responder)輪詢等待連接請(qǐng)求,并且預(yù)定義(或者動(dòng)態(tài)分配)了一個(gè)TCP連接端口號(hào).PTP-IP服務(wù)端默認(rèn)端口號(hào)為15740。PTP-IP連接建立過(guò)程:

PTP-IP中的TCP連接應(yīng)遵循上圖所示順序進(jìn)行:

啟動(dòng)器設(shè)備(Initiator)發(fā)起命令/數(shù)據(jù)的TCP連接:指定響應(yīng)端設(shè)備(Responder)的IP地址端口號(hào),并連接到響應(yīng)端設(shè)備(Responder);

TCP連接建立成功后,啟動(dòng)器設(shè)備(Initiator)立即發(fā)送一個(gè)Init Command Request包,數(shù)據(jù)包中需要包含啟動(dòng)器設(shè)備(Initiator)的唯一標(biāo)識(shí)(GUID和啟動(dòng)器設(shè)備的用戶友好名稱),例如:

響應(yīng)端設(shè)備(Responder)程序根據(jù)實(shí)際情況,回復(fù)啟動(dòng)器設(shè)備一個(gè)Init Command Ack包以告知啟動(dòng)器設(shè)備請(qǐng)求成功并且可以繼續(xù)進(jìn)行連接;或者回復(fù)Init Fail數(shù)據(jù)包表示請(qǐng)求失敗,以告知啟動(dòng)器設(shè)備請(qǐng)求訪問(wèn)被拒絕,并且斷開命令/數(shù)據(jù)的TCP連接,同時(shí)啟動(dòng)器設(shè)備接收到請(qǐng)求失敗的回應(yīng)后也應(yīng)該斷開相應(yīng)的的命令/數(shù)據(jù)連接。

啟動(dòng)器設(shè)備(Initiator)接收到Init Command Ack包后,繼續(xù)發(fā)起一個(gè)事件的TCP連接:指定響應(yīng)端設(shè)備(Responder)的IP地址端口號(hào),并連接到響應(yīng)端設(shè)備(Responder)。注意該連接與第1步中的連接是區(qū)別開的。

一旦連接建立成功,啟動(dòng)器設(shè)備(Initiator)立即發(fā)送一個(gè)Init Event Request包,數(shù)據(jù)包需要包含第4步驟中接收到的連接號(hào)(Connection Number)。響應(yīng)端設(shè)備(Responder)需要根據(jù)這個(gè)連接號(hào)將命令/數(shù)據(jù)事件兩個(gè)TCP連接關(guān)聯(lián)同一個(gè)PTP-IP連接和同一個(gè)PTP會(huì)話。

與步驟3類似,請(qǐng)求成功則回復(fù)一個(gè)Init Event Ack包,在響應(yīng)端設(shè)備(Responder)資源不足時(shí),回復(fù)Init Fail包告知啟動(dòng)端請(qǐng)求失敗。

一旦啟動(dòng)器設(shè)備(Initiator)接收到步驟6中回傳的Init Event Ack包則認(rèn)為請(qǐng)求成功,此時(shí)PTP-IP連接真正建立完成,接著即可進(jìn)行進(jìn)一步的數(shù)據(jù)通信。

在第二個(gè)TCP連接(事件連接)建立失敗的情況下,第一個(gè)TCP連接(命令/數(shù)據(jù)連接)需要被關(guān)閉,稍后啟動(dòng)器設(shè)備(Initiator)應(yīng)再次嘗試建立PTP-IP連接。建議每次創(chuàng)建PTP-IP連接的時(shí)間間隔為30s。

2.2.3.2 傳輸通道配置

根據(jù)PTP協(xié)議7 [1]節(jié),PTP-IP層要求傳輸通道可靠、無(wú)錯(cuò)誤。這種傳輸通道可以通過(guò)正確配置TCP連接來(lái)實(shí)現(xiàn)。

PTP-IP的TCP連接應(yīng)該使用一下選項(xiàng)創(chuàng)建:

Keep Alive 選項(xiàng):?jiǎn)?dòng)器和響應(yīng)端需要同時(shí)需要同時(shí)開啟這個(gè)選項(xiàng),以確保兩端的TCP實(shí)體在非活躍時(shí)期能夠維持連接。開啟這個(gè)選項(xiàng)后,啟動(dòng)器和響應(yīng)端各自的TCP棧會(huì)通過(guò)TCP協(xié)議特定的方式來(lái)檢查所配對(duì)的設(shè)備是否仍舊能夠響應(yīng)。這種檢查方式是在TCP層進(jìn)行,對(duì)上層的PTP-IP來(lái)說(shuō)是透明的。

禁用Nagle算法:需要在啟動(dòng)器和響應(yīng)端程序的TCP/IP協(xié)議棧上禁用Nagle算法,以避免在傳輸命令代碼和響應(yīng)時(shí)出現(xiàn)不必要的延遲。

總的來(lái)說(shuō)就是需要設(shè)置如下選項(xiàng)(Qt為例):

// 禁用Nable算法
mTcpSocket->setSocketOption(QAbstractSocket::SocketOption::LowDelayOption,1);
// 開啟Keep Alive選項(xiàng)
mTcpSocket->setSocketOption(QAbstractSocket::SocketOption::KeepAliveOption,1);
2.2.3.3 關(guān)閉PTP-IP連接

當(dāng)不再需要PTP-IP時(shí),由啟動(dòng)器設(shè)備(Initiator)關(guān)閉連接。當(dāng)啟動(dòng)器設(shè)備(Initiator)或者響應(yīng)端設(shè)備(Responder)在打開的傳輸通道上發(fā)生錯(cuò)誤而導(dǎo)致這些通道不穩(wěn)定時(shí),也應(yīng)關(guān)閉PTP-IP連接。關(guān)閉PTP-IP連接時(shí)兩個(gè)TCP連接(命令/數(shù)據(jù)連接和事件連接)都必須要關(guān)閉。

2.3 傳輸?shù)臄?shù)據(jù)包類型

本節(jié)主要介紹用于在啟動(dòng)器設(shè)備(Initiator)和響應(yīng)端設(shè)備(Responder)間通信的一組數(shù)據(jù)包類型。PTP-IP的數(shù)據(jù)包類型相當(dāng)于PTP協(xié)議中定義的操作請(qǐng)求(Operation Request)響應(yīng)(Response)、數(shù)據(jù)(Data)事件(Event)事務(wù)類型。PTP-IP數(shù)據(jù)包中的所有多字節(jié)值都使用小端(Little-Endian)格式表示,通常一個(gè)PTP-IP數(shù)據(jù)包的格式如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Payload 根據(jù)Length計(jì)算 ?

長(zhǎng)度(Length)4字節(jié),長(zhǎng)度參數(shù)決定了包含包頭在內(nèi)的整個(gè)數(shù)據(jù)包的大小;

包類型(Packet Type)4字節(jié),該字段標(biāo)志了數(shù)據(jù)包的類型,該參數(shù)有下列可選的值:0x0000NNNN*表示隱藏值。

Value Description
0x00000000 保留值
0x0000NNNN* Init Command Request Packet
0x0000NNNN* Init Command Ack
0x0000NNNN* Init Event Request Packet
0x0000NNNN* Init Event Ack Packet
0x0000NNNN* Init Fail Packet
0x0000NNNN* Operaqion Request Packet
0x0000NNNN* Operation Response Packet
0x0000NNNN* Event Packet
0x0000NNNN* Start Data Packet
0x0000NNNN* Data Packet
0x0000NNNN* Cancel Packet
0x0000NNNN* End Data Packet
0x0000NNNN* Probe Request Packet
0x0000NNNN* Probe Response Packet
0x0000NNNN* - 0xFFFFFFFF 保留值

負(fù)載(Payload):包含協(xié)議更上層的或者是傳輸特定的數(shù)據(jù)。

2.3.1 Init Command Request Packet

該數(shù)據(jù)包在命令/數(shù)據(jù)傳輸通道被建立后立即被啟動(dòng)器設(shè)備(Initiator)發(fā)送。該數(shù)據(jù)包通過(guò)命令/數(shù)據(jù)連接傳輸,用于通知響應(yīng)端設(shè)備(Responder)對(duì)啟動(dòng)器進(jìn)行標(biāo)識(shí),從而使響應(yīng)端設(shè)備(Responder)能夠?qū)崿F(xiàn)過(guò)濾機(jī)制。數(shù)據(jù)包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Initiator GUID 16 UINT8
Initiator Friendly Name Variable UINT16
Initiator Protocol Version 4 UINT32

Initiator GUID16字節(jié),啟動(dòng)器設(shè)備的全局唯一標(biāo)識(shí)符;

Initiator Friendly Name:?jiǎn)?dòng)器設(shè)備的用戶友好名稱,該字段是一個(gè)包含啟動(dòng)器設(shè)備描述信息的Unicode字符串,該字串通常用于響應(yīng)端設(shè)備的UI顯示上(以確認(rèn)或拒絕來(lái)自給定啟動(dòng)器設(shè)備的連接請(qǐng)求);

Initiator Protocol Version4字節(jié),啟動(dòng)器設(shè)備端實(shí)現(xiàn)的協(xié)議版本號(hào)。該字段由一個(gè)主版本號(hào)(高16位)和一個(gè)子版本號(hào)(低16位)組成。該字段應(yīng)該被設(shè)置成第3節(jié)中定義的BINARY PROTOCOL VERSION

啟動(dòng)器設(shè)備的GUID和響應(yīng)端設(shè)備的GUID可用于進(jìn)行設(shè)備綁定。若啟動(dòng)器設(shè)備的GUID的16個(gè)字節(jié)全由0xFF組成,則表示該啟動(dòng)器設(shè)備是一個(gè)匿名設(shè)備,此時(shí)由響應(yīng)端設(shè)備決定是否允許連接。更多信息參考附錄5.3

啟動(dòng)器設(shè)備的用戶友好名稱是一個(gè)以空(NULL)字符結(jié)尾的Unicode字符串。包括結(jié)尾的空字符,其最大長(zhǎng)度位40個(gè)字節(jié)。不使用該字段時(shí),必須使用一個(gè)空(NULL)字符填充該字段。

數(shù)據(jù)包示例:

對(duì)應(yīng)地:

30 00 00 00:第0~3字節(jié)表示Length字段

01 00 00 00:第4~7字節(jié)表示Packet Type字段

fc 47 f8 4e 30 97 ee 64 1c 26 38 ae b0 1a 9e ac:第8~23字節(jié)表示Initiator GUID字段

44 00 53 00 43 00 2d 00 52 00 58 00 30 00 4d 00 32 00 00 00:第24~(Length-4-4-16-4-1)字節(jié)表示Initiator Friendly Name字段

00 00 01 00:最后4字節(jié)表示Initiator Protocol Version字段。

2.3.2 Init Command ACK Packet

該數(shù)據(jù)包由響應(yīng)端設(shè)備(Responder)回傳給啟動(dòng)器設(shè)備,以響應(yīng)啟動(dòng)器設(shè)備發(fā)送的Init Command Request Packet,并為接下來(lái)的PTP-IP會(huì)話分配一個(gè)連接號(hào)(Connection Number),該數(shù)據(jù)包在命令/數(shù)據(jù)連接上傳輸。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Connection Number 4 UINT32
Responder GUID 16 UINT6
Responder Friendly Name Variable UINT16
Responder Protocol Version 4 UINT32

Connection Number連接號(hào),是響應(yīng)端設(shè)備生成的用于關(guān)聯(lián)所有屬于同一個(gè)PTP會(huì)話的TCP連接通道的唯一值

Responder GUID:響應(yīng)端設(shè)備的GUID。

Responder Friendly Name:響應(yīng)端設(shè)備的用戶友好名稱,可用于啟動(dòng)器設(shè)備端的UI顯示。

Responder Protocol Version:響應(yīng)端設(shè)備實(shí)現(xiàn)的協(xié)議版本號(hào)。該字段由一個(gè)主版本號(hào)(高16位)和一個(gè)子版本號(hào)(低16位)組成。該字段應(yīng)該被設(shè)置成第3節(jié)中定義的BINARY PROTOCOL VERSION。

響應(yīng)端設(shè)備的用戶友好名稱是一個(gè)以空(NULL)字符結(jié)尾的Unicode字符串。包括結(jié)尾的空字符,其最大長(zhǎng)度位40個(gè)字節(jié)。不使用該字段時(shí),必須使用一個(gè)空(NULL)字符填充該字段。

連接號(hào)在啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備連接被建立的期間保持有效。一旦響應(yīng)端設(shè)備成功關(guān)聯(lián)屬于同一個(gè)PTP-IP連接的兩個(gè)TCP連接,連接號(hào)即可被重新使用。

實(shí)際該數(shù)據(jù)包結(jié)構(gòu)看起來(lái)如下:

對(duì)應(yīng)地:

34 00 00 00:第0~3字節(jié)表示Length字段

02 00 00 00:第4~7字節(jié)表示Packet Type字段

01 00 00 00:第8~11字節(jié)表示Connection Number字段

00 00 00 00 00 00 00 00 ff ff 10 98 c3 d1 5f 45:第12~27字節(jié)表示Responder GUID字段

44 00 53 00 43 00 2d 00 52 00 58 00 30 00 4d 00 32 00 00 00:第28~(Length-4-4-4-16-4-1)字節(jié)表示Responder Friendly Name字段

00 00 01 00:最后4字節(jié)表示Responder Protocol Version字段。

2.3.3 Init Event Request Packet

命令/數(shù)據(jù)連接被成功建立后,該數(shù)據(jù)包被啟動(dòng)器設(shè)備發(fā)送至響應(yīng)端設(shè)備用于建立事件連接。啟動(dòng)器設(shè)備在接收到一個(gè)有效的Init Command Ack Packet數(shù)據(jù)包后,立即建立事件的TCP連接并發(fā)送Init Event Request Packet數(shù)據(jù)包,包中攜帶的連接號(hào)即前面步驟中接收到的在Init Command Ack數(shù)據(jù)包中返回的連接號(hào)。Init Event Request數(shù)據(jù)包通過(guò)事件連接傳輸。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Connection Number 4 UINT32

Connection Number連接號(hào),從Init Command Ack Packet包數(shù)據(jù)中獲得。

數(shù)據(jù)包示例:

對(duì)應(yīng)地:

0c 00 00 00:第0~3字節(jié)表示Length字段

03 00 00 00:第4~7字節(jié)表示Packet Type字段

01 00 00 00:第8~11字節(jié)表示Connection Number字段

2.3.4 Init Event ACK Packet

該數(shù)據(jù)包由響應(yīng)端設(shè)備(Responder)通過(guò)事件連接通道回傳給啟動(dòng)器設(shè)備,以告知啟動(dòng)器設(shè)備PTP-IP連接建立成功。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32

數(shù)據(jù)包示例:

對(duì)應(yīng)地:

08 00 00 00:第0~3字節(jié)表示Length字段

04 00 00 00:第4~7字節(jié)表示Packet Type字段

2.3.5 Init Fail Packet

初始化失敗數(shù)據(jù)包。當(dāng)PTP-IP連接建立失敗時(shí),該數(shù)據(jù)包由響應(yīng)端設(shè)備(Responder)回傳給啟動(dòng)器設(shè)備,以告知啟動(dòng)器設(shè)備連接建立失敗及失敗原因,失敗原因被記錄在Reason字段。接收到該數(shù)據(jù)包之后,啟動(dòng)器設(shè)備必須關(guān)閉先前步驟中建立的命令/數(shù)據(jù)連接。該數(shù)據(jù)包發(fā)出后,響應(yīng)端設(shè)備亦應(yīng)關(guān)閉相應(yīng)的PTP-IP連接(由啟動(dòng)器設(shè)備發(fā)起的被拒絕的TCP連接)。Init Fail Packet可以通過(guò)任意的TCP連接傳輸。更多有關(guān)PTP-IP連接的建立可以參考PTP-IP連接一節(jié)內(nèi)容。

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Reason 4 UINT32

Reason字段包含了連接拒絕的錯(cuò)誤碼,該字段定義的錯(cuò)誤碼有以下幾種:

0x0000NNNN*FAIL_REJECTED_INITIATOR,表示響應(yīng)端設(shè)備實(shí)現(xiàn)了一個(gè)設(shè)備綁定的機(jī)制,但請(qǐng)求連接的啟動(dòng)器設(shè)備不在允許的設(shè)備集合內(nèi)。參考附錄5.3了解綁定機(jī)制詳情。

0x0000NNNN*FAIL_BUSY,表示響應(yīng)端設(shè)備繁忙:響應(yīng)端設(shè)備的活動(dòng)連接數(shù)過(guò)多。啟動(dòng)器設(shè)備可以稍后再嘗試連接。

0x0000NNNN*FAIL_UNSPECIFIED,其他原因。

2.3.6 Operation Request Packet

操作請(qǐng)求數(shù)據(jù)包。該數(shù)據(jù)包在PTP-IP協(xié)議中用于傳輸在PTP標(biāo)準(zhǔn)協(xié)議9.3.2 [1]節(jié)定義的PTP操作請(qǐng)求。PTP-IP Operation Request Packet由啟動(dòng)器設(shè)備發(fā)送至響應(yīng)端設(shè)備,并通過(guò)命令/數(shù)據(jù)通道傳輸。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Data Phase Info 4 UINT32
Operation Code 2 UINT16
TransactionID 4 UINT32
Parameter1 4 UINT32
Parameter2 4 UINT32
Parameter3 4 UINT32
Parameter4 4 UINT32
Parameter5 4 UINT32

Data Phase Info:指示下一個(gè)數(shù)據(jù)階段是數(shù)據(jù)寫(data out)階段還是數(shù)據(jù)讀/數(shù)據(jù)(data in/no)階段,該字段值被定義為下列幾種:

0x0000NNNN*:無(wú)數(shù)據(jù)或數(shù)據(jù)讀(data in/no)階段:?jiǎn)?dòng)器設(shè)備不知道響應(yīng)端設(shè)備是否會(huì)提供一些數(shù)據(jù)或者提供一個(gè)響應(yīng);

0x0000NNNN*:數(shù)據(jù)寫(data out)階段

0x0000NNNN*:未知的數(shù)據(jù)階段

Operation Code操作碼,包含定義在PTP標(biāo)準(zhǔn)協(xié)議第10.2和10.3 [1]節(jié)的PTP操作碼。

TransactionID事務(wù)ID,它在當(dāng)前連接的響應(yīng)端設(shè)備的開放會(huì)話上下文中是唯一的,如PTP第9.3.1 [1]節(jié)中定義。TransactionID是一個(gè)從0x00000000到0xFFFFFFFF的連續(xù)數(shù)值。0x00000000作為特殊的值,只能被用于OpenSessionGetDeviceInfo兩個(gè)操作請(qǐng)求,每次當(dāng)此參數(shù)不適用于包時(shí),必須使用另一個(gè)特殊值0xFFFFFFFF。

Parameter 1~5:這些字段包含特定于操作的參數(shù),這些參數(shù)的解釋取決于操作碼(Operation Code)參數(shù),一個(gè)操作最多可以容納5個(gè)參數(shù)。這些參數(shù)的使用方式定義在PTP標(biāo)準(zhǔn)協(xié)議的10.1和10.4 [1]節(jié)。

如果Data Phase Info字段被設(shè)置為Data Out Phase,則在發(fā)送該數(shù)據(jù)包后接著必須要發(fā)送一個(gè)Start Data Packet包。

如果啟動(dòng)器設(shè)備需要發(fā)送空數(shù)據(jù)對(duì)象到響應(yīng)端設(shè)備,有兩個(gè)選項(xiàng)可選:1.Data Phase Info字段設(shè)置為No data or data in phase,在這情況下響應(yīng)端設(shè)備將會(huì)直接回應(yīng)一個(gè)Operation Response Packet包,而不會(huì)等待Data Packet;2.Data Phase Info字段設(shè)置為Data out Phase.在這種情況下,數(shù)據(jù)寫階段(data out phase)必須只包含一個(gè)Start Data Packet包,并將該包的Total Data Length字段設(shè)置為0x00000000,并且啟動(dòng)器設(shè)備必須不能發(fā)送后續(xù)的End Data Packet數(shù)據(jù)包。

實(shí)際該數(shù)據(jù)包結(jié)構(gòu)如下:

對(duì)應(yīng)地:

16 00 00 00:第0~3字節(jié)表示Length字段

06 00 00 00:第4~7字節(jié)表示Packet Type字段

02 00 00 00:第8~11字節(jié)表示Data Phase Info字段

05 92:第12~13字節(jié)為Operation Code字段

06 00 00 00:第14~17字節(jié)為Transaction ID字段

0e 50 00 00:第18~21字節(jié)為Parameter 1字段

2.3.7 Operation Response Packet

操作響應(yīng)數(shù)據(jù)包。該數(shù)據(jù)包在PTP-IP協(xié)議中用于傳輸在PTP標(biāo)準(zhǔn)協(xié)議9.3.4 [1]節(jié)定義的PTP操作響應(yīng)。PTP-IP Operation Response Packet數(shù)據(jù)包由響應(yīng)端設(shè)備通過(guò)命令/數(shù)據(jù)通道回應(yīng)給啟動(dòng)器設(shè)備。操作響應(yīng)數(shù)據(jù)包僅在需要指示操作請(qǐng)求事務(wù)已經(jīng)結(jié)束并且需要傳遞操作結(jié)果時(shí)才由響應(yīng)端設(shè)備發(fā)送給啟動(dòng)器設(shè)備。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Response Code 2 UINT16
TransactionID 4 UINT32
Parameter1 4 UINT32
Parameter2 4 UINT32
Parameter3 4 UINT32
Parameter4 4 UINT32
Parameter5 4 UINT32

Response Code響應(yīng)碼,包含定義在PTP標(biāo)準(zhǔn)協(xié)議第11.1和11.3 [1]節(jié)的操作響應(yīng)碼。

TransactionID事務(wù)ID,它在連接到響應(yīng)端設(shè)備的開放會(huì)話上下文中是唯一的,如PTP第9.3.1[11]節(jié)中定義。TransactionID是一個(gè)從0x00000001到0xFFFFFFFE的連續(xù)數(shù)值。0x00000000作為特殊的值,只能被用于OpenSessionGetDeviceInfo兩個(gè)操作請(qǐng)求,每次當(dāng)此參數(shù)不適用于包時(shí),必須使用另一個(gè)特殊值0xFFFFFFFF。

Parameter 1~5:這些字段包含特定于操作的參數(shù),這些參數(shù)的解釋取決于生成響應(yīng)的操作以及特定的響應(yīng)代碼值。一個(gè)操作響應(yīng)的數(shù)據(jù)包最多可以容納5個(gè)參數(shù)。這些參數(shù)的使用方式定義在PTP標(biāo)準(zhǔn)協(xié)議的9.3.4 [1]節(jié)。

實(shí)際該數(shù)據(jù)包結(jié)構(gòu)如下:

對(duì)應(yīng)地:

0e 00 00 00:第0~3字節(jié)表示Length字段

07 00 00 00:第4~7字節(jié)表示Packet Type字段

01 20:第8~9字節(jié)表示Response Code字段

05 00 00 00:第10~13字節(jié)為Transaction ID字段

2.3.8 Event Packet

事件數(shù)據(jù)包。該數(shù)據(jù)包用于傳輸在PTP標(biāo)準(zhǔn)協(xié)議12.2 [1]節(jié)中定義的事件。這些事件由響應(yīng)端設(shè)備通過(guò)事件連接通道發(fā)送給啟動(dòng)器設(shè)備,以通知啟動(dòng)器設(shè)備響應(yīng)端的狀態(tài)變更。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
Event Code 2 UINT16
TransactionID 4 UINT32
Parameter1 4 UINT32
Parameter2 4 UINT32
Parameter3 4 UINT32

Event Code事件碼,包含定義在PTP標(biāo)準(zhǔn)協(xié)議第12.3和12.4 [1]節(jié)的事件碼。

TransactionID事務(wù)ID,它在當(dāng)前連接到響應(yīng)端設(shè)備的開放會(huì)話上下文中是唯一的,其定義在PTP標(biāo)準(zhǔn)協(xié)議的9.3.1 [1]節(jié)。如果事件數(shù)據(jù)包對(duì)應(yīng)于先前發(fā)起的事務(wù),則該字段應(yīng)該被設(shè)為操作所對(duì)應(yīng)的事務(wù)ID。如果事件沒有指定于特定的事務(wù),則該字段應(yīng)設(shè)為0xFFFFFFFF

Parameter 1~3:這些字段包含特定于事件的參數(shù)。這些參數(shù)的解釋卻決于事件碼(Event Code)字段。一個(gè)Event Packet數(shù)據(jù)包最多能容納3個(gè)參數(shù),有關(guān)這些參數(shù)的使用說(shuō)明定義在PTP標(biāo)準(zhǔn)協(xié)議的12.5 [1]節(jié)。

2.3.9 Start Data Packet

開始數(shù)據(jù)傳輸數(shù)據(jù)包。該數(shù)據(jù)包在PTP-IP中用于標(biāo)識(shí)數(shù)據(jù)傳輸?shù)拈_始。其通過(guò)命令/數(shù)據(jù)通道傳輸,可以由任意一設(shè)備端發(fā)送,另一端接收。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
TransactionID 4 UINT32
Total Data Length 8 UINT64

Total Data Length:包含即將在數(shù)據(jù)讀(data in)階段或數(shù)據(jù)寫(data out)階段中被傳輸?shù)臄?shù)據(jù)大小。特定的值0xFFFFFFFFFFFFFFFF表示在數(shù)據(jù)階段的開始并不知道數(shù)據(jù)的大小,該值的使用僅限于傳輸對(duì)象的大小未知的情況(例如:傳輸流數(shù)據(jù))。

數(shù)據(jù)包示例:

其中:

14 00 00 00:第0~3字節(jié)表示Length字段

09 00 00 00:第4~7字節(jié)表示Packet Type字段

01 00 00 00:第8~11字節(jié)表示Transaction ID字段

08 00 00 00 00 00 00 00:第12~19字節(jié)為Total Data Length字段

2.3.10 Data Packet

該數(shù)據(jù)包在PTP-IP中用于傳輸數(shù)據(jù)。Data Packet包只在數(shù)據(jù)階段使用,且可以由當(dāng)前數(shù)據(jù)流方向上的任意一端發(fā)送,另一端接收:在數(shù)據(jù)讀(data-in)階段由響應(yīng)端設(shè)備發(fā)送給啟動(dòng)器設(shè)備;在數(shù)據(jù)寫(data-out)階段由啟動(dòng)器設(shè)備發(fā)送給響應(yīng)端設(shè)備。Data Packet數(shù)據(jù)包走的是命令/數(shù)據(jù)的連接通道。

由于TCP傳輸是無(wú)錯(cuò)誤、基于流的協(xié)議,通常不需要對(duì)大型的數(shù)據(jù)包進(jìn)行拆包和粘包操作。不過(guò)可以使用基本的碎片機(jī)制來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)傳輸取消機(jī)制,Data Packet不需要進(jìn)行錯(cuò)誤校驗(yàn)。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
TransactionID 4 UINT32
Data Payload ? UINT8

Data Payload:包含數(shù)據(jù)包中需要傳輸?shù)臄?shù)據(jù)。

數(shù)據(jù)包示例:

其中:

14 00 00 00:第0~3字節(jié)表示Length字段

0a 00 00 00:第4~7字節(jié)表示Packet Type字段

01 00 00 00:第8~11字節(jié)表示Transaction ID字段

00 00 00 00 00 00 00 00 0c 00 00 00 0c 00 00 00 01 00 00 00 0e 00 00 00 07 00 00 00 01 20 01 00 00 00:第12~N字節(jié)為Data Payload字段。

2.3.11 End Data Packet

終結(jié)數(shù)據(jù)傳輸的數(shù)據(jù)包。End Data Packet數(shù)據(jù)包在PTP-IP中用于標(biāo)識(shí)數(shù)據(jù)階段的結(jié)束,該數(shù)據(jù)包中也可以攜帶一些有用數(shù)據(jù)。該數(shù)據(jù)包只在一個(gè)事務(wù)的數(shù)據(jù)階段使用,可以由數(shù)據(jù)流方向上的任意一端發(fā)送,另一端接收:在數(shù)據(jù)讀(data-in)階段由響應(yīng)端設(shè)備發(fā)送給啟動(dòng)器設(shè)備;在數(shù)據(jù)寫(data-out)階段由啟動(dòng)器設(shè)備發(fā)送給響應(yīng)端設(shè)備。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
TransactionID 4 UINT32
Data Payload ? UINT8

Data Payload:如果數(shù)據(jù)包中包含有數(shù)據(jù)則放在這個(gè)字段。

數(shù)據(jù)包示例:

其中:

10 00 00 00:第0~3字節(jié)表示Length字段

0c 00 00 00:第4~7字節(jié)表示Packet Type字段

06 00 00 00:第8~11字節(jié)表示Transaction ID字段

02 00 01 00:第12~(Length-4-4-4)字節(jié)為Data Payload字段。

2.3.12 Cancel Packet

Cancel Packet數(shù)據(jù)包用于取消傳輸事務(wù),由啟動(dòng)器設(shè)備發(fā)送至響應(yīng)端設(shè)備。該數(shù)據(jù)包在命令/數(shù)據(jù)連接通道和事件連接通道上發(fā)送。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32
TransactionID 4 UINT32
2.3.13 Probe Request Packet

心跳包。該數(shù)據(jù)包可用于PTP-IP的啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備,以檢查對(duì)等設(shè)備是否仍然有效。當(dāng)接收到該數(shù)據(jù)包時(shí),設(shè)備必須立即響應(yīng)一個(gè)Probe Response Packet數(shù)據(jù)包。如果在一段合理的時(shí)間內(nèi)沒有收到響應(yīng),則發(fā)出該數(shù)據(jù)包的設(shè)備將關(guān)閉與對(duì)端設(shè)備的PTP-IP會(huì)話。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32

數(shù)據(jù)包示例:

其中前、后四個(gè)字節(jié)分別為L(zhǎng)ength字段和Packet Type字段。

使用該數(shù)據(jù)包時(shí)應(yīng)要注意控制發(fā)送的頻率以避免造成局域網(wǎng)過(guò)載:

啟動(dòng)器設(shè)備發(fā)送至響應(yīng)端設(shè)備(I–>R):建議這個(gè)包只在PTP事務(wù)中使用(例如,當(dāng)發(fā)出格式命令時(shí),如果存儲(chǔ)介質(zhì)很大,響應(yīng)時(shí)間可能會(huì)很長(zhǎng)),以便檢查響應(yīng)端設(shè)備是否仍然處于活躍狀態(tài)。

響應(yīng)端設(shè)備發(fā)送至啟動(dòng)器設(shè)備(R–>I):建議僅當(dāng)響應(yīng)端設(shè)備接收到一個(gè)新的PTP-IP會(huì)話的請(qǐng)求,而另一個(gè)或多個(gè)其他會(huì)話處于活動(dòng)狀態(tài)時(shí),才使用此包。在這種情況下,響應(yīng)端設(shè)備可以檢查現(xiàn)有的PTP-IP連接是否仍然處于活動(dòng)狀態(tài)。

建議在發(fā)送Probe Request Packet數(shù)據(jù)包和接收Probe Response Packet包之間設(shè)置10秒的超時(shí)時(shí)間。

2.3.14 Probe Response Packet

心跳包的回應(yīng)數(shù)據(jù)包。該數(shù)據(jù)包可用于PTP-IP的啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備,作為另一端的Probe Request Packet請(qǐng)求的響應(yīng)。當(dāng)接收到一個(gè)Probe Request Packet請(qǐng)求時(shí)應(yīng)當(dāng)立即回復(fù)這個(gè)數(shù)據(jù)包。

包結(jié)構(gòu)如下:

Field Size[Bytes] Data Type
Length 4 UINT32
Packet Type 4 UINT32

數(shù)據(jù)包示例:

其中前、后四個(gè)字節(jié)分別為L(zhǎng)ength字段和Packet Type字段。

2.4 會(huì)話的實(shí)現(xiàn)

由啟動(dòng)器設(shè)備在PTP層發(fā)起的新會(huì)話請(qǐng)求將生成兩個(gè)新的TCP連接,這兩個(gè)連接即對(duì)應(yīng)于PTP-IP層的命令/數(shù)據(jù)(Command/Data)連接和事件(Event)連接。這兩個(gè)TCP連接足夠用來(lái)唯一標(biāo)識(shí)其所屬的會(huì)話,因此不需要將會(huì)話ID(SessionID)作為獨(dú)立的值從啟動(dòng)器設(shè)備發(fā)送到響應(yīng)端設(shè)備。

2.5 設(shè)備斷開和網(wǎng)絡(luò)丟失處理

在PTP-IP協(xié)議中,對(duì)設(shè)備的斷開或者網(wǎng)絡(luò)丟失的檢測(cè)基于以下一些標(biāo)準(zhǔn):

網(wǎng)絡(luò)層通知應(yīng)用程序有關(guān)網(wǎng)絡(luò)連接斷開(例如媒體斷開連接)的功能。

任意一個(gè)PTP-IP連接通道丟失(命令/數(shù)據(jù)通道或事件通道),例如socket被破壞。

任意一個(gè)PTP-IP通道傳輸超時(shí)。

2.6 數(shù)據(jù)流控制

為了防止一個(gè)設(shè)備在事務(wù)的數(shù)據(jù)階段用數(shù)據(jù)重載另一個(gè)設(shè)備,通常會(huì)實(shí)現(xiàn)一個(gè)數(shù)據(jù)流控制機(jī)制。不過(guò)在PTP-IP中不需要實(shí)現(xiàn)這樣的機(jī)制,因?yàn)榈讓拥腡CP層會(huì)執(zhí)行流控制操作。

TCP層在兩個(gè)級(jí)別實(shí)現(xiàn)流控制:接收設(shè)備網(wǎng)絡(luò),避免在低速接收和低速網(wǎng)絡(luò)下數(shù)據(jù)泛濫。因此,在PTP-IP中采用TCP連接作為通信通道,直接解決了流量控制的問(wèn)題。

2.7 事務(wù)取消機(jī)制

有兩種可能取消事務(wù)的情況:?jiǎn)?dòng)器設(shè)備請(qǐng)求取消或者響應(yīng)端設(shè)備請(qǐng)求取消。

2.7.1 啟動(dòng)器設(shè)備產(chǎn)生的取消
2.7.1.1 數(shù)據(jù)寫階段

啟動(dòng)器設(shè)備為了取消正在進(jìn)行的數(shù)據(jù)寫階段傳輸,必須在命令/數(shù)據(jù)通道和事件通道上發(fā)出一個(gè)Cancel Packet數(shù)據(jù)包,并停止任何正在命令/數(shù)據(jù)通道上的數(shù)據(jù)傳輸。當(dāng)響應(yīng)端設(shè)備在命令/數(shù)據(jù)通道或事件通道上收到Cancel Packet數(shù)據(jù)包時(shí),必須盡可能快地中斷并取消正在進(jìn)行的事務(wù),同時(shí)讀取和丟棄所有屬于當(dāng)前事務(wù)(如果有)的剩余的數(shù)據(jù)包,并且向啟動(dòng)器設(shè)備回應(yīng)一個(gè)附帶有Transaction_Cancelled響應(yīng)碼的Operation Response Packet數(shù)據(jù)包。

2.7.1.2 數(shù)據(jù)讀階段

啟動(dòng)器設(shè)備為了取消正在進(jìn)行的數(shù)據(jù)讀階段傳輸,必須在命令/數(shù)據(jù)通道和事件通道上發(fā)出一個(gè)Cancel Packet數(shù)據(jù)包。響應(yīng)端設(shè)備在命令/數(shù)據(jù)通道或事件通道上收到Cancel Packet數(shù)據(jù)包時(shí),必須盡可能快地中斷并取消正在進(jìn)行的事務(wù),并且向啟動(dòng)器設(shè)備回應(yīng)一個(gè)附帶有Transaction_Cancelled響應(yīng)碼的Operation Response Packet數(shù)據(jù)包。

2.7.1.3 其他事務(wù)階段

啟動(dòng)器設(shè)備可以通過(guò)在命令/數(shù)據(jù)通道和事件通道上發(fā)出一個(gè)Cancel Packet數(shù)據(jù)包以在事務(wù)的任意階段退出事務(wù)。如果取消的是當(dāng)前的事務(wù),則響應(yīng)端設(shè)備必須回應(yīng)一個(gè)附帶有Transaction_Cancelled響應(yīng)碼的Operation Response Packet數(shù)據(jù)包。

2.7.2 響應(yīng)端設(shè)備產(chǎn)生的退出
2.7.2.1 數(shù)據(jù)寫階段

響應(yīng)端設(shè)備為了取消正在進(jìn)行的數(shù)據(jù)寫階段傳輸,必須發(fā)送一個(gè)附帶有Transaction_Cancelled或者其他標(biāo)識(shí)數(shù)據(jù)傳輸中斷原因的響應(yīng)碼的Operation Response Packet數(shù)據(jù)包。然后,響應(yīng)端設(shè)備必須讀取和丟棄所有屬于當(dāng)前事務(wù)的在命令/數(shù)據(jù)通道中的Data Packet數(shù)據(jù)包。

2.7.2.2 數(shù)據(jù)讀階段

響應(yīng)端設(shè)備為了取消正在進(jìn)行的數(shù)據(jù)讀階段傳輸,必須在命令/數(shù)據(jù)通道上發(fā)送一個(gè)Operation Response Packet數(shù)據(jù)包,并且附帶Transaction_Cancelled響應(yīng)碼或其他標(biāo)識(shí)數(shù)據(jù)傳輸中斷原因的響應(yīng)碼。

2.7.2.3 其他事務(wù)階段

響應(yīng)端設(shè)備可以通過(guò)發(fā)送附帶Transaction_Cancelled響應(yīng)碼或其他標(biāo)識(shí)數(shù)據(jù)傳輸中斷原因的響應(yīng)碼的Operation Response Packet以在事務(wù)的任意階段退出事務(wù)。

2.7.3 異步操作退出機(jī)制

啟動(dòng)器設(shè)備為了取消一個(gè)異步操作,必須同時(shí)在命令/數(shù)據(jù)通道和事件通道發(fā)送一個(gè)包含該異步操作所屬的事務(wù)ID的Cancel Packet數(shù)據(jù)包,啟動(dòng)器設(shè)備可以在任意時(shí)候發(fā)送這些數(shù)據(jù)包。

響應(yīng)端設(shè)備將以PTP事件(例如Capture Complete event)結(jié)束操作。解釋取消請(qǐng)求的邏輯由響應(yīng)端設(shè)備的應(yīng)用層負(fù)責(zé)。

3 協(xié)議版本

該P(yáng)TP-IP規(guī)范的二進(jìn)制協(xié)議版本(BINARY PROTOCOL VERSION)是0x00010000(1.0版)。二進(jìn)制協(xié)議版本由一個(gè)主要數(shù)字(高16位表示)和一個(gè)次要數(shù)字(低16位表示)組成。這個(gè)數(shù)字將增加,以表示較新的協(xié)議版本,方法如下:

次要版本進(jìn)行了增加,以反映協(xié)議規(guī)范中的次要更改。實(shí)現(xiàn)新次要版本的設(shè)備必須完全支持同一主要版本的所有次要版本。

主要版本增加了,以反映協(xié)議規(guī)范中的主要更改。新協(xié)議規(guī)范可能與主號(hào)碼較小的舊規(guī)范版本不兼容。

4 PTP-IP端口

如果沒有實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)協(xié)議,則每一個(gè)響應(yīng)端設(shè)備和啟動(dòng)器設(shè)備應(yīng)該通過(guò)以下端口號(hào)來(lái)初始化:

Port Name Port No. Type Description
PTP-IP service 15740 TCP 響應(yīng)端設(shè)備等待TCP連接的默認(rèn)端口,該端口由IANA批準(zhǔn)。
5 附錄 5.1 地址配置

PTP-IP協(xié)議的基礎(chǔ)是TCP/IP協(xié)議,該協(xié)議的關(guān)鍵是尋址機(jī)制。響應(yīng)端設(shè)備和啟動(dòng)端程序都將獲得有效的IP地址。獲取有效IP地址的方法有以下幾種:

手動(dòng)配置: IP地址和其他網(wǎng)絡(luò)屬性由用戶手動(dòng)配置,以反映圖像設(shè)備將在其中工作的局域網(wǎng)的拓?fù)浣Y(jié)構(gòu)和地址模式;

基于DHCP配置:圖像設(shè)備應(yīng)實(shí)現(xiàn)一個(gè)DHCP客戶端,DHCP客戶端將自動(dòng)從網(wǎng)絡(luò)中的DHCP服務(wù)器獲取IP地址。

IPv4鏈路本地地址(v4LL)的動(dòng)態(tài)配置:一個(gè)描述了一種在TCP/IP局域網(wǎng)上自動(dòng)自配置網(wǎng)絡(luò)設(shè)備的機(jī)制,而無(wú)需設(shè)置DHCP服務(wù)器的標(biāo)準(zhǔn)。

為了處理設(shè)備的TCP/IP屬性配置,建議執(zhí)行以下步驟:

如果屬性是手動(dòng)配置的,則使用該配置;

否則設(shè)備應(yīng)使用DHCP協(xié)議獲取IP地址以及其他配置參數(shù)(設(shè)備需要實(shí)現(xiàn)一個(gè)DHCP客戶端);

如果網(wǎng)絡(luò)中沒有DHCP服務(wù)器,則可以部署v4LL動(dòng)態(tài)配置。

5.2 設(shè)備發(fā)現(xiàn)和枚舉

在PTP-IP中,啟動(dòng)器設(shè)備可以通過(guò)以下幾種方式配置連接到響應(yīng)端設(shè)備的地址:

手動(dòng)配置:?jiǎn)?dòng)器設(shè)備將手動(dòng)配置它可以連接的響應(yīng)端設(shè)備的一個(gè)或一組地址。啟動(dòng)器設(shè)備會(huì)嘗試根據(jù)IP地址建立一個(gè)PTP-IP連接,如果連接成功則說(shuō)明響應(yīng)端設(shè)備存在,此時(shí)可以建立一個(gè)PTP會(huì)話。

Zeroconf:一族提供自動(dòng)配置、設(shè)備和服務(wù)發(fā)現(xiàn)的協(xié)議和建議,在IETF Zeroconf Working Group.[4]中發(fā)表。

UPnP:一組發(fā)表在UPnP Forum[3]用于簡(jiǎn)化設(shè)備配置、服務(wù)發(fā)現(xiàn)和調(diào)用的協(xié)議。僅可以使用該協(xié)議的設(shè)備和服務(wù)發(fā)現(xiàn)功能。

其他設(shè)備發(fā)現(xiàn)機(jī)制。

PTP規(guī)范第7.4條要求從其傳輸中支持設(shè)備發(fā)現(xiàn)和枚舉。因此,PTP-IP 層應(yīng)該至少實(shí)現(xiàn)以上這些服務(wù)中的一種。

不管使用什么服務(wù)發(fā)現(xiàn)和枚舉,我們建議將設(shè)備的GUID作為廣播包的一部分,這樣啟動(dòng)端設(shè)備就能夠過(guò)濾(如果需要的話)特定的設(shè)備,并生成選擇性通知。

5.3 設(shè)備綁定和認(rèn)證

認(rèn)證并不是PTP-IP層的職責(zé)。如果需要身份驗(yàn)證,則應(yīng)該依賴于底層網(wǎng)絡(luò)(物理/數(shù)據(jù)鏈路層)中可用的解決方案。設(shè)備綁定可以依賴于底層網(wǎng)絡(luò)可用的機(jī)制或者基于PTP-IP層提供的機(jī)制在應(yīng)用層實(shí)現(xiàn),如下:

PTP-IP上下文中每一個(gè)設(shè)備都需要由一個(gè)可被用于設(shè)備綁定的全局唯一的標(biāo)識(shí):GUID(16字節(jié)的唯一數(shù)字)。對(duì)于這些設(shè)備,PTP-IP層提供了一個(gè)允許啟動(dòng)器設(shè)備和響應(yīng)端設(shè)備互相交換GUID的機(jī)制。這進(jìn)而允許應(yīng)用層實(shí)現(xiàn)設(shè)備級(jí)訪問(wèn)控制(例如,一個(gè)新設(shè)備到達(dá)并被網(wǎng)絡(luò)發(fā)現(xiàn),該設(shè)備只能接受來(lái)自已知啟動(dòng)器設(shè)備的的選擇性連接,或者只能啟動(dòng)到已知響應(yīng)端設(shè)備的連接)。

無(wú)論使用什么服務(wù)發(fā)現(xiàn)和枚舉方法,都建議將設(shè)備的GUID作為廣播包的一部分,這樣啟動(dòng)端設(shè)備就能夠過(guò)濾(如果需要的話)特定的設(shè)備,并生成選擇性通知。

5.4 數(shù)據(jù)安全

本節(jié)不屬于PTP-IP協(xié)議的范圍。數(shù)據(jù)安全將依賴于底層網(wǎng)絡(luò)(物理/數(shù)據(jù)鏈路層)中可用的解決方案。

5.5 The End :)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75759.html

相關(guān)文章

  • WebSocket 協(xié)議 RFC 文檔(全中文翻譯)

    摘要:概述經(jīng)過(guò)半年的搗鼓,終于將協(xié)議全篇翻譯完成?,F(xiàn)在將所有章節(jié)全部整理到一篇文章中,方便大家閱讀。如果大家想看具體的翻譯文檔,可以去我的中查看。大家有相關(guān)類型的需要,建議大家可以嘗試下。 概述 經(jīng)過(guò)半年的搗鼓,終于將 WebSocket 協(xié)議(RFC6455)全篇翻譯完成?,F(xiàn)在將所有章節(jié)全部整理到一篇文章中,方便大家閱讀。如果大家想看具體的翻譯文檔,可以去我的GitHub中查看。 具體章節(jié)...

    ghnor 評(píng)論0 收藏0
  • HTTP 學(xué)習(xí)-踩坑記_06

    摘要:無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。允許請(qǐng)求服務(wù)器回顯其收到的請(qǐng)求信息,該方法主要用于請(qǐng)求的測(cè)試或診斷。服務(wù)器成功處理了部分請(qǐng)求狀態(tài)碼狀態(tài)碼英文名稱中文描述多種選擇。所請(qǐng)求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源。 HTTP 學(xué)習(xí) HTTP簡(jiǎn)介 HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬(wàn)維網(wǎng)(WWW:Wor...

    Ashin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<