1. 程式人生 > >TCP/IP詳解-IP和IP選路

TCP/IP詳解-IP和IP選路

1 IP簡介
IP協議是不可靠的,它不保證IP資料報能成功地達到目的地。如果傳送某種錯誤,如某個路由器暫時用完了緩衝區,IP的處理方法:丟棄該資料報,然後傳送ICMP訊息給信源端,任何可靠性由上層提供。

IP是無連線的,它不維護任何關於後續資料報的狀態資訊。

2 IP首部
這裡寫圖片描述

4個32bit值以下面的次序傳輸:0-7bit,8-15bit,16-23bit,24-31bit。這種傳輸次序為大端位元組序,也稱為網路位元組序。小端位元組序傳輸前必須轉換成網路位元組序。

服務型別欄位:
這裡寫圖片描述

首部檢驗和依據IP首部計算的檢驗和碼

3 子網定址
B類地址的子網劃為:
這裡寫圖片描述

主機號全0和全1的IP不能分配為主機IP

4 子網掩碼
子網掩碼說明子網號和主機號之間的分界,表明多少位元用於子網號及多少位元用於主機號

這裡寫圖片描述

5 特殊情況的IP地址
這裡寫圖片描述

表中頭兩項,網路號為0,如主機使用BOOTP協議確定本機IP地址時只能作為初始化過程中的源地址出現

6 子網的例子
這裡寫圖片描述

這裡寫圖片描述

7 ifconfig命令
ipconfig命令提供系統上的介面資訊
這裡寫圖片描述

這裡寫圖片描述

8 netstat命令
netstat命令也提供系統上的介面資訊,-i引數打印出介面資訊,-n引數打印出IP地址而不是主機名

這裡寫圖片描述

9 IP路由選路
路由守護程式開機啟動,並一直執行,提供選路策略
這裡寫圖片描述

IP搜尋路由表的流程:
1)搜尋匹配的主機地址
2)搜尋匹配的網路地址
3)搜尋預設表項
4)如果第一步,第二步,第三步都不滿足,則丟棄該報文

簡單路由表:
這裡寫圖片描述

U 該路由可以使用
G 該路由到是到一個閘道器。如果沒有設定改標誌,說明目的地是直接相連的
H 該路由是到一個主機,目的地址是一個完整的主機地址。如果沒有設定該標誌,說明該路由是到一個網路,而目的地址是一個網路地址:一個網路號,或者網路號與子網號的組合。
D 該路由是由重定向報文建立的
M 該路由已被重定向報文修改

標誌G區分間接路由和直接路由(不設定G)。區別在於,發往直接路由的分組中不但具有指明目的端的IP地址,還有其鏈路層地址;發往間接路由的分組指明目的端的IP地址,但鏈路層地址指明的是閘道器

當目的地址為本機IP地址,第一次搜尋就找到匹配的主機地址,然後把報文直接送給環回驅動程式,再有驅動程式把報文放入IP輸出佇列中

初始化路由表:
每當初始化一個介面時,就為介面自動建立一個直接路由

到達主機或網路額路由如果不是直接相連的,可以通過顯示運用命令新增路由
這裡寫圖片描述

沒有到達目的地的路由:
1)如果資料報是由本地主機產生的,那麼就給傳送該資料報的應用程式返回一個差錯,主機不可達差錯或網路不可達差錯
2)如果是被轉發的資料報,那麼就給原始傳送端傳送一份ICMP主機不可達的差錯報文

10 ICMP主機與網路不可達差錯
當路由器收到一份IP資料報但又不能轉發時,就要發生一份ICMP”主機不可達”差錯報文

11 轉發或不轉發
一般主機都不轉發IP資料報,除非對它們進行特殊配置而作為路由器使用,例如:大多數伯克利派生出的系統有個核心變數ipforwarding來配置

12 ICMP重定向差錯
只有主機可以選擇路由器傳送分組的情況下,才能看到ICMP重定向報文。
這裡寫圖片描述
1)主機發送一份IP資料報為R1。這種選路決策經常傳送,因為R1是該主機的預設路由
2)R1收到資料報並檢查它的路由表,發現R2是傳送資料報的下一站。當它把資料報發給R2時,R1檢測到傳送資料報的埠和資料報達到介面時相同的(主機和兩個路由器在同一LAN),就給路由器傳送重定向報文給原始傳送端提供了線索
3)R1傳送一份ICMP重定向報文給主機,告訴它以後把資料報傳送給R2而不是R1

重定向一般用來讓具有很少選路資訊的主機逐漸建立更完善的路由表。ICMP重定向允許TCP/IP主機進行選路時不需要具備智慧特性,而把所有的智慧特性放在路由器端

例子:
某主機路由表:
這裡寫圖片描述
如果ping程式指定-v選項,可以看到主機接收的任何ICMP報文
這裡寫圖片描述
可以看到在收到ping程式第一個響應之前,主機收到來自預設路由器gateway的重定向報文
現在某主機的路由表:
這裡寫圖片描述
ICMP重定向報文建立的是主機路由,而不是網路路由

13 ICMP路由器發現報文
主機在引導以後要廣播或多播傳送一份路由器請求報文,一臺或更多臺路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應的更新它們的路由表

ICMP路由通告報文:
這裡寫圖片描述
這裡寫圖片描述

當路由器啟動時,它在隨機時間(以減小與子網上其他路由器發生衝突的概率)內廣播或多播發送介面上傳送通告報文。
一般每兩次通告間隔450秒和600秒。一份給定的通告報文預設生命週期是30分鐘。

當路由器上的某個介面被關閉時,路由器可以在該介面上傳送最後一份通告報文,並把生命週期設定為0。

除此之外,路由器還監聽來自主機的請求報文,併發送路由器通告報文響應這些請求報文。

主機在引導期間一般傳送三分路由器請求報文,沒三秒鐘傳送一次,一旦接收到一個有效的通告報文,就停止傳送請求報文。

主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的預設路由器。另外,如果沒有接收到來自當前預設路由器的通告報文,那麼預設路由器會超時。

只要有一般的預設路由器,該路由器就會每隔10分鐘傳送通告報文,報文的生命週期是30分鐘。這說明主機的預設表項是不會超時的,即使錯過一份或兩份通告報文。