2009年12月23日 星期三

PPP over Ethernet (PPPoE) 二

PPP 協定的階層式架構

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

如果要可以完成點對點的通訊PPP協定必須先發送一個LCP的封包來設定與測試data link。在網路建立以後才可以進行認證。認證結束後PPP必須發送NCP的封包以便選擇與設定一個或多個network-layer protocol。一但網路協定被設定完成後,由網路層協定來的datagrame 就可以被發送直到外在的LCP和NCP關閉網路或是發生一些外部事件的時候(休止狀態的定時期到期或是網路管理員的干涉等)

Phase Diagram



1.Link Dead phase
link 一定開始與結束在這個階段。當一個外部事件(例如載波監聽或是網路管理員設定)指出物理層已經就緒時,PPP將會進入link 的階段。在這個階段LCP automaton 會在初始在狀態,當物理層準就緒,則PPP會進入link 建立階段。在這個階段轉向建立階段時它會給LCP automaton 一個UP的訊號 。

2.Link Establishment phase
在LCP用於建立連接,通過交換配置包((Configurepackets)。一但一個配置成功訊息封包(Configure-Ackpacket)被發送且被接收,就完成了交換,並進入LCP OPENED的狀態。在這個階段鍾收到非LCP的packet都必須被丟棄。當收到LCP Configure-Request可以使network-layer 階段或Authentication階段返回Link Establishment階段。

3.Authentication phase
如果配置了驗證(遠端驗證本地或本地驗證遠端)就進入Authenticate階段,開始CHAP或PAP驗證。如果驗證失敗則會到Link Termination phase。在該階段 Link control protocol ,authentication protocol , link quality monitoring.


4.Network-layer phase
一旦完成前面的階段,每一個網路協定(例如IP,IPX,AppleTalk)必須分開配置通過適當的網絡控制協議(NCP)。每個NCP可以隨時被打開或者關閉。


5.Link Termination phase
PPP 可以在任一的時間終止連結。引起的原因有很多:載波丟失,認證失敗,, Link quality failure,管理員關閉link。LCP用交換Terminate(终止)packets的方式來终止link。當link正被關閉的時候,PPP通知網路成協定,以便他們可以慘取正確的行動。交换 Terminate(终止)packets之後應該通知物理層斷開,以強制终止link,尤其當認證失敗的時候。在該階段只有Loss of carrier, Authentication failure, Link quality failure, Administrative clossing是被允許。其他類型的封包則要被丟棄。




PPP SESSION 大致可以分為下面幾個階段
Link Control Protocol (LCP) :主要負責低層線路控制與連線等過程
Authenticate : ex: PAP or CHAP
Network Control Protocol (NCP):主要負責上層資料的封裝過程以及配置不同的網路曾協議 (Ex:TCP/IP,NoVell IPX,AppleTake)


Host與AC必須要相互發送LCP Request給對方,已完成最大傳輸大小以及採用何種方式來進行認證


LCP Packet Formats


Code


Link Configuration packets
1.Configure-Request
Code:0x01 ,Identifier ,Length,Options

2.Configure-Ack
Code:0x02,Length,options
Identifier: copy of the Identifier field of the Configure-Request

3.Configure-Nak
Code:0x03 ,Length,Options
Identifier: copy of the Identifier field of the Configure-Request

4.Configure-Reject
Code:0x04 ,Length,Options
Identifier: copy of the Identifier field of the Configure-Request

Link Termination packets
5.Terminate-Request
Code:0x05, Identifier ,Length ,Options

6.Terminate-Ack
Code:0x06 ,Length ,Options
Identifier: copy of the Identifier field of the Terminate-Request

Link Maintenance packets
6.Code-Reject, Protocol-Reject
code:0x07 ,0x80
Identifier: changed of each code-reject(protocol-reject)

7.Echo-Request, Echo-Reply
Code:0x09 ,0x10
Identifier: changed whenever the content of the Data field changes

8.Discard-Request
Code:0x11
Identifier: changed for each Discard-Request sent

1. 網路連線建立階段
在建立連現階段時他會協商最大可以傳輸的單位和驗證的方式

2.認證確認階段

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

PAP 認證協定

PAP 認證協定是一種雙向握手(Two way handshake )協定,透過雙向握手的流程讓遠端的電腦或網路設備進行辨識(Identity )認證的工作。

CHAP 認證協定

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


3.IPCP 協商階段
IPCP 必須要在PPP在Network-Layer Protocol 階段以及LCP 在 opened狀態才可以進行傳遞

Host 和AC 最IP服務階段的一些要求需要多次進行協商,已決定收方都能夠接受的約定.例如IP位置以及使用階段所使用的IP壓所協定等等.雙方協定是透過option所帶的參數來進行商,給個option都是一個需要協商的問題.最後雙方都需要等待對方回覆configure-Ack.

IPCP大致與LCP封包格式相同除了下面幾項
IP control protocol :0x8021
Code field: 1-7(Configure-Request, Configure-Ack,Configure-Nak, Configure-Reject,
Terminate-Request, Terminate-Ack Code-Reject)
option type


封包類型
1.Configure_Request
Code:0x01,Identifier,Length,Data

2.Configure_Ack
Code:0x02,Length,Data
Identifier: copy of the Identifier field of the Configure-Request

3.Configure_Nak
Code:0x03,Length,Data
Identifier: copy of the Identifier field of the Configure-Request

4.Configure_Reject
Code:0x04,Length,Data
Identifier: copy of the Identifier field of the Configure-Request

當達成協議後就可以進入datagream 傳輸階段,及IP階段.用戶與AC之間的通訊開始使用對方的IP位置而不是MAC位置

PPP over Ethernet (PPPoE)

這幾天在公司看PPPoE 順手記一下

PPPoE 主要可以分為兩個狀態,當一個設備欲建立一個ppp session 時,必須要經過

1. Discovery stage
在這個階段主要有4個步驟,當所有步驟都完成後則 Host(Client) 與 Access Concentrator(Service) 可以知道彼此的 MAC address 以及獲得一個唯一的 SESSION_Id. Host 會先 broadcasting 一個 PAID 的封包來尋找 AC ,收到 PADO 封包的 AC 會利用unicast回傳一個 PADO,當 Host 接收到則會回傳 PADS 封包,而被選擇到AC 則會回傳 PADR,當這些步驟完成後則可以進入 ppp session 階段.

下面是簡單的流程圖



PPPoE 封包格式


Ethernet frame


PPPoE Playout

version:0x1 Type:0x1,Length欄寬為16 bits,其值代表為data payload的長度(單位:byte)

code所代表的意義


在Discovery Stage,Data payload 內容為TAGs;而在PPPoE Session Stage,Data payload內容則為PPP協定和其資料。在Discovery Stage,PPPoE payload可包含一個以上的標籤(TAGs),標籤的格式為TLV(type-length-value)。


TAG_TYPE:



PPPoE 的封包有下列5種
1.PPPoE Active Discovery Initiation (PADI)
DESTINATION_ADDR:ff:ff:ff:ff:ff:ff
CODE:0x09
SESSION_ID:0x0000
它必至少須要包含一個TAG_TYPE為Service-Name或是其類型的 TYPE 來指出是由Host 所提出的要求。PADI(包含PPPoE header)不能超過1484 bytes,以留下足夠的位置給relay agent 增加 Relay-Sission-Id TAG.

2.PPPoE Active Discovery Offer (PADO)
DESTINATION_ADDR:address of the Host
CODE:0x07
SESSION_ID:0x0000
當AC接受到PADI時它會用unicast的方式來回傳PADO,PADO必須包含一個AC-Name或其他的  
TAG_TYPE,來表示AC 可以提供的服務種類。若網路上沒有任何可提供PPPoE服務的端點,便沒有任何PADO的回覆。

3.PPPoE Active Discovery Request (PADR)
DESTINATION_ADDR:AC Ethernet address
CODE:0x19
SESSION_ID:0x0000
當HOST接收到PADO它會發送PADR來選擇所接受服務的AC,PADR必須包含一個服務類型的標籤,確定接受AC服務的種類。當一個Host 沒有接在一定的時間內接收到PADO,它會重發送PADI,同時等待兩倍的時間。

4.PPPoE Active Discovery Session-confirmation (PADS)
DESTINATION_ADDR:address of the Host
CODE:0x65
SESSION_ID:unique SESSION_ID
當街收到PADRC會產生一個唯一的SESSION_ID。0xffff作為預設資源,目前不能做為一個唯一的SESSION_ID。PADS 必須包含一個服務類型的標籤以確定AC所能提供的服務。當HOST 接收到後則雙方就會進入PPP SESSION 階段。如果HOST無法辨識PADR服務類型的標籤則會回傳一個 Service-Name-Error(或是其他類型) 的標籤的PADS封包,其 SESSION_ID能為0x0000。如果在一定的時間內沒有收到PADS則與PADO的處理方式一樣。

5.PPPoE Active Discovery Terminate (PADT)
DESTINATION_ADDR :unicast Ethernet address
CODE: 0xa7
SESSION_ID :at the same PADS session id
SESSION_ID欄位值必需為PADS所得的Unique Session ID,以指出是那個連線要終止。而沒有
要求附有TAGs。PADT封包可在建立連線後,任意時間發出。可由Host或端點發出皆可。籍由
SESSION_ID欄位指出那個連線欲終止。

Security
為了防止DOS(Denial of Service)攻擊,AC 可以使用AC-Cookie Tag,AC 可以根據PADR中的source address 來產生一個唯一的TAG_VALUE。這樣就可以確保PADI的來源位置是真正可以到達的。雖然AC-Cookie在防止DOS的攻擊是很有效的,但它卻不能防止所有的DOS攻擊。所以可以在AC上採用其他的方法來對抗DOS的攻擊。

參考文獻:rfc 2516