標籤:tcp ipv4 cisco 網路 telnet
柯南君上一章講了《TIP/IP之協議分層》,本章主要講一下IP協議,這個是大家最關注的
一、概念:
IP是TCP / IP協議族中最為核心的協議。所有的TCP、UDP、ICM P及IGMP資料都以IP資料報格式傳輸。許多剛開始接觸TCP/IP的人對IP提供不可靠、不需連線的資料報傳送服務感到很奇怪,特別是那些具有X.25或SNA背景知識的人。 不可靠(unreliable)的意思是它不能保證IP資料報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤時,如某個路由器暫時用完了緩衝區, IP有一個簡單的錯誤處理演算法:丟棄該資料報,然後發送ICMP訊息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。 無串連(connectionless)這個術語的意思是IP並不維護任何關於後續資料報的狀態資訊。每個資料報的處理是相互獨立的。這也說明, IP資料報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的資料報(先是A,然後是B),每個資料報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。
二、原理:
1、IP首部
IP資料報的格式 :TCP/IP協議定義了一個在網際網路上傳輸的包,稱為IP資料包(IP DATAGRAM),在這裡,為了便於大家的理解,我用了兩張圖(分別是兩本參考資料)表示IP資料包格式的真實意思,有些理解不到位的地方希望多交流。
(3 - 1所示)。普通的IP首部長為20個位元組,除非含有選項欄位。
如所示:
IP首部 :最高的在左邊,記為0 bit;最低位在右邊,記為31 bit;4個位元組的32 bit值以下面的次序傳輸:首先是0~7 bit,其次 8~15 bit,然後 16~23 bit,最後是 24~31 bit。這種傳輸次序作big endian位元組順序。由於TCP / IP首部中所有的二進位整數在網路中傳輸時都要求以這種次序,因此它又稱作網路位元組序。以其他形式儲存二進位整數的機器,如little endian格式,則必須在傳輸資料之前把首部轉換成網路位元組序。
備忘:
A)bit:中文名稱是位,音譯“位元”,是用以描述電腦資料量的最小單位。
位元系統中,每個0或1就是一個位(bit)。
bit 來自binary digit (位元字) 有以下用途:資料率---就是資料的傳輸速率,單位是:位元/秒(意思是每秒傳送多少位元字《1或0》)
通常記為: bit/s b/s Kb/s Mb/s Gb/s Tb/s bps(bit per second)而這幾個英文字母的來源:K:kilo(千) M:mega(兆) G:giga(吉) T:tera(太)
單位換算
1Byte=8bit
1KB=1024Byte(位元組)=8*1024bit
1MB=1024KB
1GB=1024MB
1TB=1024GB
B) endian:big-Endian 和 Little-Endian 位元組排序
位元組排序 含義 Big-Endian 一個Word中的高位的Byte放在記憶體中這個Word地區的低地址處。 Little-Endian 一個Word中的低位的Byte放在記憶體中這個Word地區的低地址處。 必須注意的是:表中一個Word的長度是16位,一個Byte的長度是8位。如果一個數超過一個Word的長度,必須先按Word分成若干部分,然後每一部分(即每個Word內部)按Big-Endian或者Little-Endian的不同操作來處理位元組。一個例子:如果我們將0x1234abcd寫入到以0x0000開始的記憶體中,則結果為 big-endian little-endian0x0000 0x12 0xcd0x0001 0x34 0xab0x0002 0xab 0x340x0003 0xcd 0x12(注意:0xab換算成2進位是10101011,是個8bit的數。)詳細介紹如下:不同體系的CPU在記憶體中的資料存放區往往存在著差異。例如,Intel的x86系列處理器將低序位元組儲存在起始地址,而一些RISC架構的處理器,如IBM的370主機使用的PowerPC或Motorola公司生產的CPU,都將高序位元組儲存在起始位置。這兩種不同的儲存方式被稱為little-endian和big-endian。
① 版本:目前的協議版本號碼是4,因此IP有時也稱作IPV4。
② 首部長度:指的是首部佔32 bit字的數目,包括任何選項。由於它是一個4位元欄位,因此首部最長為60個位元組。
佔4位,可表示的最大十進位數值是15。請注意,這個欄位所表示數的單位是32位字長(1個32位字長是4位元組),因此,當IP的首部長度為1111時(即十進位的15),首部長度就達到60位元組。當IP分組的首部長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。因此資料部分永遠在4位元組的整數倍開始,這樣在實現IP協議時較為方便。首部長度限制為60 位元組的缺點是有時可能不夠用。但這樣做是希望使用者盡量減少開銷。最常用的首部長度就是20位元組(即首部長度為0101),這時不使用任何選項。(#我們一般看到的版本和首部長度兩個欄位是十六進位45,就是版本號碼version=4,headlength=5,也就是首部長度是60個位元組)
③ 區分服務:佔8位,用來獲得更好的服務。這個欄位在舊標準中叫做服務類型,但實際上一直沒有被使用過。1998年IETF把這個欄位改名為區分服務DS(Differentiated Services)。只有在使用區分服務時,這個欄位才起作用。
服務類型(TOS)欄位包括一個3 bit的優先權子欄位(現在已被忽略),4 bit的TOS子欄位和1 bit未用位但必須置0。4 bit的TOS分別代表:最小時延、最大輸送量、最高可靠性和最小費用。4 bit中只能置其中1 bit。如果所有
4 bit均為0,那麼就意味著是一般服務。
下邊圖列出了對不同應用建議的TOS值。在最後一列中給出的是十六進位值,因為這就是在後面將要看到的tcpdump命令輸出。
備忘:如所示:
Telnet和Rlogin這兩個互動應用要求最小的傳輸時延,因為人們主要用它們來傳輸少量的互動資料。另一方面, FTP檔案傳輸則要求有最大的輸送量。最高可靠性被指明給網路管理(SNMP)和路由選擇協議。使用者網路新聞( Usenet news, NNTP)是唯一要求最小費用的應用。現在大多數的TCP/IP實現都不支援TO S特性,但是自4.3BSD Reno以後的新版系統都對它進行了設定。另外,新的路由協議如OSPF和IS-IS都能根據這些欄位的值進行路由決策。
④ 總長度: 總長度指首部和資料之和的長度,單位為位元組。總長度欄位為16位,因此資料報的最大長度為2的16-1方=65535位元組。
在IP層下面的每一種資料連結層都有自己的幀格式,其中包括幀格式中的資料欄位的最大長度,這稱為最大傳送單元MTU(Maximum Transfer Unit)。當一個資料報封裝成鏈路層的幀時,此資料報的總長度(即首部加上資料部分)一定不能超過下面的資料連結層的MTU值。
⑤ 標識(identification): 佔16位。IP軟體在儲存空間中維持一個計數器,每產生一個資料報,計數器就加1,並將此值賦給識別欄位。但這個“標識”並不是序號,因為IP是無串連服務,資料報不存在按序接收的問題。當資料報由於長度超過網路的MTU而必須分區時,這個識別欄位的值就被複製到所有的資料報的識別欄位中。相同的識別欄位的值使分區後的各資料報片最後能正確地重裝成為原來的資料報。
⑥ 標誌(flag): 佔3位,但目前只有2位有意義。
- 標誌欄位中的最低位記為MF(More Fragment)。MF=1即表示後面“還有分區”的資料報。MF=0表示這已是若干資料報片中的最後一個。
- 標誌欄位中間的一位記為DF(Don’t Fragment),意思是“不能分區”。只有當DF=0時才允許分區。·
⑦
片位移: 佔13位。片位移指出:較長的分組在分區後,某片在原分組中的相對位置。也就是說,相對使用者資料欄位的起點,該片從何處開始。片位移以8個位元組為位移單位。這就是說,每個分區的長度一定是8位元組(64位)的整數倍。
⑧ 存留時間: 佔8位,存留時間欄位常用的的英文縮寫是TTL(Time To Live),表明是資料報在網路中的壽命。由發出資料報的源點設定這個欄位。其目的是防止無法交付的資料報無限制地在網際網路中兜圈子,因而白白消耗網路資源。最初的設計是以秒作為TTL的單位。每經過一個路由器時,就把TTL減去資料報在路由器消耗掉的一段時間。若資料報在路由器消耗的時間小於1秒,就把 TTL值減1。當TTL值為0時,就丟棄這個資料報。
⑨ 協議: 佔8位,協議欄位指出此資料報攜帶的資料是使用何種協議,以便使目的主機的IP層知道應將資料部分上交給哪個處理過程。(在scapy中,下層的這個
protocol一般可以從上曾繼承而來,自動填滿,我們一般可以省略不填此項)
10 部檢驗和: 佔16位。這個欄位只檢驗資料報的首部,但不包括資料部分。這是因為資料報每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些欄位,如存留時間、標誌、片位移等都可能發生變化)。不檢驗資料部分可減少計算的工作量。
2、IP路由選擇
IP路由選擇,是思科網路工程師必須要瞭解的一個基礎知識。其實,IP路由並沒有大家想的那麼複雜。將通過一個案例,來協助大家深入瞭解IP路由的選擇過程。希望這篇文章能夠協助大家掃清IP路由選擇上的一些誤區。
如,現在這麼一個網路。主機甲與主機乙分別在兩個不同的網段上,中間通過路由器進行串連。現在假設主機甲要跟主機乙進行通訊,那麼主機甲如 何才能夠找到主機乙的位置呢?筆者現在就通過這個例子,跟大家詳細解釋IP路由選擇的整個過程。在這裡,筆者以Cisco的路由器為例進行介紹。
假設現在主機甲的使用者利用Ping命令,來確認主機乙的連通性問題。這個網路架構雖然比較簡單,但是其路由選擇過程的步驟則是一步不缺的。主要通過如下步驟: 第一步:當使用者在主機甲上輸入PING 172.168.80.8之後,主機甲中有一個網際網路控制報文協議,英文簡稱為ICMP。這個協議將建立一個回應請求資料包,在它的資料域中只包含有字母。 第二步:英特網控制報文協議會將這個有效負荷(即剛建立的資料包)交給網際網路協議(英文簡稱IP)。然後這個網際網路協議也會建立一個資料包。在這個英特網協議建立的資料包中,所包含的內容要比網際網路控制報文協議所建立的資料包豐富的多。在這個包中包括主機甲的IP地址、目的地主機已的IP地址以 及值為01h的協議欄位。當資料包到達主機乙時,這些內容就是告訴對方,應該將這個有效負荷交給網際網路控制報文協議來處理。 第三步:IP協議會判斷目的IP地址是屬於遠程網路,還是在本網。由於根據IP地址規劃規則,主機甲與主機已是屬於不同的網路。此時,剛才英特網協議(IP)所建立的資料包將會被發送到預設的網關中去。在主機甲的網路屬性配置中,除了有自身的邏輯IP地址,還有預設的網關地址。網關地址就是 用來不同網路之間的主機進行通訊的一扇門。只有通過網關,主機甲的資料包才能夠被發送到不同網路的主機乙中。 第四步:確認路由器相應介面的MAC地址。假設主機甲(IP地址為172.168.60.6)的預設閘道被配置為172.168.60.1。若主機甲的資料包要發送到這個預設閘道上,則就必須知道其對應的路由器介面的物理地址,即MAC地址。因為只有如此,資料包才能夠被傳遞到更下一層的資料鏈 路層並根據一定的規則產生幀。然後主機甲才能夠把資料包發送給172.168.60.0網路連接的路由器介面。在本地區域網路上,主機只可以通過硬體地址來 相互之間進行通訊。所以當主機甲要把資料包發送給特定的網關時,必須要知道這個網關所對應的MAC地址。這一個過程是不可避免的。為了達到這個目的,主機 甲首先會檢查自己的ARP緩衝,查看一個預設閘道的IP地址是否已經解析為對應介面的硬體地址。如果在ARP緩衝表中已經有對應的記錄,表示已經被成功解析。此時,資料包將會被釋放並傳遞到資料連結層並產生幀。其中目的方的硬體地址也將同資料包一起下傳到資料連結層。通常情況下,在主機甲上,可以通過 ARP命令來查看主機當前的IP地址與MAC地址的對應表。如。筆者現在電腦所設定的預設閘道為192.168.0.254,後面的16位字元就是默 認網關所對應的硬體地址。
第五步:產生幀。當這個資料包和目的方的硬體地址被傳遞給資料連結層之後,區域網路磁碟機將用來提供媒體訪問服務,以通過乙太網路進行資料轉送。一 個資料幀即將產生,使用一些控制資訊來封裝這個資料包。在這個資料幀中會包含有目的方和源方的硬體地址。以及乙太網路類型欄位。這個乙太網路類型欄位主要用來描述的是交付這個資料包島資料連結層的網路層協議。在這個幀的結尾,是一種被稱作為幀校正序列的欄位,它是裝載迴圈冗餘校正計算值的地區。也就是說,在這 個幀中,主要包括目的MAC地址(對應路由器介面的MAC地址)、源MAC地址(主機甲的MAC地)、乙太網路類型欄位、資料包、幀校正序列五部分內容。注意,這裡指的目的地址並不是主機乙的地址,而是裡主機甲最近的預設閘道地址。在第一次通訊時,主機 甲並不知道主機乙的MAC地址。一旦完成幀的封裝,則這個幀將會被交付到物理層。如果商業網路是利用雙絞線組建的話,則將會以一次一位的方式發往物理媒體。
待續...
柯南君:看TCP/IP 之 二 (IP:網際協議)