第一章 網絡互聯模型
為了更好地促進互聯網絡的研究和發展,國際標准化組織 ISO 在 1985 年制定了網絡互連模型
OSI 參考模型(Open System Interconnect Reference Model),具有 7 層結構
TCP/IP是一個四層的體系結構,從實質上講,只有上邊三層,網絡接口層沒有什么具體的內容。五層協議只是OSI和TCP/IP的綜合,實際應用還是TCP/IP的四層結構。為了方便可以把下兩層稱為網絡接口層。
網絡分層
傳輸過程
具體細節
第二章 物理層
物理層定義了接口標准、線纜標准、傳輸速率、傳輸方式等
2.1 數字信號與模擬信號
模擬信號(Analog Signal)
- 連續的信號,適合長距離傳輸
- 抗干擾能力差,受到干擾時波形變形很難糾正
數字信號(Digital Signal)
- 離散的信號,不適合長距離傳輸
- 抗干擾能力強,受到干擾時波形失真可以修復
2.2 數據通信模型
局域網通信模型
廣域網通信模型
2.3 信道
信道:信息傳輸的通道,一條傳輸介質上(比如網線)上可以有多條信道
單工通信:
- 信號只能往一個方向傳輸,任何時候都不能改變信號的傳輸方向
- 比如
無線電廣播
,有線電視廣播
半雙工通信:
- 信號可以雙向傳輸,但必須是交替進行,同一時間只能往一個方向傳輸
- 比如
對講機
全雙工通信:
- 信號可以同時雙向傳輸
- 比如
手機
第三章 數據鏈路層
鏈路:從一個節點到相鄰節點的一段物理線路(有線或無線),中間沒有其他交換節點
數據鏈路:在一條鏈路上傳輸數據時,需要有對應的通信協議來控制數據的傳輸
不同類型的數據鏈路,所用的通信協議是可能不同的
- 廣播信道:CSMA/CD協議(比如同軸電纜,集線器等組成的網絡)
- 點對點信道:PPP協議(比如2個路由器之間的信道)
數據鏈路層的3個基本問題:
- 封裝成幀
- 透明傳輸
- 差錯檢驗
3.1 封裝成幀

封裝成幀 (framing) 就是在一段數據的前后分別添加首部和尾部,然后就構成了一個幀。
首部和尾部的一個重要作用就是進行幀定界。
幀(Frame)的數據部分
- 就是網絡層傳遞下來的數據包(IP數據包,Packet)
最大傳輸單元MTU(Maximum Transfer Unit)
- 每一種數據鏈路層協議都規定了所能夠傳送的幀的數據長度上限
- 以太網的MTU為1500個字節
3.2 透明傳輸
透明指某一個實際存在的事物看起來卻好像不存在一樣。
“在數據鏈路層透明傳送數據”表示無論發送什么樣的比特組合的數據,這些數據都能夠按照原樣沒有差錯地通過這個數據鏈路層。
使用SOH(Start Of Header)作為幀開始符
使用EOT(End Of Transmission)作為幀結束符
數據部分一旦出現了SOH、EOT,就需要進行轉義
3.3 差錯檢查
在數據后面添加上的冗余碼稱為幀檢驗序列 FCS (Frame Check Sequence)。
FCS是根據數據部分 + 首部計算得出的,數據傳輸前和傳輸后都會計算FCS用來檢驗數據是否出錯。
3.4 CSMA/CD協議
CSMA/CD(Carrier Sense Multiple Access with Collision Detectio)載波偵聽多路訪問/沖突檢測
- “多路”表示許多計算機以多點接入的方式連接在一根總線上。
- “載波監聽”是指每一個站在發送數據之前先要檢測一下總線上是否有其他計算機在發送數據,如果有,則暫時不要發送數據,以免發生碰撞。
- 總線上並沒有什么“載波”。因此, “載波監聽”就是用電子技術檢測總線上有沒有其他計算機發送的數據信號。
- “碰撞檢測”就是計算機邊發送數據邊檢測信道上的信號電壓大小。當幾個站同時在總線上發送數據時,總線上的信號電壓擺動值將會增大(互相疊加)。當一個站檢測到的信號電壓擺動值超過一定的門限值時,就認為總線上至少有兩個站同時在發送數據,表明產生了碰撞。所謂“碰撞”就是發生了沖突。因此“碰撞檢測”也稱為“沖突檢測”。
在發生碰撞時,總線上傳輸的信號產生了嚴重的失真,無法從中恢復出有用的信息來。
每一個正在發送數據的站,一旦發現總線上出現了碰撞,就要立即停止發送,免得繼續浪費網絡資源,然后等待一段隨機時間后再次發送。
CSMA/CD 協議工作流程
使用了CSMA/CD的網絡可以稱為是以太網(Ethernet),它傳輸的是以太網幀
- 以太網幀的格式有:Ethernet V2標准、IEEE的802.3標准
- 使用最多的是:Ethernet V2標准
為了能夠檢測正在發送的幀是否產生了沖突,以太網的幀至少要 64 字節
用交換機組建的網絡,已經支持全雙工通信,不需要再使用CSMA/CD,但它傳輸的幀依然是以太網幀。所以,用交換機組建的網絡,依然可以叫做以太網
3.5 Ethernet V2幀
Ethernet V2幀的格式
- 首部:
源MAC + 目標MAC + 網絡類型(是IPv4還是IPv6)
- 以太網幀:
首部 + 數據 + FCS
- 數據的長度至少是:
64 - 6 - 6 - 2 - 4 = 46 bytes
Ethernet V2標准
當數據部分的長度小於46
字節的時候
- 數據鏈路層會在數據的后面加入一些字節填充
- 接收端將會把添加的字節去掉
長度總結:
- 以太網幀的數據長度:
46~1500bytes
- 以太網幀的長度:
64~1518bytes
(目標MAC + 源MAC + 網絡類型 + 數據 + FCS)
3.6 網卡
- 網卡接收到一個幀,首先會進行差錯校驗,如果校驗通過則接收,否則丟棄
Wireshark
抓到的幀沒有FCS
,因為它抓到的是差錯校驗通過的幀,(幀尾的FCS
會被硬件去掉)Wireshark
抓不到差錯校驗失敗的幀
3.7 PPP協議
對於點對點的鏈路,目前使用得最廣泛的數據鏈路層協議是點對點協議 PPP (Point-to-Point Protocol)。
PPP 協議應滿足的需求
- 簡單 —— 這是首要的要求。
- 封裝成幀 —— 必須規定特殊的字符作為幀定界符。
- 透明性 —— 必須保證數據傳輸的透明性。
- 多種網絡層協議 —— 能夠在同一條物理鏈路上同時支持多種網絡層協議。
- 多種類型鏈路 —— 能夠在多種類型的鏈路上運行。
- 差錯檢測 —— 能夠對接收端收到的幀進行檢測,並立即丟棄有差錯的幀。
- 檢測連接狀態 —— 能夠及時自動檢測出鏈路是否處於正常工作狀態。
- 最大傳送單元 —— 必須對每一種類型的點對點鏈路設置最大傳送單元 MTU 的標准默認值,促進各種實現之間的互操作性。
- 網絡層地址協商 —— 必須提供一種機制使通信的兩個網絡層實體能夠通過協商知道或能夠配置彼此的網絡層地址。
- 數據壓縮協商 —— 必須提供一種方法來協商使用數據壓縮算法
PPP 協議不需要的功能
- 糾錯
- 流量控制
- 序號
- 多點線路
- 半雙工或單工鏈路
PPP 協議有三個組成部分:
- 一個將 IP 數據報封裝到串行鏈路的方法。
- 鏈路控制協議 LCP (Link Control Protocol)。
- 網絡控制協議 NCP (Network Control Protocol)。
PPP 協議的幀格式
- PPP 幀的首部和尾部分別為 4 個字段和 2 個字段。
- 標志字段 F = 0x7E (符號“0x”表示后面的字符是用十六進制表示。十六進制的 7E 的二進制表示是 01111110)。
- 地址字段 A 只置為 0xFF。地址字段實際上並不起作用。
- 控制字段 C 通常置為 0x03。
- PPP 是面向字節的,所有的 PPP 幀的長度都是整數字節。
PPP 有一個 2 個字節的協議字段。其值
- 若為 0x0021,則信息字段就是 IP 數據報。
- 若為 0x8021,則信息字段是網絡控制數據。
- 若為 0xC021,則信息字段是 PPP 鏈路控制數據。
- 若為 0xC023,則信息字段是鑒別數據。
字符填充法
當 PPP 用在異步傳輸時,就使用一種特殊的字符填充法。
當 PPP 用在同步傳輸鏈路時,協議規定采用硬件來完成比特填充(和 HDLC 的做法一樣)
將信息字段中出現的每一個 0x7E 字節轉變成為 2 字節序列 (0x7D, 0x5E)。
若信息字段中出現一個 0x7D 的字節, 則將其轉變成為 2 字節序列 (0x7D, 0x5D)。
若信息字段中出現 ASCII 碼的控制字符(即數值小於 0x20 的字符),則在該字符前面要加入一個 0x7D 字節,同時將該字符的編碼加以改變。