劉艷萍,司賽騰,趙連環
(1. 河北工業大學 信息工程學院,天津 300401;2.唐山世佳電子有限公司 河北 唐山 063020)
隨著近些年來網絡的普遍化,嵌入式設備的網絡接入已經成為主流趨勢。嵌入式設備的網絡化與串口通信技術相比,它是一種低成本、高性能的使用方案。同時也為測量與儀器技術帶來了前所未有的發展空間和機遇,網絡化測量技術與具備網絡功能的新型儀器應運而生。 LwIP的出現,讓嵌入式產品在互聯網通信方面的使用更方便。現在的網絡通信過程中,除了個別場所使用的是靜態的IP地址,大部分的IP地址都是使用DHCP協議來取得的。主機的網絡連接有兩種情況,一是網絡直接連接主機,進行地址映射的可能性比較小;另外,主機處于內部私網,能夠使公網的IP地址映射到內部的私網地址。PCP協議是在LwIP協議棧的基礎上,提出動態的地址映射,使操作更加方便。
LwIP 協議棧[1]是瑞士計算機學院(SICS)的 Adam Dunkels開發的一套用于嵌入式系統的開放性 TCP/IP 協議棧。它們占用大約20k 大小的 RAM 和 60k 左右的 ROM 的空間 ,很適合 與 μC/OS-II 操作系統相配合使用。 最新的LwIP 版本到了1.4.1,這個實現了較為完備的 IP、ICMP、IGMP、UDP、TCP、DHCP、DNS、PPPOE 等協議[2]。

圖1 LwIP 協議棧協議Fig. 1 LwIP stack protocol
對于不同的協議進行不同的分層,圖1中給出了LwIP 協議棧所包含的協議,其中的DHCP和DNS協議包含在應用層的對應的UDP的應用協議中,其他的各種應用進程是根據用戶的據圖需要,傳輸層和網絡層所顯示的是LwIP協議棧的各種協議,網絡接口層的網絡接口用來實現數據傳輸。
各層之間的協議,為了實現兼容協議標準,實現互聯網的接入,需要嚴格的遵循協議模型,不過,由于LwIP 協議棧是面向各種嵌入式設備的,為了減少內存的消耗,采用靈活的數據包存儲機制,發送和接收的數據在各層協議之間不需要拷貝。
PCP是端口控制協議[3],是新提出的一種端口映射協議,它在原有的端口映射協議的基礎上提出了兼容IPv6、第三方控制等新功能。原有的端口映射協議主要實現的是IPv4的地址協議之間的相互映射。為了IPv6協議的推廣,PCP協議就隨之出現。PCP既可以實現IPv4協議之間的映射和IPv6協議之間的映射,又能完成IPv6協議[4]和IPv4協議之間的映射。
PCP是一種標準的應用層協議,使用UDP的 5350 和5351端口號以請求、應答的方式來實現。如圖2所示,給出了PCP 協議的網絡OSI模型。PCP服務器端使用的端口號是 5350,而客戶端的端口號是 5351,這里分開的原因主要是UDP的端口號 5350 用于服務器端對端口的監聽,而UDP的端口號 5351 則用于客戶端對端口的監聽。一個網絡設備通常既需要作為某些設備的服務器,同時它又是某個設備的客戶端,對于某些操作系統來說,不能夠使用一個端口來實現這種通信方式,為了使通信變得更加簡單,應用的更加廣泛才做出這種不同端口的設置[5]。PCP協議的提出,能夠在原有私有IP地址和公有的IP地址映射的基礎上,擴大了映射的可操作性。

圖2 PCP 協議的OSI模型Fig. 2 PCP protocol OSI model
PCP協議的提出是為了實現公網IP地址與私網IP地址之間的映射,能夠更好的對私網設備進行通訊。PCP協議的實現是基于UDP協議的通訊協議,發送請求報文到對應的服務器端,以請求、響應的方式進行。對于PCP操作存在兩種操作方式,一是使用MAP映射操作;二是使用PEER映射操作。為了能夠保證連接的順利傳輸,就需要同時建立MAP和PEER協議。PCP協議的運用遵循普遍的服務器、客戶端模型。不同的映射操作,所對應的服務器和客戶端不同。
當數據通過路由器或者防火墻,由外部網絡向內部網絡傳輸的時候,MAP映射需要被建立。如圖3給出了數據從外部網絡經過中間的網絡隔離器傳輸到內部主機的過程。

圖3 私網主機的數據包輸入Fig. 3 Private network host packet input
由于外網的公網地址的地址簇類型不能夠確定或者外部網絡不能夠穿越防火墻,所以路由器或者防火墻就需要一個指向內部主機的映射。映射建立需要以下步驟:
1) 中間的網絡隔離器,需要創建一個MAP請求,然后發送給內部主機。2) 內部主機接收響應,檢查是否是正確的請求數據包,給出對應響應。3) 路由器或者防火墻收到發送的響應后,檢查響應包,記錄映射,完成MAP映射的創建。
在MAP映射創建過程中,當收到錯誤代碼的響應包時,根據不同情況來處理;當接受不到響應包時,根據規則對請求包重發。
MAP映射成功建立后,當數據包從外部網絡傳輸路由器或者防火墻時,我們對其進行數據包的更改,然后發送給內部主機,內網和外網之間可以是不同的地址協議。
當數據通過路由器或者防火墻,由內部網絡向外部網絡傳輸的時候,PEER映射需要被建立。它用來完成地址的映射。如圖4,給出了數據從內部主機經過中間的網絡隔離器傳輸到外部網絡的過程。

圖4 私網主機的數據包輸出Fig. 4 Private network host packet output
由于內部網絡的IP地址不能夠傳輸到公網上,所以路由器或者防火墻就需要一個由內部主機指向網絡路由器的公網IP的地址映射。映射建立需要以下步驟:
1)內部主機需要創建一個PEER請求,然后發送給路由器或者防火墻。2)路由器或者防火墻接收響應,檢查是否是正確的請求數據包,給出對應響應。3)內部主機接收到發送的響應后,檢查響應包,記錄映射,完成PEER映射的創建。
對于PEER映射的建立,同MAP映射的建立相類似,不同的是,一個是由內部主機到中間的網絡隔離器的映射,一個是中間的網絡隔離器到內部的映射。
PCP協議包括MAP映射和PEER映射,數據從外部公網與內部主機完成通信,這兩個映射都需要創建。上邊給出的常見的做法,除此之外,映射在創建過程中,均可以由第三方來發起。
PREFER_FAILURE選項只能使用在MAP操作碼,用來表明如果建議的外部端口和地址不能被映射的話,PCP服務器不應創建一個可選的映射。
FILTER這個選項只使用于MAP操作碼,對于無線設備通常用性能優化,這不必專門為了不想要的流量而喚醒。由于所有使用PCP去接收輸入連接的軟件的情況,可能直接連接到網絡和接收不受限的輸入TCP連接和UDP數據包。
所有的PCP服務器對每個MAP映射操作至少需要一個過濾器,用于控制和處理通信過程中數據傳輸。
當發生突變問題時,就會發生丟失了它的映射狀態。這就需要考慮映射的恢復,正常的映射建立需要幾個小時的時間,為了縮短時間提出了一種快速恢復機制。通過服務器端發送廣播數據包。
一個NAT網關重啟時,一般采用的是DHCP協議,就會引起外部IP的變化,就需要采用一個映射更新數據包,用于建立新的映射連接。
PCP映射的刪除,主要是由于服務器端響應的數據包中的所分配的時間到期了,如果不進行重新的映射建立,就需要刪除該映射。
對于MAP映射的操作,有這幾種情況:1)請求數據包的端口號和協議號都不為0,請求的時間是0,這時立即刪除對應映射。2)請求數據包的端口號和協議都為0,請求的時間是0,這時表示應該刪除所有的映射。3)請求數據包的端口號為0,協議號不為0,請求的時間是0,表示所有的有映射的端口號都需要刪除;反之,是錯誤情況,應該返回錯誤代碼。
如果發送的刪除數據包是為了刪除一個靜態的映射,這樣就會返回一個沒有操作權限的錯誤數據包;當請求的刪除映射已經不存在時,返回操作成功的響應包;如果設備允許第三方操作,就可以利用由第三方來刪除相應的映射。
隨著網絡從最初的ARPAnet網絡[6]到現在全球范圍內的互聯網。為了適應通信系統,網絡協議變的越來越復雜。從最初單一的點對點的通信通信方式,變的更加的多樣化。最初IPv4地址的要枯竭的時候,提出了IPv6協議,然而由于網絡協議更新所帶來的巨大的設備更新,于是為了在不用更換設備的前提下,暫時提出了一種DHCP的動態地址分配協議和私網地址的使用。為了能夠使用公網和私網的通信,NAT協議就出現了。雖說做出這些變化,依然不能夠改變IPv6協議的更新換代,這樣就會存在一個IPv4和IPv6地址協議共存的特殊時期,所以實現協議的兼容是非常重要,PCP協議的應用在未來一段時間內是很重要的。
[1]Dunkels A. Design and implementation of the lwIP TCP/IP stack[J]. Swedish Institute of Computer Science ,2001:5-15
[2]Stevens W R. TCP/ IP詳解卷1:協議[M] .范建華,等譯.北京:機械工業出版社 ,2007.
[3]D W Ed, Cheshire S. IETF RFC6887: Port Control Protocol[EB/OL] .www.ietf.org/rfc/rfc6887.txt April 2013.
[4]Deering S,Hinden R. IETF RFC2460: Internet Protocol,Version6[EB/OL] .www.ietf.org/rfc/rfc2460.txt 1998 .
[5]Cheshire S, Krochmal M. IETF RFC6886: NAT Port Mapping Protocol[EB/OL] . www.ietf.org/rfc/rfc6886.txt 2013.
[6]Roberts L.The arpanet and computer networks[J].HPW'86 Proceedings of the ACM Conference on The history of personal workstations 1986:51-57.