一种实现从指定端口发送数据报类型报文的方法

文档序号:7907291阅读:464来源:国知局
专利名称:一种实现从指定端口发送数据报类型报文的方法
技术领域
本发明涉及数据报类型报文的发送技术,更确切地说是涉及一种实现从指定端口发送数据报类型报文的方法。
背景技术
在路由器、三层交换机等网络设备中,应用程序常常需要发送各种数据报类型的报文,该数据报类型可以是用户数据报协议(UDP,User DatagramProtocol)规定的有报文边界的数据报文,也可以是原始IP(RAWIP)规定的原始套接口的数据报文。当应用程序在发送该类数据报文时,往往直接调用套接口(SOCKET)的发送函数send或sendto,然后由IP根据目的地址查找路由,得到发送报文的出端口,并根据该出端口将报文发送出去。
由于通过IP查找路由需要一些时间,因此采用这种方法发送报文会降低发送报文的效率,并且应用程序往往并不希望通过查找路由得到发送报文的出端口,其原因可能是应用程序由于某种特殊原因而需要将报文通过一个固定端口发送出去,因此希望能够指定发送该报文的端口;或者是该应用程序基于某种协议,通过该协议可以知道网络拓扑结构,因此希望能够根据网络拓扑结构直接指定发送报文的出端口,所基于的协议可以是Internet组管理协议(IGMP,Internet Group Management Protocol)、路由协议、标签分发协议(LDP,Label distribution Protocol)或动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)中继等。
在现有的路由器解决方案中,提出了使路由器中的应用程序能够根据实际需要,指定数据报类型报文的出接口来发送报文的实现方法,该实现方法是在SOCKET选项中添加用于指定发送报文接口的选项SO_SENDDATAIF,将所指定的用于发送当前数据报类型报文的接口的索引通过该选项存入SOCKET结构中。由于路由器的接口所对应的端口往往就是真实的物理端口,因此通过该选项指定的某个接口的索引可以获得它所对应的物理端口的索引,然后传输层通过获得的物理端口索引将报文从该物理端口发送出去。
但在实际应用中,有的路由器具有主从端口,并且三层交换机等设备支持虚拟局域网(VLAN),一个VLAN接口可能会包含多个端口,如果这类一个接口对应多个端口的设备也通过上述方法发送报文,则需要将所发报文向该接口对应的所有端口进行广播发送,这种广播发送报文的方法会导致报文被复制,浪费了网络带宽,并使不应该收到该报文的端口也接收到该报文,降低了网络的安全性,使网络更容易受到攻击。
因此,目前业界所提出的根据实际需要从指定端口发送数据报类型报文的解决办法只适用于接口与物理端口一一对应的路由器,而对如何使一个接口对应多个端口的路由器、三层交换机等设备也实现从指定端口发送数据报类型报文,并没有提出合适的方法。

发明内容
有鉴于此,本发明的主要目的在于提供一种实现从指定端口发送数据报类型报文的方法,使一个VLAN接口对应多个端口的设备中的数据报类型报文能够被快速地从指定的端口发送出去。
为达到以上目的,本发明的方案是这样实现的一种实现从指定端口发送数据报类型报文的方法,适用于一个虚拟局域网(VLAN)接口对应多个端口的网络设备,该网络设备中的应用程序创建套接口(SOCKET)结构,其特征在于该方法包括以下步骤a.在套接口定义(SOCKET_S)中设置用于标识指定发送数据报类型报文端口索引的参数;b.判断是否需要从指定端口发送数据报类型报文,如果需要,则应用程序在SOCKET结构中设置保存步骤a所述参数的SOCKET选项及对应的标识,否则,不作处理;c.所述网络设备的网络层输出函数在发送数据报类型报文时,判断是否有SOCKET选项的标识,如果有,则获取该要发送数据报类型报文的指定发送端口索引,并将该要发送数据报类型报文从所获取的指定发送端口发送出去,否则,通过该报文的目的IP地址查找路由方式获得该数据报类型报文的发送端口索引,并将该数据报类型报文从所获取的发送端口发送出去。
所述步骤b进一步包括,在SOCKET结构中设置SOCKET选项及对应的标识后,传输层的输出处理函数将SOCKET结构中与该数据报类型报文对应的SOCKET选项中的指定发送端口索引填入存储器缓存(MBUF)的发送索引字段中。
该方法可以进一步包括,将步骤a所述指定发送端口索引的参数设置为四个字节,并设定其中的低两个字节保存该指定发送端口所属VLAN接口的VLAN ID,高两个字节保存该指定发送端口的端口索引。
该方法还可以进一步包括,设置一个用于标识所有端口的端口索引参考值,所述步骤c获取该要发送数据报类型报文的指定发送端口索引后,判断SOCKET选项中的端口索引值是否等于该端口索引参考值,如果等于,则网络层输出函数将该要发送的数据报类型报文从该指定发送端口索引中VLAN接口的所有端口发送出去;否则,从该端口索引对应的端口发送出去。
所述的端口索引参考值设置为0xFFFF0000。
本发明中的数据报类型报文可以是UDP规定的有报文边界的数据报文,则所述传输层的输出处理函数为UDP的输出处理函数。
本发明中的数据报类型报文还可以是RAW IP规定的原始套接口的数据报文,则所述传输层的输出处理函数为RAWIP的输出处理函数。
本发明方法还可以进一步包括,设置不需要从指定端口发送的指定发送端口索引参考值,则所述步骤c在网络层输出函数获取指定发送端口索引值后,判断该指定发送端口索引值是否等于该指定发送端口索引参考值,如果等于,则网络层输出函数根据该报文的目的IP地址查找路由获得发送端口,将报文从该端口发送出去;否则,根据指定的端口发送报文。
所述的指定发送端口索引参考值设置为0。
所述应用程序为路由协议、LDP、IGMP或DHCP中继的应用程序。
本发明方法通过在标准的SOCKET_S中添加用于标识数据报类型发送端口的结构体,并设置与结构体对应的SOCKET选项,在发送SOCKET中的数据报类型报文时,将该数据报类型报文的端口索引通过SOCKET选项保存在SOCKET结构及MBUF中,IP的输出函数从MBUF中获取端口索引,并将该数据报类型报文从该端口发送出去,通过这种方法使路由协议、LDP协议、IGMP及DHCP中继等应用程序不需要通过IP查找路由,而是直接将数据报类型报文从指定端口发送出去,这种发送报文的方法加快了报文发送的速度,减少了网络广播报文的流量,使网络带宽能够得到更有效的利用,并能够提高网络的安全性。


图1为本发明中实现从指定端口发送数据报类型报文的流程图。
具体实施例方式
下面结合附图及具体实施例对本发明方法作进一步详细的说明。
本发明的核心思想是在SOCKET_S中增加一个用于标识数据报类型报文发送端口索引的参数,该参数由端口索引和该端口所属的VLAN ID组成,该参数中的信息设置在与参数对应的SOCKET选项中,并通过TCP/IP协议逐层发送下去。这里的数据报类型报文是指UDP规定的有报文边界,或RAWIP规定的原始套接口的报文。
基于上述思想,以支持VLAN的三层交换机为例,本实施例可以通过图1所示过程实现三层交换机中的应用程序从指定端口发送数据报类型的报文,具体实施步骤如下a.在SOCKET_S中增加用于标识数据报类型报文相关信息的参数SENDDATAPORT_S,在该参数中设置变量ulIfIndex,该变量保存所指定的报文发送端口的端口索引和该端口所属的VLAN ID,将ulIfIndex设置为四个字节,低两个字节用于保存该报文发送端口所属的VLAN ID,高两个字节用于保存应用程序所指定的报文发送端口的端口索引,通过该端口索引可以唯一地标识VLAN中的一个端口,并且为了能够通过VLAN中所有的端口发送该报文,需要设置一个用于标识所有端口的索引参考值,比如将该索引参考值设置为0xFFFF0000。
b.应用程序在发送SOCKET中的数据报类型报文时,如果需要从指定的端口发送当前数据报类型报文,该指定端口可以是由网络拓扑结构决定,也可以是应用程序根据某种特殊需要选定,则应用程序在发送每个数据报类型的报文时,都通过标准的应用程序编程接口函数(SOCKET API)setsockopt设置与SENDDATAPORT_S对应的SO_SENDDATAPORT选项及对应的标识,将该数据报类型报文对应SENDDATAPORT_S中的报文发送端口的端口索引和该端口所属的VLAN ID设置在这个选项中,并将该选项保存在创建好的SOCKET结构中。
如果有某个数据报类型报文希望通过现有的IP查找路由的方法发送,而不通过指定端口发送,则可以设置一个端口索引和VLAN ID的参考值来标识这种通过IP查找路由发送的方式,本实施例将该端口索引和VLAN ID的参考值设置为0。
c.传输层中RAWIP或UDP的输出处理函数将该数据报类型的报文封装成MBUF时,将SOCKET结构中保存的指定发送该数据报类型报文端口的端口索引和VLAN ID填入MBUF中的发送索引字段中。
d.应用程序在调用网络层的输出函数时,通过传输层的输出函数将所设置的SO_SENDDATAPORT选项的标识传给网络层的输出函数。e.网络层的输出函数在发送SOCKET中的报文时,判断是否发现该报文对应的SO_SENDDATAPORT选项的标识,如果没有发现该标识,则根据报文的目的IP地址查找路由获得发送端口;如果发现该标识,则直接从MBUF的发送索引字段中找到发送该数据报类型报文的端口索引和VLAN ID信息,判断该VLAN ID与端口索引是否为0,如果为0,则说明需要通过报文的目的IP地址查找路由的方式来获得发送该报文的端口;如果不为0,则根据这两个信息将数据报文直接传给对应的端口。对于端口索引而言,如果端口索引信息是0xFFFF0000,则采用广播发送,否则,从这个端口索引信息所指的端口将该数据报类型报文单独发送出去。
本发明方法通过设置SOCKET选项使路由协议、LDP协议、IGMP及DHCP中继等应用程序不需要通过IP查找路由,而是直接将数据报类型报文从指定端口发送出去,这种发送报文的方法加快了报文发送的速度,减少了网络广播报文的流量,使网络带宽能够得到更有效的利用,并提高了网络的安全性。
权利要求
1.一种实现从指定端口发送数据报类型报文的方法,适用于一个虚拟局域网(VLAN)接口对应多个端口的网络设备,该网络设备中的应用程序创建套接口(SOCKET)结构,其特征在于该方法包括以下步骤a.在套接口定义(SOCKET_S)中设置用于标识指定发送数据报类型报文端口索引的参数;b.判断是否需要从指定端口发送数据报类型报文,如果需要,则应用程序在SOCKET结构中设置保存步骤a所述参数的SOCKET选项及对应的标识,否则,不作处理;c.所述网络设备的网络层输出函数在发送数据报类型报文时,判断是否有SOCKET选项的标识,如果有,则获取该要发送数据报类型报文的指定发送端口索引,并将该要发送数据报类型报文从所获取的指定发送端口发送出去,否则,通过该报文的目的IP地址查找路由方式获得该数据报类型报文的发送端口索引,并将该数据报类型报文从所获取的发送端口发送出去。
2.根据权利要求1所述的方法,其特征在于所述步骤b进一步包括,在SOCKET结构中设置SOCKET选项及对应的标识后,传输层的输出处理函数将SOCKET结构中与该数据报类型报文对应的SOCKET选项中的指定发送端口索引填入存储器缓存(MBUF)的发送索引字段中。
3.根据权利要求1所述的方法,其特征在于该方法进一步包括,将步骤a所述指定发送端口索引的参数设置为四个字节,并设定其中的低两个字节保存该指定发送端口所属VLAN接口的VLAN ID,高两个字节保存该指定发送端口的端口索引。
4.根据权利要求3所述的方法,其特征在于该方法进一步包括,设置一个用于标识所有端口的端口索引参考值,所述步骤c获取该要发送数据报类型报文的指定发送端口索引后,判断SOCKET选项中的端口索引值是否等于该端口索引参考值,如果等于,则网络层输出函数将该要发送的数据报类型报文从该指定发送端口索引中VLAN接口的所有端口发送出去;否则,从该端口索引对应的端口发送出去。
5.根据权利要求4所述的方法,其特征在于,所述的端口索引参考值设置为0xFFFF0000。
6.根据权利要求1所述的方法,其特征在于,所述数据报类型报文是用户数据报协议(UDP)规定的有报文边界的数据报文,则所述传输层的输出处理函数为UDP的输出处理函数。
7.根据权利要求1所述的方法,其特征在于,所述数据报类型报文是原始IP(RAW IP)规定的原始套接口的数据报文,则所述传输层的输出处理函数为RAW IP的输出处理函数。
8.根据权利要求1所述的方法,其特征在于该方法进一步包括,设置不需要从指定端口发送的指定发送端口索引参考值,则所述步骤c在网络层输出函数获取指定发送端口索引值后,判断该指定发送端口索引值是否等于该指定发送端口索引参考值,如果等于,则网络层输出函数根据该报文的目的IP地址查找路由获得发送端口,将报文从该端口发送出去;否则,根据指定的端口发送报文。
9.根据权利要求8所述的方法,其特征在于,所述的指定发送端口索引参考值设置为0。
10.根据权利要求1所述的方法,其特征在于,所述应用程序为路由协议、标签分发协议(LDP)、Internet组管理协议(IGMP)或动态主机配置协议(DHCP)中继的应用程序。
全文摘要
本发明公开了适用于一个虚拟局域网(VLAN)接口对应多个端口的网络设备中的一种实现从指定端口发送数据报类型报文的方法,该方法通过在套接口定义(SOCKET_S)中设置用于标识指定发送数据报类型报文端口索引的参数,并设置与参数对应的SOCKET选项,在发送数据报类型报文时,将对应端口索引保存在SOCKET结构及存储器缓存(MBUF)中,网络层的输出函数从MBUF中获取端口索引,并将该报文从对应端口发送出去。该方法使路由协议、标签分发协议(LDP)及Internet组管理协议(IGMP)等应用程序能够直接将数据报类型报文从指定端口发送出去,这种发送报文的方法加快了报文发送的速度,减少了网络广播报文的流量,使网络带宽能够得到更有效的利用,并能够提高网络的安全性。
文档编号H04L12/28GK1540932SQ0312202
公开日2004年10月27日 申请日期2003年4月22日 优先权日2003年4月22日
发明者于勇, 于 勇 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1