胡凱捷

徹底剖析PPP廣域網路協定 由淺入深,從理論到實作

2008-05-27
之前介紹過廣域網路的HDLC 協定,接下來為各位介紹PPP 協定。這篇文章會介紹PPP 協定的階層式架構、在Cisco 設備上如何設定PPP 協定,以及PPP 協定中重要的認證(Authentication )方式。
廣域網路簡介

在介紹如何設定廣域網路的設定之前,先介紹基本的廣域網路概念。廣域網路(Wide Area Network,WAN )和一般所謂的區域網路不一樣。區域網路通常是指範圍較小的網路區段,可能是同一棟大樓、同一層樓或是一個區域較小的地理位置。 而廣域網路是範圍比較廣的網路區段,一般跨國型的企業都會使用廣域網路來連結位於不同國家的各個分部,好讓資訊能夠相互流通。

PPP協定簡介

PPP(Point to Point Protocol )協定是普遍被使用的廣域網路協定,如同名稱所示,PPP 協定是指點對點的網路協定,通常用於兩個網路節點的直接連接,例如兩台電腦透過電話線的網路連接,經常使用在寬頻網路連線上。目前許多ADSL 網路服務供應商(ISP )提供使用者以PPP 協定的方式撥接到本身的機房,然後再連上網際網路。以往,則大多使用SLIP(Serial Line Internet Protocol )協定,該協定採用的是TCP/IP 協定的點對點串列連線的標準。SLIP 協定是很久以前的協定,主要用於串列埠與數據機之間的連線,現在慢慢地已經被PPP 協定取代。

▲PPP 協定的運作架構

上面這張圖顯示PPP 協定的運作架構。在這個網路架構圖中,中間兩台路由器使用PPP 協定,之間的通訊採用PPP 協定的資料封裝,而左邊部分有三台電腦,分別採取不同的網路協定與使用PPP 協定的路由器互相連接。由這張圖可以看出,PPP 協定中的一個重要特性是,可以與各種不同的網路協定互相整合。

左邊三個電腦即使使用AppleTalk 、Novell IPX 和TCP/IP 協定,都可以同時與採用PPP 協定的路由器連接並使用。而中間這台路由器為了銜接來自左邊各種不同網路協定的封包,PPP 協定會使用NCP(Network Control Protocol )來負責上層資料的封裝過程。此外,PPP 協定還有一個重要的部分是LCP(Link Control Protocol), LCP 是PPP 協定中最重要的部分,負責底層線路控制與連接等等的過程。 若要設定採用PPP 協定的路由器,可以透過「非同步Serial 介面」、「同步Serial 介面」、「高速Serial 介面(High Speed Serial Interface,HSSI )」和「整合服務數位網路(ISDN )」這四種實體介面來連接設定。

PPP 協定在廣域網路連線上的定位

讀者也許都聽過PPP 協定,但是何時須使用PPP 協定呢?它又是什麼呢?和廣域網路有什麼關聯呢?其實,PPP 協定算是廣域網路在網路協定第二層封裝協定的種類之一,當網路封包要傳送到廣域網路之前,在網路第二層協定時,就一定會先透過特定的方式進行封裝,而為了保證能使用正確的封裝方式,在設定Cisco 設備來支援廣域網路時就必須選對正確的封裝協定,而封裝協定的選擇與所使用的廣域網路技術和廣域網路設備有關。 因此,網路管理人員一定要瞭解廣域網路所使用的封裝協定,才能夠正確的選擇並且設定第二層封裝協定。一般廣域網路的網路協定第二層封裝協定有以下幾個種類:HDLC 、PPP 、SLIP 、X.25 與LAPB 、幀中繼(Frame Relay )以及ATM ,所以PPP 協定正是其中一種。

與PPP 協定相關的RFC 文件

為什麼之前先介紹HDLC 協定,現在才介紹PPP 協定呢?因為PPP 協定相當於HDLC 協定的延伸,是根據原有的HDLC 協定規範而設計出來的。在RFC 編號1661 和編號1332 文件內都有定義PPP 協定的詳細規格。PPP 協定主要被定義在RFC 編號1661 文件中,其中包含了各種認證方式、加密與解密方式、壓縮資料方式以及PPP 協定如何與其他網路協定的合作與交互關係。而RFC 編號1994 的文件則描述了PPP 協定中的CHAP 協定,也就是握手(Handshake )協定,用於建立撥號連接。 RFC 編號2516 文件則定義了相當知名的PPPoE 協定,PPPoE 協定在乙太網路中用於傳輸PPP 協定中的資料,經常使用於ADSL 上。讀者家裡若使用ADSL ,應該會常常看到這個協定。至於RFC 編號2364 的文件描述了PPPoA 協定,主要應用在以ATM 網路卡來傳輸PPP 協定的資料。由於PPPoA 使用於ATM 網路,所以也稱為PPPoATM 。 另外,PPP 協定可以在兩個網路系統之間支援多點連接以便增加網路頻寬,在這樣的網路環境之下,PPP 協定支援兩個頻寬的合併,同時也支援流量平衡的功能,而這些都被定義於RFC 編號1717 文件之中。 前面提到過PPP 協定分成LCP 和NCP 兩個部分,各負責不同的工作內容,而關於LCP 的設定在RFC 編號1548 和編號1570 文件中都有描述。底下筆者整理了一個與PPP 協定相關的RFC 文件對照表讓讀者參考一下,這樣應該會更清楚。

RFC 文件編號

主要文件內容

RFC 1661 RFC 1332

定義了各種認證方式、加密/ 解密的方式、壓縮資料方式以及PPP 協定如何和其他網路協定的合作與交互關係

RFC 1994

描述了關於PPP 協定中的CHAP 協定

RFC 2516

定義了關於PPP 協定中的PPPoE 協定

RFC 2364

定義了關於PPP 協定中的PPPoA 協定

RFC 1717

定義了關於PPP 協定中的多點連接

RFC 1548 RFC 1570

定義了關於PPP 協定中的LCP 設定

PPP 協定的連線種類

基本上,廣域網路有Leased Line (專線)、Circuit Switched 和Packet Switched 三種類型,而PPP 協定屬於Leased Line 或Circuit Switched 類型。以下筆者簡單介紹這兩種廣域網路的連線種類。 Leased Line Leased Line 就是所謂的Point-to-point 或Dedicated 的連線,說穿了,它就是固定的電路,也就是專線,如下圖所示:

▲Leased Line 連線圖

其優點是可以保證頻寬,而且頻寬是獨享的,不會與其他網路共享,不過也有缺點。缺點是花費太高,因為是專線,所以成本相對高昂許多。速度則可以達到45Mbps 。

Circuit-switched

使用這種廣域網路時,傳輸過程中整個網路連線都必須存活,有點類似撥接,如右上圖所示。事實上,這就是「Dial On Demand 」的網路類型,ISDN 以及現在各位使用的電話就是這種網路。 以電話為例,讀者應該最容易體會,當我們在台灣想與外國某個地方聯絡,一開始必須先撥號,當撥接成功之後,通訊過程中連線都不能中斷,否則整個連線就會中斷,而且也只有在需要交換資訊時才撥號,因此是Dial On Demand 。電話這種網路,也稱為PSTN 。關於電話網路、ISDN 以及Dial On Demand 這種網路類型,在未來的文章中會特別再做介紹。

▲Circuit-Switched 連線圖

廣域網路封裝協定與連線種類的關係

前面介紹過,廣域網路有三種主要的分類:Leased Line 、Packet Switched 和Circuit Switched ,而剛剛也提到廣域網路在網路協定第二層封裝協定的種類有HDLC 、PPP 、SLIP 、X.25 與LAPB 、幀中繼(Frame Relay) 以及ATM 。但是它們的對應關係是如何呢?基本上,Leased Line 廣域網路會使用的第二層網路封裝協定包括HDLC 、PPP 和SLIP 三種;而Packet Switched 廣域網路會使用的第二層網路封裝協定有X.25 、幀中繼(Frame Relay )與HDLC 三種;Circuit Switched 廣域網路使用的第二層網路封裝協定包含HDLC 、PPP 以及SLIP 三種。 大家會發現,Circuit Switched 和Leased Line 這兩種廣域網路的封裝協定是一樣的,而且HDLC 和PPP 協定被相當廣泛地使用。以下將剛剛提過的對應關係整理成表格,就可以一目了然。

廣域網路種類

OSI 網路第二層的封裝協定

Leased Line

HDLC 、PPP 以及SLIP

Packet Switched

X.25 、幀中繼(Frame Relay ) 以及HDLC

Circuit Switched

HDLC 、PPP 以及SLIP

PPP 協定的階層式架構

PPP 協定使用階層式的架構,可使用「同步實體媒介」、「非同步實體媒介」、「整合服務數位網路(ISDN )」。PPP 協定主要運作於OSI 網路七層中的第二層,亦即Data Link Layer (資料連結層)。 PPP 協定中的階層式架構主要分成兩層,上層為NCP(Network Control Protocol ),下層為LCP(Link Control Protocol )。上層的NCP 主要工作是負責認證等等的工作,並且與OSI 網路架構的第三層協同運作。也因為NCP 的緣故,PPP 協定才能與各種不同的網路協定整合。而下層的LCP 則是負責建立資料連結的連線,PPP 協定提供不少種類的設定給LCP ,以便建立資料連結的連線,主要用於協調點對點的網路連線以及檢查網路封包訊框等等設定。

LCP的設定與特性

底下來看看在Cisco 路由器設備的PPP 協定中,LCP 有哪些設定的內容。前面提到,LCP 的主要工作是建立PPP 協定的連線以及與連線相關的工作,而在Cisco 的網路設備中,可能包含的工作就如同下表所示。其中,連線認證方面會要求建立連線的一方(也就是Caller )輸入與認證相關的資訊,例如密碼等等。輸入認證相關資訊的目的是為了確認建立連線的一方有足夠的管理權限以便使用這樣的PPP 連線。一般而言,會被使用的認證協定有PAP 協定和CHAP 協定。

功能

主要工作內容

運作的協定

認證(Authentication)

1. 要求密碼2. 執行握手(Handshake) 過程

PAPC HAP

壓縮(Compression)

1. 在來源端壓縮資料2. 在目的端解壓縮資料

Stacker Predictor

錯誤偵測

1. 監視連線中被丟棄的資料2. 避免訊框迴路

Quality Magic Number

多連結(Multilink)

在多連結的環境使用流量平衡(Load Balancing)

Multilink PPP(MLP)

而壓縮主要是用來增加PPP 連線的網路流量,當然做法就如同名稱所示,是透過壓縮的方式來減少傳遞資料所需承載的網路封包大小。Cisco 路由器一般會使用Stacker 和Predictor 這兩種壓縮協定。與眾多網路協定一樣,PPP 協定的連線也具備錯誤偵測的功能,通常會使用Quality Magic Number 來確保比較穩定而且不會有網路迴圈的資料傳輸。 至於最後的多連結部分,PPP 協定的連線也可以在路由器的介面(Interfaces )上使用流量平衡(Load Balancing )的功能。所謂的Load balancing ,就是在具有相同路徑選擇時將網路流量平均分配到這些網路路徑上,以便達到網路流量平均分攤的效果,減少每一條網路路徑的負擔。

▲網路架構圖

以上面這個網路架構圖為例,假設伺服器X想要傳送封包給伺服器Y,由圖中可看出,伺服器X要到達伺服器Y必須經過三個路由器設備,可以透過路由器「A→B→D」這樣的網路路徑,也可以經由路由器「A→C→ D」的網路路徑。若開啟Load Balancing 功能,則由伺服器X到伺服器Y的網路流量就會被分成兩條,分別走剛剛所說的兩種不同的網路路徑,這就是Load Balancing 功能。 Cisco 路由器上與PPP 協定相關的Load Balancing 功能,有時與Multilink 協定(也就是MLP )有關。Cisco 的IOS 從11.1 版本以後就開始支援MLP 。MLP 協定被定義在RFC 編號1717 文件中,MLP 協定主要用於網路封包分割以及將切割的網路封包做定序,MLP 協定一般會在平行多線路的環境中同時發送網路封包,在某些情況之下,這些MLP 連線會像單一連線一樣地工作,如此一來,就可以在路由器之間有效增加網路流量。

PPP協定連線的建立過程

PPP 協定連線的建立過程分成「網路連線建立」、「認證確認」、「網路層協定處理」三個階段。以下分別就這三個階段,為各位讀者介紹一下PPP 協定的連線過程。

網路連線建立階段

如同這個階段名稱所示,這個階段的主要工作就是要建立PPP 協定的連線,在這個階段中,每一個使用PPP 協定的網路設備(例如Cisco 路由器)都會發送LCP 協定的網路封包,以便設定和測試網路連線。此時,可以透過LCP 協定的設定值來設定PPP 協定的連線,其設定包含最多能接收的封包單位數目、壓縮設定以及認證協定的設定等等,如果此時沒有設定這些設定值,就會自動採用預設值。

認證確認階段

一旦網路連線建立,而且認證協定被決定之後,就代表連線的雙方可進入認證確認的階段。而認證確認的階段可有可無,不一定需要這個階段也可以完成PPP 協定的連線。PPP 協定支援兩種認證協定:PAP 協定和CHAP 協定。

網路層協定處理階段

接下來,最後一個階段是網路層協定的處理階段,這個階段是必須的。在這個階段中,PPP 協定會發送NCP 協定封包來選擇,並且設定一個以上的網路層協定(例如IP 協定等等)。決定網路層的協定後,雙方就可以開始發送網路封包。

PPP協 定的認證協定

接下來介紹PPP 協定的認證(Authentication )方式。如同前面所提到的,PPP 協定所使用的認證協定有PAP 協定和CHAP 協定,但是兩者有何不同呢?哪一種協定比較好呢?接著,分別介紹這兩種認證協定。

PAP 認證協定

PAP 認證協定是一種雙向握手(Two way handshake )協定,透過雙向握手的流程讓遠端的電腦或網路設備進行辨識(Identity )認證的工作。剛剛提到,一旦建立網路連線而且認證協定被決定之後,就代表連線的雙方可進入認證確認的階段。因此,認證的發生時間是在PPP 協定連線建立之後就進行。進行時,遠端的電腦或是網路設備會不斷地發送帳號和密碼到Cisco 路由器,這樣的發送過程會一直持續,直到這個認證被接受或是這個PPP 連線被中斷為止。

PAP 認證協定的隱憂

雖然PPP 協定使用著PAP 認證協定,但事實上PAP 認證協定本身並不是一個很嚴謹的認證協定,因為,PAP 認證協定會把密碼用純文字的方式,也就是Clear Text 來傳送,這代表傳送過程之中密碼不會被加密,因此如果有人攔截到這樣的網路封包,就可以直接看到密碼。除了Token Ring 網路架構之外,這樣的運作模式在大部分的網路環境中是相當不安全的。不僅如此,PAP 協定針對Playback 和Trial-and-error 的攻擊方式也沒有任何的保護措施。

CHAP 認證協定

另外一種PPP 連線的認證協定是CHAP 認證協定。CHAP 認證協定採用的運作流程是3-way handshake ,如果使用CHAP 認證協定,當PPP 連線建立階段完成之後,Cisco 路由器設備(本地端)就會發送所謂的Challenge 封包給遠端的網路設備,接著遠端的網路設備會透過One way hash 的方式,針對傳送過來的Challenge 值和密碼計算出一個特定的值,然後將這個特定的值傳回給原本發送的Cisco 路由器設備。這裡所使用的One way hash 方式一般都採用MD5(Message Digest 5 )演算法。 接下來,本地端的Cisco 路由器設備根據已知的計算方式再次計算出hash 值,然後比對自己所計算的hash 值和收到的hash 值是否相同。如果兩個計算出來的hash 值相同,代表這個認證已經通過,否則就會立刻中斷目前這個PPP 連線。

CHAP 認證協定為何比較安全

看得出來,CHAP 認證協定比PAP 認證協定安全許多,因為雙方都會計算出特定的hash 值加以比對,而且並不會把密碼直接用明文的方式來傳送。不僅如此,CHAP 認證協定對於Playback 的攻擊方式也有相對應的保護措施。 剛剛提到的Challenge 值很難被預測,因為Challenge 值是由亂數產生,所以這也同時代表著所計算出來的hash 值也是由亂數產生的。此外,Challenge 封包會不斷發送,這種作法也可以避免受到攻擊,因為每次發送的Challenge 值都不一樣。

PPP協定認證的設定方式

現在讀者對於PPP 協定應該已經有一定程度的瞭解了,接下來介紹實作的部分,也就是PPP 協定認證的設定方式。

設定PPP 協定的封裝

一開始,先在Cisco 路由器上設定PPP 協定的封裝,其指令如下:

Router(config-if)#encapsulation ppp

這個指令必須在Interface 模式下執行,這個指令相當於啟動PPP 協定的使用,是設定PPP 協定的第一步驟。前面提到,可以透過以下這些實體介面來連接設定:

1. 非同步Serial 介面
2. 同步Serial 介面
3. 高速Serial 介面(High Speed Serial Interface,HSSI)
4. 整合服務數位網路(ISDN)

如果是在非同步的Serial 介面上設定Cisco 路由器在PPP 協定上的設定,則需要額外的步驟來啟動PPP 協定的使用。不過,由於篇幅有限以及難度較高,這裡就不說明非同步Serial 介面的設定方式,只是讀者要稍微注意一下。

設定路由器主機名稱

在設定PPP 協定的認證之前,當前的介面必須已經設定過PPP 協定的封裝(Encapsulation ),也就是已經透過上一個步驟啟動了PPP 協定的使用。接下來,必須確保每一個使用PPP 協定的Cisco 路由器都設定好「主機名稱」。如何判定Cisco 路由器已經設定了主機名稱呢?很簡單,如果已設定好主機名稱,其設定好的主機名稱會出現在命令列提示符號之前。如果沒有設定,則必須先執行下列指令來設定主機名稱:

(config)#hostname KC406

KC406 是主機名稱的設定範例,指令關鍵字是hostname 。一般而言,設定主機名稱主要是為了方便管理,而這個名稱一旦設定之後,該名稱就會顯示在提示符號之前,以便管理員辨識目前是在哪一台設備的CLI 中。但是對於PPP 協定的認證而言,這個主機名稱已經不再是方便管理這樣的簡單,而是會被拿來當作認證的帳號名稱,也就是username 。請注意,這裡所設定的主機名稱,其大小寫被視為相異。

設定遠端路由器的主機名稱與密碼 接下來設定遠端Cisco 路由器的認證帳號名稱與密碼,使用下面這個指令來完成:

KC406(config)#username LOLO password 1120

上面這個指令範例是設定遠端的路由器,其主機名稱為LOLO ,密碼是1120 。對於Cisco 路由器而言,這個密碼之於雙方路由器,必須是相同的。而在Cisco IOS 版本11.2 以前,這個密碼是加密過的,但是從Cisco IOS 版本11.2 開始,這個密碼就不再加密,而是採用明文的方式。如果想將密碼加密,必須執行下面這個指令:

KC406(config)#service password-encryption

設定認證協定種類 接下來設定PPP 協定認證的種類,如同讀者所知,有兩種認證協定可以選擇:PAP 協定或CHAP 協定。其設定的指令如下所示:

KC406(config-if)#ppp authentication chap

上面的指令範例代表採用CHAP 認證協定,指令的關鍵字是ppp authentication ,若要採用PAP 認證協定,只要將chap 改成pap 即可,指令如下:

KC406(config-if)#ppp authentication pap 當然,無論設定成PAP 認證協定還是CHAP 認證協定,都代表所有透過這個介面進來的PPP 連線要求都會使用此處所設定的認證協定來要求認證。這裡要注意的是,當某一台Cisco 路由器設定成某一種認證協定,並使用CHAP 認證協定時,所有其他想要與這台路由器建立PPP 連線的Cisco 路由器都必須使用CHAP 認證協定才行,否則將無法通過認證。

如果讀者覺得這種強迫使用同一種認證協定的作法太沒有彈性的話,其實也可以一次指定兩種認證協定,例如:

KC406(config-if)#ppp authentication pap chap

上面這個指令範例會先試著採用PAP 認證,如果連進來的PPP 連線並不是使用PAP 認證協定,則會改試CHAP 認證協定。

檢視PPP 協定的設定值

由於PPP 協定的設定值是設定在「介面」之上,所以PPP 協定的設定值也在介面上,因此檢視PPP 協定的設定值指令為:

KC406(config-if)#show interface Serial0 指令關鍵字為Show interface 。其執行結果範例如下所示:
KC406(config-if)#show interface Serial0
Serial0 is up, line protocol is up
Hardware is HD64570
Internet address is 10.1.152.43/24
MTU 1500 bytes, BW 1544 Kbit. DLY 20000 usec, rely 255 255, load 1/255
Encapsulation PPP, loopback not set, keeplive set(10 sec)
LCP Open
Open: IPCP, CDPCP
Last input 00:00:05, output 00:00:05, output hang never
Last clearing of “show interface” counters never Queueing strategy: fifo
Output queue 0/40, drops; input queue 0/75, 0 drops;
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec ......

以上就是查看使用PPP 協定的部分介面資料,大部分的資訊都過於複雜,因此以下只挑出一些重點的部分加以解釋。由於PPP 協定是網路第二層的協定,所以在第一行中的「line protocol is up 」,代表PPP 協定已經處於運作的狀態。另外,查看下面這一行: Encapsulation PPP, loopback not set, keeplive set(10 sec) 由於使用HDLC 協定和使用PPP 協定,其介面資料可能都很相似,因此可以透過上面這一行來辨識目前使用的到底是哪一個廣域網路協定。在本例中顯示Encapsulation PPP ,所以很明顯的目前使用的是PPP 協定。

結語

這篇文章介紹了PPP 協定的知識,包含PPP 協定的架構、PPP 協定的連線建立過程、所使用的認證協定以及在Cisco 路由器上的設定指令等等。對網路管理人員來說,如何將公司內部網路連線到廣域網路也是個相當重要的課題。連線到廣域網路的方式有很多種,網路管理人員要考慮很多因素,以便規劃使用哪一種方式來設定,例如服務供應商的網路種類、公司的連線需求等等。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!