通用路由封裝或 GRE 是一種協議,用于将使用一個路由協議的數據包封裝在另一協議的數據包中。“封裝”是指将一個數據包包裝在另一個數據包中,就像将一個盒子放在另一個盒子中一樣。GRE 是在網絡上建立直接點對點連接的一種方法,目的是簡化單獨網絡之間的連接。它适用于各種網絡層協議。
GRE 允許使用網絡通常不支持的協議,因為數據包被包裝在其他确實使用受支持協議的數據包中。要了解其工作原理,請想像一下汽車和渡輪之間的區别。汽車在陸地上行駛,而渡輪在水上行駛。汽車通常不能在水上行駛,但是可以将汽車裝載到渡輪上。
在這個類比當中,地形類型好比是支持某些路由協議的網絡,而車輛則好比是數據包。GRE 是一種将一種類型的數據包裝載到另一種類型的數據包中的方式,以便第一個數據包可以穿越它通常無法穿越的網絡,就像一種類型的運輸工具(汽車)被裝載到到另一種類型的運輸工具(渡輪)上,以便穿越原本無法行駛的地形。
例如,假設一家公司需要在位于兩個不同辦公室的局域網(LAN)之間建立連接。兩個 LAN 都使用最新版本的 互聯網協議 IPv6。但是,為了從一個辦公網絡到達另一個辦公網絡,流量必須通過一個由第三方管理的網絡 — 該網絡有些過時,僅支持較舊的 IPv4 協議。
借助 GRE,該公司可以将 IPv6 數據包封裝在 IPv4 數據包中,然後便可通過此網絡傳輸流量。回到那個類比,IPv6 數據包是汽車,IPv4 數據包是渡輪,而第三方網絡則是水。
GRE 隧道是什麼意思?将數據包封裝在其他數據包中稱為“隧道”。GRE 隧道通常配置在兩個路由器之間,每個路由器的作用好比隧道的一端。路由器設置為彼此直接發送和接收 GRE 數據包。兩個路由器之間的任何路由器都不會打開封裝的數據包;它們僅引用封裝數據包外層的标頭進行轉發。
為了理解為什麼将其稱為“隧道”,我們可以對類比稍作更改。如果汽車需要從山一側的 A 點繞到另一側的 B 點,則最有效的方法就是直接穿過大山。但是,普通汽車無法直接穿過堅硬的岩石。因此,汽車必須一直繞着山脈行駛,才能從 A 點到達 B 點。
但不妨想象一下有條隧道穿過了山體。現在,汽車可以從 A 點直行到 B 點,這要快得多,而且沒有隧道就無法做到。
現在,把 A 點視作一台聯網設備,把 B 點視作另一台聯網設備,再把大山視作兩台設備之間的網絡,将汽車視作需要從 A 點行到 B點的數據包。想象一下,這個網絡不支持 A 點和 B 點設備需要交換的那種數據包類型。就像汽車試圖穿越大山一樣,數據包無法直接通過,可能需要通過其他網絡走上更長的路。
但 GRE 創建了穿過“大山”網絡的一個虛拟的“隧道”,以允許數據包通過。就像隧道為汽車提供了一種直接穿過陸地的方式一樣,GRE(以及其他隧道協議)也為數據包穿過不支持它們的網絡提供了一種方式。
GRE 标頭中包含什麼?通過網絡發送的所有數據都被分解為較小的部分,稱為數據包,所有數據包都包括兩部分:有效負載和标頭。有效負載是數據包的實際内容,即正被發送的數據。标頭包含有關數據包來自何處以及它屬于哪個數據包組的信息。每種網絡協議都會将标頭附加到每個數據包上。
GRE 向每個數據包添加兩個标頭:GRE 标頭(4 個字節長)和 IP 标頭(20 個字節長)。GRE 标頭表明封裝數據包所使用的協議類型。IP 标頭封裝了原始數據包的标頭和有效負載。這意味着 GRE 數據包通常包含兩個 IP 标頭:一個用于原始數據包,另一個由 GRE 協議添加。僅 GRE 隧道兩端的路由器将引用原始的、非 GRE IP 标頭。
GRE 的使用如何影響 MTU 和 MSS 要求?MTU 和 MSS 是用來限制通過網絡傳輸的數據包最大長度的度量單位,就像對過橋車輛限重一樣。MTU 測量數據包的總大小,包括标頭;MSS僅測量有效負載。超過 MTU 值的數據包将被分成幾段或分解成較小的數據包,使之适合在網絡上傳輸。
像任何協議一樣,使用 GRE 會在數據包原有大小基礎上增加幾個字節。在數據包的 MSS 和 MTU 設置中必須考慮這個因素。如果 MTU 設為 1,500 字節,MSS 設為 1,460 字節(考慮到必要的 IP 和 TCP 标頭大小),則增加 GRE 24字節标頭将導緻數據包超過 MTU 限值:
1,460 字節 [有效負載] 20 字節 [TCP 标頭] 20 字節 [IP 标頭] 24 字節 [GRE 标頭 IP 标頭] = 1,524字節
因此,數據包将被分段。分段會減慢數據包傳遞,并增加算力開銷,因為超出 MTU 的數據包必須分解然後重新組合。
通過減少 MSS 長度以包含 GRE 标頭,可以避免這種情況。如果将 MSS 設置為 1,436 而不是 1,460,那麼,GRE 标頭的問題就得到了解決,并且數據包不會超過 MTU 值 1,500:
1,436 字節 [有效負載] 20 字節 [TCP 标頭] 20 字節 [IP 标頭] 24 字節 [GRE 标頭 IP 标頭] = 1,500 字節
盡管避免了分段,但結果卻是有效載荷變小,這意味着需要額外的數據包來傳遞數據。例如,如果目标是傳遞 150,000 字節的内容(或大約 150 kB),假設 MTU 設置為 1,500,且未使用其他 3 層協議,那麼,比較一下使用 GRE 和不使用 GRE 時分别需要多少個數據包:
額外的兩個數據包會增加毫秒級的數據傳輸延遲。但是,使用 GRE 比不使用 GRE 可以使這些數據包選擇更快的網絡路徑,進而可以彌補損失的時間。
在 DDoS 攻擊中如何使用 GRE?在分布式拒絕服務(DDoS)攻擊中 ,攻擊者試圖用垃圾網絡流量淹沒目标服務器或網絡,這有點像用虛假的訂單轟炸一家餐館,直到它無法為合法客戶提供服務。
就像任何網絡協議一樣,GRE 可以用來進行 DDoS 攻擊。有史以來最大的 DDoS 攻擊之一發生在 2016 年 9 月。它針對安全研究人員的網站,并使用 Mirai 僵屍網絡進行攻擊。該網站被使用 GRE 協議的數據包淹沒。
與某些其他協議不同,GRE 數據包的源無法被僞造或欺騙 。(請參閱我們有關 SYN 洪水和 DNS 放大攻擊的文章,以了解協議示例,但本例并非如此)為發起大型 GRE DDoS 攻擊,攻擊者必須控制僵屍網絡中大量真實存在的計算設備。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!