应用层协议转换网关的包序号控制方法.pdf

上传人:1520****312 文档编号:687403 上传时间:2018-03-05 格式:PDF 页数:13 大小:645.94KB
返回 下载 相关 举报
摘要
申请专利号:

CN200410031487.6

申请日:

2004.03.30

公开号:

CN1564548A

公开日:

2005.01.12

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

H04L12/56; H04L29/06; H04L12/66

主分类号:

H04L12/56; H04L29/06; H04L12/66

申请人:

中国科学院计算技术研究所;

发明人:

孙红兵; 李忠诚

地址:

100080北京市中关村科学院南路6号

优先权:

专利代理机构:

中科专利商标代理有限责任公司

代理人:

周国城

PDF下载: PDF下载
内容摘要

本发明涉及计算机网络通信技术领域,特别是一种采用TCP协议的应用协议转换网关通用的包序号控制方法。步骤如下:步骤1、定义Seq_Number_Offset表结构来记录TCP数据包在进行转换时候序号发生的变化;步骤2、维护进程定期刷新Seq_Number_Offset表;步骤3、如果当前数据包转换导致数据包长度发生变化,将修改Seq_Number_Offset表中对应条目的偏移量值;步骤4、根据当前数据包的源地址、源端口、目的地址、目的端口在Seq_Number_Offset表中查找对应的条目,读取偏移量值,并调整当前数据包的序号和确认号;步骤5、根据当前数据包的序号,载荷长度,确认序号,检查当前包是否是重传包。该种方法还可以用到其它任何采用TCP协议的数据包转换过程中。

权利要求书

1、一种应用层协议转换网关针对传输层采用TCP协议的包序号控制
方法,其特征在于,具体步骤如下:
步骤1:定义Seq_Number_Offset表结构来记录TCP数据包在进行转
换时候序号发生的变化;
步骤2:维护进程定期刷新Seq_Number_Offset表;
步骤3:如果当前数据包转换导致数据包长度发生变化,将修改
Seq_Number_Offset表中对应条目的偏移量值;
步骤4:根据当前数据包的源地址、源端口、目的地址、目的端口在
Seq_Number_Offset表中查找对应的条目,读取偏移量值,并调整当前数
据包的序号和确认号;
步骤5:根据当前数据包的序号,载荷长度,确认序号,检查当前包是
否是重传包。
2.根据权利要求1所述的协议转换网关的TCP包序号控制方法,其
特征在于,其中步骤1系统设计时定义Seq_Number_Offset表结构来记录
TCP数据包在进行转换时候序号发生的变化。
3.根据权利要求1所述的协议转换网关的TCP包序号控制方法,其特
征在于,其中步骤2设定定期对Seq_Number_Offset表进行刷新,长时间
没有被访问过的条目将会被删除。
4.根据权利要求1所述的协议转换网关的TCP包序号控制方法,其特
征在于,其中步骤3如果当前数据包转换导致数据包长度发生变化,将调
用修改Seq_Number_Offset表中对应条目的偏移量值。
5.根据权利要求1所述的协议转换网关的TCP包序号控制方法,其特
征在于,其中步骤4将根据当前数据包的源地址、源端口、目的地址、目
的端口在Seq_Number_Offset表中查找对应的条目,读取偏移量值,并调
整当前数据包的序号和确认号。
6.根据权利要求1所述的协议转换网关的TCP包序号控制方法,其特
征在于,其中步骤5将根据当前数据包的源地址、源端口、目的地址、目
的端口、包序号和确认序号在Seq_Number_Offset表中查找对应的条目,
如果发现有相同的数据包,则不修改当前条目的sequence号。
7、根据权利要求1所述的协议转换网关的TCP包序号控制方法,其具
体步骤如下:
步骤S1,接收一个FTP数据包;
步骤S2,对其负载内容进行关键字比较;
步骤S3,判断关键字是否匹配;
步骤S4,进行关键字的转换;
步骤S5,修订sequence number表中对应的条目的偏移量;
步骤S6,修改当前包的sequence number号;
步骤S7,读取当前数据包序号的偏移量值;
步骤S8,修改当前数据包的序号,然后通过读取反向的序号偏移
量;
步骤S9,修订当前包的确认序号;
步骤S10,重新计算伪头校验和。

说明书

应用层协议转换网关的包序号控制方法

技术领域

本发明涉及计算机网络通信技术领域,特别是一种采用TCP协议的应
用协议转换网关通用的包序号控制方法。

背景技术

IPv6协议是取代IPv4的下一代互联网络协议,但是IPv6与IPv4协议不
完全兼容,例如地址长度、包头格式不同等等。协议上的差异导致采用两
种协议的网络互通时必须经过转换网关。目前有各种各样的IPv4/IPv6互
通和转换机制,比较典型的有NATPT和TRT两种转换技术。但是不管是何种
转换机制面对不兼容的应用层协议的时候都必须在转换网关中增加应用
层转换模块。对于采用TCP协议的FTP包,在采用IPv4和IPv6两种网络协议
的网络间通信的时候将涉及到包序号的控制问题。

TCP协议是一种端到端、面向连接的协议。该协议弥补了IP协议的某些
不足,其中比较突出的是TCP协议能够保证IP数据包丢失时进行重发,能
够删去重复收到的IP数据包,还能保证准确地按原发送端的发送顺序重新
组装数据。TCP将所要传送的整个报文看成是一个个字节组成的数据流,
然后对每一个字节编一个序号。在连接建立时,双方要商定初始序号。TCP
就将每次所传送的报文段中的第一个数据字节的序号,放在TCP首部的序
号字段中。TCP的确认是对接收到的数据的最高序号表示确认。但返回的
确认序号是已经收到的数据的最高序号加1。也就是说,确认序号表示期
望下次收到的第一个数据字节的序号。因此在采用TCP协议传输的数据包
的TCP报头中包括了32位序号和32位确认序号,图1表示的就是一个TCP数
据包的包头格式。

在IPv6协议成为标准前FTP仅仅提供了建立在IPv4上进行数据通信的
能力,它基于网络地址是32位这一假设。但是,当IPv6出现以后,地址就
比32位长许多了。原来对FTP进行的扩展在多协议环境中有时会失败。因
此在RFC 2428根据IPv6对FTP再次进行扩展。下面将主要说明一种在非
IPv4上传送信息的方法,我们熟悉的两个FTP命令PORT和PASV通过扩展后,
我们称它们为EPRT和EPSV。

例如:EPRT|2|3ffe:8330:5∷12|1909|

该命令表示在TCP端口1909上用IPv6打开主机″3ffe:8330:5∷12″。当
这样的FTP命令包在送到IPv4网络的时候需要转换成如下的格式:

PORT 192,168,6,41,7,117

这种转换将导致TCP数据包的长度变短,减少了4个字节。下一个数据
包从IPv6到IPv4发出,如果不调整它的序号,还是按照发送的IPv6端的需
要发送,那么IPv4接收端总会认为对方发来的包丢掉了4个字节。因此FTP
应用转换网关将需要适时地调整数据包的序号和确认序号。

EPSV请求服务器在一个数据端口上侦听等待连接。对它的响应的格式
与EPRT参数的很象。其格式如下:

Entering Extended Passive Mode(|||24314|)

而对于仅支持IPv4的ftp应用发出的PASV响应包,其格式如下:

Entering Extended Passive Mode(192,168,6,41,94,250)

以上关于FTP命令包在IPv4和IPv6协议上的差异看出,对于像FTP这样
的应用其数据包经过转换网关翻译导致包载荷长度因为两种协议的差异
而发生变化。而且这类应用在传输层通常采用TCP协议,因此转换网关在
进行包转换的时候需要适时地调整数据包的序号和确认序号。而且这种方
法还可以用在任何一种采用TCP协议的转换网关上。

发明内容

本发明的目的在于提供一种应用层协议转换网关的包序号控制方法,
包括关键数据结构的定义和序号调整的流程。

本发明设计了一套Seq_Number_Offset表结构来记录tcp数据包在进行
转换时候序号发生的变化,并且在应用层转换网关(Application Level
Gateway,ALG)处理程序中加入Seq_Number_Offset_Table表的维护,偏
移量值的读取和修正的方法,来保证转换中的数据包序号和确认号的正确
性。该发明同时还解决了重传包的序号控制问题。

本发明中定义的关键数据结构即Seq_Number_Offset表,该数据结构不
仅能够记录数据包的源地址、目的地址、源端口、目的端口,包的来源,
sequence number offset,并且还增加了包的sequence number,payload
length,ack number。后面的数据项主要是用来检查下一个地址和端口都
相同的数据包与当前这个数据包是否是重复数据包。如果是重复数据包,
即使该数据包的负载长度发生了变化,ALG处理程序也不会把该包的
sequence number offset值叠加到Seq_Number_Offset表中对应的条目上。

本发明中定义的关键功能模块包括:sequence number offset值的读
取和维护。维护模块根据当前数据包的地址和端口信息检查在
Seq_Number_Offset表中是否有对应的条目,如果有,就修改该条目中的
offset项,否则在Seq_Number_Offset表中增加一个新的条目,并记录
offset值。读取模块则是根据数据包的地址和端口信息检查在
Seq_Number_Offset表中是否有相同的地址和端口的条目,如果有就读取
否则置0。

发明技术方案

一种应用层协议转换网关针对传输层采用TCP协议的包序号控制方
法,具体步骤如下:

步骤1:定义Seq_Number_Offset表结构来记录TCP数据包在进行转
换时候序号发生的变化;

步骤2:维护进程定期刷新Seq_Number_Offset表;

步骤3:如果当前数据包转换导致数据包长度发生变化,将修改
Seq_Number_Offset表中对应条目的偏移量值;

步骤4:根据当前数据包的源地址、源端口、目的地址、目的端口在
Seq_Number_Offset表中查找对应的条目,读取偏移量值,并调整当前数
据包的序号和确认号;

步骤5:根据当前数据包的序号(seq number),载荷长度(payload
length),确认序号(acknumber),检查当前包是否是重传包。

附图说明

图1是本发明的一个tcp协议数据包的格式图。

图2是本发明的Sequence number控制表。

图3是采用本发明中包序号控制技术的数据包处理过程。

具体实施方式

图1的一个tcp协议数据包的格式图。该图中32位序号和32位确认
序号就是本发明中由于转换而导致发生变化的关键字段。源端口号和目的
端口号通常会用来鉴别不同的TCP连接条目。当TCP头发生变化,需要适
时地调整该结构图中的16位检验和。

图1中,该图说明TCP数据包的包头包括了32位的序号和32位的确
认序号。由于通常采用TCP协议的应用都会对序号和确认序号进行检查。
如果由于转换导致了数据包的长度发生变化,那么其对应的序号也必须进
行调整,否则接收方和发送方将无法协同工作。

图2中,Sequence number控制表。通过这个控制表结构生成的序号
偏移量表可以唯一地标识每一个经过转换网关的TCP连接和连接的方向。
为了鉴别重传包,我们还在这个表结构中增加了条目。每次进行Sequence
number偏移量修正的时候,首先判断是否是重传包,如果是就不修订,
而直接获取现在表中的偏移量值。

该数据结构中Source_address、Source_port、Destination_address、
Destination_port表示源地址、源端口号、目的地址和目的端口号。
Offset_from_v4、Offset_from_v6记录v4到v6或从v6到v4方向的偏
移量。accesses_before_terminate是用来判断该表项是否将被删除,该
项是Seq_Number_Offset表维护进程用。pre_seqnumber_v4、
pre_payloadlen_v4、pre_acknumber_v4、pre_seqnumber_v6、
pre_payloadlen_v6、pre_acknumber_v6这六个数据项分别记录了上一个
数据包的属性。

首先本发明定义了图2所示的关键数据结构。该数据结构中
Source_address、Source_port、Destination_address、Destination_port
表示源地址、源端口号、目的地址和目的端口号。Offset_from_v4、
Offset_from_v6记录v4到v6或从v6到v4方向的偏移量。
accesses_before_terminate是用来判断该表项是否将被删除,该项是
Seq_Number_Offset表维护进程用。pre_seqnumber_v4、
pre_payloadlen_v4、pre_acknumber_v4、pre_seqnumber_v6、
pre_payloadlen_v6、pre_acknumber_v6这六个数据项分别记录了上一个
数据包的属性。如果上一个数据包是v4包,那么它的包序号、包载荷的
长度、确认序号就被保存在前三个数据项中。如果是v6包,那么它的包
序号、包载荷的长度、确认序号就被保存在后面三个数据项中。这些数据
项是用来判断当前正在处理的数据包是否是一个重传数据包。

为实现包序号控制技术,我们设计的功能模块包括:sequence number
offset值的修正和读取。

(1)、修正模块根据当前数据包的地址和端口信息检查在
Seq_Number_Offset表中是否有对应的条目。如果有,就修改该条目中的
offset项,否则在Seq_Number_Offset表中增加一个新的条目,并记录
offset值。

(2)、读取模块则是根据数据包的地址和端口信息检查在
Seq_Number_Offset表中是否有相同的地址和端口的条目,如果有就读取
否则置0。

下面看一下数据包的处理流程,见图3:

一个FTP数据包负载转换流程,步骤S1,接收一个FTP数据包,步骤
S2,首先对其负载内容进行关键字比较,例如:PORT,EPRT,PASV,EPSV等
等。步骤S3查找到匹配的关键字,判断关键字是否匹配,如果匹配,步
骤S4,则进行关键字的转换。步骤S5修订sequence number表中对应的
条目的偏移量。步骤S6,修改当前包的sequence number号,然后步骤
S9通过读取反向的序号偏移量,修订当前包的确认序号。步骤s10重新
计算伪头校验和。如果进行关键字匹配时,没有发现对应的关键字,步骤
S7则执行,读取当前数据包序号的偏移量值,步骤S8修改当前数据包的
序号。然后通过读取反向的序号偏移量,步骤S9修订当前包的确认序号,
步骤S10重新计算伪头校验和。

(1)、对于一个FTP数据包,首先对其负载内容进行关键字匹配,例如:
PORT,EPRT,PASV,EPSV等等。如果找到匹配的关键字,则进执行(2)中
的步骤。否则将两次调用sequence number offset值的读取模块。该函
数的作用就是返回在Seq_Number_Offset表中源地址、源端口、目的地址、
目的端口与该函数传递的值相同的条目中记录的seq_offset.调用下列函
数处理:
ALG_Retrieve_Sequence_Number_Offset(Source_Address_String,

      htons(ptcp_header_in->th_sport),

      Dest_Address_String,

      pIP_header_in->Dest_port,

      network_source,

      &new_payload_offset);

该函数包括的参数:源地址、源端口、目的地址、目的端口。
Network_source表示转换前数据包的协议即是Ipv4或。该函数的返回值
是new_payload_offset。该值用来修正当前数据包的sequence_number+=
new_payload_offset。
ALG_Retrieve_Sequence_Number_Offset(Source_Address_String,

               htons(ptcp_header_in->th_sport),

               Dest_Address_String,

               pIP_header_in->Dest_port,

               network_source,

               &new_acknowledge_offset);

该函数中的network_source记录的是与当前数据包相反的方向。例如
当前处理的是一个v4数据包,那么这里的network_source=IPv6;而修改
sequence number表调用概述的时候,network_source=IPv4,即等于这
个数据把在转换前所采用的网络协议。

该函数的返回值是new_acknowledge_offset。该值用来修正当前数据
包的
ack_number=ack_number-new_acknowledge_offset

(2)数据包从一种网络协议转换到另外一种网络协议的时候本发明做如
下的处理,首先,本发明会调用如下的函数:

ALG_Amend_Sequence_Number_Offset(Source_Address_String,

          htons(ptcp_header_in->th_sport),

          Dest_Address_String,

          pIP_header_in->Dest_port,

          total_payload_offset,

          IPV6,

          htonl(ul_th_seq),

          pIP_header_in->Payload_length,

          htonl(ul_th_ack),

          &new_payload_offset);

该函数的参数除了包的源地址等信息,还增加了seqnumber、
payload_length、ack_number,返回的值存放在new_payload_offset。

 sequence_number=sequence_number+(new_payload_offset-

 total_payload_offset);

该函数的功能:

然后:调用ALG Retrieve_Sequence_Number_Offset函数,读取对应的偏
移量值。

ALG_Retrieve_Sequence_Number_Offset(Source_Address_String,

                    htons(ptcp_header_in->th_sport),

                    Dest_Address_String,

                    pIP_header_in->Dest_port,

                    IPv4,

                    &new_acknowledge_offset);

注意该函数中的network_source与实际的数据包的方向是相反的。因
为ack_number记录的是另外一个方向的偏移量。

(3)重传包的控制技术

本发明在Seq_Number_Offset表中增加了三个表项。当要在该表中增
加一个新的条目或者要对seq number offset表中的offset值修改的时
候,本发明会把当前数据包的sequnumber,payload length,acknumber保
存到seq number offset表中。如果数据包来源于v4协议,则这些数据
项会保存到

    pre_seqnumber_v4;

    pre_payloadlen_v4;

    pre_acknumber_v4;

否则,以上三项内容会保存到下面的三个表项中:

    pre_seqnumber_v6;

    pre_payloadlen_v6;

    pre_acknumber_v6;

对于每一个需要对SEQ number和ACK number进行修改的包,程序都会
首先比较当前数据包的SEQ number、Payloadlen、和ACK number。如果
当前数据包的这些项与表中记录的完全相同,那么可以判定该数据包是一
个重复数据包。系统程序就不再将当前数据包的偏移量叠加到SEQ表对应
的表项。

(4)维护进程

维护进程负责定期对Seq_Number_Offset表进行刷新。每次刷新的时候
系统都会将accesses_before_terminate值-1。如果该值已经为0,维
护进程将删除该条目。对于读取该表和修正该表的进程,每次读取其中一
个表项时,都会将accesses_before_terminate置为最大值。

应用层协议转换网关的包序号控制方法.pdf_第1页
第1页 / 共13页
应用层协议转换网关的包序号控制方法.pdf_第2页
第2页 / 共13页
应用层协议转换网关的包序号控制方法.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《应用层协议转换网关的包序号控制方法.pdf》由会员分享,可在线阅读,更多相关《应用层协议转换网关的包序号控制方法.pdf(13页珍藏版)》请在专利查询网上搜索。

本发明涉及计算机网络通信技术领域,特别是一种采用TCP协议的应用协议转换网关通用的包序号控制方法。步骤如下:步骤1、定义Seq_Number_Offset表结构来记录TCP数据包在进行转换时候序号发生的变化;步骤2、维护进程定期刷新Seq_Number_Offset表;步骤3、如果当前数据包转换导致数据包长度发生变化,将修改Seq_Number_Offset表中对应条目的偏移量值;步骤4、根据当前。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1