一、DLCI在談DLCI前,先稍微介紹一下幀中繼,幀中繼是一種使用了包交換方式的標准的廣域網技術。簡單來說,就是為用戶建立了一條端到端之間的虛擬電路連接,中間經過的幀中繼雲網絡對於用戶來說是透明的,用戶用起來就感覺跟租用物理專線差不多,但是租用幀中繼服務就比租用物理專線便宜得多。幀中繼常用於分公司與總公司之間的連接。
幀中繼的鏈路分為兩種。一種是臨時的虛擬鏈路,叫做SVC(Switching Virtual Circuit)交換虛鏈路;另一種是永久的虛擬鏈路,叫做PVC(Permanent Virtual Circuit)。SVC跟PVC的主要區別在於,SVC是節點之間只在需要進行數據傳送的時候才建立邏輯連接,而PVC則是一直保持着連接狀態。目前基本上使用的都是PVC。
既然幀中繼技術使用的是虛擬鏈路來實現節點之間的專線連接,幀中繼交換雲網絡中有那么多的虛擬鏈路,顯然需要給各個不同的虛鏈路做上標記以作區分,而DLCI號就是為了這個功能而產生的,它就是打在幀中繼虛鏈路上的標記。下面是一個簡單的幀中繼圖例:


上圖的意思是,R2是幀中繼交換機,R1和R3之間通過R2的幀中繼鏈路來進行連接。圖例中的兩個數字103和301,就是用來標記該鏈路的DLCI號。這個圖例說明了幀中繼中的虛鏈路與DLCI號之間的對應關系,就是端到端的虛鏈路中,並不是只使用一個DLCI號來作為標記,而是每一段虛擬鏈路都對應着一個DLCI號。
要注意的一點是,DLCI號只在本段物理鏈接范圍內具有唯一性。用上圖來說明一下這句話的意思會比較好理解。那就是,在R1到R2這一段物理鏈接里,可能R1與R2之間存在多條虛鏈路,也就存在着多個DLCI號,但在這一段鏈接范圍內,不同的虛鏈路的DLCI號是不同的。在這里,根據DLCI號就可以區分出對應的虛鏈路,這就是它的唯一性。而在端到端的虛鏈路中(比如說R1到R3的虛鏈路),不同段的虛鏈路是允許使用相同DLCI號。而且DLCI號的范圍只能從16——1007中選擇,數量有限。這里也許會容易引發疑問,如果使用了相同的DLCI號,那要怎么區分每一條虛鏈路呢?如果R1到R2,R3到R2都使用103這個DLCI號,那不是容易混淆么?如果單憑DLCI號的話,確實是無法區分。但不要忘了,幀中繼交換機上還有“interface”這個基本概念。不同的接口加上DLCI號,這兩個參數一起,就可以讓它區分出不同的虛鏈路了。需要注意的是,DLCI號是運營商分配的,不是我們自己隨便定義的,所以不能在自己的設備上隨便配置一個。
幀中繼網絡的幀結構跟以太網幀結構不同的其中一處是:以太網使用MAC作為二層地址進行幀的封裝,而幀中繼網絡則使用DLCI號來作為二層地址進行幀的封裝。
下圖是幀中繼的幀結構:


如圖可見,其中的Q.922 Adress里面包含的就是DLCI,跟以太網幀封裝不同的是,不存在源地址和目的,這里就只有一個DLCI號。
結合幀中繼的幀封裝以及前面提及到的DLCI跟鏈路的關系,就可以知道,當用戶的路由器進行幀中繼封裝時,封裝對應的DLCI號就會發送至相應的虛鏈路中(路由器如何知道不同的DLCI號對應着誰呢?這就要靠反向ARP查詢或者是配置靜態映射了,下面會提到),當幀中繼交換機接收到后,根據幀中繼交換機里面設置的對應關系(該對應表需要運營商手動配置),發送到對應接口的虛鏈路。數據在幀中繼網絡中就是這樣進行傳遞的。
二、二層映射
從上面我們知道了DLCI是什么,以及它的作用,現在我們就來了解怎樣用DLCI。要讓幀中繼能夠正常使用DLCI,就意味着末端節點必須要知道它自己在什么時候用哪個DLCI號來封裝,以及幀中繼交換機必須知道它自己對於哪個接口的DLCI應該發往對應的哪一個接口的DLCI上。只有這樣,才算是構成了一個完整的幀中繼網絡。
對於用戶路由器(末端節點),它要知道自己在何時使用哪個DLCI號的話,有兩種方法,一種是動態的,即反向ARP,(inverse-arp);另一種是DLCI靜態配置。
1.反向ARP。這個概念其實在以太網環境下也很常見,本意就是通過二層地址查找三層IP地址。在幀中繼環境下,就是指通過DLCI號來查找與之對應的IP地址。在幀中繼環境中,幀中繼交換機會向用戶路由器發送數據包,里面含有跟用戶路由器關聯的DLCI號信息,這時路由器就知道了它自己有哪些DLCI號,但是還不知道DLCI號對應哪些IP地址,於是反向ARP查詢就派上用場了。我們來看看反向ARP查詢是如何工作的:當配置好接口的IP地址和幀中繼封裝后,接口默認開啟了反向ARP查詢的功能。路由器A會自動發出arp inverse-request來進行查詢,大意是“誰在××這個DLCI號上面啊?”,然后該查詢經過幀中繼交換機的傳遞,到達另一端用戶路由器B上,路由器B對該查詢做出響應,返回一個arp inverse-reply進行回應,大意是“我的IP是×××,我在這個DLCI號上面!”,然后路由器A就知道了這個DLCI號對應的IP地址了,這就算是得到了一條DLCI與IP之間的映射。
下面兩個圖分別是ARP的反向查詢和回應。


反向ARP查詢


對反向ARP查詢的回應
2.DLCI靜態配置。其實就是在接口上手動配置DLCI和IP的映射關系,跟我們平時手動添加的靜態ARP映射差不多。命令比較簡單,就是“frame-relay map ip ×.×.×.× DLCI號 broadcast”。該命令中,IP地址是遠端IP,DLCI號則是本地的DLCI號,加上這個broadcast參數的意思是允許發送廣播和組播。這樣就創建了一條能夠讓DLCI號跟對應的IP地址關聯起來的靜態映射。
三、幀中繼的接口類型
幀中繼有三種接口類型,分別是物理接口(physical)、多點子接口(multipoint)、點對點子接口(point-to-point)。
物理接口,其實就是不配置任何子接口下的默認接口模式。當路由器收到了來自幀中繼交換機的DLCI信息,它就會對所有與之關聯的虛擬鏈路進行反向ARP查詢,從而建立起DLCI與IP之間的映射表。這種情況下,物理接口不需要做任何配置,即可與對端連通。
多點子接口,可以認為是一個具有跟物理接口同樣作用的子接口。這意味着,當啟用多點子接口的時候,他也是默認啟用反向ARP功能,並且可以連接多條虛擬鏈路。但是,由於他是子接口,它無法像物理接口一樣自動對DLCI號進行反向ARP查詢。這是因為子接口根本不知道自己可以擁有哪些虛擬鏈路,他不知道自己有哪些DLCI號!所以就要對該子接口配置DLCI號,在子接口下面輸入“frame-relay interface-dlci ××”,配置了DLCI號之后,反向ARP才知道對哪些DLCI號發送查詢請求,然后查詢過程就跟物理接口一樣。
點對點子接口,顧名思義,就是說該子接口只有一條虛擬鏈路與之連接。由於是子接口,所以它也需要配置DLCI號才能正常工作。點對點子接口默認是不啟用反向ARP功能的,這是因為他知道與之連接的只有一條鏈路,它形成的不是DLCI與IP的映射條目,而是點對點接口跟DLCI的映射。
值得注意的是,上面提到的點對點跟多點子接口的區別,在ping對端IP地址的時候,抓包就會體現出來:點對點子接口對於任意的IP地址都會發出ping包,而多點子接口只會對ARP映射表上有的IP地址發出ping包,當它ping其他IP的時候,是沒有ping包發出來的。