【摘要】 基于TCP时间戳选项确定TCP报文之间的引发关系的方法属于TCP传输协议性能分析领域,其特征在于,含有以下步骤:在TCP连接的路径上任意一处截获报文;将每个TCP报文时间戳选项中的原始时间戳值修改为在该连接方向上严格单调递增的新时间戳值;将该报文的原始时间戳值和新时间戳值记录在该连接方向上的时间戳值映射表中;在与该报文反方向的时间戳值映射表中,找到与该报文对应的时间戳值映射表项,并根据表项内容改写该报文的时间戳回显应答字段;根据上一步找到的对应表项来进一步确定报文之间的引发关系;为不含时间戳选项SYN报文添加时间戳选项。用户和网络工程人员可使用该方法诊断TCP连接传输速率的限制因素。 【专利类型】发明授权 【申请人】清华大学 【申请人类型】学校 【申请人地址】100084 北京市100084-82信箱 【申请人地区】中国 【申请人城市】北京市 【申请人区县】海淀区 【申请号】CN200810056392.8 【申请日】2008-01-18 【申请年份】2008 【公开公告号】CN101217429B 【公开公告日】2010-09-29 【公开公告年份】2010 【授权公告号】CN101217429B 【授权公告日】2010-09-29 【授权公告年份】2010.0 【IPC分类号】H04L12/26; H04L29/06 【发明人】吕国晗; 李星 【主权项内容】基于TCP时间戳选项确定TCP报文之间引发关系的方法,其特征在于,在待分析TCP连接的路径上任意一个测量点,放置一个能够监听和修改该TCP连接的报文的一个硬件设备或软件模块,依次按照以下步骤利用TCP时间戳选项来确定报文之间的引发关系,所述TCP时间戳选项包括一个32比特单调递增的时间戳字段TSval和一个32比特回显应答字段TSecr;步骤(1)初始化,在所述软件模块中设置:一个TCP连接监测表,用于记录所有正在被监测的TCP连接;原始时间戳值与新时间戳值的TVmap映射表:在每个被监测TCP连接的每个方向上维护一个属于该方向报文的原始时间戳值和新时间戳值映射表,当待转发报文P0有时间戳选项时,使用该映射表来修改P0时间戳选项中的TSval和TSecr字段;该映射表由一系列TVmap表项构成,每个表项包括一个表头和原始时间戳为某个TSval的所有报文;其中TVmap表头至少包含六个关键字段:tsval_orig是该表项所属报文的原始时间戳值,tvmin和tvmax,分别是该TVmap表项所属报文的最小和最大新时间戳值,sndmax是该表项所属报文的最大TCP序列号,rcvmax是由该表项所属报文引发报文的最大TCP序列号,初值为0,,flag是该TVmap表项的标志;一个时间戳值修改模块,用于在网络没有或有乱序报文的情况下填写P0的新时间戳值NewTSval;一个TVmap表项删除模块,用于删除过期的TVmap表项;步骤(2)按步骤处理截获的TCP报文:步骤(2.1)在报文P0的TCP校验和正确的条件下,若:P0只带有TCP SYN同步标志位,则它不属于已有的TCP连接,而是要求发起一条新的连接,按步骤(2.1.1)至(2.1.3)处理,否则,若P0也不属于某个正被监测的TCP连接,则转发P0;步骤(2.1.1)建立新的TCP连接记录;步骤(2.1.2)判断P0是否有时间戳选项:若有,则记录P0的时间戳值TSval若没有,则为P0添加时间戳选项,并记录P0的新时间戳值NewTSval;步骤(2.1.3)转发报文P0;步骤(2.2)在报文P0的TCP校验和正确的条件下,若:P0属于某个正被监测的TCP连接,则按以下步骤处理: 步骤(2.2.1)判断该连接是否已经完成三次握手:若:已完成三次握手,则判断P0是否有时间戳选项,若有则转入步骤(2.2.2),若无则转发P0;若:未完成三次握手,则判断P0是否有时间戳选项,若有则转入步骤(2.2.2),若无则删除该TCP连接记录,并转发P0;步骤(2.2.2)在时间戳值修改模块中,根据到达路径上没有乱序和有乱序两种情况,按以下步骤修改P0的原始时间戳值TSval,填写P0的新时间戳值NewTSval,更新对应TVmap表项的sndmax,tvmin,tvmax;步骤(2.2.2.1)当从P0的发送方到本测量点的网络路径上没有乱序时,则根据当前方向上最大时间戳值MaxNewTSval,将P0的新时间戳值NewTSval设置为MaxNewTSval+m,同时更新MaxNewTSval,其中m为大于等于1的整数;步骤(2.2.2.2)当从P0的发送方到本测量点的网络路径上存在乱序时,按照以下步骤,使用步骤(1)所述的TVmap映射表来确定P0的发送顺序:步骤(2.2.2.2.1)根据P0的原始时间戳值TSval,在与P0同方向的映射表中找tsval_orig等于P0的TSval的那个表项,若找不到,则为P0建立一个新的TVmap表项,将P0链接到该表项,再根据该表项的tsval_orig把P0插入到TVmap表中的相应位置,将该表项的sndmax设置为P0的最大TCP序列号,然后转到步骤(2.2.2.2.4);步骤(2.2.2.2.2)若在步骤(2.2.2.2.1)中找到P0的原始时间戳值TSval对应的TVmap表项,则把P0插入到对应TVmap表项中,若P0的最大TCP序列号大于该表项的sndmax,则将表项的sndmax更新为P0的最大TCP序列号;在插入时,指针首先指向该表项中最后一个报文,使用从后向前的顺序P0的正确位置,当指针指向一个已转发报文P1时,比较P0和P1的TCP确认序列号和TCP序列号,若P0的TCP确认序列号比P1的大,说明P0在P1之后发送,把P0插入到P1的后面,转向步骤(2.2.2.2.4);若P0的确认序列号比P1的小,说明P0在P1之前发送,则指针前移一个报文,重复上面的比较;若两者的确认序列号相等,则比较它们的TCP序列号,若P0的TCP序列号大于或等于P1的TCP序列号,则插入到P1的后面,转向步骤(2.2.2.2.4);反之则把指针再前移一个报文,重复上面的比较;步骤(2.2.2.2.3)在步骤(2.2.2.2.2)中,若最后指针为空,则把P0插入到该TVmap表项的头部;步骤(2.2.2.2.4)根据P0的位置计算新时间戳值NewTSval,并保证新时间戳值NewTSval的单调递增性;在步骤(2.2.2.2.2)中,若P0插在了前后相邻的两个报 文之间,则P0的新时间戳值NewTSval是这两个相邻报文新时间戳值的平均值;若P0插在所有已转发报文后面,则P0的新时间戳值是MaxNewTSval+m,m≥1,同时更新MaxNewTSval;转入步骤(2.2.2.2.5);步骤(2.2.2.2.5),使用P0的新时间戳值NewTSval更新对应表项的tvmin和tvmax;步骤(2.2.3)在TCP校验和正确的情况下,修改P0时间戳选项中的回显应答TSecr:在该连接与P0反方向的TVmap映射表中寻找一个TVmap表项,使得P0的当前回显应答TSecr大于等于该表项的tvmin,小于等于该表项的tvmax;找到之后,把P0的TSecr改写为该表项的tsval_orig,若P0的最大TCP序列号大于该表项的rcvmax,则令rcvmax等于P0的最大TCP序列号;若查找不到,则把P0丢弃;步骤(2.2.4)在TCP校验和正确的情况下,按以下步骤删除过期的TVmap表项:步骤(2.2.4.1)对P0同方向TVmap映射表中的每一表项,检查P0的确认序列号是否大于表项的sndmax;若:大于sndmax,则对该表项的标志flag置ACK_RCVD标志位;当该表项包含ACK_RCVD和DATA_ACKD的两个标志位时,删除该表项;若:不大于sndmax,则结束,转入步骤(2.2.4.2);步骤(2.2.4.2)对P0反方向TVmap映射表中的每一表项,检查P0的确认序列号是否大于表项的rcvmax;若:大于rcvmax,则对该表项的标志flag置DATA_ACKD标志位,当该表项包含ACK_RCVD和DATA_ACKD的两个标志位时,删除该表项;若:不大于sndmax,则结束,转入步骤(2.2.5);步骤(2.2.5)转发报文。 【当前权利人】清华大学 【当前专利权人地址】北京市100084-82信箱 【专利权人类型】公立 【统一社会信用代码】12100000400000624D 【被引证次数】2 【被他引次数】2.0 【家族被引证次数】19