專利名稱:發(fā)現(xiàn)路徑最大傳輸單元尺寸的制作方法
技術(shù)領(lǐng)域:
本公開涉及基于數(shù)據(jù)包的網(wǎng)絡(luò)的計(jì)算機(jī)網(wǎng)絡(luò)中的通信。
背景技術(shù):
計(jì)算機(jī)網(wǎng)絡(luò)是能夠交換數(shù)據(jù)并共享資源的互連計(jì)算裝置的集合。在基于數(shù)據(jù)包 (packet)的網(wǎng)絡(luò)中,計(jì)算裝置通過將數(shù)據(jù)分割成稱為數(shù)據(jù)包的小塊來傳送數(shù)據(jù),這些數(shù)據(jù) 包各自通過網(wǎng)絡(luò)從源裝置路由至目的裝置。目的裝置從這些數(shù)據(jù)包中提取數(shù)據(jù),并將數(shù)據(jù) 組合成其起始形式。將數(shù)據(jù)分割成數(shù)據(jù)包使得源裝置能夠只重新發(fā)送那些在傳輸過程中可 能丟失的個(gè)別數(shù)據(jù)包。網(wǎng)絡(luò)裝置和網(wǎng)絡(luò)鏈接根據(jù)能夠在通過給定鏈接的兩個(gè)給定裝置間傳輸?shù)臄?shù)據(jù)的 數(shù)據(jù)包或其他塊的尺寸來劃界。上界通常稱為“最大傳輸(transmission)單元(MTU) ”, 還通常稱為“最大傳遞(transfer)單元”。RFC 791確定MTU下界為576字節(jié)。也就是說, RFC 791要求網(wǎng)絡(luò)裝置和網(wǎng)絡(luò)鏈接能夠支持至少576字節(jié)的MTU。然而,制造商有支持更 大MTU的自由,并且許多制造商常常會這么做。RFC 791的更多細(xì)節(jié)在1981年9月的南加 利福尼亞大學(xué)信息科學(xué)學(xué)會的 “INTERNET PROTOCOL DARPA INTERNETPROGRAM PROTOCOL SPECIFICATION”中可以找到,其全部內(nèi)容通過引用結(jié)合于此。當(dāng)兩個(gè)網(wǎng)絡(luò)裝置間的路由或路徑的兩個(gè)部分支持不同MTU時(shí),參與通信會話的裝 置之一通常確定路徑的MTU。RFC 1191描述的這樣做的一種傳統(tǒng)方法涉及使用因特網(wǎng)控制 消息協(xié)議(ICMP)來確定路徑的MTU。特別地,RFC 1191通過發(fā)送多個(gè)不同尺寸的數(shù)據(jù)包來 規(guī)定路徑MTU的發(fā)現(xiàn)(PMTUD),其中,每個(gè)數(shù)據(jù)包都設(shè)置有“不分段”(DF)標(biāo)記。當(dāng)下游路 由器接收到對于后續(xù)鏈路而言太大且設(shè)置有DF標(biāo)記的數(shù)據(jù)包時(shí),該路由器將返回ICMP“目 的地不可到達(dá)”消息,并丟棄該數(shù)據(jù)包。然后,源路由器減小其假定的路徑的PMTU尺寸,并 最終確定PMTU為接收ICMP目的地不可到達(dá)消息之前發(fā)送的倒數(shù)第二個(gè)數(shù)據(jù)包的尺寸。更 多細(xì)節(jié)可以在1990年11月的網(wǎng)絡(luò)工作組、因特網(wǎng)工程任務(wù)組(IETF)的J. Mogul等人的題 為“PATH MTU DISCOVERY”的RFC 1191中找到,其全部內(nèi)容通過引用結(jié)合于此。然而,在RFC 1191提出的方法中存在某些問題。例如,一些路由器和網(wǎng)絡(luò)不支持 ICMP消息,而其他路由器和網(wǎng)絡(luò)主動地阻塞ICMP消息。這經(jīng)常導(dǎo)致被RFC 2923描述為 "PMTUD黑洞”的問題,并引起TCP超時(shí)。更多細(xì)節(jié)可以在2000年9月的網(wǎng)絡(luò)工作組、因特 網(wǎng)工程任務(wù)組(IETF)的 J.Mogul 等人的題為"TCP PROBLEMSffITH PATH MTU DISCOVERY” 的RFC 2923中找到,其全部內(nèi)容通過引用結(jié)合于此。此外,RFC 1191中提出的方法需要待發(fā)送數(shù)據(jù)包的多次循環(huán)(iteration),通常 沒有有意義的數(shù)據(jù),而僅是為了發(fā)現(xiàn)PMTU。這導(dǎo)致了帶寬浪費(fèi)和通信延遲。此外,為了 PMTUD而支持ICMP的系統(tǒng)可能會受拒絕服務(wù)(DoS)攻擊的侵害,拒絕服務(wù)攻擊被設(shè)計(jì)用來 利用該行為。
發(fā)明內(nèi)容
總的來說,本公開描述了用于發(fā)現(xiàn)網(wǎng)絡(luò)路徑的最大傳輸單元(MTU)的技術(shù)。該技 術(shù)涉及一種源網(wǎng)絡(luò)裝置,其諸如通過使用傳統(tǒng)TCP三次握手與目的網(wǎng)絡(luò)裝置建立通信會 話,然后發(fā)送攜帶應(yīng)用層數(shù)據(jù)并被標(biāo)記為不分段轉(zhuǎn)發(fā)的第一數(shù)據(jù)包。也就是說,源裝置發(fā)送 第一數(shù)據(jù)包并設(shè)置第一數(shù)據(jù)包的“不分段”(DF)標(biāo)記,該第一數(shù)據(jù)包攜帶有連接至源裝置的 鏈路的最大支持?jǐn)?shù)據(jù)包尺寸的應(yīng)用層數(shù)據(jù)。沿源裝置和目的網(wǎng)絡(luò)裝置間的路由的路由器或者其他中間網(wǎng)絡(luò)裝置被配置為檢 查相對于將路由器沿路由連接至下一跳的鏈路的MTU的所接收到的數(shù)據(jù)包的尺寸。當(dāng)攜帶 了應(yīng)用層數(shù)據(jù)的數(shù)據(jù)包的尺寸大于鏈路的MTU時(shí),并且當(dāng)設(shè)置了 DF標(biāo)記時(shí),路由器通過僅 發(fā)送不會超過該MTU的第一數(shù)據(jù)包的部分并丟棄其余部分來修改第一數(shù)據(jù)包,以適應(yīng)鏈路 的MTU。路由器將數(shù)據(jù)包的該部分重新構(gòu)造為真正的IP數(shù)據(jù)報(bào),而不對數(shù)據(jù)包進(jìn)行分段。 為了構(gòu)造真正的IP數(shù)據(jù)報(bào),路由器還更新TCP和IP報(bào)頭,例如,IP長度值、IP校驗(yàn)和、TCP 長度值、以及TCP校驗(yàn)和。在一些實(shí)例中,路由器僅修改IP長度值和/或TCP長度值,而不 重新計(jì)算該第一數(shù)據(jù)包的校驗(yàn)和。當(dāng)目的網(wǎng)絡(luò)裝置(即,預(yù)期的數(shù)據(jù)包接收裝置)接收到第一數(shù)據(jù)包的這一部分 時(shí),目的裝置確認(rèn)接收到第一數(shù)據(jù)包的這一部分。特別地,目的裝置基于接收到的第一數(shù) 據(jù)包的這一部分的尺寸和起始序列號來計(jì)算確認(rèn)序列號。例如,當(dāng)由目的網(wǎng)絡(luò)裝置接收到 的第一數(shù)據(jù)包的這一部分包括500字節(jié),并且第一序列號(起始序列號)為X時(shí),目的網(wǎng) 絡(luò)裝置發(fā)送確認(rèn)序列號為“X+501”。出于該實(shí)例的目的,起始序列號X包括三次握手后的 用于發(fā)起網(wǎng)絡(luò)會話的起始序列號,而不是包含在同步數(shù)據(jù)包(SYN數(shù)據(jù)包)中的起始序列 號。然后,源網(wǎng)絡(luò)裝置使用確認(rèn)序列號確定從起始網(wǎng)絡(luò)裝置到目的裝置的網(wǎng)絡(luò)路徑的路徑 MTU(PMTU)為500字節(jié)。也就是說,源裝置計(jì)算PMTU等于確認(rèn)序列號減去起始序列號再減 1,如,501-(X+1)。然后,在該實(shí)例中,源網(wǎng)絡(luò)裝置以最大500字節(jié)的增量發(fā)送網(wǎng)絡(luò)會話的字 節(jié)501 1000和后續(xù)字節(jié)。此外,根據(jù)本文描述的技術(shù),發(fā)起通信會話的源網(wǎng)絡(luò)裝置確定第一數(shù)據(jù)包的“丟失” 部分是由于超過了路徑的MTU而不是由于例如擁塞(congestion)而丟失的。因此,直到網(wǎng)絡(luò) 路徑的MTU已被最終確定,源網(wǎng)絡(luò)裝置才會響應(yīng)于接收到來自目的網(wǎng)絡(luò)裝置的確認(rèn)而減小其 傳輸速率或發(fā)起擁塞控制處理。也就是說,實(shí)施本公開的技術(shù)的網(wǎng)絡(luò)裝置被配置為,直到丟失 部分尺寸等于發(fā)送方已經(jīng)發(fā)送的尺寸,才將第一數(shù)據(jù)包的丟失部分視為擁塞控制的標(biāo)記。在一個(gè)實(shí)例中,一種方法包括使用中間網(wǎng)絡(luò)裝置接收包含報(bào)頭(header)和有效 負(fù)載(payload)的數(shù)據(jù)包,其中,數(shù)據(jù)包的報(bào)頭指示數(shù)據(jù)包不被分段;并確定到數(shù)據(jù)包的下 一跳的鏈路的鏈路最大傳輸單元(鏈路MTU)。當(dāng)數(shù)據(jù)包尺寸超過鏈路MTU時(shí),該方法包括 使用中間網(wǎng)絡(luò)裝置從數(shù)據(jù)包的有效負(fù)載中去除數(shù)據(jù)的一部分,丟棄去除部分,根據(jù)去除部 分調(diào)整數(shù)據(jù)包的報(bào)頭,并將數(shù)據(jù)包轉(zhuǎn)發(fā)到下一跳。在另一實(shí)例中,中間網(wǎng)絡(luò)裝置包括多個(gè)接口卡,被配置為接收和轉(zhuǎn)發(fā)網(wǎng)絡(luò)的數(shù)據(jù) 包;以及轉(zhuǎn)發(fā)引擎,被配置為確定多個(gè)接口卡中通過其轉(zhuǎn)發(fā)接收的數(shù)據(jù)包的一個(gè)接口卡,并 確定與該多個(gè)接口卡中的一個(gè)接口卡對應(yīng)的鏈路的鏈路最大傳輸單元(鏈路MTU),其中, 接收的數(shù)據(jù)包包括報(bào)頭和有效負(fù)載,其中,數(shù)據(jù)包的報(bào)頭指示數(shù)據(jù)包不被分段。中間網(wǎng)絡(luò)裝 置還包括路徑最大傳輸單元確定(PMTUD)模塊,被配置為確定接收的數(shù)據(jù)包尺寸是否超過鏈路MTU,并且當(dāng)接收的數(shù)據(jù)包尺寸超過鏈路MTU時(shí),從數(shù)據(jù)包的有效負(fù)載中去除數(shù)據(jù)的一 部分,丟棄去除部分,并根據(jù)去除部分調(diào)整接收的數(shù)據(jù)包的報(bào)頭。在另一實(shí)例中,一種計(jì)算機(jī)可讀介質(zhì)(諸如計(jì)算機(jī)可讀存儲介質(zhì))包含(例如,編 碼有)指令,該指令使中間網(wǎng)絡(luò)裝置的可編程處理器接收包含報(bào)頭和有效負(fù)載的數(shù)據(jù)包, 其中,數(shù)據(jù)包的報(bào)頭指示數(shù)據(jù)包不被分段,確定到數(shù)據(jù)包的下一跳的鏈路的鏈路最大傳輸 單元(鏈路MTU),當(dāng)數(shù)據(jù)包尺寸超過鏈路MTU時(shí),使用中間網(wǎng)絡(luò)裝置從數(shù)據(jù)包的有效負(fù)載中 去除數(shù)據(jù)的一部分,丟棄去除部分,根據(jù)去除部分調(diào)整數(shù)據(jù)包的報(bào)頭,并將數(shù)據(jù)包轉(zhuǎn)發(fā)到下 一跳。在另一實(shí)例中,一種方法包括使用第一網(wǎng)絡(luò)裝置將數(shù)據(jù)包發(fā)送到第二網(wǎng)絡(luò)裝置, 其中,數(shù)據(jù)包包括報(bào)頭和有效負(fù)載,其中,有效負(fù)載包括應(yīng)用層數(shù)據(jù),報(bào)頭包括起始序列號, 其中,數(shù)據(jù)包的報(bào)頭指示數(shù)據(jù)包不被分段;接收數(shù)據(jù)包包含確認(rèn)序列號的確認(rèn);以及使用 第一網(wǎng)絡(luò)裝置根據(jù)確認(rèn)序列號和起始序列號間的差值計(jì)算路徑最大傳輸單元(PMTU)。本公開的技術(shù)可以提供多個(gè)優(yōu)點(diǎn)。例如,應(yīng)用本公開的技術(shù)的網(wǎng)絡(luò)裝置可以確定 到端點(diǎn)網(wǎng)絡(luò)裝置間的單循環(huán)中(即,單通信中)的目的裝置的網(wǎng)絡(luò)路徑的MTU。由于本公開 的技術(shù)不依賴于因特網(wǎng)控制消息協(xié)議(ICMP)消息,因此即使當(dāng)沿路徑的網(wǎng)絡(luò)裝置或網(wǎng)絡(luò) 已經(jīng)被配置為阻塞ICMP消息時(shí),該技術(shù)也可以用于確定網(wǎng)絡(luò)路徑的MTU。因此,根據(jù)這些技 術(shù),網(wǎng)絡(luò)裝置可以安全地使ICMP無效,而不會喪失發(fā)現(xiàn)PMTU的能力。雖然沿路徑的一個(gè)或多個(gè)路由器可以為了發(fā)現(xiàn)PMTU的目的而對網(wǎng)絡(luò)會話的第一 數(shù)據(jù)包進(jìn)行分段,但是沿路徑的路由器通常不需要在網(wǎng)絡(luò)會話期間參與數(shù)據(jù)包分段,因此 相對于分段,減小了路由器的負(fù)荷。由于用于確定路徑的MTU的網(wǎng)絡(luò)會話的第一數(shù)據(jù)包包 括網(wǎng)絡(luò)會話的實(shí)際數(shù)據(jù),因此不需要為了成功實(shí)施這些技術(shù)而測試數(shù)據(jù)包。因此,本公開的 技術(shù)可以減少在網(wǎng)絡(luò)會話期間發(fā)送的不重要的或無內(nèi)容的數(shù)據(jù)包。由于網(wǎng)絡(luò)會話的所有數(shù) 據(jù)包可以包括TCP段,故用于確定PMTU的數(shù)據(jù)包將不太可能被入侵檢測系統(tǒng)阻塞或丟棄, 這是因?yàn)閿?shù)據(jù)包符合TCP。結(jié)合附圖和下面的描述給出一個(gè)或多個(gè)實(shí)例的細(xì)節(jié)。其他特征、目標(biāo)、和優(yōu)點(diǎn)將從 描述和附圖以及權(quán)利要求中顯而易見。
圖1是示出其中的源網(wǎng)絡(luò)裝置確定路徑最大傳輸單元(PMTU)的示例性系統(tǒng)的框 圖。圖2是示出用于計(jì)算網(wǎng)絡(luò)路徑的PMTU的網(wǎng)絡(luò)裝置的部件的示例性布置的框圖。圖3是示出參與PMTU的計(jì)算的示例性路由器的框圖。圖4是示出用于計(jì)算網(wǎng)絡(luò)路徑的MTU的示例性方法的流程圖。圖5是示出修改數(shù)據(jù)包以輔助網(wǎng)絡(luò)裝置計(jì)算路徑的MTU的示例性方法的流程圖。
具體實(shí)施例方式圖1是示出示例性系統(tǒng)2的框圖,其中,源網(wǎng)絡(luò)裝置10根據(jù)本公開的技術(shù)確定路 徑最大傳輸單元(PMTU)。在圖1的實(shí)例中,源網(wǎng)絡(luò)裝置10確定源網(wǎng)絡(luò)裝置10和目的網(wǎng)絡(luò) 裝置16間的路徑26的PMTU。源網(wǎng)絡(luò)裝置10通過路徑26連接至目的網(wǎng)絡(luò)裝置16,該路徑遍歷網(wǎng)絡(luò)18,并且特別地,穿過中間路由器12和14。雖然在圖1的實(shí)例中描述了兩個(gè)路 由器,但是本公開的技術(shù)適用于在兩個(gè)端點(diǎn)裝置(諸如源網(wǎng)絡(luò)裝置10和目的網(wǎng)絡(luò)裝置16) 間的任意數(shù)量和任意類型的中間網(wǎng)絡(luò)裝置。例如,這樣的中間裝置包括路由器、網(wǎng)關(guān)、交換 機(jī)、集線器、網(wǎng)橋、入侵檢測和防護(hù)裝置、防火墻、無線接入點(diǎn)、調(diào)制解調(diào)器、和其他這種網(wǎng)絡(luò)
直o在圖1的實(shí)例中,源網(wǎng)絡(luò)裝置10經(jīng)由網(wǎng)絡(luò)鏈路20連接至路由器12。路由器12 經(jīng)由網(wǎng)絡(luò)鏈路22連接至路由器14。路由器14經(jīng)由網(wǎng)絡(luò)鏈路24連接至目的網(wǎng)絡(luò)裝置16。 鏈路20、22和24中的任一個(gè)可以包括無線或有線鏈路,例如,以太網(wǎng)鏈路、吉比特以太網(wǎng) 鏈路、無線802. 11鏈路、衛(wèi)星鏈路、電纜鏈路、數(shù)字用戶線(DSL)鏈路、銅PHY鏈路、光纖鏈 路、或其他合適的物理或無線傳輸介質(zhì)。根據(jù)本公開的技術(shù),源網(wǎng)絡(luò)裝置10計(jì)算路徑26的 PMTU為鏈路20、22和24的最小鏈路MTU。鏈路MTU是連接了兩個(gè)網(wǎng)絡(luò)裝置的鏈路(或網(wǎng)絡(luò)連接)的MTU。也就是說,第一 鏈路MTU限定了源網(wǎng)絡(luò)裝置10和路由器12之間的鏈路20。鏈路20的第一鏈路MTU是可 以穿過鏈路20在源網(wǎng)絡(luò)裝置10和路由器12之間發(fā)送的最大數(shù)據(jù)單元。類似地,第二鏈路 MTU限定了路由器12和路由器14間的鏈路22,第三鏈路MTU限定了路由器14和目的網(wǎng)絡(luò) 裝置16間的鏈路24。路徑MTU是由沿兩個(gè)端點(diǎn)裝置間的路徑的每個(gè)網(wǎng)絡(luò)裝置和網(wǎng)絡(luò)鏈路 支持的MTU。根據(jù)本公開的技術(shù),源網(wǎng)絡(luò)裝置10計(jì)算路徑26的路徑MTU為最小值(第一鏈 路MTU、第二鏈路MTU、第三鏈路MTU)。也就是說,源網(wǎng)絡(luò)裝置10確定路徑26的PMTU為路 徑26的全部鏈路MTU中的最小值。在一個(gè)實(shí)例中,鏈路20的第一鏈路MTU為3,300字節(jié),鏈路22的第二鏈路MTU為 5,000字節(jié),鏈路24的第三鏈路MTU為1,500字節(jié)。在該實(shí)例中,源網(wǎng)絡(luò)裝置10將確定路 徑26的PMTU為1,500字節(jié),這是因?yàn)?,500字節(jié)是所有鏈路MTU中的最小值。通過確定 PMTU等于鏈路MTU的最小值,沿路徑的每個(gè)裝置和鏈路將能夠支持所確定的PMTU。也就是 說,每個(gè)裝置和鏈路將支持至少與PMTU的傳輸單元一樣大的傳輸單元。在上述的源網(wǎng)絡(luò)裝 置10、路由器12和鏈路20包含3,300字節(jié)的鏈路MTU的實(shí)例中,源網(wǎng)絡(luò)裝置10、路由器12 和鏈路20還將支持1,500字節(jié)的傳輸單元。源網(wǎng)絡(luò)裝置10和路由器12、14協(xié)調(diào)行動來確定路徑26的PMTU。也就是說,源網(wǎng) 絡(luò)裝置10以及路由器12和14中的每一個(gè)均根據(jù)本公開的技術(shù)進(jìn)行配置。在該實(shí)例中用作 服務(wù)器的目的網(wǎng)絡(luò)裝置16無需為了源網(wǎng)絡(luò)裝置10能夠計(jì)算路徑26的PMTU而進(jìn)行特別配 置。源網(wǎng)絡(luò)裝置10穿過路徑26向目的網(wǎng)絡(luò)裝置16發(fā)送包含應(yīng)用數(shù)據(jù)的第一數(shù)據(jù)包。涉 及本公開中的“第一數(shù)據(jù)包” 一般地是指網(wǎng)絡(luò)會話建立后(例如,在TCP三次握手之后)的 應(yīng)用層數(shù)據(jù)的第一數(shù)據(jù)包。源網(wǎng)絡(luò)裝置10設(shè)置第一數(shù)據(jù)包的“不分段(DF)”標(biāo)記,以通知 路由器12和14不對該數(shù)據(jù)包進(jìn)行分段。一般地,貫穿系統(tǒng)2交換的數(shù)據(jù)包包括一個(gè)或多個(gè)報(bào)頭和有效負(fù)載。數(shù)據(jù)包通常 包括開放式系統(tǒng)互連(0SI)網(wǎng)絡(luò)模型的每個(gè)層的報(bào)頭。在TCP/IP數(shù)據(jù)包的實(shí)例中,這種數(shù) 據(jù)包包括TCP報(bào)頭和IP報(bào)頭。數(shù)據(jù)包的有效負(fù)載一般地包括應(yīng)用層數(shù)據(jù)。根據(jù)本公開的 技術(shù),如在下文中更詳細(xì)地描述的,當(dāng)數(shù)據(jù)包的尺寸大于到下一跳的鏈路的鏈路MTU時(shí),并 且當(dāng)設(shè)置了 IP報(bào)頭的“不分段(DF)”標(biāo)記時(shí),路由器12和14從數(shù)據(jù)包的有效負(fù)載中去除 數(shù)據(jù),并可以修改數(shù)據(jù)包的報(bào)頭的各種數(shù)據(jù)。IP報(bào)頭的DF標(biāo)記指示不對數(shù)據(jù)包進(jìn)行分段。雖然本公開通常將DF標(biāo)記稱為指示不對數(shù)據(jù)包進(jìn)行分段的標(biāo)記,但是其他實(shí)例可以使用 其他方法(諸如不同標(biāo)記或比特)來指示不對數(shù)據(jù)包進(jìn)行分段。這樣,本公開的技術(shù)通常適 用于包含報(bào)頭的數(shù)據(jù)包,其中,數(shù)據(jù)包的報(bào)頭指示不對數(shù)據(jù)包進(jìn)行分段。在一個(gè)實(shí)例中,對 于TCP/IP數(shù)據(jù)包,路由器12和14可以修改TCP尺寸值、IP長度值、TCP報(bào)頭和/或IP報(bào) 頭的校驗(yàn)和中的一個(gè)或多個(gè)。在路由器12和14不調(diào)整TCP報(bào)頭或IP報(bào)頭的校驗(yàn)和的一 些實(shí)例中,目的網(wǎng)絡(luò)裝置16可以被配置為執(zhí)行不嚴(yán)格的校驗(yàn)和評估。也就是說,由于已經(jīng) 去除了數(shù)據(jù)而沒有重新計(jì)算校驗(yàn)和,因此校驗(yàn)和將幾乎肯定是錯(cuò)誤的。通過省略校驗(yàn)和重 新計(jì)算而產(chǎn)生的路由器性能的折衷的可能性可能會大于由端點(diǎn)裝置(例如,由目的網(wǎng)絡(luò)裝 置16)最終接收到的有效負(fù)載中的數(shù)據(jù)誤差的可能性。在一些實(shí)例中,沿源網(wǎng)絡(luò)裝置和目 的網(wǎng)絡(luò)裝置間的路由的路由器僅不對TCP校驗(yàn)和進(jìn)行重新計(jì)算,并且目的網(wǎng)絡(luò)裝置不驗(yàn)證 TCP校驗(yàn)和;因此IP校驗(yàn)和可以繼續(xù)沿路由進(jìn)行重新計(jì)算并在目的網(wǎng)絡(luò)裝置處進(jìn)行驗(yàn)證。路由器12和14配置為對設(shè)置了 DF標(biāo)記的數(shù)據(jù)包以不同于這種數(shù)據(jù)包的傳統(tǒng)處 理的方式來進(jìn)行處理。傳統(tǒng)路由器在接收到設(shè)置了 DF標(biāo)記且超過下一跳的鏈路MTU尺寸的 數(shù)據(jù)包時(shí),不對該數(shù)據(jù)包進(jìn)行分段,并可以配置為丟棄該數(shù)據(jù)包并向發(fā)送裝置發(fā)送因特網(wǎng) 控制消息協(xié)議(ICMP)消息,特別是,指示數(shù)據(jù)包太大而不能被分段的消息。根據(jù)本文描述 的技術(shù),另一方面,路由器12和14被配置為以與傳統(tǒng)路由器不同的方式處理設(shè)置了 DF標(biāo) 記的數(shù)據(jù)包。例如,路由器12和14被配置為修改這種數(shù)據(jù)包,使得適合下一跳的鏈路MTU 的數(shù)據(jù)包有效負(fù)載部分將仍被傳輸,而數(shù)據(jù)包的其余內(nèi)容從第一數(shù)據(jù)包被去除并丟棄。修 改的數(shù)據(jù)包包括真正的IP數(shù)據(jù)報(bào)并且不是分段的數(shù)據(jù)包。例如,修改的數(shù)據(jù)包不具有“更 多分段”標(biāo)記設(shè)置。修改的數(shù)據(jù)包還不具有分段偏移信息設(shè)置。例如,根據(jù)上述的示例性鏈路MTU,源網(wǎng)絡(luò)裝置10可以向路由器12發(fā)送包含 3,300字節(jié)數(shù)據(jù)的第一數(shù)據(jù)包。源網(wǎng)絡(luò)裝置10還設(shè)置第一數(shù)據(jù)包的DF標(biāo)記。當(dāng)接收到第 一數(shù)據(jù)包時(shí),路由器12確定3,300字節(jié)小于鏈路22的鏈路MTU(5,000字節(jié)),因此路由器 12將數(shù)據(jù)包轉(zhuǎn)發(fā)到路由器14。然而,在接收到第一數(shù)據(jù)包時(shí),路由器14確定3,300字節(jié) 大于鏈路24的鏈路MTU(1,500字節(jié))。因此,路由器14從第一數(shù)據(jù)包中丟棄數(shù)據(jù),使得修 改的數(shù)據(jù)包不會超過1,500字節(jié)。在該實(shí)例中,路由器14從第一數(shù)據(jù)包的有效負(fù)載中去除 1,800字節(jié)的應(yīng)用層數(shù)據(jù)。路由器14還根據(jù)剩余數(shù)據(jù)對修改的第一數(shù)據(jù)包的報(bào)頭進(jìn)行修改,例如,傳輸控制 協(xié)議(TCP)報(bào)頭和因特網(wǎng)協(xié)議(IP)報(bào)頭。在一個(gè)實(shí)例中,路由器14根據(jù)修改的第一數(shù)據(jù) 包的新的TCP段尺寸來設(shè)置TCP報(bào)頭的尺寸字段。路由器14還可以重新計(jì)算TCP報(bào)頭的 校驗(yàn)和。在一個(gè)實(shí)例中,路由器14還根據(jù)修改的第一數(shù)據(jù)包的新的IP數(shù)據(jù)報(bào)尺寸來設(shè)置 IP報(bào)頭的長度字段。路由器14還可以重新計(jì)算IP報(bào)頭的校驗(yàn)和。在不同的實(shí)例中,路由 器14以任意組合執(zhí)行這些報(bào)頭修改中的任一個(gè)或全部。此外,路由器12和14配置為修改數(shù)據(jù)包,使得下游裝置仍會認(rèn)為該數(shù)據(jù)包是正確 形成的完整數(shù)據(jù)包而不是數(shù)據(jù)包分段。例如,在一些實(shí)施例中,路由器14不設(shè)置IP報(bào)頭 的“更多分段(MF)”標(biāo)記,也不設(shè)置IP報(bào)頭中的分段偏移值的值。例如,在設(shè)置了 MF比特 的一些實(shí)例中,路由器14清除IP報(bào)頭的MF標(biāo)記,以指示修改的數(shù)據(jù)包不包括額外的片段。 因此,由路由器14向目的網(wǎng)絡(luò)裝置16發(fā)送的數(shù)據(jù)包被認(rèn)為是真正的IP數(shù)據(jù)報(bào)而不是分段 的數(shù)據(jù)包。正如在下文中描述的,源網(wǎng)絡(luò)裝置10將在后續(xù)通信中發(fā)送第一數(shù)據(jù)包中由路由器14丟棄的部分。因此,當(dāng)根據(jù)這些技術(shù)修改數(shù)據(jù)包時(shí),路由器12和14無需消耗資源來 執(zhí)行分段,而是僅僅重新計(jì)算數(shù)據(jù)包報(bào)頭的不同部分。因此,路由器14可以丟棄數(shù)據(jù)包有 效負(fù)載的去除部分,而不將該去除部分轉(zhuǎn)發(fā)到任何其他網(wǎng)絡(luò)裝置。由于僅修改了報(bào)頭的特 定部分,因此路由器12和14可以在轉(zhuǎn)發(fā)平面執(zhí)行這些技術(shù),而不會增加其他處理或硬件的 負(fù)擔(dān)。路由器14還無需向源網(wǎng)絡(luò)裝置10或路由器12發(fā)送用來指示該數(shù)據(jù)包對于鏈路MTU 來說太大的ICMP消息。在一個(gè)實(shí)例中,路由器14不重新計(jì)算第一數(shù)據(jù)包的任一校驗(yàn)和。相反,在該實(shí)例 中,路由器12、14和網(wǎng)絡(luò)裝置10、16配置為使用網(wǎng)絡(luò)通信的第一數(shù)據(jù)包或前N個(gè)數(shù)據(jù)包的 “不嚴(yán)格的”校驗(yàn)和。因此,在該實(shí)例中,雖然TCP報(bào)頭和IP報(bào)頭的校驗(yàn)和不能準(zhǔn)確地表示 其有效負(fù)載的真實(shí)性,但目的網(wǎng)絡(luò)裝置16仍將認(rèn)為數(shù)據(jù)是準(zhǔn)確地。在一個(gè)實(shí)例中,當(dāng)設(shè)置 了數(shù)據(jù)包的DF標(biāo)記時(shí),目的網(wǎng)絡(luò)裝置16應(yīng)用不嚴(yán)格的校驗(yàn)和,當(dāng)沒有設(shè)置DF標(biāo)記時(shí),使用 校驗(yàn)和驗(yàn)證數(shù)據(jù)。在接收到來自路由器14的修改的第一數(shù)據(jù)包后,目的網(wǎng)絡(luò)裝置16確認(rèn)接收實(shí)際 接收到的字節(jié)。也就是說,根據(jù)TCP,目的網(wǎng)絡(luò)裝置16向源網(wǎng)絡(luò)裝置10發(fā)送包含序列號的 確認(rèn),該序列號對應(yīng)于起始序列號(在TCP三次握手之后)加上在修改的第一數(shù)據(jù)包中接 收到的字節(jié)數(shù)。在上述實(shí)例中,確認(rèn)中的序列號對應(yīng)于起始序列號加1,500。由于修改的數(shù) 據(jù)包包括真正的IP數(shù)據(jù)報(bào)而非分段,因此目的網(wǎng)絡(luò)裝置16根據(jù)TCP確認(rèn)接收到該數(shù)據(jù),并 且目的網(wǎng)絡(luò)裝置16無需接收用來確認(rèn)接收到該修改的數(shù)據(jù)包的任何特別配置。在一些實(shí) 例中,目的網(wǎng)絡(luò)裝置16將修改的第一數(shù)據(jù)包的尺寸記錄為路徑26的PMTU。在一些實(shí)例中,目的網(wǎng)絡(luò)裝置16支持選擇確認(rèn)(SACK)。當(dāng)網(wǎng)絡(luò)裝置支持選擇確 認(rèn)時(shí),網(wǎng)絡(luò)裝置明確地對每個(gè)接收的數(shù)據(jù)包進(jìn)行確認(rèn),這與標(biāo)準(zhǔn)TCP累積確認(rèn)方案不同。當(dāng) 目的網(wǎng)絡(luò)裝置16通常配置為支持SACK時(shí),目的網(wǎng)絡(luò)裝置16可以對接收到的通信會話的第 一數(shù)據(jù)包或前N個(gè)數(shù)據(jù)包的SACK進(jìn)行無效。特別地,源網(wǎng)絡(luò)裝置10不在三次握手的SYN 數(shù)據(jù)包中設(shè)置允許SACK的選項(xiàng)。這樣,由于SACK將被無效,因此目的網(wǎng)絡(luò)裝置16將不執(zhí) 行 SACK。在 1996 年 10 月 Sun 微系統(tǒng)(Sun Microsystems)的 M. Math is 等人的題為 “TCP Selective Acknowledgement Options”的 RFC 2018 中描述了關(guān)于 SACK及其無效的更多細(xì) 節(jié),其全部內(nèi)容通過引用結(jié)合于此。在接收到來自目的網(wǎng)絡(luò)裝置16的確認(rèn)后,源網(wǎng)絡(luò)裝置10基于確認(rèn)中的序列號計(jì) 算PMTU。在一個(gè)實(shí)例中,源網(wǎng)絡(luò)裝置10將確認(rèn)的序列號減去起始序列號加1(INS+1)的值, 并將該差值設(shè)置為路徑26的PMTU。也就是說,對于起始序列號X,以及確認(rèn)序列號Y,源網(wǎng) 絡(luò)裝置10通過計(jì)算PMTU = Y-(X+1)確定路徑26的PMTU。在源網(wǎng)絡(luò)裝置10確定了路徑26的PMTU后,源網(wǎng)絡(luò)裝置10在與目的網(wǎng)絡(luò)裝置16 的通信會話期間發(fā)送不大于確定的PMTU的數(shù)據(jù)包。在一些實(shí)例中,源網(wǎng)絡(luò)裝置10向目的 網(wǎng)絡(luò)裝置16發(fā)送消息(該消息指示確定的路徑26的PMTU),使得目的網(wǎng)絡(luò)裝置16也不會 向源網(wǎng)絡(luò)裝置10發(fā)送大于路徑26的PMTU的數(shù)據(jù)包。如上所述,在其他實(shí)例中,目的網(wǎng)絡(luò) 裝置16將接收到的修改的數(shù)據(jù)包尺寸記作路徑26的PMTU。傳統(tǒng)網(wǎng)絡(luò)裝置可以配置為當(dāng)網(wǎng)絡(luò)會話期間發(fā)送的數(shù)據(jù)沒有全部被及時(shí)地確認(rèn)時(shí), 發(fā)起擁塞控制。然而,已經(jīng)修改了源網(wǎng)絡(luò)裝置10,使得當(dāng)目的網(wǎng)絡(luò)裝置16的確認(rèn)小于源網(wǎng) 絡(luò)裝置10在第一數(shù)據(jù)包中發(fā)送的數(shù)據(jù)總量時(shí),不發(fā)起擁塞控制。相反,源網(wǎng)絡(luò)裝置10配置為識別出第一數(shù)據(jù)包的數(shù)據(jù)丟失是由于第一數(shù)據(jù)包的尺寸超過路徑16的PMTU引起的,而 不是由擁塞引起的。然而,在第一數(shù)據(jù)包之后,當(dāng)目的網(wǎng)絡(luò)裝置16確認(rèn)傳輸少于全部數(shù)據(jù) 時(shí),源網(wǎng)絡(luò)裝置10可以發(fā)起擁塞控制。在一個(gè)實(shí)例中,對于數(shù)據(jù)包序列號X和接收的確認(rèn) Y,僅當(dāng)Y-(X+1) =0或1時(shí),源網(wǎng)絡(luò)裝置10發(fā)起擁塞控制。也就是說,目的網(wǎng)絡(luò)裝置16不 會接收到整個(gè)TCP段,在這種情況下源網(wǎng)絡(luò)裝置10發(fā)起擁塞控制。相反,當(dāng)Y-(X+1) > 1 時(shí),目的網(wǎng)絡(luò)裝置16接收到Y(jié)-(X+1)字節(jié)的數(shù)據(jù)。由于源網(wǎng)絡(luò)裝置10和目的網(wǎng)絡(luò)裝置16在配置PMTU后不發(fā)送大于路徑26的PMTU 的數(shù)據(jù)包,因此路由器12和14無需對從源網(wǎng)絡(luò)裝置10發(fā)送到目的網(wǎng)絡(luò)裝置16的數(shù)據(jù)包 進(jìn)行分段。因此,路由器12和14無需消耗計(jì)算資源對從源網(wǎng)絡(luò)裝置10到目的網(wǎng)絡(luò)裝置16 的網(wǎng)絡(luò)會話的數(shù)據(jù)包進(jìn)行分段。這可以有助于防止路由器12和14負(fù)擔(dān)過重。就路由器12 和14修改任意數(shù)據(jù)包而言,路由器12和14可以修改數(shù)據(jù)包的TCP和/或IP報(bào)頭,這可以 在路由器12和14的轉(zhuǎn)發(fā)平面中完成。這樣,源網(wǎng)絡(luò)裝置10能夠不依賴于接收來自路由器12和14的ICMP消息而確定路 徑26的PMTU。這是因?yàn)椋酚善?2和14無需支持或使能ICMP,路由器12和14可以對可 能引起拒絕服務(wù)的ICMP流攻擊保持隱蔽。網(wǎng)絡(luò)裝置10和16同樣無需為了成功地執(zhí)行本 公開的技術(shù)而支持或使能ICMP。此外,源網(wǎng)絡(luò)裝置10能夠確定單循環(huán)中路徑26的PMTU, 而不向目的網(wǎng)絡(luò)裝置16發(fā)送測試或探測數(shù)據(jù)包。也就是說,在第一數(shù)據(jù)包已經(jīng)被目的網(wǎng)絡(luò) 裝置16確認(rèn)后,源網(wǎng)絡(luò)裝置10能夠使用包含TCP三次握手后的應(yīng)用層數(shù)據(jù)的第一數(shù)據(jù)包 來確定路徑26的PMTU,而不發(fā)送不同尺寸的多個(gè)額外探測或測試數(shù)據(jù)包。源網(wǎng)絡(luò)裝置10 還能夠動態(tài)和自動地確定路徑26的PMTU,而不需要管理員來配置源網(wǎng)絡(luò)裝置10的PMTU。圖2是示出計(jì)算網(wǎng)絡(luò)路徑的PMTU的源網(wǎng)絡(luò)裝置10的部件的示例性配置的框圖。 與源網(wǎng)絡(luò)裝置10類似的其他網(wǎng)絡(luò)裝置,諸如以上參照圖1描述的任何中間或端點(diǎn)網(wǎng)絡(luò)裝 置,可以包括參照圖2的源網(wǎng)絡(luò)裝置10描述的特征。例如,源網(wǎng)絡(luò)裝置10可以包括計(jì)算 裝置、工作站裝置、膝上型計(jì)算機(jī)、臺式計(jì)算機(jī)、服務(wù)器、打印機(jī)、個(gè)人數(shù)字助理(PDA)、蜂窩 電話或智能電話、路由器、網(wǎng)關(guān)、集線器、網(wǎng)橋、轉(zhuǎn)換器、入侵檢測和防護(hù)裝置、或其他網(wǎng)絡(luò)裝 置。為了解釋的目的,源網(wǎng)絡(luò)裝置10—般地描述為包括端點(diǎn)裝置,諸如計(jì)算裝置或服務(wù)器。在圖2的實(shí)例中,源網(wǎng)絡(luò)裝置10包括用戶接口模塊32、控制單元34以及網(wǎng)絡(luò)接口 42。用戶接口模塊32使得一個(gè)或多個(gè)用戶接口裝置(諸如顯示器、鍵盤、鼠標(biāo)、觸摸屏、觸 針、光筆、麥克風(fēng)、揚(yáng)聲器或源網(wǎng)絡(luò)裝置10的其他用戶接口裝置)接收和/或呈現(xiàn)來自或到 達(dá)用戶的數(shù)據(jù)。例如,用戶接口模塊32可以接收來自用戶的請求,該請求用于發(fā)起與目的 網(wǎng)絡(luò)裝置16的網(wǎng)絡(luò)會話(圖2)。例如,當(dāng)目的網(wǎng)絡(luò)裝置16包括Web服務(wù)器時(shí),該請求可以 包括訪問目的網(wǎng)絡(luò)裝置16的網(wǎng)頁的請求。網(wǎng)絡(luò)接口 42包括源網(wǎng)絡(luò)裝置10用以與網(wǎng)絡(luò)18(圖1)的裝置(例如,路由器12) 進(jìn)行通信的接口。網(wǎng)絡(luò)接口 42可以包括網(wǎng)絡(luò)接口卡(NIC)、以太網(wǎng)接口、吉比特以太網(wǎng)接 口、無線卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器、電話調(diào)制解調(diào)器、DSL調(diào)制解調(diào)器或其他網(wǎng) 絡(luò)接口中的一個(gè)或多個(gè)。網(wǎng)絡(luò)接口 42還支持最大傳輸單元尺寸。在一些實(shí)例中,源網(wǎng)絡(luò)裝 置10包括多個(gè)網(wǎng)絡(luò)接口,其每個(gè)都可以基于其自身接口、接口連接到的鏈路、以及這些鏈 路另一端的網(wǎng)絡(luò)裝置來支持不同MTU。在一個(gè)實(shí)例中,控制單元34包括用于執(zhí)行本公開的一個(gè)或多個(gè)技術(shù)的硬件。在一些實(shí)例中,控制單元34包括用于執(zhí)行存儲器44中編碼的指令的硬件。例如,控制單元34 可以包括一個(gè)或多個(gè)處理器、一個(gè)或多個(gè)微處理器、數(shù)字信號處理器(DSP)、特定用途集成 電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、或任何其他等效的集成或離散邏輯電路、或其任
思組合。存儲器44可以包括一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲介質(zhì),用于對使處理器執(zhí)行不同 程序或函數(shù)的指令進(jìn)行編碼。例如,存儲器44可以包括一個(gè)或多個(gè)硬盤、諸如⑶-ROM的 光學(xué)介質(zhì)、軟盤、閃存驅(qū)動、固態(tài)驅(qū)動、或其他磁、光、或閃存介質(zhì)。存儲器44可以編碼有對 應(yīng)于應(yīng)用層處理36、傳輸層處理38、因特網(wǎng)層處理39、以及PMTUD模塊40的指令。在一些 實(shí)例中,控制單元34從存儲器44為這些模塊提取并執(zhí)行指令。在一些實(shí)例中,應(yīng)用層處理 36、傳輸層處理38、因特網(wǎng)層處理39、以及PMTUD模塊40中的任一個(gè)或全部可以包括獨(dú)立 硬件模塊,用于執(zhí)行其具有的功能。在一些實(shí)例中,控制單元34還執(zhí)行用戶接口模塊32和 /或網(wǎng)絡(luò)接口 42的指令。在圖2的實(shí)例中,控制單元34包括操作環(huán)境35和操作系統(tǒng)37。操作系統(tǒng)37對應(yīng)于 端點(diǎn)網(wǎng)絡(luò)裝置的任何操作系統(tǒng),例如,MicrosoftWindows、Linux、Unix、Solaris、FreeBSD、 或其他操作系統(tǒng)。在圖2的實(shí)例中,操作系統(tǒng)37提供了傳輸層處理38、因特網(wǎng)層處理39、 以及PMTUD (PMTU發(fā)現(xiàn))模塊40。傳輸層處理38和因特網(wǎng)層處理39包括實(shí)施一個(gè)或多個(gè) 網(wǎng)絡(luò)協(xié)議,例如TCP/IP、統(tǒng)一數(shù)據(jù)報(bào)協(xié)議(UDP)、端對端協(xié)議(PPP)、或其他傳輸和因特網(wǎng)層 通信協(xié)議。因特網(wǎng)層處理39還可以包括實(shí)施ICMP,盡管這對于本公開的技術(shù)而言并不是必 需的。在圖2的實(shí)例中,PMTUD模塊40由傳輸層處理38中的操作系統(tǒng)37來實(shí)施。在一 個(gè)實(shí)例中,PMTUD模塊40被作為TCP實(shí)施的一部分來執(zhí)行,以根據(jù)本公開的技術(shù)修改TCP。 這樣,PMTUD模塊40可以形成擴(kuò)展的或修改的TCP協(xié)議的一部分。因此,PMTUD模塊40可 以對應(yīng)于修改的TCP處理。雖然將PMTUD模塊40描述為在傳輸層運(yùn)行,但是在一些示例性 實(shí)施中,例如,通過修改數(shù)據(jù)包的TCP報(bào)頭和IP報(bào)頭中的一個(gè)或兩個(gè)并根據(jù)確認(rèn)的TCP序 列號計(jì)算PMTU,該P(yáng)MTUD模塊可以在傳輸層和因特網(wǎng)層運(yùn)行。操作環(huán)境35包括用于執(zhí)行上述操作系統(tǒng)37的處理的環(huán)境,該環(huán)境與操作系統(tǒng)37 提供的業(yè)務(wù)交互。在操作環(huán)境35中執(zhí)行的處理包括應(yīng)用層處理36,其通常對應(yīng)于源網(wǎng)絡(luò)裝 置10的特定應(yīng)用。例如,應(yīng)用層處理36可以包括Web瀏覽器、e-mail客戶端、文件傳輸程 序、或用于執(zhí)行與源網(wǎng)絡(luò)裝置10相關(guān)的各種任務(wù)的其他模塊。PMTUD模塊40包括本公開的用于發(fā)現(xiàn)網(wǎng)絡(luò)路徑的PMTU的技術(shù)的示例性實(shí)施例。 在一個(gè)實(shí)例中,PMTUD模塊40設(shè)置網(wǎng)絡(luò)會話的第一數(shù)據(jù)包的DF標(biāo)記。在接收到第一數(shù)據(jù)包 的確認(rèn)時(shí),PMTUD模塊40根據(jù)接收到的確認(rèn)的序列號計(jì)算路徑的PMTU。PMTUD模塊40將 計(jì)算的每個(gè)網(wǎng)絡(luò)會話的PMTU存儲在存儲器44中。在計(jì)算了網(wǎng)絡(luò)會話的PMTU之后,控制單元34根據(jù)傳輸層處理38和/或因特網(wǎng)層 處理39的TCP或其他通信協(xié)議,重新發(fā)送從第一數(shù)據(jù)包中丟棄的數(shù)據(jù)??刂茊卧?4根據(jù) 計(jì)算的網(wǎng)絡(luò)會話的PMTU發(fā)送網(wǎng)絡(luò)會話的后續(xù)數(shù)據(jù)包。PMTUD模塊40可以計(jì)算多個(gè)網(wǎng)絡(luò)會 話中的每個(gè)網(wǎng)絡(luò)會話的不同PMTU。相應(yīng)地,控制單元34可以根據(jù)確定的對應(yīng)網(wǎng)絡(luò)會話的 PMTU發(fā)送每個(gè)網(wǎng)絡(luò)會話的數(shù)據(jù)包。圖3是示出示例性路由器50的框圖,該示例性路由器在源裝置和目的裝置之間,
13并配置為參與PMTU的計(jì)算。路由器50可以對應(yīng)于路由器12或14(圖1)。在圖3的實(shí)例 中,路由器50包括接口卡70A 70N(多個(gè)IFC 70)和控制單元52。接口卡70中的每個(gè)均 包括輸入鏈路72A 72N中的一條(輸入鏈路72)和輸出鏈路74A 74N中的一條(輸出 鏈路74)的相應(yīng)集合。例如,接口卡70A包括輸入鏈路72A和輸出鏈路74A。路由器50通 過輸入鏈路72中的一條接收數(shù)據(jù)包,并通過鏈路74中的一條向外轉(zhuǎn)發(fā)送往另一目的地的 數(shù)據(jù)包。路由器50還可以接收送往其自身的數(shù)據(jù)包,例如,來自網(wǎng)絡(luò)中的其他路由器的包 含路由信息的數(shù)據(jù)包。路由引擎54可以使用送往路由器50的數(shù)據(jù)包的數(shù)據(jù)來計(jì)算通過網(wǎng) 絡(luò)的路由,并根據(jù)一個(gè)或多個(gè)協(xié)議58將路由存儲在路由信息庫56中??刂茊卧?2包括路由引擎54、轉(zhuǎn)發(fā)引擎60、路由信息庫(RIB) 56、以及轉(zhuǎn)發(fā)信息庫 (FIB)620在其他實(shí)例中,路由器可以包括用于路由引擎和轉(zhuǎn)發(fā)引擎的不同的控制單元,或 者轉(zhuǎn)發(fā)引擎和路由引擎可以分布在每個(gè)IFC中??刂茊卧?2可以包括一個(gè)或多個(gè)處理器、 微處理器、DSP、FPGA、ASIC、或用于執(zhí)行例如路由引擎54的其他電路或硬件。路由引擎54包括協(xié)議58,該協(xié)議包括一個(gè)或多個(gè)路由協(xié)議的實(shí)施,例如開放最 短路徑優(yōu)先(0SPF)、中間系統(tǒng)到中間系統(tǒng)(IS-IS)、邊界網(wǎng)關(guān)協(xié)議(BGP)、路由信息協(xié)議 (RIP)、內(nèi)部網(wǎng)關(guān)路由協(xié)議(IGRP)、外部網(wǎng)關(guān)協(xié)議(EGP)、或用于計(jì)算穿過網(wǎng)絡(luò)的路由的其 他路由協(xié)議。路由引擎54將計(jì)算的路由存儲在RIB 56中。轉(zhuǎn)發(fā)引擎60接收來自IFC 70的數(shù)據(jù)包,并根據(jù)存儲在FIB 62中的轉(zhuǎn)發(fā)信息通過 IFC 70轉(zhuǎn)發(fā)數(shù)據(jù)包。FIB 62—般地包括對應(yīng)于存儲在FIB 56中的一個(gè)或多個(gè)路由的轉(zhuǎn)發(fā) 信息。鑒于存儲在RIB 56中的路由包括貫穿網(wǎng)絡(luò)的路由,例如,從一個(gè)端點(diǎn)到另一端點(diǎn)的 路由,因此FIB 62存儲了包含(例如)查找表的數(shù)據(jù),該查找表使得數(shù)據(jù)包的目的地與一 個(gè)IFC 70相關(guān)聯(lián)。這樣,在接收到數(shù)據(jù)包時(shí),轉(zhuǎn)發(fā)引擎60可以通過在FIB 62中執(zhí)行查找 來識別數(shù)據(jù)包的目的地并確定通過其轉(zhuǎn)發(fā)數(shù)據(jù)包的一個(gè)IFC 70。在圖3的實(shí)例中,轉(zhuǎn)發(fā)引擎60中的轉(zhuǎn)發(fā)邏輯已經(jīng)被修改為包括PMTUD模塊64。 PMTUD模塊64的指令可以存儲在路由器50的存儲器或其他計(jì)算機(jī)可讀存儲介質(zhì)(未示出) 中并由控制單元52執(zhí)行。備選地,PMTUD模塊64可以嵌入用于執(zhí)行參照PMTUD模塊64描 述的功能的硬件中,例如,一個(gè)或多個(gè)ASIC中。在其他實(shí)例中,可以使用硬件、軟件、或固件 的任意組合執(zhí)行參照PMTUD模塊64描述的功能。PMTUD模塊64根據(jù)本公開的技術(shù)修改接收到的特定數(shù)據(jù)包。例如,當(dāng)接收的數(shù)據(jù) 包大于到下一跳的鏈路的鏈路MTU時(shí),并且當(dāng)設(shè)置了接收的數(shù)據(jù)包的DF標(biāo)記時(shí),PMTUD模 塊64從數(shù)據(jù)包中去除足夠多的數(shù)據(jù),使得修改的數(shù)據(jù)包不會超過到下一跳的鏈路的鏈路 MTU。在一些實(shí)例中,PMTUD模塊64配置為僅當(dāng)設(shè)置了 DF標(biāo)記時(shí)才從數(shù)據(jù)包中去除和丟棄 數(shù)據(jù)。PMTUD模塊64僅僅丟棄超過的、去除的數(shù)據(jù),而不對數(shù)據(jù)包進(jìn)行分段。這樣,路由器 50無需保持被修改的數(shù)據(jù)包的副本,而是可以適當(dāng)?shù)匦薷臄?shù)據(jù)包。此外,PMTUD模塊64無 需調(diào)用分段邏輯對數(shù)據(jù)包進(jìn)行分段,相反,PMTUD模塊64僅僅對數(shù)據(jù)包報(bào)頭和有效負(fù)載進(jìn) 行修改,而不創(chuàng)建真正的數(shù)據(jù)包片段,讓數(shù)據(jù)包處于將被下游裝置識別為正確形成的完整 數(shù)據(jù)包的形式。這樣,這些技術(shù)可以減小路由器50或其他下游裝置因?yàn)閳?zhí)行分段邏輯而負(fù) 擔(dān)過重或過于忙碌的可能性。當(dāng)接收到大于鏈路MTU并設(shè)置了 DF標(biāo)記的數(shù)據(jù)包時(shí),路由器 50還不丟棄該數(shù)據(jù)包,并不向源裝置發(fā)送ICMP “目的地不可到達(dá)”消息或其他拒絕消息。 相反,路由器50根據(jù)鏈路MTU,沿到下一跳的鏈路轉(zhuǎn)發(fā)修改的數(shù)據(jù)包,以攜帶數(shù)據(jù)包的初始有效負(fù)載的部分。在一些實(shí)例中,轉(zhuǎn)發(fā)引擎60在FIB 62的表中存儲外向鏈路74的每個(gè)鏈 路 MTU。在一些實(shí)例中,PMTUD模塊64對修改的數(shù)據(jù)包的TCP報(bào)頭和IP報(bào)頭的報(bào)頭信息 進(jìn)行修改。例如,PMTUD模塊64可以修改TCP尺寸、TCP校驗(yàn)和、IP長度、以及IP校驗(yàn)和。 在一個(gè)實(shí)例中,PMTUD模塊64僅調(diào)整IP報(bào)頭中的長度值。在另一實(shí)例中,PMTUD模塊64調(diào) 整IP報(bào)頭中的長度值和TCP報(bào)頭的尺寸值。在不同的實(shí)例中,PMTUD模塊64可以重新計(jì) 算TCP校驗(yàn)和和IP校驗(yàn)和中的一個(gè)或兩個(gè),例如,還同時(shí)調(diào)整IP報(bào)頭中的長度值或TCP報(bào) 頭中的尺寸值中的一個(gè)或兩個(gè)。一般地,PMTUD模塊64確保修改的數(shù)據(jù)包包括完整的IP數(shù)據(jù)報(bào)。也就是說,PMTUD 模塊64不在修改的數(shù)據(jù)包的IP報(bào)頭中設(shè)置“更多分段”(MF)標(biāo)記。PMTUD模塊64也不為 修改的數(shù)據(jù)包設(shè)置IP報(bào)頭中的偏移值的值。在一些實(shí)例中,PMTUD模塊64清除IP報(bào)頭的 MF標(biāo)記和偏移值,以指示該數(shù)據(jù)包沒有額外片段。這樣,PMTUD模塊64確保了修改的數(shù)據(jù) 包包括IP數(shù)據(jù)報(bào),而不是數(shù)據(jù)包片段。轉(zhuǎn)發(fā)引擎60、PMTUD模塊64、以及FIB 62構(gòu)成路由器50的通常稱為轉(zhuǎn)發(fā)平面66 的部分。為了完全在轉(zhuǎn)發(fā)平面66的部件中的PMTU發(fā)現(xiàn)的目的,路由器50可以根據(jù)本公開 的技術(shù)修改數(shù)據(jù)包。因此,無需對現(xiàn)有的路由引擎54或現(xiàn)有的協(xié)議58進(jìn)行修改來執(zhí)行本 公開的技術(shù)。在一個(gè)實(shí)例中,諸如路由器50的中間網(wǎng)絡(luò)裝置包括多個(gè)接口卡,配置為接收和 轉(zhuǎn)發(fā)網(wǎng)絡(luò)的數(shù)據(jù)包;轉(zhuǎn)發(fā)引擎,配置為確定多個(gè)接口卡中通過其中一個(gè)轉(zhuǎn)發(fā)接收的數(shù)據(jù)包 的這一個(gè)接口卡,以及確定與該多個(gè)接口卡中的一個(gè)接口卡對應(yīng)的鏈路的鏈路最大傳輸單 元(鏈路MTU),其中,接收的數(shù)據(jù)包包括報(bào)頭和有效負(fù)載;以及PMTUD模塊,配置為確定接 收的數(shù)據(jù)包尺寸是否超過鏈路MTU,以及當(dāng)接收的數(shù)據(jù)包尺寸超過鏈路MTU時(shí),從數(shù)據(jù)包的 有效負(fù)載中去除數(shù)據(jù)的一部分,丟棄去除部分,并根據(jù)去除部分調(diào)整接收的數(shù)據(jù)包的報(bào)頭。圖4是示出用于計(jì)算網(wǎng)絡(luò)路徑的MTU的示例性方法的流程圖。圖4描述了參與該 示例性方法的三種裝置客戶端,用作通信會話的源;服務(wù)器,用作通信會話的目的地;以 及中間路由器。一般地,客戶端確定PMTU,服務(wù)器對數(shù)據(jù)包的接收進(jìn)行確認(rèn),而當(dāng)接收的數(shù) 據(jù)包超過下一跳鏈路的鏈路MTU時(shí),即使數(shù)據(jù)包可能被特別地設(shè)計(jì)用于無分段,中間路由 器仍像本文描述的那樣運(yùn)行以從接收的數(shù)據(jù)包中去除數(shù)據(jù)。圖4中的流程圖的標(biāo)記為“中 間路由器”的中間部分,可以通過一個(gè)或多個(gè)中間網(wǎng)絡(luò)裝置(諸如路由器、交換機(jī)、網(wǎng)關(guān)、網(wǎng) 橋、集線器、或者客戶端和服務(wù)器間的其他裝置)來執(zhí)行。盡管其他部分標(biāo)記為“客戶端” 和“服務(wù)器”,但是應(yīng)當(dāng)理解,客戶端還可以向服務(wù)器發(fā)送數(shù)據(jù),而服務(wù)器可以從客戶端接收 數(shù)據(jù)。一般地,在圖4的方法的描述中,將源網(wǎng)絡(luò)裝置10作為客戶端、將路由器12和14 作為中間路由器、以及將目的網(wǎng)絡(luò)裝置16作為服務(wù)器進(jìn)行描述。但是,應(yīng)當(dāng)理解,圖4的方 法也適用于其他網(wǎng)絡(luò)裝置和其他中間裝置。開始,源網(wǎng)絡(luò)裝置10向路由器12發(fā)送數(shù)據(jù)包(肯定會最終到達(dá)目的網(wǎng)絡(luò)裝置 16),作為攜帶網(wǎng)絡(luò)會話的應(yīng)用層數(shù)據(jù)的第一數(shù)據(jù)包(100)。攜帶了應(yīng)用層數(shù)據(jù)的第一數(shù)據(jù) 包通常包括在建立網(wǎng)絡(luò)會話之后(例如,在網(wǎng)絡(luò)裝置10、16執(zhí)行TCP三次握手之后)發(fā)送 的數(shù)據(jù)包。在一些實(shí)例中,源網(wǎng)絡(luò)裝置10構(gòu)造數(shù)據(jù)包,使得數(shù)據(jù)包的尺寸等于源網(wǎng)絡(luò)裝置10和路由器12間的鏈路20的鏈路MTU。在某些情況下,將數(shù)據(jù)包構(gòu)造為具有鏈路MTU的尺 寸,包括用可能被目的網(wǎng)絡(luò)裝置16或路由器12、14丟棄的額外數(shù)據(jù)填充數(shù)據(jù)包。一般地, 雖然在某些情況下,源網(wǎng)絡(luò)裝置10可能用可丟棄數(shù)據(jù)來填充第一數(shù)據(jù)包,以確保其尺寸等 于鏈路20的鏈路MTU,但是數(shù)據(jù)包包括實(shí)際應(yīng)用數(shù)據(jù)。源網(wǎng)絡(luò)裝置10還設(shè)置數(shù)據(jù)包的DF 標(biāo)記。路由器12接收來自源網(wǎng)絡(luò)裝置10的數(shù)據(jù)包(102)。路由器12通過在諸如FIB 62(圖3)的FIB中執(zhí)行下一跳查找,識別出數(shù)據(jù)包的下一跳。在圖1的實(shí)例中,下一跳是路 由器14。路由器12還確定到下一跳的連接路由器12的鏈路的鏈路MTU。在一些實(shí)例中, 鏈路MTU和下一跳信息存儲在FIB中。路由器12確定數(shù)據(jù)包尺寸是否大于到下一跳的鏈 路的鏈路MTU(104)。在圖1的實(shí)例中,路由器12確定數(shù)據(jù)包尺寸是否大于鏈路22的鏈路 MTU。當(dāng)數(shù)據(jù)包不超過鏈路MTU時(shí)(104的“NO”分支),路由器12將數(shù)據(jù)包轉(zhuǎn)發(fā)到下一跳 (108),8口,圖1實(shí)例中的路由器14。當(dāng)數(shù)據(jù)包超過鏈路MTU時(shí)(104的“YES”分支),路由器12從數(shù)據(jù)包中去除超過鏈 路MTU的數(shù)據(jù)(106)。路由器12從數(shù)據(jù)包的有效負(fù)載中去除數(shù)據(jù),使得剩余有效負(fù)載尺寸 加上每個(gè)報(bào)頭的尺寸小于或等于到下一跳的鏈路的鏈路MTU。在一些實(shí)例中,路由器12還 修改數(shù)據(jù)包的TCP報(bào)頭和IP報(bào)頭中的一個(gè)或兩個(gè)。路由器12然后將修改的數(shù)據(jù)包轉(zhuǎn)發(fā)到 下一跳(108)。在圖1的實(shí)例中,路由器14然后接收來自路由器12的數(shù)據(jù)包(102),識別數(shù)據(jù)包 的下一跳(圖1實(shí)例中的目的網(wǎng)絡(luò)裝置16)并確定數(shù)據(jù)包尺寸是否超過到下一跳的鏈路24 的鏈路MTU (104),必要時(shí)去除數(shù)據(jù)(106),當(dāng)去除數(shù)據(jù)時(shí)重新計(jì)算數(shù)據(jù)包報(bào)頭,并將修改的 數(shù)據(jù)包轉(zhuǎn)發(fā)到下一跳(108)。因此,雖然描述為發(fā)送到圖4中的服務(wù)器,但是應(yīng)當(dāng)理解,在數(shù) 據(jù)包最終到達(dá)服務(wù)器(圖1實(shí)例中的目的網(wǎng)絡(luò)裝置16)之前,每個(gè)中間裝置均可以將數(shù)據(jù) 包發(fā)送到另一中間裝置,并且如果待遍歷的下一鏈路的MTU小于數(shù)據(jù)包的當(dāng)前尺寸,則每 個(gè)中間裝置可以從有效負(fù)載中去除應(yīng)用層數(shù)據(jù)的額外部分。然后,目的網(wǎng)絡(luò)裝置16從路由器14接收修改的數(shù)據(jù)包,該數(shù)據(jù)包可以由多個(gè)中間 裝置修改(110)。作為響應(yīng),目的網(wǎng)絡(luò)裝置16發(fā)送在修改的數(shù)據(jù)包中接收到的實(shí)際字節(jié)數(shù) 的確認(rèn)(112)。根據(jù)TCP,目的網(wǎng)絡(luò)裝置16發(fā)送具有序列號的確認(rèn),該序列號等于起始序列 號加接收的數(shù)據(jù)包中的數(shù)據(jù)字節(jié)數(shù)加1。即,對于起始序列號X、以及數(shù)據(jù)包尺寸Y,目的網(wǎng) 絡(luò)裝置16發(fā)送包含序列號X+Y+1的確認(rèn)。根據(jù)TCP,該確認(rèn)通知源網(wǎng)絡(luò)裝置10,目的網(wǎng)絡(luò) 裝置16已經(jīng)接收到與小于(X+Y+1)的序列號對應(yīng)的網(wǎng)絡(luò)會話的所有字節(jié)。目的網(wǎng)絡(luò)裝置 16將確認(rèn)發(fā)送到路由器14,路由器將確認(rèn)轉(zhuǎn)發(fā)到路由器12(114),路由器將確認(rèn)轉(zhuǎn)發(fā)到源 網(wǎng)絡(luò)裝置10(114),源網(wǎng)絡(luò)裝置10最終接收確認(rèn)(116)。然后,源網(wǎng)絡(luò)裝置10基于接收到的確認(rèn)計(jì)算源網(wǎng)絡(luò)裝置10和目的網(wǎng)絡(luò)裝置16間 的路徑26的PMTU,并配置傳輸層處理38和因特網(wǎng)層處理39來發(fā)送符合算得的PTMU的數(shù) 據(jù)包(118)。特別地,對于起始序列號X、以及接收的序列號Z,源網(wǎng)絡(luò)裝置10計(jì)算的PMTU 為(Z-X-1),也可以等價(jià)表示為(Z-(X+1))。源網(wǎng)絡(luò)裝置10重新發(fā)送沒有被確認(rèn)的第一數(shù) 據(jù)包的數(shù)據(jù)。在確定之后,源網(wǎng)絡(luò)裝置10向目的網(wǎng)絡(luò)裝置16發(fā)送至多包括(Z-X-1)字節(jié) 的數(shù)據(jù)包,作為該網(wǎng)絡(luò)會話的一部分。在一些實(shí)例中,源網(wǎng)絡(luò)裝置10可以多次重新制定圖4的方法,以周期性地計(jì)算PMTU。例如,在改變路徑26的路由發(fā)生變化時(shí),裝置可以配置為根據(jù)上述技術(shù)重新計(jì)算 PMTU。在一些實(shí)例中,源網(wǎng)絡(luò)裝置10和目的網(wǎng)絡(luò)裝置16以RFC 1191中描述的周期執(zhí)行本 公開的技術(shù),以動態(tài)地增大PMTU的尺寸。例如,源網(wǎng)絡(luò)裝置10可以周期性地,但是相對不 頻繁地,發(fā)送包含大于算得的PMTU的數(shù)據(jù)的數(shù)據(jù)包,其中,數(shù)據(jù)包例如通過設(shè)置DF標(biāo)記指 示其將不被分段。如果目的網(wǎng)絡(luò)裝置16確認(rèn)大于當(dāng)前計(jì)算的PMTU的數(shù)據(jù)量,則源網(wǎng)絡(luò)裝 置10可以增大PMTU的尺寸。在一個(gè)實(shí)例中,根據(jù)RFC1191,在嘗試增大失敗后的特定時(shí)間 段內(nèi),例如,五分鐘內(nèi),源網(wǎng)絡(luò)裝置10將不會再次嘗試增大PMTU。然而,當(dāng)源網(wǎng)絡(luò)裝置10確 定較大數(shù)據(jù)包的數(shù)據(jù)總量已經(jīng)被確認(rèn)時(shí),源網(wǎng)絡(luò)裝置10可以通過發(fā)送更大的數(shù)據(jù)包,嘗試 進(jìn)一步增大PMTU的尺寸,例如,大約在最近增大PMTU后一分鐘。根據(jù)RFC 1191的推薦,其 他實(shí)例使用這些時(shí)間值的兩倍,即,在嘗試增大失敗后十分鐘再增大,以及在嘗試增大成功 后兩分鐘再增大。在一些實(shí)例中,例如,當(dāng)發(fā)生路由變化,使得對于新路由而言,沿新路由的至少一 條鏈路不支持先前的PMTU時(shí),源網(wǎng)絡(luò)裝置10還動態(tài)地減小PMTU。在這種情況下,雖然源 網(wǎng)絡(luò)裝置10發(fā)送包含與PMTU對應(yīng)的數(shù)據(jù)的數(shù)據(jù)包,但是目的網(wǎng)絡(luò)裝置16將僅對發(fā)送的小 于PMTU的每個(gè)數(shù)據(jù)包的一部分進(jìn)行確認(rèn)。例如,假設(shè)當(dāng)前PMTU是1500字節(jié),并且最近確 認(rèn)是5001,假設(shè)TCP窗口的尺寸為5,則源網(wǎng)絡(luò)裝置10將發(fā)送數(shù)據(jù)包5001 6500、6501 8000,8001 9500、9501 11000以及11001 12500。假設(shè)路由已經(jīng)變化,使得沿新路由 的所有鏈路支持的最大MTU是500字節(jié),則目的網(wǎng)絡(luò)裝置16將發(fā)送確認(rèn)5501 (對于數(shù)據(jù)包 5001 6500) ,7001 (對于數(shù)據(jù)包 6501 8000) ,8501 (對于數(shù)據(jù)包 8001 9500)、10001 (對 于數(shù)據(jù)包9501 11000)、以及11501 (對于數(shù)據(jù)包11001 12500)。從這些確認(rèn)中,源網(wǎng) 絡(luò)裝置10將動態(tài)地確定PMTU為500字節(jié),并重新發(fā)送每個(gè)數(shù)據(jù)包的未被確認(rèn)的數(shù)據(jù)(在 這個(gè)實(shí)例中,為字節(jié)5501 6500、7001 8000、8501 9500、10001 11000以及11501 12500)。在重新傳輸之后,源網(wǎng)絡(luò)裝置10還發(fā)送包含500字節(jié)數(shù)據(jù)的數(shù)據(jù)包。與傳統(tǒng)技術(shù)不同,在這個(gè)實(shí)例中,源網(wǎng)絡(luò)裝置10不會因?yàn)榻邮盏酱_認(rèn)接收了小于 發(fā)送到目的網(wǎng)絡(luò)裝置16的數(shù)據(jù)總量的確認(rèn)而發(fā)起擁塞控制。當(dāng)確定了 PMTU之后源網(wǎng)絡(luò)裝 置10發(fā)送目的網(wǎng)絡(luò)裝置16沒有確認(rèn)的數(shù)據(jù)包時(shí),源網(wǎng)絡(luò)裝置10例如可以通過降低傳輸速 率來發(fā)起擁塞控制。然而,源網(wǎng)絡(luò)裝置10配置為,對于第一數(shù)據(jù)包,確定任何數(shù)據(jù)丟失都是 由數(shù)據(jù)包超過了至少一條鏈路的MTU造成的,而不是由擁塞造成的。相應(yīng)地,當(dāng)目的網(wǎng)絡(luò)裝 置16確認(rèn)了小于第一數(shù)據(jù)包的數(shù)據(jù)總量時(shí),源網(wǎng)絡(luò)裝置10無需開始擁塞控制。參照圖1中示出的裝置,在接下來的實(shí)例中假設(shè)鏈路20的鏈路MTU是5,000字節(jié), 鏈路22的鏈路MTU是2,500字節(jié),而鏈路24的鏈路MTU是500字節(jié)。源網(wǎng)絡(luò)裝置10最初 向路由器12發(fā)送5,000字節(jié)的數(shù)據(jù),并且設(shè)置了數(shù)據(jù)包的DF標(biāo)記,送往目的網(wǎng)絡(luò)裝置16, 發(fā)送到作為沿到達(dá)目的網(wǎng)絡(luò)裝置16的路徑的下一跳的路由器12。路由器12識別出朝目的 網(wǎng)絡(luò)裝置16向其輸出數(shù)據(jù)包的下一跳,并確定與該下一跳相關(guān)的鏈路MTU(這里,2,500字 節(jié))。路由器12確定數(shù)據(jù)包的尺寸大于到下一跳的鏈路的鏈路MTU,因此路由器12從有效 負(fù)載中去除2,500字節(jié)的數(shù)據(jù),重新計(jì)算報(bào)頭,并將剩余的2,500字節(jié)數(shù)據(jù)包發(fā)送到路由器 14。通過查找FIB中的下一跳以及到下一跳的鏈路的對應(yīng)鏈路MTU,路由器14確定從路由 器12接收的2,500字節(jié)數(shù)據(jù)包大于到下一跳的鏈路的鏈路MTU (500字節(jié)),因此路由器14 從有效負(fù)載中去除2,000字節(jié)數(shù)據(jù),重新計(jì)算報(bào)頭,并將剩余的500字節(jié)數(shù)據(jù)包發(fā)送到目的網(wǎng)絡(luò)裝置16。目的網(wǎng)絡(luò)裝置16從路由器14接收該500字節(jié)數(shù)據(jù)包,并通過向源網(wǎng)絡(luò)裝置 10發(fā)送具有包含起始序列號加500加1的序列號的確認(rèn),來確認(rèn)接收到的500字節(jié)數(shù)據(jù)。 源網(wǎng)絡(luò)裝置10確定到達(dá)目的網(wǎng)絡(luò)裝置16的路徑26的PMTU等于確認(rèn)的序列號減去起始序 列號再減1,在這個(gè)實(shí)例中為500。該實(shí)例忽略了數(shù)據(jù)包報(bào)頭的尺寸,但是闡釋了本公開中 描述的技術(shù)。圖5是示出通過路由器修改數(shù)據(jù)包以輔助網(wǎng)絡(luò)裝置計(jì)算路徑的MTU的示例性方法 的流程圖。圖5的方法一般地是參照路由器50 (圖3)來描述的。然而,其他網(wǎng)絡(luò)裝置(諸 如路由器12、路由器14、交換機(jī)、網(wǎng)關(guān)、集線器、入侵檢測和防護(hù)裝置、防火墻、或者其他中 間網(wǎng)絡(luò)裝置)也可以執(zhí)行與參照圖5描述的方法類似的方法。開始,路由器50接收數(shù)據(jù)包(130)。轉(zhuǎn)發(fā)引擎60在FIB 62中執(zhí)行查找,以確定 IFC 70中一個(gè),通過該IFC轉(zhuǎn)發(fā)數(shù)據(jù)包以到達(dá)沿著到數(shù)據(jù)包的最終網(wǎng)絡(luò)目的地的路由的下 一跳(131)。轉(zhuǎn)發(fā)引擎60還確定數(shù)據(jù)包的尺寸是否大于到下一跳的鏈路的鏈路MTU(132)。 在一個(gè)實(shí)例中,轉(zhuǎn)發(fā)引擎60從FIB 62中提取到下一跳的鏈路的鏈路MTU。當(dāng)數(shù)據(jù)包尺寸小 于或等于到下一跳的鏈路的鏈路MTU時(shí)(132的“NO”分支),轉(zhuǎn)發(fā)引擎60將該數(shù)據(jù)包轉(zhuǎn)發(fā) 到下一跳(150)。數(shù)據(jù)包尺寸包括有效負(fù)載尺寸以及數(shù)據(jù)包的任意報(bào)頭的尺寸。當(dāng)數(shù)據(jù)包的尺寸大于到下一跳的鏈路的鏈路MTU時(shí)(132的“YES”分支),轉(zhuǎn)發(fā)部 件60確定是否設(shè)置了數(shù)據(jù)包的IP報(bào)頭中的“不分段”(DF)標(biāo)記(134)。在一個(gè)實(shí)例中,該 標(biāo)記包括一比特?cái)?shù)字,當(dāng)該比特值等于1時(shí)為“設(shè)置”,當(dāng)值等于0時(shí)為“清除”。在圖5的 實(shí)例中,當(dāng)轉(zhuǎn)發(fā)部件60確定沒有設(shè)置DF標(biāo)記時(shí),例如,值為0時(shí)(134的“NO”分支),轉(zhuǎn)發(fā) 部件60對數(shù)據(jù)包進(jìn)行分段(136)。即,在該實(shí)例中,轉(zhuǎn)發(fā)部件60根據(jù)TCP/IP數(shù)據(jù)包分段將 數(shù)據(jù)包有效負(fù)載拆分成多個(gè)數(shù)據(jù)包片段。例如,轉(zhuǎn)發(fā)部件60設(shè)置除最后一個(gè)片段之外的每 個(gè)片段中的IP報(bào)頭的“更多分段”標(biāo)記,以及設(shè)置IP報(bào)頭中的偏移值。轉(zhuǎn)發(fā)部件60還轉(zhuǎn) 發(fā)每個(gè)數(shù)據(jù)包片段(138)。然而,在一些實(shí)例中,路由器50可以配置為不對任何數(shù)據(jù)包進(jìn)行 分段。當(dāng)轉(zhuǎn)發(fā)部件60確定設(shè)置了數(shù)據(jù)包的DF標(biāo)記時(shí)(134的“YES”分支),路由器50從 數(shù)據(jù)包的有效負(fù)載中去除超過到下一跳的鏈路的鏈路MTU的數(shù)據(jù)(140)。在圖4的實(shí)例中, PMTUD模塊64還更新TCP報(bào)頭的尺寸值(142),重新計(jì)算TCP校驗(yàn)和(144),更新IP報(bào)頭的 長度值(146),并重新計(jì)算IP校驗(yàn)和(148)。在其他實(shí)例中,路由器50可以執(zhí)行如下操作 中的任一個(gè)或全部,或者不執(zhí)行更新TCP報(bào)頭中的尺寸值,更新IP報(bào)頭的長度值,重新計(jì) 算TCP校驗(yàn)和,和/或重新計(jì)算IP校驗(yàn)和。在任何情況下,在修改的數(shù)據(jù)包的IP報(bào)頭中, PMTUD模塊64不設(shè)置MF標(biāo)記,也不設(shè)置偏移值。因此,修改的數(shù)據(jù)包包括IP數(shù)據(jù)報(bào),而不 是數(shù)據(jù)包片段。轉(zhuǎn)發(fā)部件60然后將修改的數(shù)據(jù)包轉(zhuǎn)發(fā)到沿路由的下一跳(150)。在一個(gè)實(shí)例中,與圖5的方法類似的方法包括使用中間網(wǎng)絡(luò)裝置接收包含報(bào)頭 和有效負(fù)載的數(shù)據(jù)包;確定到數(shù)據(jù)包的下一跳的鏈路的鏈路MTU ;當(dāng)數(shù)據(jù)包尺寸超過鏈路 MTU時(shí),使用中間網(wǎng)絡(luò)裝置從數(shù)據(jù)包有效負(fù)載中去除數(shù)據(jù)的一部分;丟棄去除部分,并根據(jù) 去除部分調(diào)整數(shù)據(jù)包的報(bào)頭;以及將數(shù)據(jù)包轉(zhuǎn)發(fā)到下一跳。本公開中描述的技術(shù)可以至少部分地在硬件、軟件、固件、或其任意組合中實(shí)施。 例如,所描述的技術(shù)的各個(gè)方面可以在一個(gè)或多個(gè)處理器中實(shí)施,包括一個(gè)或多個(gè)微處理 器、數(shù)字信號處理器(DSP)、特定用途集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、或任何
18其他等效的集成或分離邏輯電路以及這種部件的任意組合。術(shù)語“處理器”或“處理電路” 通常是指單獨(dú)的或與其他邏輯電路相結(jié)合的任意前述邏輯電路,或任意其他等效電路。包 括硬件的控制單元還可以執(zhí)行本公開的一個(gè)或多個(gè)技術(shù)。這種硬件、軟件以及固件可以在同一裝置內(nèi)或者分離裝置內(nèi)實(shí)現(xiàn),以支持本公開 中描述的各種操作和功能。另外,所描述的任意單元、模塊或部件可作為分離但可互操作的 邏輯裝置一起或單獨(dú)實(shí)施。描述為模塊或單元的不同特征旨在強(qiáng)調(diào)不同的功能,并不必然 意味著這種模塊或單元必須通過分離的硬件或軟件部件來實(shí)現(xiàn)。相反,與一個(gè)或多個(gè)模塊 或單元相關(guān)聯(lián)的功能可以由分離的硬件或軟件部件來執(zhí)行,或者集成在同一個(gè)或分離的硬 件或軟件部件中。本公開中所描述的技術(shù)還可以在包含指令的計(jì)算機(jī)可讀介質(zhì)(諸如計(jì)算機(jī)可讀 存儲介質(zhì))中實(shí)施或編碼。例如,當(dāng)在計(jì)算機(jī)可讀介質(zhì)中嵌入或編碼的指令被執(zhí)行時(shí),該指 令一般地使得可編程處理器或其他處理器執(zhí)行該方法。例如,計(jì)算機(jī)可讀存儲媒體包括隨 機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可編程只讀存儲器(PR0M)、可擦除可編程只讀存 儲器(EPR0M)、電可擦除可編程只讀存儲器(EEPR0M)、閃存、硬盤、CD-ROM、軟盤、磁帶、磁介 質(zhì)、光介質(zhì)、或其他計(jì)算機(jī)可讀介質(zhì)。本文已經(jīng)描述了本發(fā)明的各個(gè)實(shí)施例。這些以及其他實(shí)施例都落入所附權(quán)利要求 的范圍內(nèi)。
權(quán)利要求
一種方法,包括使用中間網(wǎng)絡(luò)裝置接收包含報(bào)頭和有效負(fù)載的數(shù)據(jù)包,其中,所述數(shù)據(jù)包的報(bào)頭指示所述數(shù)據(jù)包不被分段;確定從所述中間網(wǎng)絡(luò)裝置到所述數(shù)據(jù)包的下一跳的鏈路的鏈路最大傳輸單元(鏈路MTU);確定所述數(shù)據(jù)包的尺寸超過所述鏈路MTU;在確定所述數(shù)據(jù)包的尺寸超過所述鏈路MTU之后,使用所述中間網(wǎng)絡(luò)裝置從所述數(shù)據(jù)包的有效負(fù)載中去除數(shù)據(jù)的一部分;丟棄去除部分,并根據(jù)所述有效負(fù)載的剩余部分調(diào)整所述數(shù)據(jù)包的報(bào)頭,以形成修改的數(shù)據(jù)包;以及將經(jīng)修改的數(shù)據(jù)包轉(zhuǎn)發(fā)到所述下一跳。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述中間網(wǎng)絡(luò)裝置包括路由器。
3.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括確定是否設(shè)置了所述報(bào)頭的“不分 段” (DF)標(biāo)記,并且僅當(dāng)設(shè)置了所述報(bào)頭的所述DF標(biāo)記時(shí)修改所述數(shù)據(jù)包,其中,設(shè)置所述 報(bào)頭的所述DF標(biāo)記指示所述數(shù)據(jù)包不被分段。
4.根據(jù)權(quán)利要求3所述的方法,其中,轉(zhuǎn)發(fā)經(jīng)修改的數(shù)據(jù)包包括當(dāng)設(shè)置了所述報(bào)頭的 所述DF標(biāo)記時(shí),并且當(dāng)所述數(shù)據(jù)包的尺寸超過所述鏈路MTU時(shí),轉(zhuǎn)發(fā)經(jīng)修改的數(shù)據(jù)包,不發(fā) 送因特網(wǎng)控制消息協(xié)議(IMCP)目的地不可到達(dá)消息。
5.根據(jù)權(quán)利要求1所述的方法,其中,所述數(shù)據(jù)包的剩余部分包括所述數(shù)據(jù)包的所述 有效負(fù)載和所述數(shù)據(jù)包的所述去除部分之間的差值。
6.根據(jù)權(quán)利要求1所述的方法,其中,所述報(bào)頭包括傳輸控制協(xié)議(TCP)報(bào)頭,其中,調(diào) 整所述數(shù)據(jù)包的報(bào)頭包括根據(jù)數(shù)據(jù)的所述剩余部分調(diào)整所述TCP報(bào)頭的尺寸值。
7.根據(jù)權(quán)利要求1所述的方法,其中,所述報(bào)頭包括因特網(wǎng)協(xié)議(IP)報(bào)頭,其中,調(diào)整 所述數(shù)據(jù)包的報(bào)頭包括根據(jù)數(shù)據(jù)的所述剩余部分調(diào)整所述IP報(bào)頭的長度值。
8.根據(jù)權(quán)利要求1所述的方法,其中,所述報(bào)頭包括校驗(yàn)和值,其中,調(diào)整所述報(bào)頭包 括根據(jù)所述有效負(fù)載的所述剩余部分重新計(jì)算所述校驗(yàn)和值,并將所述報(bào)頭的所述校驗(yàn) 和值設(shè)置為等于重新計(jì)算的校驗(yàn)和值。
9.根據(jù)權(quán)利要求1所述的方法,其中,丟棄所述去除部分包括丟棄所述去除部分的數(shù) 據(jù),所述中間網(wǎng)絡(luò)裝置不轉(zhuǎn)發(fā)所述去除部分的數(shù)據(jù)。
10.根據(jù)權(quán)利要求1所述的方法,其中,調(diào)整所述報(bào)頭包括調(diào)整所述數(shù)據(jù)包的報(bào)頭,使 得所述數(shù)據(jù)包不是數(shù)據(jù)包片段。
11.一種中間網(wǎng)絡(luò)裝置,包括多個(gè)接口卡,配置為接收并轉(zhuǎn)發(fā)網(wǎng)絡(luò)的數(shù)據(jù)包;轉(zhuǎn)發(fā)引擎,配置為確定所述多個(gè)接口卡中的一個(gè)接口卡,并確定與所述多個(gè)接口卡中 的一個(gè)接口卡對應(yīng)的鏈路的鏈路最大傳輸單元(鏈路MTU),其中,通過所述一個(gè)接口卡轉(zhuǎn) 發(fā)接收的數(shù)據(jù)包,所接收的數(shù)據(jù)包包括報(bào)頭和有效負(fù)載,其中,所述數(shù)據(jù)包的所述報(bào)頭指示 所述數(shù)據(jù)包不被分段;以及路徑最大傳輸單元確定(PMTUD)模塊,配置為確定所接收的數(shù)據(jù)包的尺寸是否超過所 述鏈路MTU,其中,所述PMTUD模塊配置為,當(dāng)所接收的數(shù)據(jù)包的尺寸超過所述鏈路MTU時(shí),通過從所述數(shù)據(jù)包的所述有效負(fù)載中去除數(shù)據(jù)的一部分來修改所述數(shù)據(jù)包,丟棄去除部 分,并根據(jù)所述有效負(fù)載的剩余部分調(diào)整所述數(shù)據(jù)包的報(bào)頭。
12.根據(jù)權(quán)利要求11所述的裝置,其中,所述中間網(wǎng)絡(luò)裝置包括路由器。
13.根據(jù)權(quán)利要求11所述的裝置,其中,所述PMTUD模塊進(jìn)一步配置為確定是否設(shè)置了 所述報(bào)頭的“不分段”(DF)標(biāo)記,并且僅當(dāng)設(shè)置了所述報(bào)頭的DF標(biāo)記時(shí),從所接收的數(shù)據(jù)包 的所述有效負(fù)載中去除數(shù)據(jù)的一部分,其中,設(shè)置所述報(bào)頭的所述DF標(biāo)記指示所述數(shù)據(jù)包 不被分段。
14.根據(jù)權(quán)利要求11所述的裝置,其中,所述報(bào)頭包括傳輸控制協(xié)議(TCP)報(bào)頭,并且 其中,所述PMTUD模塊配置為根據(jù)數(shù)據(jù)的所述剩余部分調(diào)整所述TCP報(bào)頭的尺寸值。
15.根據(jù)權(quán)利要求11所述的裝置,其中,所述報(bào)頭包括因特網(wǎng)協(xié)議(IP)報(bào)頭,并且其 中,所述PMTUD模塊配置為根據(jù)數(shù)據(jù)的所述去除部分調(diào)整所述IP報(bào)頭的長度值。
16.根據(jù)權(quán)利要求11所述的裝置,其中,所述報(bào)頭包括校驗(yàn)和值,并且其中,所述PMTUD 模塊配置為通過根據(jù)所述有效負(fù)載的所述剩余部分重新計(jì)算所述校驗(yàn)和值并將所述報(bào)頭 的所述校驗(yàn)和值設(shè)置為等于重新計(jì)算的校驗(yàn)和值來調(diào)整所述報(bào)頭。
17.根據(jù)權(quán)利要求11所述的裝置,其中,所述數(shù)據(jù)包的所述剩余部分包括所述有效負(fù) 載和所述去除部分之間的差值。
18.根據(jù)權(quán)利要求11所述的裝置,其中,轉(zhuǎn)發(fā)平面包括所述轉(zhuǎn)發(fā)引擎和所述PMTUD模塊 (64)。
19.一種計(jì)算機(jī)可讀介質(zhì),編碼有使中間網(wǎng)絡(luò)裝置的可編程處理器執(zhí)行如下操作的指令接收包含報(bào)頭和有效負(fù)載的數(shù)據(jù)包,其中,所述數(shù)據(jù)包的所述報(bào)頭指示所述數(shù)據(jù)包不 被分段;確定到所述數(shù)據(jù)包的下一跳的鏈路的鏈路最大傳輸單元(鏈路MTU);確定所述數(shù)據(jù)包的尺寸超過所述鏈路MTU ;在確定所述數(shù)據(jù)包的尺寸超過所述鏈路MTU之后,從所述數(shù)據(jù)包的所述有效負(fù)載中去 除數(shù)據(jù)的一部分;丟棄去除部分,并根據(jù)所述有效負(fù)載的剩余部分調(diào)整所述數(shù)據(jù)包的報(bào)頭;以及將所述數(shù)據(jù)包轉(zhuǎn)發(fā)到所述下一跳。
20.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),進(jìn)一步編碼有用于確定是否設(shè)置了所述 報(bào)頭的“不分段”(DF)標(biāo)記的指令,其中,用于去除的指令包括用于僅當(dāng)設(shè)置了所述報(bào)頭的 所述DF標(biāo)記時(shí)去除數(shù)據(jù)的一部分的指令,其中,設(shè)置所述報(bào)頭的所述DF標(biāo)記指示所述數(shù)據(jù) 包不被分段。
21.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中,所述報(bào)頭包括傳輸控制協(xié)議(TCP) 報(bào)頭,其中,調(diào)整所述數(shù)據(jù)包的所述報(bào)頭的指令包括根據(jù)數(shù)據(jù)的所述去除部分調(diào)整所述TCP 報(bào)頭的尺寸值的指令。
22.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中,所述報(bào)頭包括因特網(wǎng)協(xié)議(IP)報(bào) 頭,其中,調(diào)整所述數(shù)據(jù)包的所述報(bào)頭的指令包括根據(jù)數(shù)據(jù)的所述去除部分調(diào)整所述IP報(bào) 頭的長度值的指令。
23.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中,所述報(bào)頭包括校驗(yàn)和值,其中,調(diào)整所述數(shù)據(jù)包的所述報(bào)頭的指令包括根據(jù)所述有效負(fù)載的所述剩余部分重新計(jì)算所述校 驗(yàn)和值并將所述報(bào)頭的所述校驗(yàn)和值設(shè)置為等于重新計(jì)算的校驗(yàn)和值的指令。
24.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中,所述有效負(fù)載的所述剩余部分包 括所述有效負(fù)載和所述有效負(fù)載的所述去除部分之間的差值。
25.一種方法,包括使用第一網(wǎng)絡(luò)裝置向第二網(wǎng)絡(luò)裝置發(fā)送數(shù)據(jù)包,其中,所述數(shù)據(jù)包包括報(bào)頭和有效負(fù) 載,其中,所述有效負(fù)載包括應(yīng)用層數(shù)據(jù),其中,所述報(bào)頭包括起始序列號,并且其中,所述 數(shù)據(jù)包的所述報(bào)頭指示所述數(shù)據(jù)包不被分段;接收包含確認(rèn)序列號的所述數(shù)據(jù)包的確認(rèn);以及使用所述第一網(wǎng)絡(luò)裝置,根據(jù)所述確認(rèn)序列號和所述起始序列號之間的差值計(jì)算路徑 最大傳輸單元(PMTU)。
26.根據(jù)權(quán)利要求25所述的方法,其中,所述發(fā)送包括沿著到所述第二網(wǎng)絡(luò)裝置的路 由將所述數(shù)據(jù)包發(fā)送到路由器,進(jìn)一步包括在將所述數(shù)據(jù)包發(fā)送到所述路由器之前,設(shè)置 所述數(shù)據(jù)包的所述報(bào)頭的“不分段”(DF)標(biāo)記,其中,所述DF標(biāo)記指示所述數(shù)據(jù)包不被分 段。
27.根據(jù)權(quán)利要求25所述的方法,其中,所述起始序列號包括值X,其中,所述確認(rèn)序列 號包括值Y,并且其中,計(jì)算所述PMTU包括計(jì)算所述PMTU等于Y- (X+1)。
28.根據(jù)權(quán)利要求25所述的方法,其中,所述起始序列號包括在執(zhí)行傳輸控制協(xié)議 (TCP)三次握手后發(fā)送到所述第二網(wǎng)絡(luò)裝置的所述數(shù)據(jù)包的序列號。
29.根據(jù)權(quán)利要求25所述的方法,進(jìn)一步包括確定沿著到達(dá)所述第二網(wǎng)絡(luò)裝置的路 徑到下一跳的鏈路的鏈路MTU,其中,發(fā)送所述數(shù)據(jù)包包括將所述數(shù)據(jù)包形成為尺寸等于所 確定的鏈路MTU。
30.根據(jù)權(quán)利要求25所述的方法,進(jìn)一步包括當(dāng)所述確認(rèn)指示由所述第二網(wǎng)絡(luò)裝置 接收的數(shù)據(jù)小于發(fā)送到所述第二網(wǎng)絡(luò)裝置的數(shù)據(jù)包的數(shù)據(jù)量時(shí),禁止發(fā)起擁塞控制。
31.根據(jù)權(quán)利要求25所述的方法,其中,所述計(jì)算包括使用修改的傳輸控制協(xié)議(TCP) 處理來計(jì)算所述PMTU。
32.一種網(wǎng)絡(luò)裝置,包括網(wǎng)絡(luò)接口,配置為向第二網(wǎng)絡(luò)裝置發(fā)送數(shù)據(jù)包,其中,所述數(shù)據(jù)包包括報(bào)頭和有效負(fù) 載,其中,所述有效負(fù)載包括應(yīng)用層數(shù)據(jù),并且其中,所述報(bào)頭包括起始序列號,其中,所述 數(shù)據(jù)包的所述報(bào)頭指示所述數(shù)據(jù)包不被分段,所述網(wǎng)絡(luò)接口還配置為接收包含確認(rèn)序列號 的所述數(shù)據(jù)包的確認(rèn);以及路徑最大傳輸單元(PMTUD)模塊,配置為根據(jù)所述確認(rèn)序列號和所述起始序列號之間 的差值計(jì)算路徑最大傳輸單元。
33.根據(jù)權(quán)利要求32所述的網(wǎng)絡(luò)裝置,其中,所述PMTUD模塊包括在所述網(wǎng)絡(luò)裝置的傳 輸層執(zhí)行的修改的傳輸控制協(xié)議(TCP)處理。
34.根據(jù)權(quán)利要求32所述的網(wǎng)絡(luò)裝置,其中,所述PMTUD模塊配置為在所述數(shù)據(jù)包被發(fā) 送到所述第二網(wǎng)絡(luò)裝置之前設(shè)置所述數(shù)據(jù)包的所述報(bào)頭的“不分段”(DF)標(biāo)記,其中,所述 DF標(biāo)記指示所述數(shù)據(jù)包不被分段。
35.根據(jù)權(quán)利要求32所述的網(wǎng)絡(luò)裝置,其中,所述PMTUD模塊配置為當(dāng)所述確認(rèn)指示由所述第二網(wǎng)絡(luò)裝置接收的數(shù)據(jù)小于發(fā)送到所述第二網(wǎng)絡(luò)裝置的所述數(shù)據(jù)包的數(shù)據(jù)量時(shí)禁 止擁塞控制。
全文摘要
諸如路由器的中間網(wǎng)絡(luò)裝置,配置為當(dāng)數(shù)據(jù)包尺寸超過到下一跳的鏈路最大傳輸單元(MTU)時(shí),通過從數(shù)據(jù)包去除數(shù)據(jù)來發(fā)現(xiàn)兩個(gè)網(wǎng)絡(luò)端點(diǎn)間的路徑的MTU。一個(gè)示例性的中間網(wǎng)絡(luò)裝置包括轉(zhuǎn)發(fā)引擎,用于確定用來轉(zhuǎn)發(fā)接收的數(shù)據(jù)包的接口卡,并確定與該接口卡對應(yīng)的鏈路的鏈路MTU,其中,接收的數(shù)據(jù)包包括報(bào)頭和有效負(fù)載,報(bào)頭指示不對數(shù)據(jù)包進(jìn)行分段;以及PMTU確定模塊,用于確定接收的數(shù)據(jù)包尺寸是否超過鏈路MTU,并且當(dāng)接收的數(shù)據(jù)包尺寸超過鏈路MTU時(shí),從數(shù)據(jù)包的有效負(fù)載去除一部分?jǐn)?shù)據(jù),丟棄去除部分,并根據(jù)去除部分調(diào)整數(shù)據(jù)包的報(bào)頭。
文檔編號H04L1/00GK101931588SQ20101021053
公開日2010年12月29日 申請日期2010年6月22日 優(yōu)先權(quán)日2009年6月23日
發(fā)明者斯里尼瓦薩·D·薩蒂亞納拉亞納, 蒂莫西·N·塔塔普蒂 申請人:叢林網(wǎng)絡(luò)公司