网络封包串流仿真方法

文档序号:7970536阅读:183来源:国知局
专利名称:网络封包串流仿真方法
技术领域
本发明是提供一种网络封包串流仿真方法,尤指一种可减少存储器使用量的网络封包串流仿真方法。
背景技术
因特网的发达带来许多生活上的便利,然而另一方面却也让人们的计算机设备与个人数据暴露于网络中而易受侵害,因而有许多不同的解决方案,例如在软件的防毒软件和防火墙软件或是内建于硬件的防火墙技术和防入侵功能。以网络硬设备而言,防火墙技术是以封包为单位,针对封包内容来做检测分析。但是以入侵检测技术而言,不只包含防火墙技术,还需要有重组封包与检测连续封包的能力。意即,黑客入侵行为或恶意的攻击程序在网络上传递时有可能会被分割成小块,同时由于网络架构与环境的问题,这些小块在被传送的过程中会有遗失或不照顺序的问题。而入侵检测技术需要有能力先处理遗失与不照顺序的问题,再将封包排序后,依序送入检测引擎内,如此才能回复原始数据达到精确检测的目的。此外,又如以网关器为基础的防毒墙,也需要类似的技术。为了减少封包在网络传输中遗失与不照顺序的问题,因此可信赖网络传输的通讯协议遂成为网络传输所使用的主要通讯协议,以减少封包遗失与不照顺序所造成的困扰。
目前在可信赖网络传输的通讯协议上处理入侵检测的技术可分为两种,第一种是以接口(socket)与代理主机(proxy)的技术为主,例如以路由器(或代理主机)为终端主机,将封包利用传输控制协议/因特网协议(TCP/IP)与接口和代理主机技术复原封包原有数据,此技术的缺点是需要海量存储器空间来储存封包,才能处理遗失与重组问题,同时传输控制协议/因特网协议位于开放系统互连架构中的第三层,而接口则位于在开放系统互连架构中的第七层,数据上下层传递上也会花很多时间。第二种是以队列(queue)配合封包为主,采用海量存储器空间来储存封包,以仿真网络上的协议(session)行为,也就是同时模拟不同客户端间对于封包的所有可能反应,例如客户端之间的流量,或者是客户端所使用的滑动窗口(sliding window)的状态,并利用服务器和代理主机所暂存的封包来处理封包的不同片段的遗失与重组的问题,但是不送到接口,藉此模拟传输控制协议/因特网协议两端的行为。上述的两种方法都会产生海量存储器需求与效能的问题,且到目前为止,第二种仍无法有效解决重新传送的问题。因此,若能同时解决封包在网络中失序与重新传送的问题,并大幅降低存储器使用量,则不会因资源不足而省略封包处理问题,而降低保护能力,并降低仿真协议行为的效率。
在先前技术中,有一种称为Snort的网络入侵检测软件。Snort可用来实现实时(real-time)的网络流量检测以及因特网协议(Internet Protocol,IP)上的封包管理,其中Snort即以上述的队列配合封包的方式来实施封包管理。除此以外,Snort亦可实施各种网络的通讯协议的检测,根据封包中的内容做特征的比对,以防堵各种形式的网络攻击。然而Snort并无法妥善地仿真上述的协议行为,因此也无法完整地处理遗失的封包引起的重传问题。所以,Snort到目前仍定义为入侵检测系统而非入侵防御系统,即使也有in-line Snort的研究,也遇到相同的问题。
除此以外,在网络中已经过设备端处理,但却又在网络中遗失的封包,会由包含接收端或发送端的客户端来提起重新传送该封包的要求。然而,即使已经经过防毒软件或扫描引擎的个别检查,这样的重传封包仍然会造成设备端在处理封包的失序问题时,引起其它无法预期的安全漏洞。

发明内容
本发明提供一种在使封包进入设备端前得以遵照顺序的网络封包串流仿真方法,包含减少该客户端所应用的通讯协议的窗口大小;使用队列暂存序号不照顺序的封包;丢弃序号不照顺序的封包;以及向客户端请求重新递送遗失的封包。
本发明提供一种在封包通过设备端后处理重新传送的封包以节省存储器使用量的网络封包串流仿真方法,包含接收已照顺序排列并来自于第一客户端的第n封包;依顺序储存该第n封包的特征值于连接清单;当该第一封包已通过该设备端,且未到达或无法到达第二客户端时,该第二客户端发送请求以重新传送该第n封包,该请求是经由该设备端转送至该第一客户端,或该第一客户端因逾时而主动重送该第n封包,该重送的第n封包为第m封包;该设备端接收该第m封包,并获取该第m封包的信息以产生特征值;将计算出的该第m封包的特征值依序与连接清单上已储存的特征值做比对,以确认该第m封包是否为该连接清单所储存的某一特征值所属的封包的重传封包;当该连接清单中存在有特征值与该第m封包的特征值相同时,则确认该第m封包为该第n封包的重传封包,即两者封包内容一致。此时该设备端会尽快将第m封包转送给该第二客户端,该第二客户端在收到封包后,会发出已接收到该第m封包的确认信号,当该设备端接收到该确认信号后,将储存于该连接清单中已被第二客户端确认的多个特征值与相关封包丢弃,或保留部分已确认的多个较新的特征值,但将相关暂存封包丢弃,并将该确认信号送往该第一客户端。
本发明还提供一种在封包到达设备端后处理重新传送的封包以节省存储器使用量的网络封包串流仿真方法,包含(a)封包重传处理单元由封包限制单元接收第n封包;(b)减少所处理的窗口大小;(c)确认该第n封包是否包含确认信号;(d)当该第n封包包含该确认信号时,确认连接清单中是否存在有已确认过的特征值项目;(d1)选择性地不完全清除已确认过的特征值,以通过保留较新的多个已确认过的特征值,来处理确认后封包经过设备端后被遗失的状况;(e)当该连接清单中存在有已确认过的特征值项目时,清除已被确认的特征值项目;(f)确认该连接清单中是否包含有内容;(g)当该连接清单中包含有内容时,或当该第n封包未包含该确认信号时,将该第n封包的序号与该连接清单中各特征值项目的序号范围做比较;(h)确认该第n封包的序号是否为该连接清单所追踪的序号;(i)设备端检查该连接清单的长度是否超过限定值;(j)设备端计算封包的特征值,并依序储存于该连接清单中;(k)当该连接清单中未包含有内容,或是设备端已依序将封包的特征值储存于该连接清单时,送出该第n封包;(l)当该第n封包的序号并非为该连接清单所追踪的序号时,确认该第n封包的内容是否与该连接清单中的特征值的第k项目对应的序号范围重迭;(m)当该第n封包的内容并未与该连接清单中的特征值的第k项目对应的序号范围重迭,或当该连接清单的长度超过限定值时,丢弃该第n封包;(n)当该第n封包的内容是与该连接清单中的特征值的第k项目对应的序号范围重迭时,确认该第n封包的内容与该连接清单内某一特征值的第k项目对应的序号范围重迭的状况,或该第n封包的内容在确认重迭状况之前,是先储存于该第k项目所属的暂存器封包,以产生第L封包,其中该第L封包是由该第n封包而来,或由该第k项目所属的暂存器封包而来;(o)当该第L封包的序号与该连接清单中的特征值的第k项目序号吻合时,比较该第L封包与该第k项目的长度;(p)当该第L封包与该第k项目的长度相等时,计算该第L封包的特征值的检查码,并确认计算出的检查码与该第k项目的检查码是否吻合;(q)当该计算出的检查码与该第k项目的检查码吻合时,送出该第L封包;(r)当该第L封包的长度小于该第k项目的长度时,将该第L封包储存于该第k项目的暂存器中;(s)检查该第k项目的暂存器封包是否已符合该第k项目的长度;(t)当该第L封包不符合该第k项目的长度时,等待逾时消息,且当等待到该逾时消息时,丢弃该第L封包;(u)当该第L封包的长度大于该第k项目的长度时,分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的长度是等于该第k项目的长度,该第j封包的长度是等于该第L封包的长度减去该第k项目的长度;(v)辨识该第i封包与该第j封包,且当辨识出该第i封包时,对该第i封包执行步骤(p);(w)当辨识出该第j封包时,对该第j封包确认该第k项目是否为该连接清单的最后一个项目;当该第k项目为该连接清单的最后一个项目时,对该第j封包执行步骤(i),否则对该第j封包执行步骤(n);(x1)当该第L封包序号落在该连接清单内某特征值的第k项目范围内时,将该第L封包分割为第x封包与第y封包,其中该第x封包是起始于该第L封包的序号,且该第x封包是起始于该第L封包的序号,且该第x封包的结尾是等于该第k项目的结尾,该第y封包的长度是等于该第L封包的长度减去该第x封包的长度;(x2)辨识该第x封包与该第y封包,当辨识出该第x封包时,对该第x封包执行步骤(r);(x3)确认该第y封包中,该第k项目是否为该连接清单的最后一个项目,当该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i);否则,以该第y封包执行步骤(n);(y1)将该第L封包分割为第s封包与第t封包,其中该第t封包是起始于该第k项目的起始序号,并结束于该第L封包的尾端,该第s封包是起始于该第L封包的起始序号,并结束于该第k项目的结尾序号;及(y2)辨识该第s封包与该第t封包,当辨识出该第t封包时,则对该第t封包执行步骤(n)。
本发明还提供一种在使封包进入设备端前得以遵照顺序且在封包到达设备端后处理重新传送的封包以节省存储器使用量的网络封包串流仿真方法,包含(z1)丢弃序号不照顺序的封包;(z2)向第一客户端请求重新递送遗失的封包;(z3)过滤该第一客户端的选择性确认信号机制,并减少该客户端所应用的通讯协议的窗口大小;(z4)使用队列暂存序号不照顺序的封包;(a)封包重传处理单元由封包限制单元接收第n封包;(b)减少所处理的窗口大小;(c)确认该第n封包是否包含确认信号;(d)当该第n封包包含该确认信号时,确认连接清单中是否存在有已确认过的特征值项目;(d1)选择性地不完全清除已确认过的特征值,以通过保留较新的多个已确认过的特征值,来处理确认后封包经过设备端后被遗失的状况;(e)当该连接清单中存在有已确认过的特征值项目时,清除已被确认的特征值项目;(f)确认该连接清单中是否包含有内容;(g)当该连接清单中包含有内容时,或当该第n封包未包含该确认信号时,将该第n封包的序号与该连接清单中各特征值项目的序号范围做比较;(h)确认该第n封包的序号是否为该连接清单所追踪的序号;(i)设备端检查该连接清单的长度是否超过限定值;(j)设备端计算封包的特征值,并依序储存于该连接清单中;(k)当该连接清单中未包含有内容,或是设备端已依序将封包的特征值储存于该连接清单时,送出该第n封包;(l)当该第n封包的序号并非为该连接清单所追踪的序号时,确认该第n封包的内容是否与该连接清单中的特征值的第k项目对应的序号范围重迭;(m)当该第n封包的内容并未与该连接清单中的特征值的第k项目对应的序号范围重迭,或当该连接清单的长度超过限定值时,丢弃该第n封包;(n)当该第n封包的内容是与该连接清单中的特征值的第k项目对应的序号范围重迭时,确认该第n封包的内容与该连接清单内某一特征值的第k项目对应的序号范围重迭的状况,或该第n封包的内容在确认重迭状况之前,是先储存于该第k项目所属的暂存器封包,以产生第L封包,其中该第L封包是由该第n封包而来,或由该第k项目所属的暂存器封包而来;(o)当该第L封包的序号与该连接清单中的特征值的第k项目序号吻合时,比较该第L封包与该第k项目的长度;(p)当该第L封包与该第k项目的长度相等时,计算该第L封包的特征值的检查码,并确认计算出的检查码与该第k项目的检查码是否吻合;(q)当该计算出的检查码与该第k项目的检查码吻合时,送出该第L封包;(r)当该第L封包的长度小于该第k项目的长度时,将该第L封包储存于该第k项目的暂存器中;(s)检查该第k项目的暂存器封包是否已符合该第k项目的长度;(t)当该第L封包不符合该第k项目的长度时,等待逾时消息,且当等待到该逾时消息时,丢弃该第L封包;(u)当该第L封包的长度大于该第k项目的长度时,分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的长度是等于该第k项目的长度,该第j封包的长度是等于该第L封包的长度减去该第k项目的长度;(v)辨识该第i封包与该第j封包,且当辨识出该第i封包时,对该第i封包执行步骤(p);(w)当辨识出该第j封包时,对该第j封包确认该第k项目是否为该连接清单的最后一个项目;当该第k项目为该连接清单的最后一个项目时,对该第j封包执行步骤(i),否则对该第j封包执行步骤(n);(x1)当该第L封包序号落在该连接清单内某特征值的第k项目范围内时,将该第L封包分割为第x封包与第y封包,其中该第x封包是起始于该第L封包的序号,且该第x封包是起始于该第L封包的序号,且该第x封包的结尾是等于该第k项目的结尾,该第y封包的长度是等于该第L封包的长度减去该第x封包的长度;(x2)辨识该第x封包与该第y封包,当辨识出该第x封包时,对该第x封包执行步骤(r);(x3)确认该第y封包中,该第k项目是否为该连接清单的最后一个项目,当该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i);否则,以该第y封包执行步骤(n);(y1)将该第L封包分割为第s封包与第t封包,其中该第t封包是起始于该第k项目的起始序号,并结束于该第L封包的尾端,该第s封包是起始于该第L封包的起始序号,并结束于该第k项目的结尾序号;及(y2)辨识该第s封包与该第t封包,当辨识出该第t封包时,则对该第t封包执行步骤(n)。


图1为使用本发明网络架构的方块图。
图2为本发明所提供的网络封包串流仿真方法中处理封包进入路由器之前的程序的流程图。
图3至图5是图示本发明在封包进入设备端后,所提供的解决重新递送封包所引起的问题的网络封包串流仿真方法的流程图。
图6为图3至图5所述的连接清单的运作流程。
100 网络架构110、150 客户端130 设备端
131 封包限制单元133 封包重传处理单元135 存储器200-210、300-399、400-460 步骤具体实施方式
本发明的目标即为提供一种在可信赖网络传输下,可解决因为封包的顺序错误、遗失、或重传造成入侵检测系统、防火墙系统、防毒系统运作不正常的问题,并可同时节省存储器使用量的网络封包串流仿真方法。
本发明所提供的网络封包串流仿真方法是应用于提供可信赖网络传输的通讯协议上,例如传输控制协议(Transmission Control Protocol,TCP)与序列封包交换协议(Sequenced Packet Exchange,SPX)等,这些协议皆采用序号(sequence)与确认(acknowledge)的方式来达到可信赖网络传输的要求,因此亦使得本发明所提供的网络封包串流仿真方法可适用于此。
本发明所提供的网络封包串流仿真方法主要分为两个部分,第一部分是处理封包进入路由器之前的程序,第二部分是处理封包进入路由器之后的程序。且之后的叙述皆针对同一笔数据在发送端分解成多个序号连续的封包后传送至接收端,且发送端分解的序号是以由小而大的顺序来排列所产生的情形来加以说明,其它种类的序号排列情况可视为其变型。
请参照图1,图1为采用本发明技术的网络架构100的示意图。网络架构100包含有第一客户端110、设备端130和第二客户端150。第一客户端110为发送端,而第二客户端150为接收端。设备端130包含有封包限制单元131、封包重传处理单元133和存储器135,设备端130可为采用本发明技术的路由器、网关器、代理主机或是拥有类似功能的网络硬件,而第一客户端110和第二客户端150可为计算机或拥有类似功能的网络硬件。封包限制单元131用来处理上述本发明所提供的方法的第一部分,也就是封包正式进入设备端130之前的程序,以确保离开封包限制单元131的封包皆是依照其序号的顺序来排列,并保持与原本在第一客户端110的原始数据相同的正确性。除此以外,封包限制单元131会随时追踪位于其内的特定封包,并不允许其序号大于该特定封包的封包通过,也就是说序号小的封包必定较序号较大的封包先通过封包限制单元131,以确保其序号顺序的正确性。当确认欲通过封包限制单元131的封包的序号与被追踪的特定封包的序号的下一个时,则可让该特定封包通过封包限制单元131,并改而追踪该欲通过封包限制单元131的封包。举例来说,假设原先封包限制单元131所追踪的封包的序号为N(其中N为正整数),且此时欲通过封包限制单元131的封包的序号为(N+1),则封包限制单元131会先行让封包序号为N的封包通过封包限制单元131,此时若遗失序号为N的封包,则封包限制单元131必需等待序号为N的封包到来后,同时并改而追踪序号为(N+1)的封包,才能让序号为(N+1)的封包通过。然而,封包限制单元131可允许序号小于封包限制单元131正在追踪的封包的序号的封包通过封包限制单元131,此是因这类封包为重传封包,因此需要由封包重传处理单元133来处理。以上述的例子来说,当序号为(N-a)的封包欲通过封包限制单元131时(其中a为小于N的正整数),封包限制单元131会先行让序号为(N-a)的封包通过,此是因该封包为重传封包。封包重传处理单元133主要的作用为处理重传的封包。由此可知,封包重传处理单元133会接收到两种封包,第一种为经过封包限制单元131处理后按照其顺序排列的封包,第二种为之前设备端130曾经传送过的封包。第二种封包出现的原因主要是因为网络环境不稳定,以致于封包通过设备端130之后遗失了,为了补回遗失的封包,第二客户端150会要求第一客户端110重新传送该封包,第一客户端110也会自动重新传送遗失的封包;然而,由于在设备端130中,针对该遗失的封包的防毒程序或入侵检测程序已经执行过,因此若任意让此类重传封包通过,即使是在该重传封包已被再次扫描的前提下,仍然会造成设备端130的安全漏洞,因此封包重传处理单元133亦被设计来处理此类问题。
请参阅图2,其为本发明所提供的网络封包串流仿真方法中处理封包进入路由器之前的程序的示意图,并请同时参阅图1。图2所述的网络封包串流仿真方法主要是由图1所示的封包限制单元131来处理,并包含以下步骤步骤200步骤开始;步骤202从下层收取第i封包;步骤204将该第i封包的序号放入队列中,并维护该队列中序号的顺序性;步骤206封包限制单元131依序由该队列中取出第j封包;步骤208经由该第j封包的序号与追踪数据,确认该第j封包是否为连续性封包;若是,则执行步骤210,否则执行步骤214;步骤210将该第j封包的序号由该队列中移除;步骤212将该第j封包传送至封包重传处理单元133;步骤214确认该第j封包的序号是否小于目前所追踪的数据;若是,则执行步骤218,否则执行步骤216;步骤216使用快速要求机制,要求第一客户端110重新传送追踪数据封包;步骤218步骤结束。
图2所述的步骤主要是由图1所示的封包限制单元131来执行。
上述的步骤的处理原则为使用队列(Queue)将序号不照顺序的封包依序排入队列中,若有缺号可先略过;若队列已满,则丢弃该封包;若该封包可补足原不连续的队列,则将该封包插入队列中正确位置,并丢弃队列中最后的封包。接着依序检查队列中序号,若有不连续发生,则向发送端请求重送遗失的封包;需等待遗失的封包补足后才能再取队列中的下个封包。
为了达到加快处理的速度,该设备端由第一客户端收取到的封包先依序放入队列中。因为封包在传输的过程中可能遗失或是由于路径不同,而导致到达该设备端的时间不一致,因而造成失序(不照顺序)的现象。该设备端依照封包的序号,依序放入队列中可以首先解决因路径不同而产生的失序问题,有遗缺的封包则暂时略过其序号。另因该设备端的资源有限,即队列的长度也有所限制,超过队列长度可以储存的封包即丢弃。若有后来的封包序号可以补足已在队列中的跳号时,则该封包需插入队列顺序正确的位置,并丢弃队列中最大序号的暂存封包,以维持队列的大小。而此队列长度最大依资源而无限制,以可摸拟可信赖协议为目标,最小长度为当下收取的封包。
接着会将封包从队列依序取出,并一一检查序号是否有连续。遇到没有连续的部分时,必需等待此缺少的封包补足后才可继续取出队列中的下一个封包。如此运作,即可以维持封包的顺序性,达到入侵检测、防毒墙等系统的要求。
以RFC规格建议书(Request For Comments)来说,第一客户端110必须等到收到timeout的消息,且没有收到第二客户端150所传来的确认消息才能够重新传送封包。对设备端130来说,这样的条件会耽搁太多的时间来判定是否需要重新传送封包,因此设备端130会发出消息给第一客户端110,使其尽速再次重新传送遗失的封包,其中设备端130可采用直接发出多个确认信号的方式来要求第一客户端110快速重新递送遗失的封包。在本发明的一实施例中,可直接连续发出四个确认信号,其中较晚发出的三个确认信号为最先被发出的确认信号的复制信号。
请注意,当队列的大小正好等于所应用的协议所订定的窗口大小时,存储器135的使用率可达到最大,并可完全模拟第一客户端110与第二客户端150之间的对话行为。而当队列长度为零,亦即当不使用队列时(此时存储器的使用量最小,只暂存当下收取的封包),则不执行步骤204、206、210,仅执行步骤200、202、208、212、214、216、218,且并不会影响到本发明的方法的正常执行。
在图2所述的所有步骤中,以有队列长度情况来说明若先前丢弃的封包在丢弃后的下一瞬间需要马上被设备端130所存取,再加上要求重新递送遗失的封包的请求所加起来的时间损耗。为了尽可能避免此种时间上的浪费,可通过存储器135有限的部分储存量来将部分序号不按照顺序的封包先行以队列(Queue)的方式采步骤204储存起来,储存在队列中的封包可迅速地以步骤204、206、208、210使用并由该队列中移除,也减缓了上述的时间浪费。队列中可储存的封包最大数量可由设备端130自行根据需要来动态的修改。而当该队列已到达其最大储存量却又有新的封包需要储存时,则可通过优先权顺序来决定移除其储存的某一封包,再将新的封包储存于该队列中。
请注意,在步骤204中所述的队列可依设备端130本身的资源来加以动态调整其长度,因此该队列的最小长度可为0。该队列本身的作用在于减少执行步骤216的频率,以减少执行重传封包机制所延迟的时间。
在封包限制单元131执行完图2中所示的步骤后,可确保由封包限制单元131递送至封包重传处理单元133的封包都会遵照其顺序。然而重新递送的封包会造成系统安全上的漏洞,且重新递送的封包与相关数据也不一定会和已经递送的数据内容及其大小一样。在考虑设备端130的系统资源限制时,一般的设备端130无法如上述的网络侵入防治软件Snort一样,为每一个对话保留不小的空间以管理封包的问题。因此本发明亦提供一种解决重新递送封包所引起的问题的网络封包串流仿真方法,并配合图1所述的封包重传处理单元133来实施。请参阅图3、图4、与图5,其为本发明在封包到达设备端后,所提供的解决重新递送封包所引起的问题的网络封包串流仿真方法的流程图,并请同时参阅图1。图3至图5包含下列步骤步骤300步骤开始;步骤302封包重传处理单元133由封包限制单元131接收第n封包;步骤304减少窗口大小;步骤306确认是否包含确认信号;若是,则执行步骤308,否则执行步骤314;步骤308确认清单中是否存在有已确认过的特征值项目;若是,则执行步骤310,否则执行步骤312;步骤310清除已被第二客户端确认的特征值项目;步骤312确认是否含有内容;若是,则执行步骤314,否则执行步骤322;步骤314将该第n封包的序号与清单中各特征值项目的序号范围做比较;步骤316确认该第n封包的序号是否为连接清单所追踪的序号;若是,执行步骤318,否则执行步骤324;步骤318设备端130检查连接清单的长度是否超过限定值;若是,则执行步骤326,否则执行步骤320;步骤320设备端130计算封包的特征值,并依序储存于连接清单中;步骤322送出该第n封包;步骤324确认该第n封包的内容是否与连接清单中的特征值的第k项目对应的序号范围重迭;若是,执行步骤330;若否,则执行步骤326;步骤326丢弃该第n封包;步骤328步骤结束;步骤330确认该第n封包的内容与该连接清单内某一特征值的第k项目对应的序号范围重迭的状况,或该第n封包的内容在确认重迭状况之前,是先储存于该第k项目所属的暂存器封包,不论要处理的封包为从该第n封包而来或是由该第k项目的暂存器封包而来,以下皆以第L封包称之,并作以下叙述;当该第L封包的序号与该连接清单中某一特征值的第k项目的序号范围的开头序号吻合时,执行步骤332;当该第L封包的序号落在该连接清单中某一特征值的第k项目的序号范围内时,执行步骤356;当该第L封包的序号比该连接清单中最小特征值的第k项目的序号范围小时,执行步骤362;步骤332比较该第L封包的长度与该第k项目的长度;当该第L封包的长度与该第k项目的长度相等时,执行步骤334;当该第L封包的长度小于该第k项目的长度时,执行步骤344;当该第L封包的长度大于该第k项目的长度时,执行步骤350;步骤334计算该第L封包的特征值的检查码,并确认计算出的该检查码与该第k项目的检查码是否吻合;当吻合时,执行步骤336,否则执行步骤338;步骤336送出该第L封包;步骤338确认该第L封包是否已执行过步骤346;若是,则执行步骤348,否则执行步骤340;步骤340丢弃该第L封包;步骤342步骤结束;步骤344将该第L封包储存于该第k项目的暂存器中;步骤346检查该第k项目暂存器封包是否已符合该第k项目的长度;若符合,则执行步骤334,否则执行步骤348;步骤348等待timeout消息,且当等待到timeout消息时,丢弃该第L封包,并执行步骤342;步骤350分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的长度是等于该第k项目的长度,该第j封包的长度是等于该第L封包的长度减去该第k项目的长度;步骤352辨识该第i封包与该第j封包,若辨识出该第i封包,则以该第i封包执行步骤334;若辨识出该第j封包,则以该第j封包执行步骤354;步骤354确认该第k项目是否为该连接清单的最后一个项目;若是,则丢弃该第j封包,并执行步骤342,否则以该第j封包执行步骤330;步骤356分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的结尾是等于该第k项目的结尾,该第j封包的长度是等于该第L封包的长度减去该第i封包的长度;步骤358辨识该第i封包与该第j封包,若辨识出该第i封包,则以该第i封包执行步骤344;若辨识出该第j封包,则以该第j封包执行步骤360;步骤360确认该第k项目是否为该连接清单的最后一个项目;若是,则丢弃该第j封包,并执行步骤342,否则以该第j封包执行步骤330;步骤362将该第L封包分割为第i封包与第j封包,其中该第j封包是起始于该第k项目的起始序号,并结束于该第L封包的尾端,该第i封包是起始于该第L封包的起始序号,并结束于该第k项目的结尾序号;步骤364辨识该第i封包与该第j封包;若辨识出该第I封包,则丢弃该第i封包,并执行步骤342;若辨识出该第j封包,则以该第j封包执行步骤330。
在上述的步骤中,封包所包含的特征值可为储存有多个变量的数据结构或是字符串,并可用来经由特定的算法输入特征值后得到封包所包含的各种信息,例如封包的序号、开头、开头长度、封包本身的长度、检查码等,且不同的特征值必定代表不同的封包。除此以外,在本发明中,特征值是以连接清单的方式来加以储存,因此不同的特征值将会形成连接清单中不同的项次。若特征值是以数据结构的方式来实施的话,可以将上述的各种封包信息以变量的形式储存于数据结构中,再通过上述的算法将数据结构中的变量直接取出以得到所需的封包信息;而若特征值是以字符串的方式来实施的话,则上述的算法可满足输入特征值后可计算得到所需的封包信息的要求;封包的大小、开头、与检查码也可以用同样的方式储存于特征值中。需要特别提出的是,本发明在封包中所使用的检查码需要满足向量空间的特性,例如结合律或交换律等特性,以满足对检查码做不同计算来做验证的要求。在本发明的某些实施例中,可直接通过传输通讯协议中所使用的checksum变量来实现检查码的功能,亦可以使用自行设计的向量空间函数来实现检查码的功能。
在比较封包的差异时,并不需非得要得到封包的序号才能够确认封包之间的差异,通过不同的封包其特征值必定不同的特性,可以直接判定是否为重新传送的封包,因为重新传送的封包必定与先前遗失的封包的特征值相同。而若需要判别封包之间序号的连续性时,只要设计好适当的算法,便可以计算出特征值中有关序号的信息,进而判别封包之间是否连续。例如可设计出适当的特征值与对应的算法,使得只有将两个相邻的封包的特征值输入该算法时,才会得到某种特征,并可据此证明所验证的两个封包确实为连续的封包。请注意,单一特征值可用来涵盖多个连续序号。
上述的特征值由于所占用的数据量可相当小,相较于先前技术中需要占用海量存储器储存数据并等到确认信号的做法,本发明在大部分的情况中仅储存特征值,并再加以查询符合条件的特征值所涵盖的序号范围是个可节省存储器使用量的做法。
在上述的所有步骤中,通过特征值所储存的各种消息来辨认属于同一笔原始数据的不同封包。在接收到该第n封包时,将该第n封包的特征值与该连接清单中先前储存的各特征值经过特定算法运算后加以比对。若在该连接清单中找到条件符合的特征值(亦即该第一封包的特征值),则表示该第n封包为设备端130先前所接收的封包的重送封包。若并未在该连接清单中找到条件符合的特征值,则表示该第n封包与该连接清单中所储存的任一特征值所属的封包无关,因此直接丢弃该第n封包以缩减处理量。该第n封包根据特征值所据以比对的信息可为该第n封包的开头(header)或与封包开头相关的信息,例如封包开头的内容或长度等;而上述的用来判断是否符合的条件可将该连接清单储存的特征值输入特定算法加以计算后所得到的值来取得,举例来说,若将特征值加以计算所得到的值为封包的开头,则当该值与该第n封包的开头或该开头的某部分消息时,即为上述的条件符合的状况;若将特征值加以计算所得到的值为封包长度的范围,例如该第n封包的长度落在该封包长度的范围内,则亦可视为上述的条件符合的状况;以上所述的条件符合的状况仅为本发明所提供的方法的实施例,但其它针对特征值或是封包的其它消息所做的比对不构成脱离本发明的范畴的事实。
请注意,步骤304可视情况执行或不执行,其是根据设备端130的资源所提供的连接清单长度而定。若设备端130本身的资源不足,以至于连接清单长度较短时,调整窗口大小可减少遗失封包的机率。
请注意,在步骤310中,可以不完全清除已确认过的特征值;通过保留较新的多个已确认过的特征值,可以处理确认信号被遗失的问题。同时根据设备端数据源的多寡,可以调整保留的特征值的数目。
请注意,在步骤344中,在将该第L封包储存至特征值的第k项目所属的暂存器后,若所储存的该第L封包的内容与该暂存器内所对应的内容在序号上有所重迭,可选择覆盖或删除。
请注意,在步骤346中,因为第L封包小于特征值记录的长度,因此只能先暂存于该第k项目的暂存器中。然而接下来所收到的其它同样暂存于该第k项目的暂存器的封包可能也都小于特征值记录的长度,且原则上也必须在每次暂存封包于该第k项目的暂存器时,重新检查对应的检查码(例如checksum等),但如此一来也会造成暂存封包的流程过于冗长而牺牲其处理效率。因此,在本发明的一较佳实施例中,在所暂存的第L封包的数据到达特征值的范围结尾时才会开始检查上述的检查码,或是在该第L封包到达特征值的范围结尾时,才开始对接下来所暂存的所有封包进行相关检查码的检查,以在处理效率与封包的正确性之间取得平衡(tradeoff)。再者,若该第k项目的暂存器一直无法接收到可到达特征值的结尾的第L封包时,则会将已逾时并已储存于该第k项目的暂存器的第L封包直接丢弃。
在图3至图5所述的步骤中,连接清单主要是用来储存每个封包的特征值,而只会在极少的状况下才会储存整个封包的内容。而储存封包的特征值仅准备需要8~16个字节的存储器空间,相较于先前技术中动辄需要储存整个封包的数据需要数兆字节的存储器空间,本发明提供的方法将可节省许多存储器的使用量。除此以外,上述的特征值的长度皆小于该特征值所属的封包的长度。请参照图6,图6为图3至图5所述的连接清单的运作流程。
步骤400开始;步骤410接收到传递确认信号的封包后,连接清单删除在接收包含该确认信号的封包之前所储存的所有特征值与相关数据;或选择性地不完全清除已确认过的特征值,保留较新的多个已确认过的特征值,但清除与其相关的暂存器封包;步骤420设备端130检查连接清单的长度是否超过限定值,若连接清单的长度超过限定值,则继续步骤430,否则跳至步骤440;步骤430设备端130丢弃目前所接收的封包,不加入该封包的特征值至连接清单中,使该连接清单的长度小于该限定值;步骤440设备端130将封包的特征值储存为该连接清单中的项目;步骤450设备端130检查该连接清单中是否有经过限定时间后仍未接收到对应的确认信号的特征值,若有经过限定时间后仍未接收到对应的确认信号的特征值,则将该特征值由连接清单中移除,并丢弃该特征值所属的封包;步骤460结束。
连接清单可以使用队列(Queue)来实施,以达到先进先出的目的。除此以外,图6所述的连接清单的长度可以根据设备端130的需要,由设备端130自行加以设定。
本发明是在仿真协议行为的过程中,在封包进入设备端前由封包限制单元对封包作处理,使得离开该封包限制单元的封包都能够确保其顺序的正确性。并在先行传送多个确认信号至发送端的过程中,避免发送端需要等待逾时后重送的时间延迟。
封包在离开封包限制单元并进入封包重传处理单元以后,通过封包内所储存的特征值对封包的唯一性来对封包作各种辨识的工作,以判定特征值所属的封包是否为先前设备端所处理过的某一封包的重传封包。当根据封包的特征值所计算出的长度发现该封包所属的原始数据尚未收集完毕时,将该封包暂存于连接清单中,以继续收集与该原始数据相关的封包;而当已超过预定长度时,则将封包再加以切割为适当的长度,并将被切割而剩下来的部分再以未收集完毕的形式为准继续处理。当所收集的封包未到达或已超过下一特征值所属的封包的开头时,亦将所收集的封包暂时储存起来,以等待适当的时机(例如收到对应的确认信号或该封包的有效时间结束时)将该封包删除。通过特征值储存量远较封包为小,且在本发明的方法中需要将整个封包储存起来的状况不常发生的特点,可有效节省存储器的使用量,并解决先前技术中不能同时解决封包乱序、重送与存储器使用量增加的问题。除此以外,本发明可单纯在网络第三层独立运作,因此也不会有效能减失的问题。
以上所述仅为本发明的较佳实施例,凡依本发明权利要求范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
权利要求
1.一种在使封包进入设备端前得以遵照顺序的网络封包串流仿真方法,包含丢弃序号不照顺序的封包;向客户端请求重新递送遗失的封包;减少该客户端所应用的通讯协议的窗口大小;及使用队列暂存序号不照顺序的封包。
2.根据权利要求1所述的网络封包串流仿真方法,其中丢弃序号不照顺序的封包包含检查封包的序号是否有重复的情况;及当有两个以上的封包的序号发生重复时,仅保留其中一个封包,并移除其它重复序号的封包。
3.根据权利要求1所述的网络封包串流仿真方法,其中向该第一客户端请求重新递送遗失的封包包含一次发送三个以上的连续确认信号至该客户端。
4.根据权利要求1所述的网络封包串流仿真方法,还包含将队列中的封包依序排列,缺号可先省略,若后续可补足序号,则插入队列中维护连续性。若队列长度超过设备端有限制时,则移除最大序号的封包。
5.根据权利要求1所述的网络封包串流仿真方法是应用于可信赖传输协议。
6.根据权利要求1所述的网络封包串流仿真方法是应用于传输控制协议。
7.根据权利要求1所述的网络封包串流仿真方法是应用于序列封包交换协议。
8.一种在封包到达设备端后处理重新传送的封包以节省存储器使用量的网络封包串流仿真方法,包含(a)封包重传处理单元由封包限制单元接收第n封包;(b)减少所处理的窗口大小;(c)确认该第n封包是否包含确认信号;(d)当该第n封包包含该确认信号时,确认连接清单中是否存在有已确认过的特征值项目;(d1)选择性地不完全清除已确认过的特征值,以通过保留较新的多个已确认过的特征值,来处理确认后封包经过设备端后被遗失的状况;(e)当该连接清单中存在有已确认过的特征值项目时,清除已被确认的特征值项目;(f)确认该连接清单中是否包含有内容;(g)当该连接清单中包含有内容时,或当该第n封包未包含该确认信号时,将该第n封包的序号与该连接清单中各特征值项目的序号范围做比较;(h)确认该第n封包的序号是否为该连接清单所追踪的序号;(i)设备端检查该连接清单的长度是否超过限定值;(j)设备端计算封包的特征值,并依序储存于该连接清单中;(k)当该连接清单中未包含有内容,或是设备端已依序将封包的特征值储存于该连接清单时,送出该第n封包;(l)当该第n封包的序号并非为该连接清单所追踪的序号时,确认该第n封包的内容是否与该连接清单中的特征值的第k项目对应的序号范围重迭;(m)当该第n封包的内容并未与该连接清单中的特征值的第k项目对应的序号范围重迭,或当该连接清单的长度超过限定值时,丢弃该第n封包;(n)当该第n封包的内容是与该连接清单中的特征值的第k项目对应的序号范围重迭时,确认该第n封包的内容与该连接清单内某一特征值的第k项目对应的序号范围重迭的状况,或该第n封包的内容在确认重迭状况之前,是先储存于该第k项目所属的暂存器封包,以产生第L封包,其中该第L封包是由该第n封包而来,或由该第k项目所属的暂存器封包而来;(o)当该第L封包的序号与该连接清单中的特征值的第k项目序号吻合时,比较该第L封包与该第k项目的长度;(p)当该第L封包与该第k项目的长度相等时,计算该第L封包的特征值的检查码,并确认计算出的检查码与该第k项目的检查码是否吻合;(q)当该计算出的检查码与该第k项目的检查码吻合时,送出该第L封包;(r)当该第L封包的长度小于该第k项目的长度时,将该第L封包储存于该第k项目的暂存器中;(s)检查该第k项目的暂存器封包是否已符合该第k项目的长度;(t)当该第L封包不符合该第k项目的长度时,等待逾时消息,且当等待到该逾时消息时,丢弃该第L封包;(u)当该第L封包的长度大于该第k项目的长度时,分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的长度是等于该第k项目的长度,该第j封包的长度是等于该第L封包的长度减去该第k项目的长度;(v)辨识该第i封包与该第j封包,且当辨识出该第i封包时,对该第i封包执行步骤(p);(w)当辨识出该第j封包时,对该第j封包确认该第k项目是否为该连接清单的最后一个项目;当该第k项目为该连接清单的最后一个项目时,对该第j封包执行步骤(i),否则对该第j封包执行步骤(n);(x1)当该第L封包序号落在该连接清单内某特征值的第k项目范围内时,将该第L封包分割为第x封包与第y封包,其中该第x封包是起始于该第L封包的序号,且该第x封包是起始于该第L封包的序号,且该第x封包的结尾是等于该第k项目的结尾,该第y封包的长度是等于该第L封包的长度减去该第x封包的长度;(x2)辨识该第x封包与该第y封包,当辨识出该第x封包时,对该第x封包执行步骤(r);(x3)确认该第y封包中,该第k项目是否为该连接清单的最后一个项目,当该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i);否则,以该第y封包执行步骤(n);(y1)将该第L封包分割为第s封包与第t封包,其中该第t封包是起始于该第k项目的起始序号,并结束于该第L封包的尾端,该第s封包是起始于该第L封包的起始序号,并结束于该第k项目的结尾序号;及(y2)辨识该第s封包与该第t封包,当辨识出该第t封包时,则对该第t封包执行步骤(n)。
9.根据权利要求8所述的网络封包串流仿真方法,其中步骤(x3)还包含当该第y封包中,该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i)。
10.根据权利要求8所述的网络封包串流仿真方法,其中步骤(y2)还包含当辨识出该第s封包时,丢弃该第s封包。
11.根据权利要求8所述的网络封包串流仿真方法,其中步骤(p)还包含当该计算出的检查码与该第k项目的检查码不吻合时,确认该第L封包是否已经过步骤(s)的处理;当该第L封包已经过步骤(s)的处理时,执行步骤(t);及当该第L封包未经过步骤(s)的处理时,丢弃该第L封包。
12.根据权利要求8所述的网络封包串流仿真方法,其中各封包的检查码是属于向量空间,并符合结合律与交换律的条件。
13.根据权利要求12所述的网络封包串流仿真方法,其中各封包的检查码是以传输控制协议所使用的检查和变量来实施。
14.根据权利要求12所述的网络封包串流仿真方法,其中各封包的检查码为自订的向量空间函数。
15.一种在使封包进入设备端前得以遵照顺序且在封包到达设备端后处理重新传送的封包以节省存储器使用量的网络封包串流仿真方法,包含(z1)丢弃序号不照顺序的封包;(z2)向第一客户端请求重新递送遗失的封包;(z3)过滤该第一客户端的选择性确认信号机制,并减少该客户端所应用的通讯协议的窗口大小;(z4)使用队列暂存序号不照顺序的封包;(a)封包重传处理单元由封包限制单元接收第n封包;(b)减少所处理的窗口大小;(c)确认该第n封包是否包含确认信号;(d)当该第n封包包含该确认信号时,确认连接清单中是否存在有已确认过的特征值项目;(d1)选择性地不完全清除已确认过的特征值,以通过保留较新的多个已确认过的特征值,来处理确认后封包经过设备端后被遗失的状况;(e)当该连接清单中存在有已确认过的特征值项目时,清除已被确认的特征值项目;(f)确认该连接清单中是否包含有内容;(g)当该连接清单中包含有内容时,或当该第n封包未包含该确认信号时,将该第n封包的序号与该连接清单中各特征值项目的序号范围做比较;(h)确认该第n封包的序号是否为该连接清单所追踪的序号;(i)设备端检查该连接清单的长度是否超过限定值;(j)设备端计算封包的特征值,并依序储存于该连接清单中;(k)当该连接清单中未包含有内容,或是设备端已依序将封包的特征值储存于该连接清单时,送出该第n封包;(l)当该第n封包的序号并非为该连接清单所追踪的序号时,确认该第n封包的内容是否与该连接清单中的特征值的第k项目对应的序号范围重迭;(m)当该第n封包的内容并未与该连接清单中的特征值的第k项目对应的序号范围重迭,或当该连接清单的长度超过限定值时,丢弃该第n封包;(n)当该第n封包的内容是与该连接清单中的特征值的第k项目对应的序号范围重迭时,确认该第n封包的内容与该连接清单内某一特征值的第k项目对应的序号范围重迭的状况,或该第n封包的内容在确认重迭状况之前,是先储存于该第k项目所属的暂存器封包,以产生第L封包,其中该第L封包是由该第n封包而来,或由该第k项目所属的暂存器封包而来;(o)当该第L封包的序号与该连接清单中的特征值的第k项目序号吻合时,比较该第L封包与该第k项目的长度;(p)当该第L封包与该第k项目的长度相等时,计算该第L封包的特征值的检查码,并确认计算出的检查码与该第k项目的检查码是否吻合;(q)当该计算出的检查码与该第k项目的检查码吻合时,送出该第L封包;(r)当该第L封包的长度小于该第k项目的长度时,将该第L封包储存于该第k项目的暂存器中;(s)检查该第k项目的暂存器封包是否已符合该第k项目的长度;(t)当该第L封包不符合该第k项目的长度时,等待逾时消息,且当等待到该逾时消息时,丢弃该第L封包;(u)当该第L封包的长度大于该第k项目的长度时,分割该第L封包为第i封包与第j封包,其中该第i封包是起始于该第L封包的序号,且该第i封包的长度是等于该第k项目的长度,该第j封包的长度是等于该第L封包的长度减去该第k项目的长度;(v)辨识该第i封包与该第j封包,且当辨识出该第i封包时,对该第i封包执行步骤(p);(w)当辨识出该第j封包时,对该第j封包确认该第k项目是否为该连接清单的最后一个项目;当该第k项目为该连接清单的最后一个项目时,对该第j封包执行步骤(i),否则对该第j封包执行步骤(n);(x1)当该第L封包序号落在该连接清单内某特征值的第k项目范围内时,将该第L封包分割为第x封包与第y封包,其中该第x封包是起始于该第L封包的序号,且该第x封包是起始于该第L封包的序号,且该第x封包的结尾是等于该第k项目的结尾,该第y封包的长度是等于该第L封包的长度减去该第x封包的长度;(x2)辨识该第x封包与该第y封包,当辨识出该第x封包时,对该第x封包执行步骤(r);(x3)确认该第y封包中,该第k项目是否为该连接清单的最后一个项目,当该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i);否则,以该第y封包执行步骤(n);(y1)将该第L封包分割为第s封包与第t封包,其中该第t封包是起始于该第k项目的起始序号,并结束于该第L封包的尾端,该第s封包是起始于该第L封包的起始序号,并结束于该第k项目的结尾序号;及(y2)辨识该第s封包与该第t封包,当辨识出该第t封包时,则对该第t封包执行步骤(n)。
16.根据权利要求15所述的网络封包串流仿真方法,其中丢弃序号不照顺序的封包包含检查封包的序号是否有重复的情况;及当有两个以上的封包的序号发生重复时,仅保留其中一个封包,并移除其它重复序号的封包。
17.根据权利要求15所述的网络封包串流仿真方法,其中向该第一客户端请求重新递送遗失的封包包含一次发送三个以上的连续确认信号至该客户端。
18.根据权利要求15所述的网络封包串流仿真方法是应用于可信赖传输协议。
19.根据权利要求15所述的网络封包串流仿真方法是应用于传输控制协议。
20.根据权利要求15所述的网络封包串流仿真方法是应用于序列封包交换协议。
21.根据权利要求15所述的网络封包串流仿真方法,其中各封包的检查码是属于向量空间,并符合结合律与交换律的条件。
22.根据权利要求15所述的网络封包串流仿真方法,其中各封包的检查码是以传输控制协议所使用的检查和变量来实施。
23.根据权利要求15所述的网络封包串流仿真方法,其中各封包的检查码为自订的向量空间函数。
24.根据权利要求15所述的网络封包串流仿真方法,其中步骤(x3)还包含当该第y封包中,该第k项目为该连接清单的最后一个项目时,以该第y封包执行步骤(i)。
25.根据权利要求15所述的网络封包串流仿真方法,其中步骤(y2)还包含当辨识出该第s封包时,丢弃该第s封包。
26.根据权利要求15所述的网络封包串流仿真方法,其中步骤(p)还包含当该计算出的检查码与该第k项目的检查码不吻合时,确认该第L封包是否已经过步骤(s)的处理;当该第L封包已经过步骤(s)的处理时,执行步骤(t);及当该第L封包未经过步骤(s)的处理时,丢弃该第L封包。
全文摘要
在封包进入路由器前,封包限制单元丢弃失序的封包、减少窗口大小,并将部分失序的封包暂时储存,以使得封包以较佳的效率通过封包限制单元后的顺序正确。在封包进入路由器后,封包重传处理单元通过封包所储存的特征值及由该特征值可计算出的各种消息,以得到封包的顺序性、大小、开头、及检查码等消息来辅助辨识封包之间的差异,并通过连接清单将已通过设备端封包的特征值暂存起来,取代整个封包的储存,以减少存储器的使用量。通过上述的两种方法,可同时解决封包在传输时的失序与重传问题,并解决存储器使用量过大的问题。
文档编号H04L1/18GK1968074SQ20061014326
公开日2007年5月23日 申请日期2006年11月1日 优先权日2005年11月3日
发明者文长中, 杨子剑, 张伟泰, 涂政宏 申请人:居易科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1