看似複雜的原理,放到生活中也可以變得很簡單。
討論ip協議,不妨從寄一件快遞入手,因為它們解決的都是相同的問題——如何將乙個東西送到另乙個地方。區別在於,乙個走電路,乙個走馬路;乙個用資料報,乙個用信封;乙個用ip,乙個用門牌號。如果你能夠理解寄一封快遞為什麼需要寫上收件人位址,那麼你也就能夠理解為什麼ip包頭中需要乙個目的ip位址。從本質上來說,二者沒有任何區別。
寄一封快遞,首先要將信寫好,放入信封。用ip協議的術語來講,這個過程叫做資料封裝,信就是資料,信封就是ip頭部,將信放入信封就是資料封裝。然後需要在信封上寫上一些東西,比如收件人位址、寄件人位址,這些相當於ip頭部中的目的ip和源ip位址。有了這些資訊,郵遞員就知道如何進行投遞。
在現實生活中,我們寄一封快遞到此就可以了,剩下的可以完全交給郵局。那麼在乙個公開的網路環境中,誰來扮演郵局的角色呢?答案是路由器。乙個路由器的基本職責就是進行路由。當一封信來了,路由器首先看乙個它的目的位址,如果屬於它的轄區,就告訴乙個郵遞員把信送過去,如果是發到外埠的信件,那麼就把信件**給外埠的路由器。當一封信最終到達收件人的手中,期間可能經過了若干的郵局。比如我從海淀區發一封信到朝陽區。期間可能需要經過海淀郵局->朝陽郵局,最後到某個街道的郵政所,這才由郵遞員送信到某個大廈。
從送信的角度來看,只需要在信封(ip頭部)寫上收件人位址和發件人位址即可。可是ip協議的頭部卻比這複雜得多,為什麼會有這種差異呢?通過郵局送信,是通過乙個封閉的、安全的、簡單的網路——郵政系統進行送信,所以它無需過多考慮安全和各種複雜的情況。而網際網路則是乙個開放、包容、複雜的網路,所以它面臨的問題和挑戰更多,因而需要更多的東西來保證資訊的安全和完整。ip頭部裡其他的東西正是出於適應複雜網路環境的目的而存在的。ip頭部的格式如下:
ip頭的基本長度是20位元組,即5個32位字。後面可能跟一些可選項和填充位元組。我們可以把每一行作為乙個基本單元來一一分析一下,看看ip跟普通郵政相比其特點在**。
第一行:版本、長度和服務
版本的作用在於使得協議具有很良好的擴充性。很多的協議,在剛被制定出來的時候僅僅是滿足了當時網路環境的需求。但是隨著時間的推移,到了現在,ipv4已經無法解決網路安全和位址耗盡所面臨的新問題。所以又有了ipv6,但是網路中的裝置是新老並存的。舊的裝置未必能夠處理ipv6的資料報。所以通過版本字段可以了解通訊對方所使用的協議。
長度的作用在於使得收信方能夠正確地處理收到的資料報。因為ip包長度是可變的,如果沒有長度資訊,無法知道資訊的終點。這裡要注意的是,包頭長度的單位是32位字,所以一般情況下,包頭長度的值為5。而總長度的單位則是8位位元組,所以總長度的值表示的是位元組數。
服務型別的作用在於指示了服務質量和優先順序。我們可以把服務型別當成是給**演算法的提示,幫助**演算法根據本地策略和對路徑上可用的硬體技術的了解,在抵達終點的不同路徑中進行選擇。
第二行:分片
在網路的發展過程中,傳輸媒介也發生過很大的變化。從最初的雙絞線到同軸電纜,從光纖到無線網路。在不同的媒介中資料傳輸的速度不同,同時各個網路傳輸的資料報大小也可能不同。在有的網路中資料報可以大到幾千位元組,而在有的網路中則只有幾十位元組。這樣,問題就出來了。當乙個來自高速網路中的大資料報進入乙個低速網路中的時候,就必須調整資料報的大小,使其適應新的網路。就好比乙個大客戶一下子把一火車東西從北京發到了某個農村郵局,但是那裡卻只有牛車。怎麼辦?只能把一車貨物先拆開,然後用牛車一車一車的運到終點再組合起來。這就是分片和重組。
identification用來標識乙個分片屬於哪個資料報。
flag用來提示接收端該資料報是否屬於某乙個大資料,以及後面是否還有其他分片。
fragment offset用來標識這個分片在整個資料報中的位置。它的值表示這個資料片的起點位於原始資料報中的第幾個位元組。
第三行:生存時間、協議和校驗
加入你寫信的時候把位址寫錯了,郵政局最後會發現查無此人並把信原路退回。但在網際網路中沒有這樣的機制,因為首先「查無此人」很難做到。網際網路上的ip位址不像門牌號一樣具有地域性。路由器只做兩件事情,把郵件用到本轄區的某人手中,或者送到下個郵局。除非這封信在所有郵局都轉過一遍,否則很難斷定「查無此人」。但是在所有郵局都轉一遍的開銷很大,所以就在ip包頭設定了乙個生存時間。準確的說,這並不是乙個時間。它表示的是經過的路由器的最大個數。比如生存時間設定成64,表示如果經過了64個路由器還找不到收信人,那最後乙個路由器就把這個資料報扔掉吧。
協議用來告訴ip層應該將信件交給哪乙個上層應用來處理。它類似於我們在信封上寫的收件人。比如一封信寄到了乙個學校的宿舍,裡面住了12個人。那麼誰又權利處理它呢。看一下收件人,是bruce,那麼其他人就不要看了。
校驗的作用在於可以檢測信件是否完整。因為網際網路是乙個開放的通訊環境,任何人都有可能截獲你的信件並修改它的內容。所以我們需要在信封的封口出貼上封條,這個封條就是校驗和。
這個很好理解了,就是哪條街道哪個房間。
信是你寄的,寫上你的位址吧,萬一對方要回信呢。
第六行及其後:選項和填充
選項的主要作用是測試和除錯網路。常用的選項有:
記錄路由選項——它會將經過的路由器ip位址記錄在選項中。
源路由選項——它可以指定一條路徑,然後該資料報必須按照這條路徑來路由。
時間戳選項——它會記錄經過每乙個路由器的時間。
這樣,ip的任務就完成了。它就是乙個信封,告訴路由器和郵遞員們如何進行交付。
TCP IP協議 IP協議
ip協議層 在傳輸層的下邊,鏈路層的上邊。ip層封裝後稱為資料報 傳輸層叫資料段,鏈路層叫資料幀。值得注意的是,不是所有的乙太網資料幀都是ip資料報,至少乙太網還要使用arp協議。不是所有的ip資料報都是udp或tcp資料,因為比如icmp igmp也用ip傳送資料 ip協議在網路中當然非常重要了,...
協議棧植入晶元勢在必行,IPSec就是個錯誤
這篇文章有點極端,但也可能迎合某些個人或者組織的意思。這篇文章較短,稍後我會繼續寫這個話題。心太痛,人太衰。1.協議棧植入晶元 如果你認為協議棧植入晶元是在消耗物資,磨滅成本,那你就錯了。tcp ip ethernet協議棧如今已經成了事實上的標準,多少年都沒有變過。固化的東西鑑於電路設計,開模,矽...
IP協議 ARP協議 RARP協議
ip資料報 ip是tcp ip協議族中最核心的協議,所有的tcp udp icmp igmp資料都以ip資料報的格式傳輸。ip僅提供盡力而為的傳輸服務,如果發生某種錯誤,ip會丟失該資料,然後傳送icmp訊息給信源端。另外,ip資料報可以不按傳送順序接受。ip資料報的格式如下 前20位元組和緊接其後...