基于LwIP协议栈的PCP协议的设计
2014-01-16刘艳萍司赛腾赵连环
刘艳萍,司赛腾,赵连环
(1. 河北工业大学 信息工程学院,天津 300401;2.唐山世佳电子有限公司 河北 唐山 063020)
随着近些年来网络的普遍化,嵌入式设备的网络接入已经成为主流趋势。嵌入式设备的网络化与串口通信技术相比,它是一种低成本、高性能的使用方案。同时也为测量与仪器技术带来了前所未有的发展空间和机遇,网络化测量技术与具备网络功能的新型仪器应运而生。 LwIP的出现,让嵌入式产品在互联网通信方面的使用更方便。现在的网络通信过程中,除了个别场所使用的是静态的IP地址,大部分的IP地址都是使用DHCP协议来取得的。主机的网络连接有两种情况,一是网络直接连接主机,进行地址映射的可能性比较小;另外,主机处于内部私网,能够使公网的IP地址映射到内部的私网地址。PCP协议是在LwIP协议栈的基础上,提出动态的地址映射,使操作更加方便。
1 Lw IP协议栈简介
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 协议栈是面向各种嵌入式设备的,为了减少内存的消耗,采用灵活的数据包存储机制,发送和接收的数据在各层协议之间不需要拷贝。
2 PCP协议简介
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
3 Lw IP协议栈的PCP协议设计
PCP协议的提出是为了实现公网IP地址与私网IP地址之间的映射,能够更好的对私网设备进行通讯。PCP协议的实现是基于UDP协议的通讯协议,发送请求报文到对应的服务器端,以请求、响应的方式进行。对于PCP操作存在两种操作方式,一是使用MAP映射操作;二是使用PEER映射操作。为了能够保证连接的顺利传输,就需要同时建立MAP和PEER协议。PCP协议的运用遵循普遍的服务器、客户端模型。不同的映射操作,所对应的服务器和客户端不同。
3.1 MAP映射的建立
当数据通过路由器或者防火墙,由外部网络向内部网络传输的时候,MAP映射需要被建立。如图3给出了数据从外部网络经过中间的网络隔离器传输到内部主机的过程。
图3 私网主机的数据包输入Fig. 3 Private network host packet input
由于外网的公网地址的地址簇类型不能够确定或者外部网络不能够穿越防火墙,所以路由器或者防火墙就需要一个指向内部主机的映射。映射建立需要以下步骤:
1) 中间的网络隔离器,需要创建一个MAP请求,然后发送给内部主机。2) 内部主机接收响应,检查是否是正确的请求数据包,给出对应响应。3) 路由器或者防火墙收到发送的响应后,检查响应包,记录映射,完成MAP映射的创建。
在MAP映射创建过程中,当收到错误代码的响应包时,根据不同情况来处理;当接受不到响应包时,根据规则对请求包重发。
MAP映射成功建立后,当数据包从外部网络传输路由器或者防火墙时,我们对其进行数据包的更改,然后发送给内部主机,内网和外网之间可以是不同的地址协议。
3.2 PEER映射的建立
当数据通过路由器或者防火墙,由内部网络向外部网络传输的时候,PEER映射需要被建立。它用来完成地址的映射。如图4,给出了数据从内部主机经过中间的网络隔离器传输到外部网络的过程。
图4 私网主机的数据包输出Fig. 4 Private network host packet output
由于内部网络的IP地址不能够传输到公网上,所以路由器或者防火墙就需要一个由内部主机指向网络路由器的公网IP的地址映射。映射建立需要以下步骤:
1)内部主机需要创建一个PEER请求,然后发送给路由器或者防火墙。2)路由器或者防火墙接收响应,检查是否是正确的请求数据包,给出对应响应。3)内部主机接收到发送的响应后,检查响应包,记录映射,完成PEER映射的创建。
对于PEER映射的建立,同MAP映射的建立相类似,不同的是,一个是由内部主机到中间的网络隔离器的映射,一个是中间的网络隔离器到内部的映射。
3.3 MAP映射和PEER映射的操作码选项
PCP协议包括MAP映射和PEER映射,数据从外部公网与内部主机完成通信,这两个映射都需要创建。上边给出的常见的做法,除此之外,映射在创建过程中,均可以由第三方来发起。
PREFER_FAILURE选项只能使用在MAP操作码,用来表明如果建议的外部端口和地址不能被映射的话,PCP服务器不应创建一个可选的映射。
FILTER这个选项只使用于MAP操作码,对于无线设备通常用性能优化,这不必专门为了不想要的流量而唤醒。由于所有使用PCP去接收输入连接的软件的情况,可能直接连接到网络和接收不受限的输入TCP连接和UDP数据包。
所有的PCP服务器对每个MAP映射操作至少需要一个过滤器,用于控制和处理通信过程中数据传输。
3.4 PCP 安全问题
当发生突变问题时,就会发生丢失了它的映射状态。这就需要考虑映射的恢复,正常的映射建立需要几个小时的时间,为了缩短时间提出了一种快速恢复机制。通过服务器端发送广播数据包。
一个NAT网关重启时,一般采用的是DHCP协议,就会引起外部IP的变化,就需要采用一个映射更新数据包,用于建立新的映射连接。
3.5 PCP映射的删除
PCP映射的删除,主要是由于服务器端响应的数据包中的所分配的时间到期了,如果不进行重新的映射建立,就需要删除该映射。
对于MAP映射的操作,有这几种情况:1)请求数据包的端口号和协议号都不为0,请求的时间是0,这时立即删除对应映射。2)请求数据包的端口号和协议都为0,请求的时间是0,这时表示应该删除所有的映射。3)请求数据包的端口号为0,协议号不为0,请求的时间是0,表示所有的有映射的端口号都需要删除;反之,是错误情况,应该返回错误代码。
如果发送的删除数据包是为了删除一个静态的映射,这样就会返回一个没有操作权限的错误数据包;当请求的删除映射已经不存在时,返回操作成功的响应包;如果设备允许第三方操作,就可以利用由第三方来删除相应的映射。
4 结束语
随着网络从最初的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.