发现路径最大传输单元尺寸的制作方法

文档序号:7752552阅读:204来源:国知局
专利名称:发现路径最大传输单元尺寸的制作方法
技术领域
本公开涉及基于数据包的网络的计算机网络中的通信。
背景技术
计算机网络是能够交换数据并共享资源的互连计算装置的集合。在基于数据包 (packet)的网络中,计算装置通过将数据分割成称为数据包的小块来传送数据,这些数据 包各自通过网络从源装置路由至目的装置。目的装置从这些数据包中提取数据,并将数据 组合成其起始形式。将数据分割成数据包使得源装置能够只重新发送那些在传输过程中可 能丢失的个别数据包。网络装置和网络链接根据能够在通过给定链接的两个给定装置间传输的数据的 数据包或其他块的尺寸来划界。上界通常称为“最大传输(transmission)单元(MTU) ”, 还通常称为“最大传递(transfer)单元”。RFC 791确定MTU下界为576字节。也就是说, RFC 791要求网络装置和网络链接能够支持至少576字节的MTU。然而,制造商有支持更 大MTU的自由,并且许多制造商常常会这么做。RFC 791的更多细节在1981年9月的南加 利福尼亚大学信息科学学会的 “INTERNET PROTOCOL DARPA INTERNETPROGRAM PROTOCOL SPECIFICATION”中可以找到,其全部内容通过引用结合于此。当两个网络装置间的路由或路径的两个部分支持不同MTU时,参与通信会话的装 置之一通常确定路径的MTU。RFC 1191描述的这样做的一种传统方法涉及使用因特网控制 消息协议(ICMP)来确定路径的MTU。特别地,RFC 1191通过发送多个不同尺寸的数据包来 规定路径MTU的发现(PMTUD),其中,每个数据包都设置有“不分段”(DF)标记。当下游路 由器接收到对于后续链路而言太大且设置有DF标记的数据包时,该路由器将返回ICMP“目 的地不可到达”消息,并丢弃该数据包。然后,源路由器减小其假定的路径的PMTU尺寸,并 最终确定PMTU为接收ICMP目的地不可到达消息之前发送的倒数第二个数据包的尺寸。更 多细节可以在1990年11月的网络工作组、因特网工程任务组(IETF)的J. Mogul等人的题 为“PATH MTU DISCOVERY”的RFC 1191中找到,其全部内容通过引用结合于此。然而,在RFC 1191提出的方法中存在某些问题。例如,一些路由器和网络不支持 ICMP消息,而其他路由器和网络主动地阻塞ICMP消息。这经常导致被RFC 2923描述为 "PMTUD黑洞”的问题,并引起TCP超时。更多细节可以在2000年9月的网络工作组、因特 网工程任务组(IETF)的 J.Mogul 等人的题为"TCP PROBLEMSffITH PATH MTU DISCOVERY” 的RFC 2923中找到,其全部内容通过引用结合于此。此外,RFC 1191中提出的方法需要待发送数据包的多次循环(iteration),通常 没有有意义的数据,而仅是为了发现PMTU。这导致了带宽浪费和通信延迟。此外,为了 PMTUD而支持ICMP的系统可能会受拒绝服务(DoS)攻击的侵害,拒绝服务攻击被设计用来 利用该行为。

发明内容
总的来说,本公开描述了用于发现网络路径的最大传输单元(MTU)的技术。该技 术涉及一种源网络装置,其诸如通过使用传统TCP三次握手与目的网络装置建立通信会 话,然后发送携带应用层数据并被标记为不分段转发的第一数据包。也就是说,源装置发送 第一数据包并设置第一数据包的“不分段”(DF)标记,该第一数据包携带有连接至源装置的 链路的最大支持数据包尺寸的应用层数据。沿源装置和目的网络装置间的路由的路由器或者其他中间网络装置被配置为检 查相对于将路由器沿路由连接至下一跳的链路的MTU的所接收到的数据包的尺寸。当携带 了应用层数据的数据包的尺寸大于链路的MTU时,并且当设置了 DF标记时,路由器通过仅 发送不会超过该MTU的第一数据包的部分并丢弃其余部分来修改第一数据包,以适应链路 的MTU。路由器将数据包的该部分重新构造为真正的IP数据报,而不对数据包进行分段。 为了构造真正的IP数据报,路由器还更新TCP和IP报头,例如,IP长度值、IP校验和、TCP 长度值、以及TCP校验和。在一些实例中,路由器仅修改IP长度值和/或TCP长度值,而不 重新计算该第一数据包的校验和。当目的网络装置(即,预期的数据包接收装置)接收到第一数据包的这一部分 时,目的装置确认接收到第一数据包的这一部分。特别地,目的装置基于接收到的第一数 据包的这一部分的尺寸和起始序列号来计算确认序列号。例如,当由目的网络装置接收到 的第一数据包的这一部分包括500字节,并且第一序列号(起始序列号)为X时,目的网 络装置发送确认序列号为“X+501”。出于该实例的目的,起始序列号X包括三次握手后的 用于发起网络会话的起始序列号,而不是包含在同步数据包(SYN数据包)中的起始序列 号。然后,源网络装置使用确认序列号确定从起始网络装置到目的装置的网络路径的路径 MTU(PMTU)为500字节。也就是说,源装置计算PMTU等于确认序列号减去起始序列号再减 1,如,501-(X+1)。然后,在该实例中,源网络装置以最大500字节的增量发送网络会话的字 节501 1000和后续字节。此外,根据本文描述的技术,发起通信会话的源网络装置确定第一数据包的“丢失” 部分是由于超过了路径的MTU而不是由于例如拥塞(congestion)而丢失的。因此,直到网络 路径的MTU已被最终确定,源网络装置才会响应于接收到来自目的网络装置的确认而减小其 传输速率或发起拥塞控制处理。也就是说,实施本公开的技术的网络装置被配置为,直到丢失 部分尺寸等于发送方已经发送的尺寸,才将第一数据包的丢失部分视为拥塞控制的标记。在一个实例中,一种方法包括使用中间网络装置接收包含报头(header)和有效 负载(payload)的数据包,其中,数据包的报头指示数据包不被分段;并确定到数据包的下 一跳的链路的链路最大传输单元(链路MTU)。当数据包尺寸超过链路MTU时,该方法包括 使用中间网络装置从数据包的有效负载中去除数据的一部分,丢弃去除部分,根据去除部 分调整数据包的报头,并将数据包转发到下一跳。在另一实例中,中间网络装置包括多个接口卡,被配置为接收和转发网络的数据 包;以及转发引擎,被配置为确定多个接口卡中通过其转发接收的数据包的一个接口卡,并 确定与该多个接口卡中的一个接口卡对应的链路的链路最大传输单元(链路MTU),其中, 接收的数据包包括报头和有效负载,其中,数据包的报头指示数据包不被分段。中间网络装 置还包括路径最大传输单元确定(PMTUD)模块,被配置为确定接收的数据包尺寸是否超过链路MTU,并且当接收的数据包尺寸超过链路MTU时,从数据包的有效负载中去除数据的一 部分,丢弃去除部分,并根据去除部分调整接收的数据包的报头。在另一实例中,一种计算机可读介质(诸如计算机可读存储介质)包含(例如,编 码有)指令,该指令使中间网络装置的可编程处理器接收包含报头和有效负载的数据包, 其中,数据包的报头指示数据包不被分段,确定到数据包的下一跳的链路的链路最大传输 单元(链路MTU),当数据包尺寸超过链路MTU时,使用中间网络装置从数据包的有效负载中 去除数据的一部分,丢弃去除部分,根据去除部分调整数据包的报头,并将数据包转发到下 一跳。在另一实例中,一种方法包括使用第一网络装置将数据包发送到第二网络装置, 其中,数据包包括报头和有效负载,其中,有效负载包括应用层数据,报头包括起始序列号, 其中,数据包的报头指示数据包不被分段;接收数据包包含确认序列号的确认;以及使用 第一网络装置根据确认序列号和起始序列号间的差值计算路径最大传输单元(PMTU)。本公开的技术可以提供多个优点。例如,应用本公开的技术的网络装置可以确定 到端点网络装置间的单循环中(即,单通信中)的目的装置的网络路径的MTU。由于本公开 的技术不依赖于因特网控制消息协议(ICMP)消息,因此即使当沿路径的网络装置或网络 已经被配置为阻塞ICMP消息时,该技术也可以用于确定网络路径的MTU。因此,根据这些技 术,网络装置可以安全地使ICMP无效,而不会丧失发现PMTU的能力。虽然沿路径的一个或多个路由器可以为了发现PMTU的目的而对网络会话的第一 数据包进行分段,但是沿路径的路由器通常不需要在网络会话期间参与数据包分段,因此 相对于分段,减小了路由器的负荷。由于用于确定路径的MTU的网络会话的第一数据包包 括网络会话的实际数据,因此不需要为了成功实施这些技术而测试数据包。因此,本公开的 技术可以减少在网络会话期间发送的不重要的或无内容的数据包。由于网络会话的所有数 据包可以包括TCP段,故用于确定PMTU的数据包将不太可能被入侵检测系统阻塞或丢弃, 这是因为数据包符合TCP。结合附图和下面的描述给出一个或多个实例的细节。其他特征、目标、和优点将从 描述和附图以及权利要求中显而易见。


图1是示出其中的源网络装置确定路径最大传输单元(PMTU)的示例性系统的框 图。图2是示出用于计算网络路径的PMTU的网络装置的部件的示例性布置的框图。图3是示出参与PMTU的计算的示例性路由器的框图。图4是示出用于计算网络路径的MTU的示例性方法的流程图。图5是示出修改数据包以辅助网络装置计算路径的MTU的示例性方法的流程图。
具体实施例方式图1是示出示例性系统2的框图,其中,源网络装置10根据本公开的技术确定路 径最大传输单元(PMTU)。在图1的实例中,源网络装置10确定源网络装置10和目的网络 装置16间的路径26的PMTU。源网络装置10通过路径26连接至目的网络装置16,该路径遍历网络18,并且特别地,穿过中间路由器12和14。虽然在图1的实例中描述了两个路 由器,但是本公开的技术适用于在两个端点装置(诸如源网络装置10和目的网络装置16) 间的任意数量和任意类型的中间网络装置。例如,这样的中间装置包括路由器、网关、交换 机、集线器、网桥、入侵检测和防护装置、防火墙、无线接入点、调制解调器、和其他这种网络
直o在图1的实例中,源网络装置10经由网络链路20连接至路由器12。路由器12 经由网络链路22连接至路由器14。路由器14经由网络链路24连接至目的网络装置16。 链路20、22和24中的任一个可以包括无线或有线链路,例如,以太网链路、吉比特以太网 链路、无线802. 11链路、卫星链路、电缆链路、数字用户线(DSL)链路、铜PHY链路、光纤链 路、或其他合适的物理或无线传输介质。根据本公开的技术,源网络装置10计算路径26的 PMTU为链路20、22和24的最小链路MTU。链路MTU是连接了两个网络装置的链路(或网络连接)的MTU。也就是说,第一 链路MTU限定了源网络装置10和路由器12之间的链路20。链路20的第一链路MTU是可 以穿过链路20在源网络装置10和路由器12之间发送的最大数据单元。类似地,第二链路 MTU限定了路由器12和路由器14间的链路22,第三链路MTU限定了路由器14和目的网络 装置16间的链路24。路径MTU是由沿两个端点装置间的路径的每个网络装置和网络链路 支持的MTU。根据本公开的技术,源网络装置10计算路径26的路径MTU为最小值(第一链 路MTU、第二链路MTU、第三链路MTU)。也就是说,源网络装置10确定路径26的PMTU为路 径26的全部链路MTU中的最小值。在一个实例中,链路20的第一链路MTU为3,300字节,链路22的第二链路MTU为 5,000字节,链路24的第三链路MTU为1,500字节。在该实例中,源网络装置10将确定路 径26的PMTU为1,500字节,这是因为1,500字节是所有链路MTU中的最小值。通过确定 PMTU等于链路MTU的最小值,沿路径的每个装置和链路将能够支持所确定的PMTU。也就是 说,每个装置和链路将支持至少与PMTU的传输单元一样大的传输单元。在上述的源网络装 置10、路由器12和链路20包含3,300字节的链路MTU的实例中,源网络装置10、路由器12 和链路20还将支持1,500字节的传输单元。源网络装置10和路由器12、14协调行动来确定路径26的PMTU。也就是说,源网 络装置10以及路由器12和14中的每一个均根据本公开的技术进行配置。在该实例中用作 服务器的目的网络装置16无需为了源网络装置10能够计算路径26的PMTU而进行特别配 置。源网络装置10穿过路径26向目的网络装置16发送包含应用数据的第一数据包。涉 及本公开中的“第一数据包” 一般地是指网络会话建立后(例如,在TCP三次握手之后)的 应用层数据的第一数据包。源网络装置10设置第一数据包的“不分段(DF)”标记,以通知 路由器12和14不对该数据包进行分段。一般地,贯穿系统2交换的数据包包括一个或多个报头和有效负载。数据包通常 包括开放式系统互连(0SI)网络模型的每个层的报头。在TCP/IP数据包的实例中,这种数 据包包括TCP报头和IP报头。数据包的有效负载一般地包括应用层数据。根据本公开的 技术,如在下文中更详细地描述的,当数据包的尺寸大于到下一跳的链路的链路MTU时,并 且当设置了 IP报头的“不分段(DF)”标记时,路由器12和14从数据包的有效负载中去除 数据,并可以修改数据包的报头的各种数据。IP报头的DF标记指示不对数据包进行分段。虽然本公开通常将DF标记称为指示不对数据包进行分段的标记,但是其他实例可以使用 其他方法(诸如不同标记或比特)来指示不对数据包进行分段。这样,本公开的技术通常适 用于包含报头的数据包,其中,数据包的报头指示不对数据包进行分段。在一个实例中,对 于TCP/IP数据包,路由器12和14可以修改TCP尺寸值、IP长度值、TCP报头和/或IP报 头的校验和中的一个或多个。在路由器12和14不调整TCP报头或IP报头的校验和的一 些实例中,目的网络装置16可以被配置为执行不严格的校验和评估。也就是说,由于已经 去除了数据而没有重新计算校验和,因此校验和将几乎肯定是错误的。通过省略校验和重 新计算而产生的路由器性能的折衷的可能性可能会大于由端点装置(例如,由目的网络装 置16)最终接收到的有效负载中的数据误差的可能性。在一些实例中,沿源网络装置和目 的网络装置间的路由的路由器仅不对TCP校验和进行重新计算,并且目的网络装置不验证 TCP校验和;因此IP校验和可以继续沿路由进行重新计算并在目的网络装置处进行验证。路由器12和14配置为对设置了 DF标记的数据包以不同于这种数据包的传统处 理的方式来进行处理。传统路由器在接收到设置了 DF标记且超过下一跳的链路MTU尺寸的 数据包时,不对该数据包进行分段,并可以配置为丢弃该数据包并向发送装置发送因特网 控制消息协议(ICMP)消息,特别是,指示数据包太大而不能被分段的消息。根据本文描述 的技术,另一方面,路由器12和14被配置为以与传统路由器不同的方式处理设置了 DF标 记的数据包。例如,路由器12和14被配置为修改这种数据包,使得适合下一跳的链路MTU 的数据包有效负载部分将仍被传输,而数据包的其余内容从第一数据包被去除并丢弃。修 改的数据包包括真正的IP数据报并且不是分段的数据包。例如,修改的数据包不具有“更 多分段”标记设置。修改的数据包还不具有分段偏移信息设置。例如,根据上述的示例性链路MTU,源网络装置10可以向路由器12发送包含 3,300字节数据的第一数据包。源网络装置10还设置第一数据包的DF标记。当接收到第 一数据包时,路由器12确定3,300字节小于链路22的链路MTU(5,000字节),因此路由器 12将数据包转发到路由器14。然而,在接收到第一数据包时,路由器14确定3,300字节 大于链路24的链路MTU(1,500字节)。因此,路由器14从第一数据包中丢弃数据,使得修 改的数据包不会超过1,500字节。在该实例中,路由器14从第一数据包的有效负载中去除 1,800字节的应用层数据。路由器14还根据剩余数据对修改的第一数据包的报头进行修改,例如,传输控制 协议(TCP)报头和因特网协议(IP)报头。在一个实例中,路由器14根据修改的第一数据 包的新的TCP段尺寸来设置TCP报头的尺寸字段。路由器14还可以重新计算TCP报头的 校验和。在一个实例中,路由器14还根据修改的第一数据包的新的IP数据报尺寸来设置 IP报头的长度字段。路由器14还可以重新计算IP报头的校验和。在不同的实例中,路由 器14以任意组合执行这些报头修改中的任一个或全部。此外,路由器12和14配置为修改数据包,使得下游装置仍会认为该数据包是正确 形成的完整数据包而不是数据包分段。例如,在一些实施例中,路由器14不设置IP报头 的“更多分段(MF)”标记,也不设置IP报头中的分段偏移值的值。例如,在设置了 MF比特 的一些实例中,路由器14清除IP报头的MF标记,以指示修改的数据包不包括额外的片段。 因此,由路由器14向目的网络装置16发送的数据包被认为是真正的IP数据报而不是分段 的数据包。正如在下文中描述的,源网络装置10将在后续通信中发送第一数据包中由路由器14丢弃的部分。因此,当根据这些技术修改数据包时,路由器12和14无需消耗资源来 执行分段,而是仅仅重新计算数据包报头的不同部分。因此,路由器14可以丢弃数据包有 效负载的去除部分,而不将该去除部分转发到任何其他网络装置。由于仅修改了报头的特 定部分,因此路由器12和14可以在转发平面执行这些技术,而不会增加其他处理或硬件的 负担。路由器14还无需向源网络装置10或路由器12发送用来指示该数据包对于链路MTU 来说太大的ICMP消息。在一个实例中,路由器14不重新计算第一数据包的任一校验和。相反,在该实例 中,路由器12、14和网络装置10、16配置为使用网络通信的第一数据包或前N个数据包的 “不严格的”校验和。因此,在该实例中,虽然TCP报头和IP报头的校验和不能准确地表示 其有效负载的真实性,但目的网络装置16仍将认为数据是准确地。在一个实例中,当设置 了数据包的DF标记时,目的网络装置16应用不严格的校验和,当没有设置DF标记时,使用 校验和验证数据。在接收到来自路由器14的修改的第一数据包后,目的网络装置16确认接收实际 接收到的字节。也就是说,根据TCP,目的网络装置16向源网络装置10发送包含序列号的 确认,该序列号对应于起始序列号(在TCP三次握手之后)加上在修改的第一数据包中接 收到的字节数。在上述实例中,确认中的序列号对应于起始序列号加1,500。由于修改的数 据包包括真正的IP数据报而非分段,因此目的网络装置16根据TCP确认接收到该数据,并 且目的网络装置16无需接收用来确认接收到该修改的数据包的任何特别配置。在一些实 例中,目的网络装置16将修改的第一数据包的尺寸记录为路径26的PMTU。在一些实例中,目的网络装置16支持选择确认(SACK)。当网络装置支持选择确 认时,网络装置明确地对每个接收的数据包进行确认,这与标准TCP累积确认方案不同。当 目的网络装置16通常配置为支持SACK时,目的网络装置16可以对接收到的通信会话的第 一数据包或前N个数据包的SACK进行无效。特别地,源网络装置10不在三次握手的SYN 数据包中设置允许SACK的选项。这样,由于SACK将被无效,因此目的网络装置16将不执 行 SACK。在 1996 年 10 月 Sun 微系统(Sun Microsystems)的 M. Math is 等人的题为 “TCP Selective Acknowledgement Options”的 RFC 2018 中描述了关于 SACK及其无效的更多细 节,其全部内容通过引用结合于此。在接收到来自目的网络装置16的确认后,源网络装置10基于确认中的序列号计 算PMTU。在一个实例中,源网络装置10将确认的序列号减去起始序列号加1(INS+1)的值, 并将该差值设置为路径26的PMTU。也就是说,对于起始序列号X,以及确认序列号Y,源网 络装置10通过计算PMTU = Y-(X+1)确定路径26的PMTU。在源网络装置10确定了路径26的PMTU后,源网络装置10在与目的网络装置16 的通信会话期间发送不大于确定的PMTU的数据包。在一些实例中,源网络装置10向目的 网络装置16发送消息(该消息指示确定的路径26的PMTU),使得目的网络装置16也不会 向源网络装置10发送大于路径26的PMTU的数据包。如上所述,在其他实例中,目的网络 装置16将接收到的修改的数据包尺寸记作路径26的PMTU。传统网络装置可以配置为当网络会话期间发送的数据没有全部被及时地确认时, 发起拥塞控制。然而,已经修改了源网络装置10,使得当目的网络装置16的确认小于源网 络装置10在第一数据包中发送的数据总量时,不发起拥塞控制。相反,源网络装置10配置为识别出第一数据包的数据丢失是由于第一数据包的尺寸超过路径16的PMTU引起的,而 不是由拥塞引起的。然而,在第一数据包之后,当目的网络装置16确认传输少于全部数据 时,源网络装置10可以发起拥塞控制。在一个实例中,对于数据包序列号X和接收的确认 Y,仅当Y-(X+1) =0或1时,源网络装置10发起拥塞控制。也就是说,目的网络装置16不 会接收到整个TCP段,在这种情况下源网络装置10发起拥塞控制。相反,当Y-(X+1) > 1 时,目的网络装置16接收到Y-(X+1)字节的数据。由于源网络装置10和目的网络装置16在配置PMTU后不发送大于路径26的PMTU 的数据包,因此路由器12和14无需对从源网络装置10发送到目的网络装置16的数据包 进行分段。因此,路由器12和14无需消耗计算资源对从源网络装置10到目的网络装置16 的网络会话的数据包进行分段。这可以有助于防止路由器12和14负担过重。就路由器12 和14修改任意数据包而言,路由器12和14可以修改数据包的TCP和/或IP报头,这可以 在路由器12和14的转发平面中完成。这样,源网络装置10能够不依赖于接收来自路由器12和14的ICMP消息而确定路 径26的PMTU。这是因为,路由器12和14无需支持或使能ICMP,路由器12和14可以对可 能引起拒绝服务的ICMP流攻击保持隐蔽。网络装置10和16同样无需为了成功地执行本 公开的技术而支持或使能ICMP。此外,源网络装置10能够确定单循环中路径26的PMTU, 而不向目的网络装置16发送测试或探测数据包。也就是说,在第一数据包已经被目的网络 装置16确认后,源网络装置10能够使用包含TCP三次握手后的应用层数据的第一数据包 来确定路径26的PMTU,而不发送不同尺寸的多个额外探测或测试数据包。源网络装置10 还能够动态和自动地确定路径26的PMTU,而不需要管理员来配置源网络装置10的PMTU。图2是示出计算网络路径的PMTU的源网络装置10的部件的示例性配置的框图。 与源网络装置10类似的其他网络装置,诸如以上参照图1描述的任何中间或端点网络装 置,可以包括参照图2的源网络装置10描述的特征。例如,源网络装置10可以包括计算 装置、工作站装置、膝上型计算机、台式计算机、服务器、打印机、个人数字助理(PDA)、蜂窝 电话或智能电话、路由器、网关、集线器、网桥、转换器、入侵检测和防护装置、或其他网络装 置。为了解释的目的,源网络装置10—般地描述为包括端点装置,诸如计算装置或服务器。在图2的实例中,源网络装置10包括用户接口模块32、控制单元34以及网络接口 42。用户接口模块32使得一个或多个用户接口装置(诸如显示器、键盘、鼠标、触摸屏、触 针、光笔、麦克风、扬声器或源网络装置10的其他用户接口装置)接收和/或呈现来自或到 达用户的数据。例如,用户接口模块32可以接收来自用户的请求,该请求用于发起与目的 网络装置16的网络会话(图2)。例如,当目的网络装置16包括Web服务器时,该请求可以 包括访问目的网络装置16的网页的请求。网络接口 42包括源网络装置10用以与网络18(图1)的装置(例如,路由器12) 进行通信的接口。网络接口 42可以包括网络接口卡(NIC)、以太网接口、吉比特以太网接 口、无线卡、电缆调制解调器、卫星调制解调器、电话调制解调器、DSL调制解调器或其他网 络接口中的一个或多个。网络接口 42还支持最大传输单元尺寸。在一些实例中,源网络装 置10包括多个网络接口,其每个都可以基于其自身接口、接口连接到的链路、以及这些链 路另一端的网络装置来支持不同MTU。在一个实例中,控制单元34包括用于执行本公开的一个或多个技术的硬件。在一些实例中,控制单元34包括用于执行存储器44中编码的指令的硬件。例如,控制单元34 可以包括一个或多个处理器、一个或多个微处理器、数字信号处理器(DSP)、特定用途集成 电路(ASIC)、现场可编程门阵列(FPGA)、或任何其他等效的集成或离散逻辑电路、或其任
思组合。存储器44可以包括一个或多个计算机可读存储介质,用于对使处理器执行不同 程序或函数的指令进行编码。例如,存储器44可以包括一个或多个硬盘、诸如⑶-ROM的 光学介质、软盘、闪存驱动、固态驱动、或其他磁、光、或闪存介质。存储器44可以编码有对 应于应用层处理36、传输层处理38、因特网层处理39、以及PMTUD模块40的指令。在一些 实例中,控制单元34从存储器44为这些模块提取并执行指令。在一些实例中,应用层处理 36、传输层处理38、因特网层处理39、以及PMTUD模块40中的任一个或全部可以包括独立 硬件模块,用于执行其具有的功能。在一些实例中,控制单元34还执行用户接口模块32和 /或网络接口 42的指令。在图2的实例中,控制单元34包括操作环境35和操作系统37。操作系统37对应于 端点网络装置的任何操作系统,例如,MicrosoftWindows、Linux、Unix、Solaris、FreeBSD、 或其他操作系统。在图2的实例中,操作系统37提供了传输层处理38、因特网层处理39、 以及PMTUD (PMTU发现)模块40。传输层处理38和因特网层处理39包括实施一个或多个 网络协议,例如TCP/IP、统一数据报协议(UDP)、端对端协议(PPP)、或其他传输和因特网层 通信协议。因特网层处理39还可以包括实施ICMP,尽管这对于本公开的技术而言并不是必 需的。在图2的实例中,PMTUD模块40由传输层处理38中的操作系统37来实施。在一 个实例中,PMTUD模块40被作为TCP实施的一部分来执行,以根据本公开的技术修改TCP。 这样,PMTUD模块40可以形成扩展的或修改的TCP协议的一部分。因此,PMTUD模块40可 以对应于修改的TCP处理。虽然将PMTUD模块40描述为在传输层运行,但是在一些示例性 实施中,例如,通过修改数据包的TCP报头和IP报头中的一个或两个并根据确认的TCP序 列号计算PMTU,该PMTUD模块可以在传输层和因特网层运行。操作环境35包括用于执行上述操作系统37的处理的环境,该环境与操作系统37 提供的业务交互。在操作环境35中执行的处理包括应用层处理36,其通常对应于源网络装 置10的特定应用。例如,应用层处理36可以包括Web浏览器、e-mail客户端、文件传输程 序、或用于执行与源网络装置10相关的各种任务的其他模块。PMTUD模块40包括本公开的用于发现网络路径的PMTU的技术的示例性实施例。 在一个实例中,PMTUD模块40设置网络会话的第一数据包的DF标记。在接收到第一数据包 的确认时,PMTUD模块40根据接收到的确认的序列号计算路径的PMTU。PMTUD模块40将 计算的每个网络会话的PMTU存储在存储器44中。在计算了网络会话的PMTU之后,控制单元34根据传输层处理38和/或因特网层 处理39的TCP或其他通信协议,重新发送从第一数据包中丢弃的数据。控制单元34根据 计算的网络会话的PMTU发送网络会话的后续数据包。PMTUD模块40可以计算多个网络会 话中的每个网络会话的不同PMTU。相应地,控制单元34可以根据确定的对应网络会话的 PMTU发送每个网络会话的数据包。图3是示出示例性路由器50的框图,该示例性路由器在源装置和目的装置之间,
13并配置为参与PMTU的计算。路由器50可以对应于路由器12或14(图1)。在图3的实例 中,路由器50包括接口卡70A 70N(多个IFC 70)和控制单元52。接口卡70中的每个均 包括输入链路72A 72N中的一条(输入链路72)和输出链路74A 74N中的一条(输出 链路74)的相应集合。例如,接口卡70A包括输入链路72A和输出链路74A。路由器50通 过输入链路72中的一条接收数据包,并通过链路74中的一条向外转发送往另一目的地的 数据包。路由器50还可以接收送往其自身的数据包,例如,来自网络中的其他路由器的包 含路由信息的数据包。路由引擎54可以使用送往路由器50的数据包的数据来计算通过网 络的路由,并根据一个或多个协议58将路由存储在路由信息库56中。控制单元52包括路由引擎54、转发引擎60、路由信息库(RIB) 56、以及转发信息库 (FIB)620在其他实例中,路由器可以包括用于路由引擎和转发引擎的不同的控制单元,或 者转发引擎和路由引擎可以分布在每个IFC中。控制单元52可以包括一个或多个处理器、 微处理器、DSP、FPGA、ASIC、或用于执行例如路由引擎54的其他电路或硬件。路由引擎54包括协议58,该协议包括一个或多个路由协议的实施,例如开放最 短路径优先(0SPF)、中间系统到中间系统(IS-IS)、边界网关协议(BGP)、路由信息协议 (RIP)、内部网关路由协议(IGRP)、外部网关协议(EGP)、或用于计算穿过网络的路由的其 他路由协议。路由引擎54将计算的路由存储在RIB 56中。转发引擎60接收来自IFC 70的数据包,并根据存储在FIB 62中的转发信息通过 IFC 70转发数据包。FIB 62—般地包括对应于存储在FIB 56中的一个或多个路由的转发 信息。鉴于存储在RIB 56中的路由包括贯穿网络的路由,例如,从一个端点到另一端点的 路由,因此FIB 62存储了包含(例如)查找表的数据,该查找表使得数据包的目的地与一 个IFC 70相关联。这样,在接收到数据包时,转发引擎60可以通过在FIB 62中执行查找 来识别数据包的目的地并确定通过其转发数据包的一个IFC 70。在图3的实例中,转发引擎60中的转发逻辑已经被修改为包括PMTUD模块64。 PMTUD模块64的指令可以存储在路由器50的存储器或其他计算机可读存储介质(未示出) 中并由控制单元52执行。备选地,PMTUD模块64可以嵌入用于执行参照PMTUD模块64描 述的功能的硬件中,例如,一个或多个ASIC中。在其他实例中,可以使用硬件、软件、或固件 的任意组合执行参照PMTUD模块64描述的功能。PMTUD模块64根据本公开的技术修改接收到的特定数据包。例如,当接收的数据 包大于到下一跳的链路的链路MTU时,并且当设置了接收的数据包的DF标记时,PMTUD模 块64从数据包中去除足够多的数据,使得修改的数据包不会超过到下一跳的链路的链路 MTU。在一些实例中,PMTUD模块64配置为仅当设置了 DF标记时才从数据包中去除和丢弃 数据。PMTUD模块64仅仅丢弃超过的、去除的数据,而不对数据包进行分段。这样,路由器 50无需保持被修改的数据包的副本,而是可以适当地修改数据包。此外,PMTUD模块64无 需调用分段逻辑对数据包进行分段,相反,PMTUD模块64仅仅对数据包报头和有效负载进 行修改,而不创建真正的数据包片段,让数据包处于将被下游装置识别为正确形成的完整 数据包的形式。这样,这些技术可以减小路由器50或其他下游装置因为执行分段逻辑而负 担过重或过于忙碌的可能性。当接收到大于链路MTU并设置了 DF标记的数据包时,路由器 50还不丢弃该数据包,并不向源装置发送ICMP “目的地不可到达”消息或其他拒绝消息。 相反,路由器50根据链路MTU,沿到下一跳的链路转发修改的数据包,以携带数据包的初始有效负载的部分。在一些实例中,转发引擎60在FIB 62的表中存储外向链路74的每个链 路 MTU。在一些实例中,PMTUD模块64对修改的数据包的TCP报头和IP报头的报头信息 进行修改。例如,PMTUD模块64可以修改TCP尺寸、TCP校验和、IP长度、以及IP校验和。 在一个实例中,PMTUD模块64仅调整IP报头中的长度值。在另一实例中,PMTUD模块64调 整IP报头中的长度值和TCP报头的尺寸值。在不同的实例中,PMTUD模块64可以重新计 算TCP校验和和IP校验和中的一个或两个,例如,还同时调整IP报头中的长度值或TCP报 头中的尺寸值中的一个或两个。一般地,PMTUD模块64确保修改的数据包包括完整的IP数据报。也就是说,PMTUD 模块64不在修改的数据包的IP报头中设置“更多分段”(MF)标记。PMTUD模块64也不为 修改的数据包设置IP报头中的偏移值的值。在一些实例中,PMTUD模块64清除IP报头的 MF标记和偏移值,以指示该数据包没有额外片段。这样,PMTUD模块64确保了修改的数据 包包括IP数据报,而不是数据包片段。转发引擎60、PMTUD模块64、以及FIB 62构成路由器50的通常称为转发平面66 的部分。为了完全在转发平面66的部件中的PMTU发现的目的,路由器50可以根据本公开 的技术修改数据包。因此,无需对现有的路由引擎54或现有的协议58进行修改来执行本 公开的技术。在一个实例中,诸如路由器50的中间网络装置包括多个接口卡,配置为接收和 转发网络的数据包;转发引擎,配置为确定多个接口卡中通过其中一个转发接收的数据包 的这一个接口卡,以及确定与该多个接口卡中的一个接口卡对应的链路的链路最大传输单 元(链路MTU),其中,接收的数据包包括报头和有效负载;以及PMTUD模块,配置为确定接 收的数据包尺寸是否超过链路MTU,以及当接收的数据包尺寸超过链路MTU时,从数据包的 有效负载中去除数据的一部分,丢弃去除部分,并根据去除部分调整接收的数据包的报头。图4是示出用于计算网络路径的MTU的示例性方法的流程图。图4描述了参与该 示例性方法的三种装置客户端,用作通信会话的源;服务器,用作通信会话的目的地;以 及中间路由器。一般地,客户端确定PMTU,服务器对数据包的接收进行确认,而当接收的数 据包超过下一跳链路的链路MTU时,即使数据包可能被特别地设计用于无分段,中间路由 器仍像本文描述的那样运行以从接收的数据包中去除数据。图4中的流程图的标记为“中 间路由器”的中间部分,可以通过一个或多个中间网络装置(诸如路由器、交换机、网关、网 桥、集线器、或者客户端和服务器间的其他装置)来执行。尽管其他部分标记为“客户端” 和“服务器”,但是应当理解,客户端还可以向服务器发送数据,而服务器可以从客户端接收 数据。一般地,在图4的方法的描述中,将源网络装置10作为客户端、将路由器12和14 作为中间路由器、以及将目的网络装置16作为服务器进行描述。但是,应当理解,图4的方 法也适用于其他网络装置和其他中间装置。开始,源网络装置10向路由器12发送数据包(肯定会最终到达目的网络装置 16),作为携带网络会话的应用层数据的第一数据包(100)。携带了应用层数据的第一数据 包通常包括在建立网络会话之后(例如,在网络装置10、16执行TCP三次握手之后)发送 的数据包。在一些实例中,源网络装置10构造数据包,使得数据包的尺寸等于源网络装置10和路由器12间的链路20的链路MTU。在某些情况下,将数据包构造为具有链路MTU的尺 寸,包括用可能被目的网络装置16或路由器12、14丢弃的额外数据填充数据包。一般地, 虽然在某些情况下,源网络装置10可能用可丢弃数据来填充第一数据包,以确保其尺寸等 于链路20的链路MTU,但是数据包包括实际应用数据。源网络装置10还设置数据包的DF 标记。路由器12接收来自源网络装置10的数据包(102)。路由器12通过在诸如FIB 62(图3)的FIB中执行下一跳查找,识别出数据包的下一跳。在图1的实例中,下一跳是路 由器14。路由器12还确定到下一跳的连接路由器12的链路的链路MTU。在一些实例中, 链路MTU和下一跳信息存储在FIB中。路由器12确定数据包尺寸是否大于到下一跳的链 路的链路MTU(104)。在图1的实例中,路由器12确定数据包尺寸是否大于链路22的链路 MTU。当数据包不超过链路MTU时(104的“NO”分支),路由器12将数据包转发到下一跳 (108),8口,图1实例中的路由器14。当数据包超过链路MTU时(104的“YES”分支),路由器12从数据包中去除超过链 路MTU的数据(106)。路由器12从数据包的有效负载中去除数据,使得剩余有效负载尺寸 加上每个报头的尺寸小于或等于到下一跳的链路的链路MTU。在一些实例中,路由器12还 修改数据包的TCP报头和IP报头中的一个或两个。路由器12然后将修改的数据包转发到 下一跳(108)。在图1的实例中,路由器14然后接收来自路由器12的数据包(102),识别数据包 的下一跳(图1实例中的目的网络装置16)并确定数据包尺寸是否超过到下一跳的链路24 的链路MTU (104),必要时去除数据(106),当去除数据时重新计算数据包报头,并将修改的 数据包转发到下一跳(108)。因此,虽然描述为发送到图4中的服务器,但是应当理解,在数 据包最终到达服务器(图1实例中的目的网络装置16)之前,每个中间装置均可以将数据 包发送到另一中间装置,并且如果待遍历的下一链路的MTU小于数据包的当前尺寸,则每 个中间装置可以从有效负载中去除应用层数据的额外部分。然后,目的网络装置16从路由器14接收修改的数据包,该数据包可以由多个中间 装置修改(110)。作为响应,目的网络装置16发送在修改的数据包中接收到的实际字节数 的确认(112)。根据TCP,目的网络装置16发送具有序列号的确认,该序列号等于起始序列 号加接收的数据包中的数据字节数加1。即,对于起始序列号X、以及数据包尺寸Y,目的网 络装置16发送包含序列号X+Y+1的确认。根据TCP,该确认通知源网络装置10,目的网络 装置16已经接收到与小于(X+Y+1)的序列号对应的网络会话的所有字节。目的网络装置 16将确认发送到路由器14,路由器将确认转发到路由器12(114),路由器将确认转发到源 网络装置10(114),源网络装置10最终接收确认(116)。然后,源网络装置10基于接收到的确认计算源网络装置10和目的网络装置16间 的路径26的PMTU,并配置传输层处理38和因特网层处理39来发送符合算得的PTMU的数 据包(118)。特别地,对于起始序列号X、以及接收的序列号Z,源网络装置10计算的PMTU 为(Z-X-1),也可以等价表示为(Z-(X+1))。源网络装置10重新发送没有被确认的第一数 据包的数据。在确定之后,源网络装置10向目的网络装置16发送至多包括(Z-X-1)字节 的数据包,作为该网络会话的一部分。在一些实例中,源网络装置10可以多次重新制定图4的方法,以周期性地计算PMTU。例如,在改变路径26的路由发生变化时,装置可以配置为根据上述技术重新计算 PMTU。在一些实例中,源网络装置10和目的网络装置16以RFC 1191中描述的周期执行本 公开的技术,以动态地增大PMTU的尺寸。例如,源网络装置10可以周期性地,但是相对不 频繁地,发送包含大于算得的PMTU的数据的数据包,其中,数据包例如通过设置DF标记指 示其将不被分段。如果目的网络装置16确认大于当前计算的PMTU的数据量,则源网络装 置10可以增大PMTU的尺寸。在一个实例中,根据RFC1191,在尝试增大失败后的特定时间 段内,例如,五分钟内,源网络装置10将不会再次尝试增大PMTU。然而,当源网络装置10确 定较大数据包的数据总量已经被确认时,源网络装置10可以通过发送更大的数据包,尝试 进一步增大PMTU的尺寸,例如,大约在最近增大PMTU后一分钟。根据RFC 1191的推荐,其 他实例使用这些时间值的两倍,即,在尝试增大失败后十分钟再增大,以及在尝试增大成功 后两分钟再增大。在一些实例中,例如,当发生路由变化,使得对于新路由而言,沿新路由的至少一 条链路不支持先前的PMTU时,源网络装置10还动态地减小PMTU。在这种情况下,虽然源 网络装置10发送包含与PMTU对应的数据的数据包,但是目的网络装置16将仅对发送的小 于PMTU的每个数据包的一部分进行确认。例如,假设当前PMTU是1500字节,并且最近确 认是5001,假设TCP窗口的尺寸为5,则源网络装置10将发送数据包5001 6500、6501 8000,8001 9500、9501 11000以及11001 12500。假设路由已经变化,使得沿新路由 的所有链路支持的最大MTU是500字节,则目的网络装置16将发送确认5501 (对于数据包 5001 6500) ,7001 (对于数据包 6501 8000) ,8501 (对于数据包 8001 9500)、10001 (对 于数据包9501 11000)、以及11501 (对于数据包11001 12500)。从这些确认中,源网 络装置10将动态地确定PMTU为500字节,并重新发送每个数据包的未被确认的数据(在 这个实例中,为字节5501 6500、7001 8000、8501 9500、10001 11000以及11501 12500)。在重新传输之后,源网络装置10还发送包含500字节数据的数据包。与传统技术不同,在这个实例中,源网络装置10不会因为接收到确认接收了小于 发送到目的网络装置16的数据总量的确认而发起拥塞控制。当确定了 PMTU之后源网络装 置10发送目的网络装置16没有确认的数据包时,源网络装置10例如可以通过降低传输速 率来发起拥塞控制。然而,源网络装置10配置为,对于第一数据包,确定任何数据丢失都是 由数据包超过了至少一条链路的MTU造成的,而不是由拥塞造成的。相应地,当目的网络装 置16确认了小于第一数据包的数据总量时,源网络装置10无需开始拥塞控制。参照图1中示出的装置,在接下来的实例中假设链路20的链路MTU是5,000字节, 链路22的链路MTU是2,500字节,而链路24的链路MTU是500字节。源网络装置10最初 向路由器12发送5,000字节的数据,并且设置了数据包的DF标记,送往目的网络装置16, 发送到作为沿到达目的网络装置16的路径的下一跳的路由器12。路由器12识别出朝目的 网络装置16向其输出数据包的下一跳,并确定与该下一跳相关的链路MTU(这里,2,500字 节)。路由器12确定数据包的尺寸大于到下一跳的链路的链路MTU,因此路由器12从有效 负载中去除2,500字节的数据,重新计算报头,并将剩余的2,500字节数据包发送到路由器 14。通过查找FIB中的下一跳以及到下一跳的链路的对应链路MTU,路由器14确定从路由 器12接收的2,500字节数据包大于到下一跳的链路的链路MTU (500字节),因此路由器14 从有效负载中去除2,000字节数据,重新计算报头,并将剩余的500字节数据包发送到目的网络装置16。目的网络装置16从路由器14接收该500字节数据包,并通过向源网络装置 10发送具有包含起始序列号加500加1的序列号的确认,来确认接收到的500字节数据。 源网络装置10确定到达目的网络装置16的路径26的PMTU等于确认的序列号减去起始序 列号再减1,在这个实例中为500。该实例忽略了数据包报头的尺寸,但是阐释了本公开中 描述的技术。图5是示出通过路由器修改数据包以辅助网络装置计算路径的MTU的示例性方法 的流程图。图5的方法一般地是参照路由器50 (图3)来描述的。然而,其他网络装置(诸 如路由器12、路由器14、交换机、网关、集线器、入侵检测和防护装置、防火墙、或者其他中 间网络装置)也可以执行与参照图5描述的方法类似的方法。开始,路由器50接收数据包(130)。转发引擎60在FIB 62中执行查找,以确定 IFC 70中一个,通过该IFC转发数据包以到达沿着到数据包的最终网络目的地的路由的下 一跳(131)。转发引擎60还确定数据包的尺寸是否大于到下一跳的链路的链路MTU(132)。 在一个实例中,转发引擎60从FIB 62中提取到下一跳的链路的链路MTU。当数据包尺寸小 于或等于到下一跳的链路的链路MTU时(132的“NO”分支),转发引擎60将该数据包转发 到下一跳(150)。数据包尺寸包括有效负载尺寸以及数据包的任意报头的尺寸。当数据包的尺寸大于到下一跳的链路的链路MTU时(132的“YES”分支),转发部 件60确定是否设置了数据包的IP报头中的“不分段”(DF)标记(134)。在一个实例中,该 标记包括一比特数字,当该比特值等于1时为“设置”,当值等于0时为“清除”。在图5的 实例中,当转发部件60确定没有设置DF标记时,例如,值为0时(134的“NO”分支),转发 部件60对数据包进行分段(136)。即,在该实例中,转发部件60根据TCP/IP数据包分段将 数据包有效负载拆分成多个数据包片段。例如,转发部件60设置除最后一个片段之外的每 个片段中的IP报头的“更多分段”标记,以及设置IP报头中的偏移值。转发部件60还转 发每个数据包片段(138)。然而,在一些实例中,路由器50可以配置为不对任何数据包进行 分段。当转发部件60确定设置了数据包的DF标记时(134的“YES”分支),路由器50从 数据包的有效负载中去除超过到下一跳的链路的链路MTU的数据(140)。在图4的实例中, PMTUD模块64还更新TCP报头的尺寸值(142),重新计算TCP校验和(144),更新IP报头的 长度值(146),并重新计算IP校验和(148)。在其他实例中,路由器50可以执行如下操作 中的任一个或全部,或者不执行更新TCP报头中的尺寸值,更新IP报头的长度值,重新计 算TCP校验和,和/或重新计算IP校验和。在任何情况下,在修改的数据包的IP报头中, PMTUD模块64不设置MF标记,也不设置偏移值。因此,修改的数据包包括IP数据报,而不 是数据包片段。转发部件60然后将修改的数据包转发到沿路由的下一跳(150)。在一个实例中,与图5的方法类似的方法包括使用中间网络装置接收包含报头 和有效负载的数据包;确定到数据包的下一跳的链路的链路MTU ;当数据包尺寸超过链路 MTU时,使用中间网络装置从数据包有效负载中去除数据的一部分;丢弃去除部分,并根据 去除部分调整数据包的报头;以及将数据包转发到下一跳。本公开中描述的技术可以至少部分地在硬件、软件、固件、或其任意组合中实施。 例如,所描述的技术的各个方面可以在一个或多个处理器中实施,包括一个或多个微处理 器、数字信号处理器(DSP)、特定用途集成电路(ASIC)、现场可编程门阵列(FPGA)、或任何
18其他等效的集成或分离逻辑电路以及这种部件的任意组合。术语“处理器”或“处理电路” 通常是指单独的或与其他逻辑电路相结合的任意前述逻辑电路,或任意其他等效电路。包 括硬件的控制单元还可以执行本公开的一个或多个技术。这种硬件、软件以及固件可以在同一装置内或者分离装置内实现,以支持本公开 中描述的各种操作和功能。另外,所描述的任意单元、模块或部件可作为分离但可互操作的 逻辑装置一起或单独实施。描述为模块或单元的不同特征旨在强调不同的功能,并不必然 意味着这种模块或单元必须通过分离的硬件或软件部件来实现。相反,与一个或多个模块 或单元相关联的功能可以由分离的硬件或软件部件来执行,或者集成在同一个或分离的硬 件或软件部件中。本公开中所描述的技术还可以在包含指令的计算机可读介质(诸如计算机可读 存储介质)中实施或编码。例如,当在计算机可读介质中嵌入或编码的指令被执行时,该指 令一般地使得可编程处理器或其他处理器执行该方法。例如,计算机可读存储媒体包括随 机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储器(PR0M)、可擦除可编程只读存 储器(EPR0M)、电可擦除可编程只读存储器(EEPR0M)、闪存、硬盘、CD-ROM、软盘、磁带、磁介 质、光介质、或其他计算机可读介质。本文已经描述了本发明的各个实施例。这些以及其他实施例都落入所附权利要求 的范围内。
权利要求
一种方法,包括使用中间网络装置接收包含报头和有效负载的数据包,其中,所述数据包的报头指示所述数据包不被分段;确定从所述中间网络装置到所述数据包的下一跳的链路的链路最大传输单元(链路MTU);确定所述数据包的尺寸超过所述链路MTU;在确定所述数据包的尺寸超过所述链路MTU之后,使用所述中间网络装置从所述数据包的有效负载中去除数据的一部分;丢弃去除部分,并根据所述有效负载的剩余部分调整所述数据包的报头,以形成修改的数据包;以及将经修改的数据包转发到所述下一跳。
2.根据权利要求1所述的方法,其中,所述中间网络装置包括路由器。
3.根据权利要求1所述的方法,进一步包括确定是否设置了所述报头的“不分 段” (DF)标记,并且仅当设置了所述报头的所述DF标记时修改所述数据包,其中,设置所述 报头的所述DF标记指示所述数据包不被分段。
4.根据权利要求3所述的方法,其中,转发经修改的数据包包括当设置了所述报头的 所述DF标记时,并且当所述数据包的尺寸超过所述链路MTU时,转发经修改的数据包,不发 送因特网控制消息协议(IMCP)目的地不可到达消息。
5.根据权利要求1所述的方法,其中,所述数据包的剩余部分包括所述数据包的所述 有效负载和所述数据包的所述去除部分之间的差值。
6.根据权利要求1所述的方法,其中,所述报头包括传输控制协议(TCP)报头,其中,调 整所述数据包的报头包括根据数据的所述剩余部分调整所述TCP报头的尺寸值。
7.根据权利要求1所述的方法,其中,所述报头包括因特网协议(IP)报头,其中,调整 所述数据包的报头包括根据数据的所述剩余部分调整所述IP报头的长度值。
8.根据权利要求1所述的方法,其中,所述报头包括校验和值,其中,调整所述报头包 括根据所述有效负载的所述剩余部分重新计算所述校验和值,并将所述报头的所述校验 和值设置为等于重新计算的校验和值。
9.根据权利要求1所述的方法,其中,丢弃所述去除部分包括丢弃所述去除部分的数 据,所述中间网络装置不转发所述去除部分的数据。
10.根据权利要求1所述的方法,其中,调整所述报头包括调整所述数据包的报头,使 得所述数据包不是数据包片段。
11.一种中间网络装置,包括多个接口卡,配置为接收并转发网络的数据包;转发引擎,配置为确定所述多个接口卡中的一个接口卡,并确定与所述多个接口卡中 的一个接口卡对应的链路的链路最大传输单元(链路MTU),其中,通过所述一个接口卡转 发接收的数据包,所接收的数据包包括报头和有效负载,其中,所述数据包的所述报头指示 所述数据包不被分段;以及路径最大传输单元确定(PMTUD)模块,配置为确定所接收的数据包的尺寸是否超过所 述链路MTU,其中,所述PMTUD模块配置为,当所接收的数据包的尺寸超过所述链路MTU时,通过从所述数据包的所述有效负载中去除数据的一部分来修改所述数据包,丢弃去除部 分,并根据所述有效负载的剩余部分调整所述数据包的报头。
12.根据权利要求11所述的装置,其中,所述中间网络装置包括路由器。
13.根据权利要求11所述的装置,其中,所述PMTUD模块进一步配置为确定是否设置了 所述报头的“不分段”(DF)标记,并且仅当设置了所述报头的DF标记时,从所接收的数据包 的所述有效负载中去除数据的一部分,其中,设置所述报头的所述DF标记指示所述数据包 不被分段。
14.根据权利要求11所述的装置,其中,所述报头包括传输控制协议(TCP)报头,并且 其中,所述PMTUD模块配置为根据数据的所述剩余部分调整所述TCP报头的尺寸值。
15.根据权利要求11所述的装置,其中,所述报头包括因特网协议(IP)报头,并且其 中,所述PMTUD模块配置为根据数据的所述去除部分调整所述IP报头的长度值。
16.根据权利要求11所述的装置,其中,所述报头包括校验和值,并且其中,所述PMTUD 模块配置为通过根据所述有效负载的所述剩余部分重新计算所述校验和值并将所述报头 的所述校验和值设置为等于重新计算的校验和值来调整所述报头。
17.根据权利要求11所述的装置,其中,所述数据包的所述剩余部分包括所述有效负 载和所述去除部分之间的差值。
18.根据权利要求11所述的装置,其中,转发平面包括所述转发引擎和所述PMTUD模块 (64)。
19.一种计算机可读介质,编码有使中间网络装置的可编程处理器执行如下操作的指令接收包含报头和有效负载的数据包,其中,所述数据包的所述报头指示所述数据包不 被分段;确定到所述数据包的下一跳的链路的链路最大传输单元(链路MTU);确定所述数据包的尺寸超过所述链路MTU ;在确定所述数据包的尺寸超过所述链路MTU之后,从所述数据包的所述有效负载中去 除数据的一部分;丢弃去除部分,并根据所述有效负载的剩余部分调整所述数据包的报头;以及将所述数据包转发到所述下一跳。
20.根据权利要求19所述的计算机可读介质,进一步编码有用于确定是否设置了所述 报头的“不分段”(DF)标记的指令,其中,用于去除的指令包括用于仅当设置了所述报头的 所述DF标记时去除数据的一部分的指令,其中,设置所述报头的所述DF标记指示所述数据 包不被分段。
21.根据权利要求19所述的计算机可读介质,其中,所述报头包括传输控制协议(TCP) 报头,其中,调整所述数据包的所述报头的指令包括根据数据的所述去除部分调整所述TCP 报头的尺寸值的指令。
22.根据权利要求19所述的计算机可读介质,其中,所述报头包括因特网协议(IP)报 头,其中,调整所述数据包的所述报头的指令包括根据数据的所述去除部分调整所述IP报 头的长度值的指令。
23.根据权利要求19所述的计算机可读介质,其中,所述报头包括校验和值,其中,调整所述数据包的所述报头的指令包括根据所述有效负载的所述剩余部分重新计算所述校 验和值并将所述报头的所述校验和值设置为等于重新计算的校验和值的指令。
24.根据权利要求19所述的计算机可读介质,其中,所述有效负载的所述剩余部分包 括所述有效负载和所述有效负载的所述去除部分之间的差值。
25.一种方法,包括使用第一网络装置向第二网络装置发送数据包,其中,所述数据包包括报头和有效负 载,其中,所述有效负载包括应用层数据,其中,所述报头包括起始序列号,并且其中,所述 数据包的所述报头指示所述数据包不被分段;接收包含确认序列号的所述数据包的确认;以及使用所述第一网络装置,根据所述确认序列号和所述起始序列号之间的差值计算路径 最大传输单元(PMTU)。
26.根据权利要求25所述的方法,其中,所述发送包括沿着到所述第二网络装置的路 由将所述数据包发送到路由器,进一步包括在将所述数据包发送到所述路由器之前,设置 所述数据包的所述报头的“不分段”(DF)标记,其中,所述DF标记指示所述数据包不被分 段。
27.根据权利要求25所述的方法,其中,所述起始序列号包括值X,其中,所述确认序列 号包括值Y,并且其中,计算所述PMTU包括计算所述PMTU等于Y- (X+1)。
28.根据权利要求25所述的方法,其中,所述起始序列号包括在执行传输控制协议 (TCP)三次握手后发送到所述第二网络装置的所述数据包的序列号。
29.根据权利要求25所述的方法,进一步包括确定沿着到达所述第二网络装置的路 径到下一跳的链路的链路MTU,其中,发送所述数据包包括将所述数据包形成为尺寸等于所 确定的链路MTU。
30.根据权利要求25所述的方法,进一步包括当所述确认指示由所述第二网络装置 接收的数据小于发送到所述第二网络装置的数据包的数据量时,禁止发起拥塞控制。
31.根据权利要求25所述的方法,其中,所述计算包括使用修改的传输控制协议(TCP) 处理来计算所述PMTU。
32.一种网络装置,包括网络接口,配置为向第二网络装置发送数据包,其中,所述数据包包括报头和有效负 载,其中,所述有效负载包括应用层数据,并且其中,所述报头包括起始序列号,其中,所述 数据包的所述报头指示所述数据包不被分段,所述网络接口还配置为接收包含确认序列号 的所述数据包的确认;以及路径最大传输单元(PMTUD)模块,配置为根据所述确认序列号和所述起始序列号之间 的差值计算路径最大传输单元。
33.根据权利要求32所述的网络装置,其中,所述PMTUD模块包括在所述网络装置的传 输层执行的修改的传输控制协议(TCP)处理。
34.根据权利要求32所述的网络装置,其中,所述PMTUD模块配置为在所述数据包被发 送到所述第二网络装置之前设置所述数据包的所述报头的“不分段”(DF)标记,其中,所述 DF标记指示所述数据包不被分段。
35.根据权利要求32所述的网络装置,其中,所述PMTUD模块配置为当所述确认指示由所述第二网络装置接收的数据小于发送到所述第二网络装置的所述数据包的数据量时禁 止拥塞控制。
全文摘要
诸如路由器的中间网络装置,配置为当数据包尺寸超过到下一跳的链路最大传输单元(MTU)时,通过从数据包去除数据来发现两个网络端点间的路径的MTU。一个示例性的中间网络装置包括转发引擎,用于确定用来转发接收的数据包的接口卡,并确定与该接口卡对应的链路的链路MTU,其中,接收的数据包包括报头和有效负载,报头指示不对数据包进行分段;以及PMTU确定模块,用于确定接收的数据包尺寸是否超过链路MTU,并且当接收的数据包尺寸超过链路MTU时,从数据包的有效负载去除一部分数据,丢弃去除部分,并根据去除部分调整数据包的报头。
文档编号H04L1/00GK101931588SQ20101021053
公开日2010年12月29日 申请日期2010年6月22日 优先权日2009年6月23日
发明者斯里尼瓦萨·D·萨蒂亚纳拉亚纳, 蒂莫西·N·塔塔普蒂 申请人:丛林网络公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1