鏈路層屬於OSI模型的第二層,第一層物理層主要研究的是傳輸媒介,電線電纜等,而第二層主要研究的是物理尋址,鏈路層的主要目的是爲IP模塊發送和接收IP數據報,爲ARP模塊發送ARP請求和應答,以及爲RARP發送RARP請求和接收RARP應答,它起着承接第一層和第三層的做用,這邊主要介紹當今網絡上最流行的兩種二層技術,以太網和PPP協議 html
以太網是Xerox公司發明的基帶LAN標準,它採用帶衝突檢測的載波監聽多路訪問協議(CSMA/CD),速率爲10Mbps,傳輸介質爲同軸電纜,目前已經發展到10G,傳輸介質也改成光纖,以太網2.0以前有兩種標準,一種是以太網標準,另外一種是在以太網基礎上完成的IEEE802.3定義的以太網,封裝格式也有稍許不一樣,可是如今的以太網設備通常都兼容這兩種格式 python
1. 前導同步符/幀起始定界符:7字節0x55, 用於信號同步,1字節0xd5(10101011)表示一幀開始 2. 目的地址:6字節,(XX:XX:XX:XX:XX:XX) 3. 源地址: 6字節, (XX:XX:XX:XX:XX:XX) 4. 類型/長度:2字節,0~1500保留爲長度域值, 1536~65535保留爲類型 5. 數據:46~1500 字節 6. 幀校驗序列(FCS): 4字節, 使用CRC計算從目的MAC到數據域這部份內容的校驗和,不包括前導碼
RFC894規定以太網封裝的IP數據包的最大長度是1500字節,也就意味着以太網幀最大長度是 7(前導同步符)+1(幀開始符)+6(DA)+6(SA)++2(類型)1500(data)+4(FCS)=1526, 算法
但實際上抓包最大幀是1514字節,由於數據幀到達網卡時,在物理層上網卡要先去掉前導同步碼和幀開始符,而後對幀進行CRC校驗,若是校驗和錯則丟棄此幀,若是符合,就將幀交「設備驅動程序」處理,此時纔是網卡上抓到的包,須要去掉8(前導同步符)+4(FCS),最大幀長爲1514 緩存
以太網同時規定數據域最小爲46字節,也就意味着最小幀長爲6+6+2+46+4=64,除去4(FCS),抓包則是60字節,當數據字段小於46字節時,MAC子層爲在data後面填0,以知足最小幀長大於64,設備驅動程序則是MAC子層 安全
以太網以CSMA/CD做爲MAC算法,來檢測網內是否會發生衝突,一旦發生衝突則讓每臺主機都檢測到,爲了不衝突,纔有了發送最小間隙和最小幀長的規定,可見以太網是無鏈接的,不可靠的服務,它並不知道對方有沒有收到本身發出的數據包,但若是數據幀發生錯誤,它會重傳,數據幀發生錯誤通常產生在發生碰撞時,兩臺主機都檢測到空閒,一塊兒發送,則有可能碰撞,而產生錯包,重傳。 服務器
咱們知道以太網是基於CSMA/CD的工做原理進行數據傳送的,CSMA/CD載波監聽/衝突檢測,屬於計算機網絡以太網的工做類型,即在總線上不段的發出信號去探測線路是否空閒,若是不空閒則隨機等待必定時間,在繼續探測。直到發出型號爲止
CSMA/CD的工做原理
由IEEE 802.3標準肯定的CSMA/CD檢測衝突的方法以下:
(1)當一個站點想要發送數據的時候,它檢測網絡查看是否有其餘站點正在傳輸,即監聽信道是否空閒。
(2)若是信道忙,則等待,直到信道空閒;若是信道閒,站點就傳輸數據。
(3)在發送數據的同時,站點繼續監聽網絡確信沒有其餘站點在同時傳輸數據。由於有可能兩個或多個站點都同時檢測到網絡空閒而後幾乎在同一時刻開始傳輸數據。若是兩個或多個站點同時發送數據,就會產生衝突。
(4)當一個傳輸節點識別出一個衝突,它就發送一個擁塞信號,這個信號使得衝突的時間足夠長,讓其餘的節點都能發現。
(5)其餘節點收到擁塞信號後,都中止傳輸,等待一個隨機產生的時間間隙(回退時間,Backoff Time)後重發。 網絡
問題就在這,當很小的幀發送到對端前,對端也發送幀,此時產生衝突,這個充突幀傳到發送端還須要必定的時間,若是幀過小,發送端已經發送完了,再接收到這個衝突幀,爲時已晚,因此規定一個最小發送幀,使得發送端可以檢測到衝突幀從而判斷髮出去的這個幀做廢,IEEE將10M以太網的時隙定義爲512比特,即51.2us,那麼10M換算下來10MB/s*51.2us=512bit,512bit正好就是64字節,所以定義以太網的幀最小爲64字節,這樣若是64字節沒有發生衝突,數據就不會發生衝突,認爲數據發送成功 加密
以太網頭部有8個字節的前導符,在抓包中是看不到的,那它起什麼做用呢,MAC子層的標準規定了幀間最小的間隔是9.6us,也就是說當主機監測到線路空閒後,還要等9.6us才能發送數據,這樣作是爲了使剛剛收到的數據幀的主機的接收緩存來得及清理,作好接收下一幀的準備,9.6us即96bit,也就是12字節的幀間隔的由來,也就是幀開銷的一部分,而8字節的前導符做用在於告訴監聽設備數據將要到來,所以幀開銷就是20字節。 spa
一臺百M交換機用儀表接到兩個端口上,互發46字節大小的數據包,看包轉發率爲148809,從而計算帶寬大小爲 148809*64*8=76M,那麼其它的帶寬幹什麼去了,由於以太網有8個字節的前導符,以及12字節的幀間隔,所以每一個幀有20字節的固定開銷,這仍是最小的開銷,交換機實際的端口吞吐量爲148809*(64+8+12)*8=100M,交換機的實際數據吞吐量爲76M,還有一部分用來處理額外的開銷,這個開銷是物理層所必需的。 .net
若是對接的是以太網交換機,那麼IP數據包到達第二層都會加上以太網頭,來進行數據鏈路層的傳輸。
PPP協議全稱爲point-to-point protocol點到點協議,提供在點到點鏈路上傳輸,封裝網絡層數據包的數據鏈路層協議,處於鏈路層的第二層,於以太網不一樣的是網絡結構,以太網是一個局域網,能夠廣播,而PPP只適用於點對點串行鏈路,PPP主要由三類協議組成:鏈路控制協議(LCP),網絡層控制協議(NCP)和PPP協議擴展,其中鏈路控制協議主要用於創建,拆除和監控PPP數據鏈路,網絡層控制協議主要用於協商在該數據鏈路上所傳輸的數據包的格式與類型,PPP擴展協議主要用於提供PPP功能的進一步支持,同時PPP還提供網絡安全方面的PAP和CHAP協議。因爲提供驗證,易擴衝,從而得到普遍的應用。
0x7E標識一個幀的開始和結束 FCS爲幀校驗域 PPP報文內容爲 地址0xFF, 控制0x03, PPP頭即0xFF03 Protocol爲協議域緊接着code域代表了此報文爲哪一種PPP協商報文,如爲IP報文則不存在此域,取而代之的則爲IP數據 Identifier域用於進行協商報文的匹配 Length域爲此協商報文長度 Data域所包含的爲協商報文的內容 經常使用protocol: 0021 IP C021 LCP(Link control protocol) 鏈路控制協議 C023 Password Authentication protocol密碼認證協議 8021 internet protocol control protocol 網絡控制協議
PPP是鏈路層協議,因此數據單位是幀,7EFF03…7E這種格式封裝的即爲PPP幀, 0x7E標識幀的開始和結束,網絡是分層的,對等層之間進行通訊,下層爲上層服務,對等層通訊須要知道對方的地址,而對於不一樣的網絡,這個地址是不同的,鏈路層須要知道MAC或者X.121或者是ATM地址,而網絡層則須要對端的IP地址,在傳輸層則須要知道對端的協議端口號,例如若是是在以太網上通訊,發送端則須要對端的MAC地址,而PPP協議是運用在點對點的鏈路上,不像廣播和多點訪問的網絡,點對點的鏈路能夠惟一標識對方,所以PPP無需知道對端地址,由於只有你一個,因此該字節無心義,爲0xFF,同地址域同樣,控制域也沒有意義,規定填寫0x03,就PPP協議自己而言咱們關心的是協議域和信息域,協議域可用來區分PPP數據幀中信息域所承載的數據報文的內容,信息域默認最大幀長爲1500字節,協議域和信息域要和在一塊兒看,協議域爲0xC021表示LCP,鏈路控制, 0x8021表示NCP,網絡控制, 0x0021表示IP協議
PPP爲用戶發起呼叫創建鏈路,在創建鏈路時協商參數選擇,其中LCP起做用
當LCP將鏈路創建好後,PPP要開始跟不一樣用戶的須要,配置上層協議所需的環境,PPP用NCP來爲上層提供服務接口,若是是IP則提供IPCP接口,若是是IPX提供IPXCP接口等
當一個PC終端撥號用戶發起一次撥號後,此PC終端首先經過調制解調器呼叫遠程訪問服務器,如提供撥號服務的路由器。當路由器上的遠程訪問模塊應答了這個呼叫後,就創建起一個初始的物理鏈接。接下來,PC終端和遠程訪問服務器之間開始傳送一系列通過PPP封裝的LCP分組,用於協商選擇將要採用的PPP參數。若是上一步中有一方要求認證,接下來就開始認證過程。若是認證失敗,如錯誤的用戶名、密碼,則鏈路被終止,雙方負責通訊的設備或模塊(如用戶端的調制解調器或服務器端的遠程訪問模塊)關閉物理鏈路回到空閒狀態。若是認證成功則進行下一步。
在這步驟中,通訊雙方開始交換一系列的NCP分組來配置網絡層。對於上層使用的是IP協議的情形來講,此過程是由IPCP完成的。
當NCP配置完成後,雙方的邏輯通訊鏈路就創建好了,雙方能夠開始在此鏈路上交換上層數據。
當數據傳送完成後,一方會發起斷開鏈接的請求。這時,首先使用NCP來釋放網絡層的鏈接,歸還IP地址;而後利用LCP來關閉數據鏈路層鏈接;最後,雙方的通訊設備或模塊關閉物理鏈路回到空閒狀態。
PAP爲兩次握手協議,它經過用戶名及口令來對用戶進行驗證。過程以下:被驗證方A發送用戶名及口令到驗證方B, 驗證方B根據本地的用戶表或radius服務器查看是否有此用戶,口令是否正確,若是正確回ACK,若是不對則回NAK
CHAP爲三次握手協議,首先驗證方B發送挑戰信息給被驗證方,信息爲(01(認證請求)+id(這次認證序列號)+隨機數據+B的主機名),被認證方收到挑戰信息後,根據B的主機名去找密碼,查到後用(B的密碼+id+隨機數據)三個數據MD5算出一個HASH值
第二步,被驗證方回覆認證請求,該回覆信息包含【02(此報文爲認證響應)+ id + HASH值+被驗證方A的主機名】,驗證方B處理該信息,查找A的密碼,隨後用(A的密碼+id+隨機數據)根據MD5算法算出一個hash值,與被驗證方A算出的HASH對比,若是一致則經過
所以CHAP的核心就是利用對方主機的密碼進行加密,HASH進行比較,它須要雙方的口令HASH,還不是一方的就能夠,更加安全
TCP/IP協議卷一 http://blog.csdn.net/jackywangjia/article/details/7788312 PPP協議 http://www.360doc.com/content/11/1226/14/7998898_175090729.shtml 以太網最小幀長 http://network.51cto.com/art/201109/291563.htm PAP與CHAP