tcp/ip詳解卷一(筆記1)
1.概述
1.1 分層
網路協議通常通過不同的層次進行開發,每一層分別負責不同的通訊功能。一個協議簇,如TCP/IP通常是一組不同層次上的協議的組合。TCP/IP通常被認為是一個四層的協議系統,如下圖所示。
每一層負責不同的功能:
(1)鏈路層:有時也被稱為資料鏈路層或網路介面層,通常包括作業系統中的裝置驅動程式和計算機中對應的網路介面卡。他們一起處理與電纜的物理介面細節。
(2)網路層:也被稱為互聯層,處理分組在網路中的活動,例如分組的選路。在TCP/IP協議中,網路層協議包括IP,ICMP(網路控制報文協議),IGMP(網路組管理協議)
(3)傳輸層:主要為主機上的應用程式提供端到端的通訊。包括TCP,UDP.
(4)應用層:負責處理特定應用程式細節。不同的TCP/IP協議都會實現如下幾種應用協議:Telnet,FTP,SMTP,SNMP協議。
網際網路上執行FTP通訊的兩個主機通訊過程涉及的協議:
通過路由器連線的兩個網路中主機的通訊:
1.2 網路中主機的地址與域名系統
1.2.1 ip地址分類
1.2.2 域名系統
域名系統DNS是一個分佈的資料庫,提供IP地址和主機名之間的對映。具體的資訊在後面描述。
1.3 封裝
當應用程式用TCP傳輸資料時,資料被送入協議棧中,然後逐個通過每層直到當被做一串位元流送入網路。其中每一層對收到的資料都要增加一些首部資訊(有時還需要增加尾部資訊)。該過程如下圖所示。
其中TCP傳給IP的資料單元被成為tcp報文段或TCP段。IP傳給網路介面層的資料包成為IP資料報。通過乙太網傳輸的位元流成為幀。
1.4 分用
當目的主機收到一個乙太網資料幀時,資料就要開始從協議棧中從底向上上升,同時去掉各個協議加上的報文首部。每層協議都要去檢查報文首部中的協議標識,以確定接收資料的上層協議。這個過程成為分用。
1.5 埠
tcp,udp採用16bit的埠號來識別應用程式。在/etc/services檔案中聲明瞭常用服務的埠號。
[email protected]:~$ vi /etc/services # Network services, Internet style # # Note that it is presently the policy of IANA to assign a single well-known # port number for both TCP and UDP; hence, officially ports have two entries # even if the protocol doesn't support UDP operations. # # Updated from http://www.iana.org/assignments/port-numbers and other tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote ftp 21/tcp fsp 21/udp fspd ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location nameserver 42/tcp name # IEN 116 whois 43/tcp nicname tacacs 49/tcp # Login Host Protocol (TACACS) tacacs 49/udp re-mail-ck 50/tcp # Remote Mail Checking Protocol re-mail-ck 50/udp domain 53/tcp # Domain Name Server domain 53/udp mtp 57/tcp # deprecated tacacs-ds 65/tcp # TACACS-Database Service ......
1.6 tcp/ip實現 、應用程式設計介面
既成事實標準的tcp/ip協議軟體實現來自伯克利的加利福利亞大學的計算機系統研究小組。
使用TCP/IP協議的應用程式通常採用兩種應用程式設計介面API: Socket(有時稱為Berkeley socket,表明是從伯克利版發展而來的) 和 TLI(運輸層介面:transport layer interface)。
2. 鏈路層
鏈路層主要有三個目的:1)為IP模組傳送和接收IP資料包;2)為ARP 協議傳送請求和接收應答;3)為RARP 協議傳送請求和接收應答
TCP/IP協議支援多種不同的資料鏈路層協議,包括:乙太網(csma/cd:帶衝突檢測的載波真聽多路接入)、令牌環網、FDDI(光纖分散式資料介面)
2.1 乙太網和IEEE 802封裝
乙太網封裝格式:
3. IP
IP提供的是不可靠、無連線的資料報傳輸服務。其不可靠的意思是它不能保證IP資料報能成功到達目的地。如果發生某種錯誤,如某個路由器暫時用完了緩衝區,IP有一個簡單的錯誤處理演算法:丟棄該資料報,然後傳送ICMP訊息給信源端(誰傳送ICMP發?)
3.1 IP首部
四位元組32bit的值以下次序傳輸:首先0 ~ 7bit, 然後8 ~ 15bit, 然後16 ~ 23bit,最後24 ~ 31 bit。這種傳輸次序叫做big endian位元組序。由於TCP/IP首部中的所有的二進位制整數在網路中傳輸時都要求以這種次序,因此,它又稱為網路位元組序。以其他形式儲存的二進位制整數的機器,如littler endian格式,則必須在傳輸資料前將首部轉換成網路位元組序。
(1)服務型別TOS欄位:包括3bit的優先權子欄位,4bit的tos子欄位和1bit的未用位但必須置零。 4bit的tos分別表示:最小時延、最大吞吐量、最高可靠性、最小費用。 4bit中只能設定其中的一位。如果4為都為0,則表示一般服務。如telnet 和rlogin這兩個互動性的應用,則要求最小時延;對應ftp則要求最大吞吐量。
TOS常用來做QOS,用於在資料傳輸過程中的質量保證。說通俗一點,路窄、車多,所以對車標出優先順序,有些車先走,有些車後走,有些車不讓走。路由器跟交警一樣,指揮交通,如何操作,取決事先確定的策略。對於終端而言(比如電腦),已經收到報文,所以就不會關心這個欄位。
(2)總長度:指整個ip資料報的長度,以位元組為單位。總長度是ip首部中必要的長度,應用一些資料鏈路需要填充一些資料以達到最小長度,可通過總長度欄位區分出真正的報文和填充內容。
(3)標識欄位:唯一標識主機發送的每一分資料。通常每傳送一份報文它的值就會加1.
(4)TTL: 生存時間欄位,表示可以經過的路由器數。當ttl=0時,資料報就會被丟棄,併發送ICMP報文通知源主機。
3.2 ip路由
IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。
路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。
[email protected]:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
[email protected]:~$
路由表中的每一個路由項都具有五個型別。分為四大部分
-
網路地址(networkdestination)、網路掩碼(netmask):網路地址和網路掩碼相“與”的結果用於定義本地計算機可以到達的網路目的地址範圍。
主機地址:某個特定主機的網路地址
子網地址:某個特定子網的網路地址
網路地址:某個特定網路的網路地址
預設路由:所有未在路由表中指定的網路地址
注意:在新增路由時,Windows要求輸入的網路地址和網路掩碼相“與”後的結果必須等於網路地址,否則路由新增會失敗。
-
閘道器(gateway,又稱為下一跳伺服器):在傳送IP資料包時,閘道器定義了針對特定的網路目的地址,資料包傳送的下一跳伺服器。
如果是本地計算機直接連線到的網路,閘道器通常是本地計算機對應的網路介面,但是此時介面必須和閘道器一致
如果是遠端網路或預設路由,閘道器通常是本地計算機所連線到的網路上的某個伺服器或路由器
-
介面(interface):介面定義了針對特定的網路目的地址,本地計算機用於傳送資料包的網路介面。閘道器必須位於和介面相同的子網(預設閘道器除外),否則造成在使用此路由項時需呼叫其他路由項,從而可能導致路由死鎖
-
躍點數(metric):躍點數用於指出路由的成本,通常情況下代表到達目標地址所需要經過的躍點數量,一個躍點代表經過一個路由器。躍點數越低,代表路由器成本越低;躍點數越高,代表路由成本越高。當具有多條到達相同目的網路的路由項時,TCP/IP會選擇具有更低躍點數的路由項。(一個路由一個躍點)
3.2.1 路由表的選路原則
路由表的基本查詢方法是:
- 搜尋路由表,尋找與目的IP地址完全匹配的表目。如果找到,則把報文傳送給該表目指定的下一站路由器或直接相連的網路介面
- 搜尋路由表,尋找與目的IP地址網路號匹配的表目。如果找到,則把報文傳送給該表目指定的下一站路由器或直接相連的網路介面
- 搜尋路由表,尋找“預設(default)”表目。如果找到,則把報文傳送給該表目指定的下一站路由器
這是最基本的情況,但實際使用時的情況更加複雜,比如當一個目標地址被多個目標網路所覆蓋以及一個目標網路的多種路由協議的多條路徑共同存在的時候,或者是同一目標網路同一路由器的多條路徑共同存在的時候,路由器的轉發原則是什麼?
想要從多條可選路由表項中選擇最優的路徑,必須有一個衡量標準,管理距離AD就是所有衡量標準中的一個。
管理距離(AD): 管理距離是指提供路由可信度的一個參考值,如果管理距離越小,路由條目越可靠。這就是說,較小管理距離的路由條目優先於較大的條目。管理距離的取值範圍為0-255,0最可信,255最不可信。假如一臺路由器收到同一網路的兩條路由更新,路由器會選擇管理距離最小的那條,放入路由表
路由選路原則:
先進行最長匹配原則,滿足後進行管理距離最小優先,依舊滿足進行度量值最小優先
A: 最長匹配原則:最長匹配原則是CISCO IOS路由器預設的路由查詢方式。當路由器收到一個IP資料包時,會將資料包的目的IP地址與自己本地路由表中的表項進行bit by bit的逐位查詢,直到找到匹配度最長的條目,這叫最長匹配原則。
B: 管理距離AD最小優先:可以是多種路由協議的比較;也可以是同種路由協議的比較,比如雙線出口所配置的兩條預設浮動路由比較
C:度量值metric最小優先:路由協議不同則度量值不能做比較,比如rip度量值為跳數;ospf度量值為頻寬;eigrp度量值為頻寬+延遲等。所以在不同種協議之間先比較管理距離
4. ARP
ARP(Address Resolution Protocol)即地址解析協議, 用於實現從 IP 地址到 MAC 地址的對映,即詢問目標IP對應的MAC地址。
在網路通訊中,主機和主機通訊的資料包需要依據OSI模型從上到下進行資料封裝,當資料封裝完整後,再向外發出。所以在區域網的通訊中,不僅需要源目IP地址的封裝,也需要源目MAC的封裝。
一般情況下,上層應用程式更多關心IP地址而不關心MAC地址,所以需要通過ARP協議來獲知目的主機的MAC地址,完成資料封裝。
ARP原理:廣播請求單播迴應,ARP協議通過"一問一答"實現互動,但是"問"和"答"都有講究,"問"是通過廣播形式實現,"答"是通過單播形式。
4.1 arp 快取記憶體
每個主機或者路由器都有一個ARP快取記憶體表。它用來存放最近Internet地址到硬體地址之間的對映記錄。快取記憶體表中每一項的生存時間都是有限的,起始時間從被建立時開始計算的。
[email protected]:~$ arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether dc:fe:18:f6:68:81 C eth0
4.2 arp 代理
4.2.1 arp代理
當ARP請求目標跨網段時,閘道器裝置收到此ARP請求,會用自己的MAC地址返回給請求者,這便是代理ARP(Proxy ARP)。
代理ARP本質是一個"善意的欺騙",是一個"錯位"的對映。從圖中我們看到伺服器地址的正常對映是<8.8.8.8-MAC2>,而路由器返回給電腦的,卻是 <8.8.8.8-MAC254>。不管是不是"欺騙",至少最終電腦可以與外網的伺服器實現通訊。
4.2.1 代理ARP和ARP的應用場景
例1:當PC沒有閘道器時,採用代理ARP
例2:當PC有閘道器的時候,採用正常ARP
通過以上對比,總結出以下資訊。
①電腦沒有閘道器時,ARP直接詢問目標IP對應的MAC地址(跨網段),採用代理ARP;
②電腦有閘道器時,ARP只需詢問閘道器IP對應的MAC地址(同網段),採用正常ARP;
③無論是正常ARP還是代理ARP,電腦最終都拿到同一個目標MAC地址:閘道器MAC。
4.3 免費ARP
免費ARP是指主機發送ARP查詢自己的IP地址。
免費ARP的作用,目前免費ARP的作用有兩種。
(1)第一種就是剛才上面所說的宣告廣播的作用,以告訴整個廣播域,目前這個IP所對應的MAC地址是什麼。
(2)第二種是看看廣播域內有沒有別的主機使用自己的IP,如果使用了,則在介面上彈出“IP衝突”字樣。
普通ARP和免費ARP的區別:
普通ARP請求報文(查詢別人的IP地址,比如:我需要10.1.1.2的MAC地址,10.1.1.2是別人的IP)廣播發送出去,廣播域內所有主機都 接收到,計算機系統判斷ARP請求報文中的目的IP地址欄位,如果發現和本機的IP地址相同,則將自己的MAC地址填寫到該報文的目的MAC地址欄位,並 將該報文發回給源主機。所以只要傳送普通ARP請求的主機接收到報文,則證明廣播域內有別的主機使用自己要訪問的這個IP地址(這裡不考慮路由器的ARP代理問 題)。
免費ARP的報文發(查詢自己的IP地址,比如:我需要10.1.1.1的MAC地址,而10.1.1.1就是自己的IP)出去是不希望收到迴應的,只希望是起宣告作用;如果收到迴應,則證明對方也使用自己目前使用的IP地址。在所有網路裝置(包括計 算機網絡卡)up的時候,都會發送這樣的免費ARP廣播(多長時間發一次呢????),以宣告並確認有沒有衝突。
5.逆地址解析協議 RARP
逆地址解析協議 RARP 使只知道自己硬體地址的主機能夠知道其 IP 地址。
這種主機往往是無盤工作站。 因此 RARP協議目前已很少使用。
6.ICMP
icmp 報文是在ip資料報內部被傳輸的,主要使用者傳輸差錯報文及其他需要注意的資訊。
icmp報文如下所示
6.1 icmp 報文型別
各種型別的icmp報文如下圖所示。不同型別由報文中的型別欄位和程式碼欄位共同決定。
6.1.1 ICMP 詢問報文
ICMP 詢問報文有兩種:
- 回送請求和回答報文 :主機或路由器向特定目的主機發出詢問,收到此報文的主機必須傳送ICMP回送回答報文。可用於測試目的站是否可達以及瞭解其有關狀態。
- 時間戳請求和回答報文 : 請求某臺主機或路由器回答當前的日期和時間,可用於時鐘同步和時間測量。
6.1.2 ICMP 差錯報告報文
差錯報告報文共有 5 種
- 終點不可達
- 源點抑制(Source quench)
- 時間超過 : 生存時間減為0時。
- 引數問題 : 資料報首部欄位出錯。
- 改變路由(重定向)(Redirect) :讓主機知道下次應該將資料報傳送給另外的路由(可通過更好的路由)。
6.2 查詢報文
6.2.1 ICMP時間戳請求
ICMP時間戳請求 允許系統向另一個系統查詢當前的時間,返回的值是自午夜開始計算的毫秒數,提供了毫秒級的解析度。
請求端填寫發起時間戳,接收時間戳、傳送時間戳置0
應答端填寫接收時間戳、傳送時間戳,發起時間戳與請求報文中一致
6.3 差錯報文
ICMP 差錯報告報文的資料欄位的內容
7.ping 程式
ping 程式用於測試另一臺主機是否可達。該程式傳送一份icmp 回顯請求報文給主機,並等待返回icmp回顯報文
ping程式提供了檢視ip記錄路由(RR)選項的機會。它使ping程式傳送出去的ip資料報中設定IP RR選項。這樣,每個處理該資料的路由器都把它的ip地址放入選項地址中。大資料報達到目的端時,ip地址清單應該複製到icmp回顯應答中,這樣返回途中經過的路由器機制也被加入到目的端中。當ping程式收到回顯應答時,它就會打印出這份清單。
通過此引數就可以設定你想探測經過的路由的個數,不過限制在了9個,也就是說你只能跟蹤到9個路由
8.traceroute程式
traceroute 程式可以讓我們看到ip資料包從一臺主機傳到另一臺主機所經過的路由。
8.1和ping -R選項的區別
ping 需要路由器的支援,且最大支援9個ip地址(往返)
8.2 traceroute執行過程
Tracert 命令用 IP 生存時間 (TTL) 欄位和 ICMP 錯誤訊息來確定從一個主機到網路上其他主機的路由。
首先,tracert送出一個TTL是1的IP 資料包到目的地,當路徑上的第一個路由器收到這個資料包時,它將TTL減1。此時,TTL變為0,所以該路由器會將此資料包丟掉,並送回一個「ICMP time exceeded」訊息(包括髮IP包的源地址,IP包的所有內容及路由器的IP地址),tracert 收到這個訊息後,便知道這個路由器存在於這個路徑上,接著tracert 再送出另一個TTL是2 的資料包,發現第2 個路由器… tracert 每次將送出的資料包的TTL 加1來發現另一個路由器,這個重複的動作一直持續到某個資料包 抵達目的地。當資料包到達目的地後,該主機則不會送回ICMP time exceeded訊息,一旦到達目的地,由於tracert通過UDP資料包向不常見埠(30000以上)傳送資料包,因此會收到「ICMP port unreachable」訊息,故可判斷到達目的地。
tracert 有一個固定的時間等待響應(ICMP TTL到期訊息)。如果這個時間過了,它將打印出一系列的*號表明:在這個路徑上,這個裝置不能在給定的時間內發出ICMP TTL到期訊息的響應。然後,Tracert給TTL記數器加1,繼續進行。
9.ip選路
9.1 路由表
系統中都有IP路由表,它儲存了本地計算機可以到達的網路目的地址範圍和如何到達的路由資訊。
路由表是TCP/IP通訊的基礎,本地計算機上的任何TCP/IP通訊都受到路由表的控制。
[email protected]:/home/dan# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
9.2路由選擇匹配
具體見 3.2節。
假如路由表中沒有預設項,且又不能找到匹配項時,這時怎麼處理?
(1)如果該ip資料報由主機產生的,那麼就會給該資料報的應用程式返回一個差錯,或是“主機不可達”或“網路不可達”。
(2)如果是被轉發的資料報,那麼就給原始傳送端傳送一份icmp主機不可達的差錯報文。
9.3 icmp重定向報文
9.3.1 ICMP重定向原理
ICMP重定向報文是ICMP控制報文中的一種。在特定的情況下,當路由器檢測到一臺機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向報文,請求主機改變路由。路由器也會把初始資料報向它的目的地轉發
ICMP應用分析-ICMP重定向
ICMP雖然不是路由協議,但是有時它也可以指導資料包的流向(使資料流向正確的閘道器)。ICMP協議通過ICMP重定向資料包(型別5、程式碼0:網路重定向)達到這個目的。
如上圖所示,主機PC要ping路由器R2的loopback 0地址:192.168.3.1,主機將判斷出目標屬於不同的網段,因此它要將 ICMP請求包發往自己的預設閘道器192.168.1.253(路由器R1的E0介面)。但是,這之前主機PC首先必須傳送ARP請求,請求路由器R1的 E0(192.168.1.253)的MAC地址。
當路由器R1收到此ARP請求包後,它首先用ARP應答包回答主機PC的ARP請求(通知主機PC:路由器R1自己的E0介面的MAC地址)。然後, 它(路由器R1)將此ICMP請求轉發到路由器R2的E0介面:192.168.1.254(要求路由器R1正確配置了到網路 192.168.3.0/24的路由)。此外,路由器R1還要傳送一個ICMP重定向訊息給主機PC,通知主機PC對於主機PC請求的地址的閘道器是: 192.168.1.254。
路由器R2此時會發送一個ARP請求訊息請求主機PC的MAC地址,而主機PC會發送ARP應答訊息給路由器R2。最後路由器R2通過獲得的主機PC的MAC地址資訊,將ICMP應答訊息傳送給主機PC。
9.3.2 何時重定向
a) 資料包的入介面和路由後的指定的出介面是同一個介面。
b) 資料包的源IP地址和該包應走的下一跳IP地址屬於同一個網段。
c) 資料報非源路由的(這種情況應該比較少見了,源路由多見於Token Ring)。
d) 系統開啟重定向功能。
9.3.3 重定向報文的處理
主機和路由器對於重定向報文有不同的處理原則。
1)路由器一般忽略ICMP重定向報文。
2)主機對於重定向報文的感知取決於作業系統。以Windows為例,對於閘道器返回的ICMP重定向報文,Windows會在主機的路由表中新增一項主機路由。那麼以後對於這個目的地址資料報,主機會將其直接送往重定向所指示的路由器。支援重定向報文處理的還有許多的Unix系統,如FreeBSD的諸多版本等。這類主機收到ICMP重定向報文後所採取的行動基本都是增加主機路由。顯然,修改預設閘道器是不合理的。
同時,有的作業系統對於重定向報文是不做任何處理而直接丟棄(雖然也同樣經由網路層向上遞交),比如Sun的某些系統。
某些主機可以啟動路由器功能,如FreeBSD的某些版本和Win32系統。這時主機的行為要特殊一些,會施加一些特殊條件來判斷是否處理該重定向報文,這是依系統而異的。比如BSD,它檢查重定向報文的條件之一是“重定向報文不能讓主機本身作為閘道器”。
9.3.4 ICMP重定向的利與弊
ICMP重定向使得客戶端的管理工作大大減少,使得對於主機的路由功能要求大大降低。該功能把所有的負擔推向路由器學習。但是與此同時ICMP重定向也有很多弊端。
就重定向本身的機制來說,ICMP重定向增加了網路報文流量,因為主機的報文總是要在閘道器的直連網段上重複傳輸。那麼更進一步如果主機的作業系統支援重定向(比如Windows)會如何?如圖1,而主機收到重定向報文,會在自己的路由表中產生指向B的主機路由,經由1.1.1.2。事實上,主機這樣可能會引起兩點顯著問題。
其一是引起效能問題,例如:有一臺大型的伺服器,要處理數十個子網下的數千臺主機的業務。如果要支援重定向,那麼伺服器將會維護一個龐大的充滿主機路由的路由表。這是一筆很大的開銷。可能很大程度上降低服務效能,甚至導致網路服務癱瘓。
其二是可能埋下安全隱患。利用這點可以進行攻擊和網路竊聽。如果目某主機A支援ICMP重定向,那麼主機B發一個IMCP重定向給它,以後它發出的所有到指定地址的報文都會轉發主機B,這樣B就可以達到竊聽目的了。當然,拿windows作業系統來說,它會對ICMP報文進行檢查,如果這個重定向不是閘道器傳送的,會被直接丟棄。不過偽造一個閘道器的資料包很容易。另外,如果刻意偽造許多虛假的ICMP重定向報文,主機路由表就可能被改的亂七八糟。
9.4 icmp路由發現報文
一般認為,主機在引導以後要廣播或多播傳送一份路由器請求報文。一臺或更多臺路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。
當路由器啟動時,它定期在所有廣播或多播傳送介面上傳送通告報文。準確地說,這些通告報文不是定期傳送的,而是隨機傳送的,以減小與子網上其他路由器發生衝突的概率。一般每兩次通告間隔450秒和600秒。一份給定的通告報文預設生命週期是30分鐘。
使用生命週期域的另一個時機是當路由器上的某個介面被關閉時。在這種情況下,路由器可以在該介面上傳送最後一份通告報文,並把生命週期值設為0.除了定期傳送主動提供的通告報文以外,路由器還要監聽來自主機的請求報文,併發送路由器通告報文以響應這些請求報文。如果子網上有多臺路由器,由系統管理員為每個路由器設定優先等級。例如,主預設路由器就要比備份路由器具有更高的優先順序。
主機操作
主機在引導期間一般傳送三份路由器請求報文,每三秒鐘傳送一次。一旦接收到一個有效的通告報文,就停止傳送請求報文。主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的預設路由器。另外,如果沒有接收到來自當前預設路由器的通告報文,那麼預設路由器會超時。只要有一般的預設路由器,該路由器就會每隔10分鐘傳送通告報文,報文的生命週期是30分鐘。這說明主機的預設表項是不會超時的,即使錯過一份或兩份通告報文。
10.動態選路協議
10.1 rip協議
距離向量演算法,實際中較少使用。工作原理:
(1)初始化——RIP[1]初始化時,會從每個參與工作的介面上傳送請求資料包。該請求資料包會向所有的RIP路由器請求一份完整的路由表。該請求通過LAN上的廣播形式傳送LAN或者在點到點鏈路傳送到下一跳地址來完成。這是一個特殊的請求,向相鄰裝置請求完整的路由更新。
(2)接收請求——RIP有兩種型別的訊息,響應和接收訊息。請求資料包中的每個路由條目都會被處理,從而為路由建立度量以及路徑。RIP採用跳數度量,值為1的意為著一個直連的網路,16,為網路不可達。路由器會把整個路由表作為接收訊息的應答返回。
(3)接收到響應——路由器接收並處理響應,它會通過對路由表項進行新增,刪除或者修改作出更新。
(4)常規路由更新和定時——路由器以30秒一次地將整個路由表以應答訊息地形式傳送到鄰居路由器。路由器收到新路由或者現有路由地更新資訊時,會設定一個180秒地超時時間。如果180秒沒有任何更新資訊,路由的跳數設為16。路由器以度量值16宣告該路由,直到重新整理計時器從路由表中刪除該路由。重新整理計時器的時間設為240秒,或者比過期計時器時間多60秒。Cisco還用了第三個計時器,稱為抑制計時器。接收到一個度量更高的路由之後的180秒時間就是抑制計時器的時間,在此期間,路由器不會用它接收到的新資訊對路由表進行更新,這樣能夠為網路的收斂提供一段額外的時間。
(5)觸發路由更新——當某個路由度量發生改變時,路由器只發送與改變有關的路由,並不傳送完整的路由表。
特點:
- 預設,RIP使用簡單的度量:通往目的站點所需經過的鏈路數。取值為1~15,數值16表示無窮大。
- 使用UDP的520埠傳送和接收RIP分組。
- RIP 每隔30秒以廣播形式傳送一次路由資訊,在鄰居之間互傳。
- 防止廣播風暴:後續分組做隨機延時後傳送。
- 如果一個路由在180s內未被更新,相應的距離設定為無窮大:16,並從路由表中刪除該表項。
缺點:收斂慢
例子:
初始時R1到C網路的跳數是1,路由表中就記錄著1,R2經過R1再到C共兩跳,因此記錄跳數是2.
現在:R1到C的路徑被剪斷了,R1可以感受到,於是在自己的路由表中更新為16,表示"無窮大",不可達。
這是個壞訊息,壞訊息傳得慢。現在看如何慢。
R1準備在下一個30秒內告訴R2這個壞訊息,但是R2先把自己的所有資訊都告訴了R1,R1一看咦?R2到C的跳數是2,我到R2就一跳,現在雖然我不能直接到C了,那麼繞道R2不就可以了嗎?說幹就幹,於是把自己到C的跳數改為3.好了,真相被謊言掩蓋了。開始了二者之間的互捧臭腳時間。
R1向R2這個好基友坦白所有的資訊,R2看到R1到C的距離變為3了,R2知道自己是經過R1才到達的C,於是毫不猶豫的改為4.下一次再把全部資訊告訴R1,R1收到一看,咋回事啊,怎麼又加一跳了呢!R2那邊發生了什麼?但是還是得根據規則,毫不猶豫的修改到C的距離跳數。就這樣不斷增加,直到都為16,才恍然大悟,原來大家都到不了了啊。