我一直覺得IP數據包,到物理層發送這之間再也不有什麼操做性了。由於在日常的交流中談協議,談到IP這一層基本就止住了,彷彿IP打包後就能夠直接發送了是的。然而當我讀了《TCP/IP詳解卷一:協議》後,我才發現其中並無那麼簡單。也許是由於接近真實世界的緣由,不一樣的網絡鏈接方式最終封裝的IP都不太同樣。程序員
以太網和IEEE 802是最多見的兩種協議,它們的數據報以下:緩存
目的地址和原地址指的就是物理地址(MAC地址),它們是經過ARP協議獲取的(下文會介紹)。網絡
咱們將目光放到封裝的數據部分,能夠看到封裝的三種報文(IP、ARP、RARP)類型是一致的,可是後面的數據長度範圍並不一致。IEEE802的最小值是36字節(PAD 表明填充字節的意思),而以太網的是46。學習
在觀察除了數據之外的部分,會發現他們源地址、目的地址都在開頭並佔據相同長度,尾部都是4字節的CRC(檢驗碼),不同的是IEEE802比以太網多佔用了8個字節(長度+幾個不明就裏的固定字段)。spa
在我看來以太網應該是IEEE 802的升級版(由於減小了一些不須要的固定字節的佔用),然而以太網出現的時間比IEEE 802提早,也就是說IEEE 802纔是升級版。更神奇的是RFC標準規定,以太網必須支持而IEEE選擇支持。然而我查找了半天資料沒有發現兩個同時存在的緣由,所以我能想到的IEEE 802存在的緣由是歷史商業競爭的產物了。設計
ARP(Address Resolution Protocol)爲協議地址(一般是IP,也就是說能夠用在非IP協議上)到硬件地址之間提供一種映射。主要不是用於消息通訊,而是爲了消息通訊而查出硬件地址。code
用於以太網的ARP請求或應答報文以下:cdn
硬件類型和協議類型決定最後4個字段(源硬件地址、源協議地址、目的硬件地址、目的協議地址)的長度和內容blog
解析過程:ci
主機在接收到請求或響應ARP報文時,會將地址緩存下來。完整的表項(可以正常響應的)通常爲20分鐘,不完整的表項(未被正常響應的)通常爲3分鐘。能夠經過指令arp
進行查看。
SLIP(Serial Line IP)是一種對IP數據報進行封裝的簡單形式,適用於RS-232串行端口和高速調制解調器接入Internet。RS-232常見於液晶顯示屏與電腦的連接。
RS-232數據線:
SLIP數據報:
從數據報能夠看出SLIP協議是一種很簡單的協議,除了頭尾字段用於區分數據報,而後將數據報中會影響判斷的(標誌字節:0xc0,轉義字節:0xdb)進行轉義就完成了封裝能夠進行發送了。
優勢:
簡單、字節少。
我想這也是它會被用在顯示器上(RS-232)和接入Internet等對時延要求高、傳輸量大的場合。
缺點:
我想也就是由於這些不穩定性,因此主要是在有線傳輸中見到它的身影。
CSLIP(Compressed SLIP)是SLIP的更進一步,它將SLIP傳輸的TCP數據包頭進行壓縮,減小傳輸量。但並不影響UDP包頭。
PPP(Point to Point Protocol)協議修改了SLIP協議中的全部缺點。PPP就是被設計來用於取代SLIP的。其數據報以下:
能夠看到CRC加入了協議字段和CRC字段(校驗和)字段,所以能夠解決只可以傳輸一種類型報文,以及沒有校驗和易受噪聲干擾的問題。至於PPP的IP協商機制,有興趣的能夠本身查查資料。
PPP與SLIP同樣有頭尾標誌字節,這就說明PPP也須要將數據報中的標誌字節和轉義字節進行轉移。與SLIP不同的是,標誌位(0x7e)、轉義字節(0x7d)。
除了這兩個字節外PPP還須要對小於0x20的字節進行轉移,由於0x20的字節在ascii碼中有控制含義,怕影響底層驅動程序。
所以PPP具備轉移規則,規則是在0x7d接下去的第1個byte的第6個bit取補碼(即將byte取補碼後,將這個byte的第6位,用補碼的第6位取代)。
公衆號二分之一程序員,專一計算機基礎的學習,歡迎關注 :)
複製代碼