2009年12月23日 星期三

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

沒有留言:

張貼留言