PPP 點(diǎn)到點(diǎn)協(xié)議
一、PPP協(xié)議介紹
PPP協(xié)議包含 LCP PAP CHAP NCP(IPV4CP IPV6CP IPXCP)等工作在鏈路層支持鏈路級的 AAA 認(rèn)證。
Authentication 認(rèn)證:出示憑證 主認(rèn)證 被認(rèn)證 如鎖是主認(rèn)證,鑰匙就是被認(rèn)證被認(rèn)證方要向主認(rèn)證方出示用戶名密碼,主認(rèn)證方確定沒有問題在把鏈路開啟。
Authorization 授權(quán):認(rèn)證通過后,我需要判斷你能使用多少資源
Accounting 審計(jì):監(jiān)控 接收什么樣流量
PPP 協(xié)議是一種點(diǎn)到點(diǎn)鏈路層協(xié)議,主要用于在全雙工的同異步鏈路上進(jìn)行點(diǎn)到點(diǎn)的數(shù)據(jù)傳輸。?
PPP 支持所有類型的壓縮,HDLC 支持站點(diǎn)壓縮。
多鏈路捆綁,因?yàn)橛?NCP,通過設(shè)置 TLV 字段輕松的支持各種三層網(wǎng)絡(luò)協(xié)議 。
鏈路兩端接口地址不配在同一個子網(wǎng)段,不寫靜態(tài),通過 NCP 就能自動獲悉去往對端接口的 32 為主機(jī)路由,有了主機(jī)路由,就算子網(wǎng)段不在同一個,也能夠互聯(lián)互通。?
同步/異步線纜都支持。?
二、PPP組件及幀格式
1.組件

2.幀格式

?
三、LCP:數(shù)據(jù)鏈路層狀態(tài)激活
兩端都回給對端主動發(fā)送 LCP configuration request 配置請求報文 中包含的參數(shù)可以設(shè)置 TLV,大體包含如下 :
MRU 最大接收單元:默認(rèn) 1500.兩端需要一致。
認(rèn)證協(xié)議:是使用 PAP /CHAP 。
Magic number 魔術(shù)字:防止環(huán)路的 router 在發(fā)送 LCP 報文之前,先本地基于硬件產(chǎn)生隨機(jī)一個魔術(shù)字,在發(fā)送的 configuration request 攜帶魔術(shù)字,對方收到報文會對比魔術(shù)字是否一樣,如果一樣,首先會給發(fā)送者返回一個錯誤 configuration NAK 非確認(rèn)報文,我在本地計(jì)算一個新的魔術(shù)字,在等待發(fā)送方給我發(fā)送 configuration request。?
Quality protocol 質(zhì)量協(xié)議:用來做 QoS,那些數(shù)據(jù)優(yōu)先轉(zhuǎn)發(fā) 。
MP 多鏈路參數(shù):描述是否用來做鏈路捆綁 。
報頭壓縮 。
載荷壓縮:在報頭中要不要做報頭壓縮,載荷壓縮。?
當(dāng)對端收到 configuration request 后首先是查看這些參數(shù),我是否能夠識別,我和你的值能?否匹配,如果匹配也能識別,給你回復(fù) configuration ACK 配置確認(rèn)報文,參數(shù)識別但不支持 回復(fù) configuration NAK有些壓根不識別 回復(fù) configuration reject 拒絕都回復(fù)ACK,沒有做認(rèn)證的話,數(shù)據(jù)鏈路層是 UPUP,如果做的認(rèn)證數(shù)據(jù)鏈路層還是 down 的。
下面我們來看一下LCP的報文,如下:

四、PAP 密碼認(rèn)證協(xié)議
PAP 密碼認(rèn)證協(xié)議又稱為二次握手協(xié)議。比如有兩臺路由器相連:R1--------------R2,其中R1為主,R2為被動。之時就需要R2 給 R1 發(fā)送用戶名密碼。即Authentication- request 被認(rèn)證方主動發(fā)送給主認(rèn)證方,包含用戶名密碼,都是明文表示。主認(rèn)證方收到后,在他的 AAA 數(shù)據(jù)庫里包含用戶名密碼條目,做一個匹配,匹配成功會返還 Authentication-ACK,失敗返還 Authentication-NAK。

五、CHAP 挑戰(zhàn)握手認(rèn)證協(xié)議?
CHAP也稱為三次握手協(xié)議,密文認(rèn)證。?
Challenge 主認(rèn)證方給被認(rèn)證方發(fā)送,包含隨機(jī)數(shù)(防止重放攻擊)、報文 IP(用來做確認(rèn)?主認(rèn)證方的用戶名可選的。其中:Cisco 一定會包含用戶名,可以在主認(rèn)證方接口進(jìn)行配置、沒有配置將自己 hostname 發(fā)走;Huawei 可選的,如果接口配置了就發(fā),如果沒有配置就不發(fā)。?
Response 被認(rèn)證方給主認(rèn)證方發(fā)送的回應(yīng) 包含用戶名(被認(rèn)證方接口配置的用戶名)、散列值(密碼:接口配置的密碼+隨機(jī)數(shù)+會話 ID、執(zhí)行 MD5 計(jì)算),會話 ID(表示我這個 Response 是關(guān)于你 Challenge 的回應(yīng))主認(rèn)證方收到后,做一個匹配,成功返還 success、失敗返還 failure。
在發(fā)送 Challenge 到底包不包含用戶名,Huawei 和 Cisco 完全是不一樣的,先看 Huawei。
1.Huawei?
如果被認(rèn)證方收到的 challenge 里沒有包含用戶名,被認(rèn)證方必須出示接口所配置的用戶名和密碼,執(zhí)行散列發(fā)走。如果被認(rèn)證方收到的 challenge 里包含用戶名,根據(jù)用戶名在本地 AAA 認(rèn)證數(shù)據(jù)庫里找有沒有對應(yīng)的密碼條目存在。
例如包含的用戶名為 R1,在被認(rèn)證方真有 R1 的 ppp 密碼配置:
Localuser R1 password cipher Huawei?
Localuser R1 service-type ppp?
收到的 challenge 里包含 R1 用戶名,我就會拿 R1 的用戶名在本地 AAA 認(rèn)證數(shù)據(jù)庫里找對應(yīng)的密碼,找到條目后對應(yīng)的密碼 Huawei 來做一個發(fā)送,在發(fā)送 Response 的時候就可以?包含這個密碼。
但是這個時候我被認(rèn)證方接口也配置了密碼,這個時候被認(rèn)證方接口配置的密碼出示優(yōu)先級高于 AAA 認(rèn)證數(shù)據(jù)庫的密碼,這個時候主認(rèn)證方給被認(rèn)證方發(fā)送一個 Challenge,假設(shè)包含用戶名 R1,在被認(rèn)證方 AAA數(shù)據(jù)庫里有 R1 密碼存在,并且沒有在接口配置密碼,就使用 Huawei 密碼來做一個出示,用戶名還是出示我接口配置的。這個時候在 AAA 數(shù)據(jù)庫中沒有找到對應(yīng)的條目,只能在接口配置密碼。
在認(rèn)證數(shù)據(jù)庫中存在密碼,并且接口也配置了密碼,就出示接口密碼。所以華為的被認(rèn)證方并不是要求 100%在接口配置密碼信息,可以不配,但是在主認(rèn)證方發(fā)送的 Challenge 必須包含用戶名,在被認(rèn)證方要針對這個用戶名在本地 AAA 數(shù)據(jù)庫中去創(chuàng)建一個相對應(yīng)的密碼條目。認(rèn)證才能通過。
2.Cisco?
主認(rèn)證 用戶名可以接口配置,沒有沒有配置,主認(rèn)證方就會把自己的主機(jī)名發(fā)走。被認(rèn)證方收到的 Challenge 里一定會包含用戶名,如 R1 被認(rèn)證收到后基于你的用戶名在本地 AAA 數(shù)據(jù)庫里找對應(yīng)的密碼條目,找到出示這個密碼。
被認(rèn)證方本地 AAA 數(shù)據(jù)庫的密碼優(yōu)先級高于接口級的密碼優(yōu)先級,全局高于接口?
被認(rèn)證方出示用戶名的時候,接口配置了就出示接口配置,沒有配置把自己主機(jī)名發(fā)走。舉例如下:
R1-----------------------------R2?
R1 和 R2 就是兩臺路由器的用戶名,做雙向認(rèn)證。,接口什么都不配置,認(rèn)證如何通過。如下:?
R1 :username R2 password Cisco
R2 :username R1 password Cisco
只需要創(chuàng)建用戶名是對端主機(jī)的條目,并且 password 一致就 OK,R1 由于什么也沒有做,發(fā)送 Challenge 認(rèn)證的時候,用戶名就是 R1,在 R2 上有對應(yīng)的 R1的密碼條目,出示密碼的時候,就出示 Cisco。
由于我的接口也沒有配置用戶名,我給你出示的用戶名就是主機(jī)名,所以 R2 給 R1 出示的用戶名是 R2 password 是 Cisco 所以 R1 收到用戶名為 R2,密碼為 Cisco 的 Challenge 之后,我拿這個信息和的配置信息對比 。用戶名和 password 都一致,通過?,F(xiàn)在 R2 就算是在接口級配置 Cisco123 密碼,一樣能夠通過,因?yàn)槭褂玫拿艽a還是 Cisco。?
認(rèn)證通過后,下面就是使用 NCP 做 3 層協(xié)商,通常是 IPV4CP,NCP 和 LCP 協(xié)商差不多,雙方都給對端都是發(fā)送 configuration request,這個只會包含你接口的地址信息和 DNS 信息,對方收到后會判斷首先你是否有地址,地址是否沖突,都 OK,給你返 configuration ACK,不 OK 返還 configuration NAK,并且會告訴你的那些參數(shù)有問題。
NCP 和 LCP 都 OK,PPP 鏈路就可以工作了 使用完鏈路之后可以通過 LCP 去關(guān)閉鏈路。?
PPP 鏈路建立有 3 步?:
1.通過 LCP 去協(xié)商數(shù)據(jù)鏈路層的參數(shù),協(xié)商完畢后鏈路基本已經(jīng) UP UP 了。
?
2.認(rèn)證 可選的,可以使用 PAP /CHAP 來完成認(rèn)證,可以單向可以雙向,兩端都給對端發(fā)送用戶名密碼,對方都要給你的用戶名密碼做一個審核評判??蛇x的必須要做。?
3.認(rèn)證通過后, 根據(jù)你三層所使用的協(xié)議,然后我運(yùn)行相對應(yīng)的 NCP 協(xié)議來做一個協(xié)商,協(xié)商 3層的地址信息,看接口是否有地址,地址是否沖突,沒有問題后,建立完成。?
六、I***動態(tài)地址協(xié)商

如果有一端沒有配置地址,發(fā)送 configuration request 對于沒有地址這一段我的地址就是全0,收到全 0 之后,意識你沒有地址,給你回復(fù)一個 NAK,在 NAK 中告訴你,可以使用這個地址,這個地址就是和我接口同一個子網(wǎng)端中可用的地址,給你發(fā)送一個,之后你會用應(yīng)用這個地址,給你發(fā)送 configuration request 攜帶這個地址。?