用于pmtu学习的方法和装置的制作方法

文档序号:7889486阅读:211来源:国知局
专利名称:用于pmtu学习的方法和装置的制作方法
技术领域
本发明涉及用于传输控制协议(Transmission Control Protocol,TCP)通信的路径最大传输单元(Path Maximum Transmission Unit, PMTU)学习技术,特别涉及一种用于 PMTU学习的方法和装置。
背景技术
在第6版互联网协议(IPv6)的TCP传输中,两台通信设备(例如PC机和服务器) 在建立TCP连接之后可以利用该TCP连接交互通信报文,但位于两台通信设备之间的转发设备(例如路由器)只能转发通信报文、而不允许对通信报文进行分片,即,通信报文的大小只能该通信报文源端的通信设备来决定。如果通信报文的大小超过了转发设备的出端口的最大传输单元(Maximum Transmission Unit, MTU)值,则通信报文会被该转发设备丢弃、并不再被该转发设备转发,并且,该转发设备还会向通信报文源端的通信设备回复互联网控制消息协议(Internet Control Message Protocol, ICMP)的包超大报文,并在ICMP包超大报文中携带本机的出端口的MTU值、以供该通信报文源端的通信设备将通信报文重新分片为小于该MTU值的大小。当具有多台转发设备时,就需要通信报文源端的通信设备按照上述方式利用通信报文来逐跳探测每台转发设备的MTU值。当探测到的MTU值小于通信报文源端的通信设备已学习到的PMTU时,将探测到的MTU值重新学习为PMTU、并重新建立PMTU表项。最终,通信报文源端的通信设备即可将探测到所有转发设备的MTU值中最小的一个学习为TCP传输路径中的PTMU。图I为现有技术在TCP通信时实现的一种PMTU学习过程的示意图。如图I所示, 以源端的通信设备与目的端的通信设备之间包含转发设备A和B为例源端的通信设备将本机出端口的MTU值3000学习为PMTU、并建立PMTU表项,因此,源端的通信设备向目的端的通信设备发送的通信报文I的长度为3000字节;转发设备A接收到源端的通信设备向目的端的通信设备发送的长度为3000字节的通信报文1,由于该通信报文I的长度大于转发设备A的出端口 MTU值2000,因而转发设备A将长度为3000字节的通信报文I丢弃、并向源端的通信设备返回携带有本机出端口 MTU值2000的ICMP包超大报文I ;源端的通信设备收到来自转发设备A的ICMP包超大报文1,将ICMP包超大报文I 中携带的MTU值2000重新学习为PMTU、并修改已建立的PMTU表项,然后重新分片得到长度为2000字节的通信报文2、并重新向目的端的通信设备发送该通信报文2 ;转发设备A接收到源端的通信设备向目的端的通信设备发送的长度为2000字节的通信报文2,并将通信报文2继续向目的端的通信设备转发;转发设备B接收到源端的通信设备向目的端的通信设备发送的长度为2000字节的通信报文2,由于该通信报文2的长度大于转发设备B的出端口 MTU值1000,因而转发设
4备B将长度为2000字节的通信报文2丢弃、并向源端的通信设备返回携带有本机出端口 MTU值1000的ICMP包超大报文2 ;源端的通信设备收到来自转发设备B的ICMP包超大报文2,将ICMP包超大报文2 中携带的MTU值1000重新学习为PMTU、并修改已建立的PMTU表项,然后重新分片得到长度为1000字节的通信报文3、并重新向目的端的通信设备发送该通信报文3 ;转发设备A接收到源端的通信设备向目的端的通信设备发送的长度为1000字节的通信报文3,并将通信报文3继续向目的端的通信设备转发;转发设备B接收到源端的通信设备向目的端的通信设备发送的长度为1000字节的通信报文3,并将通信报文3继续向目的端的通信设备转发;最终,经过两次逐跳探测、以及源端的通信设备的两次重新学习PMTU,源端的通信设备才与目的端的通信设备实现通信。可见,现有技术中学习PMTU需要通过逐跳探测的方式,这样不但会导致学习速度缓慢,而且还增加了网络流量、并浪费了网络带宽,尤其是像如图I所示的那样逐跳递减的情况,学习速度缓慢以及网络带宽浪费的现象会更为严重。

发明内容
有鉴于此,本发明提供一种用于PMTU学习的方法和装置。本发明提供的一种用于PMTU学习的方法,包括步骤a、接收第一通信设备向第二通信设备发送的Syn报文并转发,若判断出Syn 报文中的MSS选项的值大于本机的MTU值,则在转发之前将Syn报文中的MSS选项的值修改为本机的MTU值;其中,在Syn报文从第一通信设备发出时,Syn报文中的MSS选项的值为第一通信设备的MTU值;步骤b、接收第二通信设备向第一通信设备发送的Syn+Ack报文并转发;其中,在 Syn+Ack报文从第二通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的MSS 选项在Syn报文到达第二通信设备时的值;步骤C、接收第一通信设备向第二通信设备发送的Ack报文并转发;其中,在Ack 报文从第一通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在 Syn+Ack报文到达第一通信设备时的值。所述步骤b若进一步判断出Syn+Ack报文中的MSS选项的值大于本机的MTU值, 则进一步在转发之前将Syn+Ack报文中的MSS选项的值修改为本机的MTU值。Syn+Ack报文在到达第一通信设备后触发第一通信设备将Syn+Ack报文中的MSS 选项的值学习为PMTU、并建立PMTU表项,Ack报文在到达第二通信设备后触发第二通信设备将Ack报文中的MSS选项的值学习为PMTU、并建立PMTU表项。所述步骤c若进一步判断出Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Ack报文中的MSS选项的值修改为本机的MTU值。进一步包括步骤d、接收在第一通信设备与第二通信设备之间交互的通信报文并转发,若判断出通信报文中的MSS选项的值大于本机的MTU值,则在转发之前将该通信报文中的MSS选项的值修改为本机的MTU值;其中,在通信报文从第一通信设备或第二通信设备发出时,通信报文中的MSS选项的值为第一通信设备或第二通信设备学习到的PMTU。
本发明提供的一种用于PMTU学习的装置,包括第一模块,用于接收第一通信设备向第二通信设备发送的Syn报文并转发,若判断出Syn报文中的MSS选项的值大于本机的MTU值,则在转发之前将Syn报文中的MSS选项的值修改为本机的MTU值;其中,在Syn报文从第一通信设备发出时,Syn报文中的MSS 选项的值为第一通信设备的MTU值;第二模块,用于接收第二通信设备向第一通信设备发送的Syn+Ack报文并转发; 其中,在Syn+Ack报文从第二通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的MSS选项在Syn报文到达第二通信设备时的值;第三模块,用于接收第一通信设备向第二通信设备发送的Ack报文并转发;其中, 在Ack报文从第一通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在Syn+Ack报文到达第一通信设备时的值。所述第二模块若进一步判断出Syn+Ack报文中的MSS选项的值大于本机的MTU 值,则进一步在转发之前将Syn+Ack报文中的MSS选项的值修改为本机的MTU值。Syn+Ack报文在到达第一通信设备后触发第一通信设备将Syn+Ack报文中的MSS 选项的值学习为PMTU、并建立PMTU表项,Ack报文在到达第二通信设备后触发第二通信设备将Ack报文中的MSS选项的值学习为PMTU、并建立PMTU表项。所述第三模块若进一步判断出Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Ack报文中的MSS选项的值修改为本机的MTU值。进一步包括第四模块,用于接收在第一通信设备与第二通信设备之间交互的通信报文并转发,若判断出通信报文中的MSS选项的值大于本机的MTU值,则在转发之前将该通信报文中的MSS选项的值修改为本机的MTU值;其中,在通信报文从第一通信设备或第二通信设备发出时,通信报文中的MSS选项的值为第一通信设备或第二通信设备学习到的 PMTU。如上可见,本发明在TCP连接的建立过程中,由转发设备对Syn报文的MSS选项的值进行修改、以使Syn报文中的MSS选项的值最终能够被修改为传输路径中所有转发设备的MTU值中最小的一个,并且,Syn报文中的MSS选项的最终值同样携带在Syn+Ack报文和 Ack报文中,因此,通信设备即可在TCP连接过程中利用MSS选项的值来学习到PMTU、而无需在TCP连接建立之后的通信过程中再通过逐跳方式学习PMTU,从而能够提高PMTU的学习速度、并节省学习PMTU所占用的网络带宽。可选地,本发明还可以由转发设备对Syn+Ack报文的MSS选项的值也进行修改、以使Syn+Ack报文中的MSS选项的值在有转发设备的MTU值变化后仍能够保持为所有转发设备的MTU值中最小的一个,并且,Syn+Ack报文中的MSS选项的最终值同样携带在Ack报文中,因此,即便有转发设备的MTU值在TCP连接建立过程中发生变化,通信设备仍可在TCP 连接过程中利用MSS选项的值来学习到准确的PMTU、且无需在TCP连接建立之后的通信过程中再通过逐跳方式学习PMTU,从而仍能够提高PMTU的学习速度、并节省学习PMTU所占用的网络带宽。优选地,基于本发明中的技术方案,通信设备可以在TCP连接建立成功后再创建 PMTU表项,从而能够使得PMTU表项的安全性更高。更优地,为了适应转发设备的MTU值有可能在TCP连接建立成功后发生变化的情况,本发明还可以通过对Ack报文、通信报文中的MSS选项的修改而使通信设备能够及时地响应PMTU的变化,从而尽可能地避免出现由于转发设备的MTU值在TCP连接建立成功后变化所导致的逐跳方式的PMTU学习。


图I为现有技术在TCP通信时实现的一种PMTU学习过程的示意图;图2为TCP协议报文格式的示意图;图3a至图3c为本发明实施例中在建立TCP连接时实现的一种PMTU学习过程的示意图;图4为本发明实施例中用于PMTU学习的方法的一种流程不意图;图5a至图5c为本发明实施例中在建立TCP连接时实现的另一种PMTU学习过程的不意图;图6为本发明实施例中用于PMTU学习的方法的另一种流程示意图;图7为应用本发明实施例中用于PMTU学习的装置的硬件框架示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。本发明实施例利用转发设备在TCP连接建立过程中对相关报文的修改,使PTMU学习能够在TCP连接建立过程中完成。其中,TCP连接建立过程包括三次握手,第一次握手的同步(Synchronize, Syn)报文、第二次握手的同步应答(Syn+Ack)报文、以及第三次握手的应答(Ack)报文。当三次握手完成后,即可成功建立TCP连接、并开始交互通信报文。因此,若PTMU 学习能够在TCP连接建立过程中完成,则相比于现有技术在TCP连接建立之后的通信过程中通过逐跳方式的PMTU学习,本发明实施例能够提高PMTU学习的速度、并节省学习PMTU 所占用的网络带宽。图2为TCP协议报文格式的示意图。Syn报文、Syn+Ack报文、Ack报文、以及通信报文均采用如图2所示的TCP协议报文格式。在图2中,TCP协议报文中的选项(Option)字段中通常会包含有最大字段长度(Max Seg Size,MSS)选项,MSS选项中包括表示MSS选项的类型(Kind)字段,Kind字段的取值通常为00000010 ;表示MSS选项长度的长度(Length) 字段,Length字段的取值通常为00000100 ;以及,MSS选项的值。其中,MSS选项主要用于TCP连接建立的发起端和响应端之间相互通告各自的MTU 值,但转发设备不会关注MSS选项,这是因为第4版互联网协议(IPv4)允许转发设备对通信报文分片,当发起端、响应端按照各自的MTU值分片形成的通信报文大小超过转发设备的出端口的MTU时,转发设备能够通过对通信报文的重新分片来确保通信报文的继续转发,因而就无需转发设备通过关注MSS 选项来获知发起端和响应端的MTU值。也就是说,MSS选项能够适应IPv4的特性所设置的选项,但对于IPv6则会导致现有技术中所述的逐跳方式的PMTU学习。
那么,为了使MSS选项也能够适应IPv6的特性,MSS选项在本发明实施例中可以进一步用于发起端和响应端在所有转发设备中搜索MTU值最小的一个,从而使发起端和响应端能够利用MSS选项的搜索而在TCP连接建立过程中获知最小的MTU值,进而实现在TCP 连接建立过程中的PMTU学习。而且,若将本发明实施例应用于IPv4,则既不会影响IPv4的实现,还能够尽可能避免发起端和响应端分片形成的通信报文大小超过转发设备的MTU值、以减少转发设备重新分片的次数。本发明实施例采用的一种方式是在TCP连接发起端的通信设备向响应端的通信设备发送Syn报文的第一次握手过程中,每台转发设备均接收该Syn报文并转发,若判断出该Syn报文中的MSS选项的值大于本机的MTU值,则表示该Syn报文的MSS选项的值不是 TCP传输路径中最小的MTU值,并因此在转发之前将该Syn报文的MSS选项的值修改为本机的MTU值。这样,虽然Syn报文中的MSS选项的值在该Syn报文从发起端的通信设备发出时值为发起端通信设备的MTU值,但经过所有转发设备的逐跳比较后,该Syn报文中的MSS选项的值即可最终变为所有转发设备的MTU值中最小的一个,即,Syn报文具有搜索TCP传输路径中的最小MTU值的作用。并且,第二次握手时的Syn+Ack报文、以及第三次握手时的 Ack报文中的MSS选项的值也都设置为Syn报文的MSS选项被修改为最小MTU值的最终值, 从而使得两端的通信设备通过三次握手即可学习到PMTU。图3a至图3c为本发明实施例中在建立TCP连接时实现的一种PMTU学习过程的示意图。在图3a至图3c中,以欲建立TCP连接的通信设备I与通信设备2之间包含转发设备A和B为例。首先参见图3a示出的第一次握手过程通信设备I向通信设备2发送Syn报文,在该Syn报文从通信设备I发出时,该 Syn报文中的MSS选项的值为通信设备I的MTU值3000 ;转发设备A接收到通信设备I向通信设备2发送的Syn报文,并判断出该Syn报文中的MSS选项的值3000大于本机的MTU值2000,因此,先将该Syn报文中的MSS选项的值修改为本机的MTU值2000,然后再将该Syn报文继续向通信设备2转发;转发设备B接收到通信设备I向通信设备2发送的Syn报文,并判断出该Syn报文中的MSS选项的值2000并未大于本机的MTU值2000,因此,不修改该Syn报文的MSS选项的值2000、并将该Syn报文继续向通信设备2转发;通信设备2接收到Syn报文后即可识别出该Syn报文中的MSS选项的值2000。参见图3b示出的第二次握手过程通信设备2向通信设备I回应Syn+Ack报文,在该Syn+Ack报文从通信设备2发出时,该Syn+Ack报文中的MSS选项的值为Syn报文中的MSS选项在Syn报文到达通信设备2时的值2000、即通信设备2从Syn报文中识别出的MSS选项的值2000 ;转发设备B和转发设备A依次将接收到的MSS选项的值为2000的Syn+Ack报文向通信设备I转发;通信设备I接收到Syn+Ack报文后确认TCP连接建立成功,将该Syn+Ack报文中的MSS选项的值2000学习为TCP传输路径的PMTU、并一次建立正确的PMTU表项。
参见图3c示出的第三次握手过程通信设备I向通信设备2回应Ack报文,在该Ack报文从通信设备I发出时,该 Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在Syn+Ack报文到达通信设备I 时的值2000、即通信设备I从Syn+Ack报文中学习得到PMTU的MSS选项的值2000 ;转发设备A和转发设备B依次将接收到的MSS选项的值为2000的Ack报文向通信设备2转发;通信设备2接收到Ack报文后确认TCP连接建立成功,将该Ack报文中的MSS选项的值2000学习为TCP传输路径的PMTU、并一次建立正确的PMTU表项。这样,依据学习到的PMTU,通信设备I和通信设备2在后续通信过程中均不会发出长度超过2000字节的通信报文,从而避免像现有技术那样通过逐跳探测的方式进行PMTU 学习。图4为本发明实施例中用于PMTU学习的方法的一种流程示意图。如图4所示,基于如图3a至图3b所示过程的基本原理,本发明实施例中用于PMTU学习的方法可以包括在每台转发设备执行的如下步骤步骤401,接收TCP连接的发起端通信设备向响应端通信设备发送的Syn报文;其中,在接收到的Syn报文从发起端通信设备发出时,该Syn报文中的MSS选项的值为发起端通信设备的MTU值;步骤402,判断接收到的Syn报文中的MSS选项的值是否大于本机的MTU值,若是, 则跳转至步骤403,否则跳转至步骤404 ;步骤403,将接收到的Syn报文中的MSS选项的值修改为本机的MTU值,然后跳转至步骤404 ;步骤404,将Syn报文继续向响应端通信设备转发;步骤411,接收响应端通信设备向发起端通信设备回应的Syn+Ack报文;其中,在 Syn+Ack报文从响应端通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的 MSS选项在Syn报文到达响应端通信设备时的值;步骤412,将Syn+Ack报文继续向发起端通信设备转发;在本步骤之后,发起端通信设备即可将Syn+Ack报文中的MSS选项的值(即TCP 传输路径中的最小MTU值)学习为TCP传输路径中的PMTU、并建立PMTU表项;步骤421,接收发起端通信设备向响应端通信设备回应的Ack报文;其中,在Ack 报文从发起端通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在Syn+Ack报文到达发起端通信设备时的值(即被发起端学习为PMTU的TCP传输路径中的最小MTU值);步骤422,将Ack报文继续向响应端通信设备转发;在本步骤之后,响应端通信设备即可将Ack报文中的MSS选项的值(即TCP传输路径中的最小MTU值)学习为TCP传输路径中的PMTU、并建立PMTU表项。至此,本流程结束、并可开始发起端通信设备与相应端通信设备之间的通信报文交互,即,本流程之后可以进一步包括接收在发起端通信设备与响应端通信设备之间交互的通信报文并转发。本发明实施例采用的另一种方式除了像上一种方式那样利用转发设备对Syn报文中的MSS选项的值进行修改之外,还进一步采用了如下的优化在响应端的通信设备向发起端的通信设备回应Syn+Ack报文的第二次握手过程中,每台转发设备均接收该 Syn+Ack报文并转发,若还判断出该Syn+Ack报文中的MSS选项的值大于本机的MTU值,则表示TCP传输路径中最小的MTU值已发生变化、且该Syn+Ack报文的MSS选项的值不是TCP 传输路径中变化后的最小MTU值,并因此在转发之前将该Syn+Ack报文的MSS选项的值修改为本机的MTU值。如此一来,即便TCP传输路径中有转发设备的MTU值变化、并导致TCP传输路径中最小的MTU值发生变化,Syn+Ack报文经过所有转发设备的逐跳比较后也能够最终变为变化后的最小MTU值,即,Syn+Ack报文具有复核TCP传输路径中的最小MTU值的作用。并且,第三次握手时的Ack报文中的MSS选项的值也都设置为Syn+Ack报文的MSS选项的与最小MTU值相等的最终值,从而使得两端的通信设备通过三次握手即可学习到PMTU、并避免由于转发设备的MTU值在第一次握手完成之后发生变化而对PMTU学习产生的影响。图5a至图5c为本发明实施例中在建立TCP连接时实现的一种PMTU学习过程的示意图。在图5a至图5c中,以欲建立TCP连接的通信设备I与通信设备2之间包含转发设备A和B为例。图5a示出的第一次握手过程与前文提及的如图3a所示出的第一次握手过程相同,此处不再赘述。参见图5b示出的第二次握手过程通信设备2向通信设备I回应Syn+Ack报文,在该Syn+Ack报文从通信设备2发出时,该Syn+Ack报文中的MSS选项的值为Syn报文中的MSS选项在Syn报文到达通信设备2时的值2000、即通信设备2从Syn报文中识别出的MSS选项的值2000 ;转发设备B接收到通信设备2向通信设备I回应的Syn+Ack报文,由于转发设备B的MTU值在转发第一次握手的Syn报文之后已变为1000,因此,转发设备B判断出该 Syn+Ack报文中的MSS选项的值2000大于本机变化后的MTU值1000,从而,转发设备B先将该Syn+Ack报文中的MSS选项的值修改为本机的MTU值1000,然后再将该Syn+Ack报文继续向通信设备I转发;转发设备A接收到通信设备2向通信设备I发送的Syn+Ack报文,并判断出该Syn 报文中的MSS选项的值1000并未大于本机的MTU值2000,因此,不修改该Syn+Ack报文的 MSS选项的值1000、并将该Sy+Ack η报文继续向通信设备I转发;通信设备I接收到Syn+Ack报文后确认TCP连接建立成功,将该Syn+Ack报文中的MSS选项的值1000学习为TCP传输路径的PMTU、并一次建立正确的PMTU表项。参见图5c示出的第三次握手过程通信设备I向通信设备2回应Ack报文,在该Ack报文从通信设备I发出时,该 Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在Syn+Ack报文到达通信设备I 时的值1000、即通信设备I从Syn+Ack报文中学习得到PMTU的MSS选项的值1000 ;转发设备A和转发设备B依次将接收到的MSS选项的值为1000的Ack报文向通信设备2转发;通信设备2接收到Ack报文后确认TCP连接建立成功,将该Ack报文中的MSS选项的值1000学习为TCP传输路径的PMTU、并一次建立正确的PMTU表项。
这样,依据学习到的PMTU,通信设备I和通信设备2在后续通信过程中均不会发出长度超过1000字节的通信报文,从而避免像现有技术那样通过逐跳探测的方式进行PMTU 学习。图6为本发明实施例中用于PMTU学习的方法的一种流程不意图。如图6所不,基于如图5a至图5b所示过程的基本原理,本发明实施例中用于PMTU学习的方法可以包括在每台转发设备执行的如下步骤步骤601 步骤604与前文如图4所示的步骤401 步骤404相同,此处不再赘述;步骤611,接收响应端通信设备向发起端通信设备回应的Syn+Ack报文;其中,在 Syn+Ack报文从响应端通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的 MSS选项在Syn报文到达响应端通信设备时的值;步骤612,判断接收到的Syn+Ack报文中的MSS选项的值是否大于本机的MTU值, 若是,则跳转至步骤613,否则跳转至步骤614 ;步骤613,将接收到的Syn+Ack报文中的MSS选项的值修改为本机的MTU值,然后跳转至步骤614 ;步骤614,将Syn+Ack报文继续向响应端通信设备转发;在本步骤之后,发起端通信设备即可将Syn+Ack报文中的MSS选项被修改后的值 (即TCP传输路径中变化后的最小MTU值)学习为TCP传输路径中的PMTU、并建立PMTU表项;步骤621 步骤6211与前文如图4所示的步骤421 步骤422相同,此处不再赘述。至此,本流程结束、并可开始发起端通信设备与相应端通信设备之间的通信报文交互,即,本流程之后可以进一步包括接收在发起端通信设备与响应端通信设备之间交互的通信报文并转发。需要说明的是,上述两种方式均优选地采用发起端通信设备在接收到Syn+Ack 报文(即确认TCP连接建立成功)之后再学习PMTU、并建立PMTU表项,以及,响应端设备在接收到Ack报文(即确认TCP连接建立成功)之后再学习PMTU、并建立PMTU表项,这是为了能够使建立的PMTU表项具有更高的安全性。但在实际应用中,发起端通信设备可以在 TCP连接成功建立之前就按照本机的MTU来建立PMTU表项,并在接收到Syn+Ack报文(即确认TCP连接建立成功)之后再重新学习PMTU、并更新PMTU表项,响应端通信设备也可以在TCP连接成功建立之前就按照本机的MTU来建立PMTU表项,并在接收到Ack报文(即确认TCP连接建立成功)之后再重新学习PMTU、并更新PMTU表项。除了按照前文提供的方式在TCP连接建立过程中学习PMTU之外,本发明实施例还可以由转发设备进一步判断Ack报文中的MSS选项的值是否大于本机的MTU值、以及判断出通信报文中的MSS选项的值是否大于本机的MTU值,若判断出Ack报文或通信报文中的 MSS选项的值大于本机的MTU值,则进一步在转发Ack报文或通信报文之前将Ack报文或通信报文中的MSS选项的值修改为本机的MTU值。也就是说,本发明实施例还可以在TCP连接建立成功之后,通过对Ack报文、通信报文中的MSS选项的修改而使通信设备能够及时地响应PMTU后续可能出现的变化,从而尽可能地避免出现由于转发设备的MTU值在TCP连接建立成功后变化所导致的逐跳方式的 PMTU学习。按照与上述方法相同的原理,本发明实施例中还提供了一种用于PMTU学习的装置,该装置可以包括第一模块,用于接收发起端通信设备向响应通信设备发送的Syn报文并转发,若判断出Syn报文中的MSS选项的值大于本机的MTU值,则在转发之前将Syn报文中的MSS 选项的值修改为本机的MTU值;其中,在Syn报文从发起端通信设备发出时,Syn报文中的 MSS选项的值为发起端通信设备的MTU值;第二模块,用于接收响应端通信设备向发起端通信设备发送的Syn+Ack报文并转发;其中,在Syn+Ack报文从响应端通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn 报文中的MSS选项在Syn报文到达响应端通信设备时的值;第三模块,用于接收发起端通信设备向响应通信设备发送的Ack报文并转发;其中,在Ack报文从发起端通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的 MSS选项在Syn+Ack报文到达发起端通信设备时的值。此外,第二模块若进一步判断出Syn+Ack报文中的MSS选项的值大于本机的MTU 值,则可以进一步在转发之前将Syn+Ack报文中的MSS选项的值修改为本机的MTU值。而且,为了提高PMTU表项的安全性,Syn+Ack报文在到达发起端通信设备后,发起端通信设备的PMTU学习才会被触发,从而由发起端通信设备将Syn+Ack报文中的MSS选项的值学习为PMTU、并建立PMTU表项;Ack报文在到达响应端通信设备后,响应端通信设备的 PMTU学习才会被触发,从而由响应端通信设备将Ack报文中的MSS选项的值学习为PMTU、 并建立PMTU表项。更优地,为了适应转发设备的MTU值有可能在TCP连接建立成功后发生变化的情况第三模块若进一步判断出Ack报文中的MSS选项的值大于本机的MTU值,则可以进一步在转发之前将Ack报文中的MSS选项的值修改为本机的MTU值;本发明实施例中用于PMTU学习的装置还可以进一步包括第四模块,用于接收在发起端通信设备与响应端通信设备之间交互的通信报文并转发,若判断出通信报文中的 MSS选项的值大于本机的MTU值,则在转发之前将该通信报文中的MSS选项的值修改为本机的MTU值;其中,在通信报文从发起通信设备发出时,通信报文中的MSS选项的值为发起端通信设备学习到的PMTU ;在通信报文从响应端通信设备发出时,通信报文中的MSS选项的值为响应通信设备学习到的PMTU。图7为应用本发明实施例中用于PMTU学习的装置的硬件框架示意图。如图7所示,转发设备的硬件架构通常包括挂接在总线上的CPU芯片、内存、转发芯片、以及端口物理层芯片;其中CPU芯片承载有本发明实施例中的上述装置、并用于实现该装置的所有功能;内存用于存放CPU芯片进行处理时的各种临时数据;转发芯片用于通过端口物理层芯片接收报文,并将需要CPU处理的报文(例如Syn 报文、Syn+Ack报文、Ack报文、以及通信报文)上报至CPU芯片,以及,将需要直接转发的报文(例如Syn报文、Syn+Ack报文、Ack报文、以及通信报文)通过端口物理层芯片发出;
端口物理层芯片用于驱动转发设备的端口作为入端口接收报文、以及作为出端口发送报文。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种用于PMTU学习的方法,其特征在于,包括步骤a、接收第一通信设备向第二通信设备发送的Syn报文并转发,若判断出Syn报文中的MSS选项的值大于本机的MTU值,则在转发之前将Syn报文中的MSS选项的值修改为本机的MTU值;其中,在Syn报文从第一通信设备发出时,Syn报文中的MSS选项的值为第一通信设备的MTU值;步骤b、接收第二通信设备向第一通信设备发送的Syn+Ack报文并转发;其中,在 Syn+Ack报文从第二通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的MSS 选项在Syn报文到达第二通信设备时的值;步骤C、接收第一通信设备向第二通信设备发送的Ack报文并转发;其中,在Ack报文从第一通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在 Syn+Ack报文到达第一通信设备时的值。
2.根据权利要求I所述的方法,其特征在于,所述步骤b若进一步判断出Syn+Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Syn+Ack报文中的MSS选项的值修改为本机的MTU值。
3.根据权利要求I或2所述的方法,其特征在于,Syn+Ack报文在到达第一通信设备后触发第一通信设备将Syn+Ack报文中的MSS选项的值学习为PMTU、并建立PMTU表项,Ack 报文在到达第二通信设备后触发第二通信设备将Ack报文中的MSS选项的值学习为PMTU、 并建立PMTU表项。
4.根据权利要求3所述的方法,其特征在于,所述步骤c若进一步判断出Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Ack报文中的MSS选项的值修改为本机的MTU值。
5.根据权利要求3所述的方法,其特征在于,进一步包括步骤d、接收在第一通信设备与第二通信设备之间交互的通信报文并转发,若判断出通信报文中的MSS选项的值大于本机的MTU值,则在转发之前将该通信报文中的MSS选项的值修改为本机的MTU值;其中,在通信报文从第一通信设备或第二通信设备发出时,通信报文中的MSS选项的值为第一通信设备或第二通信设备学习到的PMTU。
6.一种用于PMTU学习的装置,其特征在于,包括第一模块,用于接收第一通信设备向第二通信设备发送的Syn报文并转发,若判断出 Syn报文中的MSS选项的值大于本机的MTU值,则在转发之前将Syn报文中的MSS选项的值修改为本机的MTU值;其中,在Syn报文从第一通信设备发出时,Syn报文中的MSS选项的值为第一通信设备的MTU值;第二模块,用于接收第二通信设备向第一通信设备发送的Syn+Ack报文并转发;其中, 在Syn+Ack报文从第二通信设备发出时,Syn+Ack报文中的MSS选项的值为Syn报文中的 MSS选项在Syn报文到达第二通信设备时的值;第三模块,用于接收第一通信设备向第二通信设备发送的Ack报文并转发;其中,在 Ack报文从第一通信设备发出时,Ack报文中的MSS选项的值为Syn+Ack报文中的MSS选项在Syn+Ack报文到达第一通信设备时的值。
7.根据权利要求6所述的装置,其特征在于,所述第二模块若进一步判断出Syn+Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Syn+Ack报文中的MSS选项的值修改为本机的MTU值。
8.根据权利要求6或7所述的装置,其特征在于,Syn+Ack报文在到达第一通信设备后触发第一通信设备将Syn+Ack报文中的MSS选项的值学习为PMTU、并建立PMTU表项,Ack 报文在到达第二通信设备后触发第二通信设备将Ack报文中的MSS选项的值学习为PMTU、 并建立PMTU表项。
9.根据权利要求8所述的装置,其特征在于,所述第三模块若进一步判断出Ack报文中的MSS选项的值大于本机的MTU值,则进一步在转发之前将Ack报文中的MSS选项的值修改为本机的MTU值。
10.根据权利要求8所述的装置,其特征在于,进一步包括第四模块,用于接收在第一通信设备与第二通信设备之间交互的通信报文并转发,若判断出通信报文中的MSS选项的值大于本机的MTU值,则在转发之前将该通信报文中的MSS 选项的值修改为本机的MTU值;其中,在通信报文从第一通信设备或第二通信设备发出时, 通信报文中的MSS选项的值为第一通信设备或第二通信设备学习到的PMTU。
全文摘要
本发明提供了一种用于PMTU学习的方法和装置。本发明在TCP连接的建立过程中,由转发设备对Syn报文的MSS选项的值进行修改、以使Syn报文中的MSS选项的值最终能够被修改为传输路径中所有转发设备的MTU值中最小的一个,并且,Syn报文中的MSS选项的最终值同样携带在Syn+Ack报文和Ack报文中,因此,通信设备即可在TCP连接过程中利用MSS选项的值来学习到PMTU、而无需在TCP连接建立之后的通信过程中通过逐跳方式学习PMTU,从而能够提高PMTU的学习速度、并节省学习PMTU所占用的网络带宽。本发明还可以通过转发设备修改Syn+Ack报文MSS选项的值来适应转发设备的MTU值变化。
文档编号H04L12/56GK102594677SQ20121003342
公开日2012年7月18日 申请日期2012年2月15日 优先权日2012年2月15日
发明者崔晓会 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1