1. 基礎概念
1.1 名詞概念:
網絡分層:
OSI中的層 | 功能 | TCP/IP協議族 |
---|---|---|
應用層 | 文件傳輸,電子郵件,文件服務,虛擬終端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 |
傳輸層 | 提供端對端的接口 | TCP,UDP |
網絡層 | 為數據包選擇路由 | IP,RIP, ICMP,OSPF,EIGRP,IGMP |
數據鏈路層 | 傳輸有地址的幀以及錯誤檢測功能 | SLIP,CSLIP,PPP,MTU |
物理層 | 以二進制數據形式在物理媒體上傳輸數據 | ISO2110,IEEE802,IEEE802.2 |
IP地址:
IP地址是一個32位的二進制地址,為了便于記憶,將它們分為4組,每組8位,由小數點分開,用四個字節來表示,而且,用點分開的每個字節的數值范圍是0~255,如202.116.0.1
二進制:00000000.00000000.00000000.00000000
十進制:0.0.0.0
二進制:11000000.10101000.00000001.00001010
十進制:192.168.1.10
IP地址分類:
類別 | 網段 | 區分 | 地址范圍 | 備注 |
---|---|---|---|---|
A | 0~127 | 二進制首位為0 | 1.0.0.1~127.255.255.254 | |
B | 128~191 | 二進制首位為10 | 172.16.0.0~172.31.255.254 | |
C | 192~223 | 二進制首位為110 | 192.168.0.1~192.168.255.254 | |
D | 224~239 | 二進制首位為1110 | 224.0.0.0~239.255.255.254 | 不區分網絡地址和主機地址。目前D類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。 |
E | 240~255 | 二進制首位為1111 | 240.0.0.0~255.255.255.255 | 不區分網絡地址和主機地址,E類地址是保留地址用于以后使用。 |
特殊地址:
0.0.0.0
嚴格說來,0.0.0.0已經不是一個真正意義上的IP地址了。它表示的是這樣一個集合:所有不清楚的主機和目的網絡。這里的“不清楚”是指在本機的路由表里沒有特定條目指明如何到達。對本機來說,它就是一個“收容所”,所有不認識的“三無”人員,一律送進去。如果你在網絡設置中設置了缺省網關,那么Windows系統會自動產生一個目的地址為0.0.0.0的缺省路由。
255.255.255.255
限制廣播地址。對本機來說,這個地址指本網段內(同一廣播域)的所有主機。如果翻譯成人類的語言,應該是這樣:“這個房間里的所有人都注意了!”這個地址不能被路由器轉發。
127.0.0.1
本機地址,主要用于測試。用漢語表示,就是“我自己”。在Windows系統中,這個地址有一個別名“Localhost”。尋址這樣一個地址,是不能把它發到網絡接口的。除非出錯,否則在傳輸介質上永遠不應該出現目的地址為“127.0.0.1”的數據包。
165.254.x.x
如果你的主機使用了DHCP功能自動獲得一個IP地址,那么當你的DHCP服務器發生故障,或響應時間太長而超出了一個系統規定的時間,Wingdows系統會為你分配這樣一個地址。
224.0.0.0 ~ 239.255.255.254
所有D類地址。224.0.0.1特指所有主機, 224.0.0.2特指所有路由器。這樣的地址多用于一些特定的程序以及多媒體程序。如果你的主機開啟了IRDP(Internet路由發現協議,使用組播功能)功能,那么你的主機路由表中應該有這樣一條路由。
私有地址
A類地址的私有地址是:10.0.0.0~10.255.255.255
B類地址的私有地址是:172.16.0.0~172.31.255.255
C類地址的私有地址是:192.168.0.0~192.168.255.255
這些地址不會被Internet分配,他們再Internet上也不會被路由,雖然它們不能直接和Internet網連接,但通過技術手段仍舊可以和 Internet通訊(NAT技術)
子網掩碼(Mask):
子網掩碼(subnet mask)又叫網絡掩碼、地址掩碼、子網絡遮罩,它是一種用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成網絡地址和主機地址兩部分。
說白了子網掩碼就是將網絡上的主機劃分到不同的子網中。
比如我的電腦是:
IP:192.168.2.67,二進制:11000000.10101000.00000010.01000011
子網掩碼:255.255.255.0,二進制:11111111.11111111.11111111.00000000
兩者進行與運算的到:
11000000.10101000.00000010.00000000,十進制:192.168.2.0
可以看到目前所處的網段是:192.168.2.X 網段,其中:192.168.2 為網絡地址,X為主機地址。這個網段最大容納的主機數為:2^8-1 = 255個
對于A類地址來說,默認的子網掩碼是255.0.0.0;
對于B類地址來說默認的子網掩碼是255.255.0.0;
對于C類地址來說默認的子網掩碼是255.255.255.0。
網關(Getway):
可以理解成一個房子的門就是一個網關,如果A房子要到B房子,你要從A房子的門出去,經過B房子的門進入B房子!
而要實現這兩個網絡之間的通信,則必須通過網關。如果網絡A中的主機發現數據包的目的主機不在本地網絡中,就把數據包轉發給它自己的網關,再由網關轉發給網絡B的網關,網絡B的網關再轉發給網絡B的某個主機。網絡A向網絡B轉發數據包的過程。這里的網管就設置的兩個路由器R1和R2。其中R1是192.168.1.X子網網關,R2是192.168.2.X子網網關。
在我們本機網絡設置中:
這個路由器就是我所在局域網的網關,其地址是192.168.2.X網段中的一個地址(一般DHCP自動分配的都是當前網絡段的第一個地址:192.168.2.1)
1.2 相關協議:
IP協議:
8bit(位)=1Byte(字節)
版本號:
4個bit,用來標識IP版本號。這個4位字段的值設置為二進制的0100表示IPv4,設置為0110表示IPv6。目前使用的IP協議版本號是4。
首部長度:
4個bit。指明IPv4協議包頭長度的字節數包含多少個32bit?由于IPv4的包頭可能包含可變數量的可選項,所以這個字段可以用來確定IPv4數據報中數據部分的偏移位置?IPv4包頭的最小長度是20個字節,因此IHL這個字段的最小值用十進制表示就是5?占4位?由于它是一個4比特字段,因此首部最長能代表:60個字節,但實際上目前最多仍為24個字節?
服務類型:
占 8 bit,用來獲得更好的服務.這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過.1998年IETF把這個字段改名為區分服務 DS(Differentiated Services).只有在使用區分服務時,這個字段才起作用.
總長度:
占 16 bit,指首都及數據之和的長度,單位為字節.因為總長度字段為 16位,所以數據報的最大長度為 2^16-1=65 535字節.在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據字段的最大長度,即最大傳送單元 MTU (Maximum Transfer Unit).當一個數據報封裝成鏈路層的幀時,此數據報的總長度 (即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值,否則要分片.
由于該字段長16比特,所以IP數據報最長可達65535字節?盡管可以傳送一個長達65535字節的IP數據報,但是大多數的鏈路層都會對它進行分段?而且,主機也要求不能接收超過576字節的數據報?由于TCP把用戶數據分成若干段,因此一般來說這個限制不會影響TCP?UDP的應用(如RIP?TFTP?BOOTP?DNS?SNMP等),都限制用戶數據報長度為512字節,小于576字節?但是,事實上現在大多數的實現允許超過8192字節的IP數據報?
總長度字段是IP首部中必要的內容,因為一些數據鏈路(如以太網)需要填充一些數據以達到最小長度?盡管以太網的最小幀長為46個字節,但是IP數據可能會更短?如果沒有總長度字段,那么IP層就不知道46字節中有多少是IP數據報的內容?
標識:
占 16bit,IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加 1,并將此值賦給標識字段.但這個"標識"并不是序號,因為 IP是無連接的服務,數據報不存在按序接收的問題.當數據報由于長度超過網絡的 MTU 而必須分片時,這個標識字段的值就被復制到所有的數據報的標識字段中.相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報.
標志:
3個bit。用于標識數據報是否分片。第1位沒有使用,第2位是不分段(DF)位。當DF位被設置為1時,表示路由器不能對數據包進行分段處理。如果數據包由于不能分段而未能被轉發,那么路由器將丟棄該數據包并向源發送ICMP不可達。第3位是分段(MF)位。當路由器對數據包進行分段時,除了最后一個分段的MF位被設置為0外,其他的分段的MF位均設置為1,以便接收者直到收到MF位為0的分片為止。
片偏移:
13個bit,當數據包的長度超過它所要去的那個數據鏈路的MTU時,路由器要將它分片。數據包中的數據將被分成小片,每一片被封裝在獨立的數據包中。在接收方進行數據報重組時用來標識分片的順序。用于指明分段起始點相對于報頭起始點的偏移量。由于分段到達時可能錯序,所以位偏移字段可以使接收者按照正確的順序重組數據包。
接收端使用標識符
,分段偏移
以及標記域
的MF位來進行重組。
生存時間:
8個bit。TTL域防止丟失的數據包在無休止的傳播。該域包含一個8位整數,此數由產生數據包的主機設定。TTL值設置了數據報可以經過的最多的路由器數。TTL的初始值由源主機設置(通常為32或64),每經過一個處理它的路由器,TTL值減1。如果一臺路由器將TTL減至0,它將丟棄該數據包并發送一個ICMP超時消息給數據包的源地址。
協議:
8個bit。協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程.ICMP為1,IGMP為2,TCP為6,UDP為17,GRE為47,ESP為50。
首部檢驗和:
占 16bit.這個字段只檢驗數據報的首部,但不包括數據部分.這是因為數據報每經過一個路由器,都要重新計算一下首都檢驗和 (一些字段,如生存時間,標志,片偏移等都可能發生變化),不檢驗數據部分可減少計算的工作量.
源地址:
占32bit.
目的地址:
占 32bit.
選項部分(可選部分):
IP首部的可變部分就是一個可選字段.選項字段用來支持排錯,測量以及安全等措施,內容很豐富.此字段的長度可變,從1個字節到40個字節不等,取決于所選擇的項目.某些選項項目只需要1個字節,它只包括1個字節的選項代碼.但還有些選項需要多個字節,這些選項一個個拼接起來,中間不需要有分隔符,最后用全0的填充字段補齊成為4字節的整數倍.
增加首部的可變部分是為了增加IP數據報的功能,但這同時也使得IP數據報的首部長度成為可變的.這就增加了每一個路由器處理數據報的開銷,實際上這些選項很少被使用.新的IP版本IPv6就將IP數據報的首部長度做成固定的.
下面是一個TCP的SYN數據包,大家可以分析一下:
4500002C2A690000-4006B7580A616750-7CACAAAD
24DE0E89-12DE958000000000-60023908EA4D0000-020405B4
版本:4,即IPv4;
首部長度:5,即5*4=20B,說明沒有可變部分;
服務:00;
總長度:002C,44B;
標識:2A69;
標志+片偏移:0000;
生存時間:40,即64;
協議:06,傳輸控制協議,也就是TCP;
首部校驗和:B758;
源地址:0A616750;
目的地址:7CACAAAD.
TCP協議:
源端口號(Source Port)
長度為16位,指明發送數據的進程。
目的端口號(Destination Port)
長度為16位,指明目的主機接收數據的進程。
序號(seq)
32位,發送的TCP的序號,從0開始,實際中這個值就是發送的數據報中內容的字節數。是本報文段發送的數據組的第一個字節的序號。在TCP傳送的流中,每一個字節一個序號。e.g.一個報文段的序號為300,此報文段數據部分共有100字節,則下一個報文段的序號為400。所以序號確保了TCP傳輸的有序性。
確認序號(ack)
32位,即ACK指明下一個期待收到的字節序號,表明該序號之前的所有數據已經正確無誤的收到。確認號只有當ACK標志為1時才有效。比如建立連接時,報文的ACK標志位為0。
(比如我收到一個數據報的seq=0,數據報內容20字節,那么我的ack就應該是21,用來標明我sq=0,內容為20字節的數據報已經收到,我接下來期望收到的是sq=21的數據報。)
數據偏移(首部長度)
和IP頭部的長度域類似,這個域用來標明TCP頭部的長度,單位也是Byte。
TCP報文由首部和數據兩部分組成。首部一般由20-60字節(Byte)構成,長度可變。其中前20B格式固定,后40B為可選。
保留(Reserved)
:4位,這些位必須是0。為了將來定義新的用途所保留
控制位:
URG ACK PSH RST SYN FIN,共6個,每一個標志位表示一個控制功能。
URG:
緊急指針標志,為1時表示緊急指針有效,為0則忽略緊急指針。
ACK:
確認序號標志,為1時表示確認號有效,為0表示報文中不含確認信息,忽略確認號字段。
PSH:
push標志,為1表示是帶有push標志的數據,指示接收方在接收到該報文段以后,應盡快將這個報文段交給應用程序,而不是在緩沖區排隊。
RST:
重置連接標志,用于重置由于主機崩潰或其他原因而出現錯誤的連接?;蛘哂糜诰芙^非法的報文段和拒絕連接請求。
SYN:
同步序號,用于建立連接過程,在連接請求中,SYN=1時表示建立連接時,這時候TCP數據部分不帶數據。
FIN:
finish標志,用于釋放連接,為1時表示發送方已經沒有數據發送了,即關閉本方數據流。
窗口大小(Window Size):
16位,該值指示了從Ack Number開始還愿意接收多少byte的數據量,也即用來表示當前接收端的接收窗還有多少剩余空間,用于TCP的流量控制。
校驗位(Checksum):
16位TCP頭。發送端基于數據內容計算一個數值,接收端要與發送端數值結果完全一樣,才能證明數據的有效性。接收端checksum校驗失敗的時候會直接丟掉這個數據包。CheckSum是根據偽頭+TCP頭+TCP數據三部分進行計算的。
優先指針(緊急,Urgent Pointer):
16位,指向后面是優先數據的字節,在URG標志設置了時才有效。如果URG標志沒有被設置,緊急域作為填充。
選項(Option):
長度不定,但長度必須以是32bits的整數倍。常見的選項包括MSS、SACK、Timestamp等等。
因為,TCP報文還得傳給下層網絡層,封裝成IP包,而一個IP包最大長度為65535,同時IP包首部也包含最少20B,所以一個TCP包可以包含的數據部分最大長度為65535-20-20=65495B。
TCP報文中數據部分是可選的,即TCP報文可以不包含數據(同理IP包也可以不包含數據)。不含數據的TCP報文通常是一些確認和控制信息類的報文,如TCP建立連接時的三次握手和TCP終止時的四次揮手等。
三次握手
三次握手過程.png
1,客戶端向服務端發起鏈接請求想建立連接SYN=1
,TCP規定SYN=1時不能攜帶數據,但要消耗一個序號, 所以Client隨機選取一個初始序號seq=111。這里沒ACK
什么事,就認為ACK=0
2,服務端收到像客戶端發送確認信息,表示可以建立連接,所以SYN=1
,因為這時候服務端響應了Client,所以ACK=1
。TCP規定SYN=1時不能攜帶數據,但要消耗一個序號, 所以Server隨機選取一個初始序號seq=222,又因為這時候Server已經響應了客戶端剛才的請求,所有ack=111+1,即ack=112
,告訴Client我下一個需要的到的數據是112,即下一步seq=112
3,Client這時候已經和Server建立了連接,這時候要發送數據了,所以SYN=0
,ACK=1
表示上一步建立連接Client已確認。seq=112
是表示上一步應Server要求,Client開始給Server 112 開始的數據了。ack=223
表示第二步時client已經收到Server的序號為222數據,下一步可以開始給我序號222+1即ack=223
的數據了
為什么不兩次握手?
有人會困惑為什么要進行三次握手呢(兩次確認)?這主要是為了防止已失效的請求連接報文忽然又傳送到了,從而產生錯誤。
假定A向B發送一個連接請求,由于一些原因,導致A發出的連接請求在一個網絡節點逗留了比較多的時間。此時A會將此連接請求作為無效處理 又重新向B發起了一次新的連接請求,B正常收到此連接請求后建立了連接,數據傳輸完成后釋放了連接。如果此時A發出的第一次請求又到達了B,B會以為A又發起了一次連接請求,如果是兩次握手:此時連接就建立了,B會一直等待A發送數據,從而白白浪費B的資源。 如果是三次握手:由于A沒有發起連接請求,也就不會理會B的連接響應,B沒有收到A的確認連接,就會關閉掉本次連接。
四次揮手
image.png
1,客戶端告訴服務端,我這么沒有數據要發送了標識FIN=1
,序號 seq=111
(舉個例子,具體值是上一次客戶端收到ack值+數據偏移)。
2,服務端收到這個消息,要對客戶端說我知道了,確認序號標識ACK=1
,確認序號ack=112
是上個發送序號seq=111
加上這次服務器發送個客戶端數據包的偏移值,這里默認是1(沒有數據要發送,當然也可能這次還有數據發送,因為這時候服務器還可以繼續給客戶端發送數據包,客戶端還是可以接受的)
3,服務端數據發完了,告訴客戶端我這里以后沒有數據了,標識FIN=1
,序號seq=222
(同1也是舉個例子,具體值是上一次服務端收到ack值+數據偏移)
4,客戶端收到了這個消息,要對服務端說我知道了,確認序號標識ACK=1
,確認序號ack=223
,這時候確認序號ack
只能是seq=222 + 1
。因為客戶端之前已經告訴服務器,它的數據發完了,這時候發送的包數據部分就是空,所以只是消耗了一個序號,沒有數據偏移。至此,客戶端和服務端都告訴對方我的數據發完了,ok,我們就愉快的斷開連接了!
這里思考為什么是四次揮手了?
其實上面過程就說明了問題,因為TCP是全雙工模式,當A告訴B我要結束了,這時只是A不在發數據了,A還可以收,B還可以發!只有B告訴A我也結束了,A和B才能真正的歇下來,全部結束!
UDP協議:
是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規范。UDP提供了無連接通信,且不對傳送數據包進行可靠性保證,適合于一次傳輸少量數據,UDP傳輸的可靠性由應用層負責。
UDP報文沒有可靠性保證、順序保證和流量控制字段等,可靠性較差。但是正因為UDP協議的控制選項較少,在數據傳輸過程中延遲小、數據傳輸效率高,適合對可靠性要求不高的應用程序,或者可以保障可靠性的應用程序,如DNS、TFTP、SNMP等
在選擇使用協議的時候,選擇UDP必須要謹慎。在網絡質量令人十分不滿意的環境下,UDP協議數據包丟失會比較嚴重。但是由于UDP的特性:它不屬于連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊天用的QQ就是使用的UDP協議。
UDP是一個無連接協議,傳輸數據之前源端和終端不建立連接,當UDP它想傳送時就簡單地去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
由于傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。(廣播)
UPD廣播 和 單播
廣播和單播的處理過程是不同的,單播的數據只是收發數據的特定主機進行處理,而廣播的數據整個局域網都進行處理。
例如在一個以太網上有3個主機,主機的配置如表。
主 機 | A | B | C |
---|---|---|---|
IP地址 | 192.168.1.150 | 192.168.1.151 | 192.168.1.158 |
MAC地址 | 00:00:00:00:00:01 | 00:00:00:00:00:02 | 00:00:00:00:00:03 |
單播流程:主機A向主機B發送UDP數據報,發送的目的IP為192.168.1.151,端口為 80,目的MAC地址為00:00:00:00:00:02。此數據經過UDP層、IP層,到達數據鏈路層,數據在整個以太網上傳播,在此層中其他主機會 判斷目的MAC地址。主機C的MAC地址為00:00:00:00:00:03,與目的MAC地址00:00:00:00:00:02不匹配,數據鏈路層 不會進行處理,直接丟棄此數據。
主機B的MAC地址為00:00:00:00:00:02,與目的MAC地址00:00:00:00:00:02一致,此數據會經過IP層、UDP層,到達接收數據的應用程序。
廣播的流程: 主機A向整個網絡發送廣播數據,發送的目的IP為192.168.1.255,端口為 80,目的MAC地址為FF:FF:FF:FF:FF:FF。此數據經過UDP層、IP層,到達數據鏈路層,數據在整個以太網上傳播,在此層中其他主機會 判斷目的MAC地址。由于目的MAC地址為FF:FF:FF:FF:FF:FF,主機C和主機B會忽略MAC地址的比較(當然,如果協議棧不支持廣播,則 仍然比較MAC地址),處理接收到的數據。
主機B和主機C的處理過程一致,此數據會經過IP層、UDP層,到達接收數據的應用程序。
ICMP協議:
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議簇的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用。是一種面向無連接的協議,用于傳輸出錯報告控制信息。它是一個非常重要的協議,它對于網絡安全具有極其重要的意義。
我們在網絡中經常會使用到ICMP協議,比如我們經常使用的用于檢查網絡通不通的Ping
命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網絡命令如跟蹤路由的Tracert命令也是基于ICMP協議的。
DHCP協議:
動態主機設置協議(英語:Dynamic Host Configuration Protocol,DHCP)是一個局域網網絡協議,使用UDP協議工作,主要有兩個用途:用于內部網或網絡服務供應商自動分配IP地址;給用戶用于內部網管理員作為對所有計算機作中央管理的手段。
ARP協議:
地址解析協議,即ARP(Address Resolution Protocol),是根據[IP地址]獲取[物理地址]的一個[TCP/IP協議]。[主機]發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。
- 首先,每個主機都會在自己的ARP緩沖區中建立一個ARP列表,以表示IP地址和MAC地址之間的對應關系。
- 當源主機要發送數據時,首先檢查ARP列表中是否有對應IP地址的目的主機的MAC地址,如果有,則直接發送數據,如果沒有,就向本網段的所有主機發送ARP數據包,該數據包包括的內容有:源主機 IP地址,源主機MAC地址,目的主機的IP 地址。
- 當本網絡的所有主機收到該ARP數據包時,首先檢查數據包中的IP地址是否是自己的IP地址,如果不是,則忽略該數據包,如果是,則首先從數據包中取出源主機的IP和MAC地址寫入到ARP列表中,如果已經存在,則覆蓋,然后將自己的MAC地址寫入ARP響應包中,告訴源主機自己是它想要找的MAC地址。
- 源主機收到ARP響應包后。將目的主機的IP和MAC地址寫入ARP列表,并利用此信息發送數據。如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。
廣播發送ARP請求,單播發送ARP響應。實例http://www.cnblogs.com/csguo/p/7527303.html
NAT協議:
2. 路由轉發
Internet中使用的是動態路由選擇協議,在Internet的概念中,將整個互聯網劃分為許多個小的自治系統(AS)。AS的最主要的特征:一個AS對其他AS表現出的是一個單一 和一致的路由選擇策略。
由于AS的存在,路由選擇協議又分為兩種:
內部網關協議(IGP):即在一個AS內部使用的路由選擇協議,而這與互聯網中其他AS選用什么路由協議無關。比如:OSPF
外部網關協議(EGP):若源主機和目的主機不再同一個AS中,就需要使用一種協議將路由選擇信息傳遞到另一個AS中,這就是EGP。比如:BGP。
2.1 路由表
在計算機網絡中路由表(routing table)或稱路由擇域信息庫(RIB, Routing Information Base),是一個存儲在路由器或者聯網計算機中的電子表格(文件)或類數據庫。路由表存儲著指向特定網絡地址的路徑(在有些情況下,還記錄有路徑的路由度量值)。路由表中含有網絡周邊的[拓撲]信息。路由表建立的主要目標是為了實現路由協議和靜態路由選擇。
可以理解為一個路由表包含:
目的主機號 | 下一跳 | 距離 |
---|---|---|
10.0.0.1 | 20.0.0.1 | 2 |
2.1.1 靜態路由表
由系統管理員是先設置好固定的[路由表]稱之為靜態路由表,一般是在系統安裝時就根據網絡的配置情況預先設定的,它不會隨未來網絡結構的改變而改變。
2.1.2 動態路由表
動態路由是與靜態路由相對的一個概念,指路由器能夠根據路由器之間的交換的特定路由信息自動地建立自己的路由表,并且能夠根據鏈路和節點的變化適時地進行自動調整。當網絡中節點或節點間的鏈路發生故障,或存在其它可用路由時,動態路由可以自行選擇最佳的可用路由并繼續轉發報文。
動態路由機制的運作依賴路由器的兩個基本功能:路由器之間適時的路由信息交換,對路由表的維護:
路由器之間適時地交換路由信息。
動態路由之所以能根據網絡的情況自動計算路由、選擇轉發路徑,是由于當網絡發生變化時,路由器之間彼此交換的路由信息會告知對方網絡的這種變化,通過信息擴散使所有路由器都能得知網絡變化。路由器根據某種路由算法(不同的動態路由協議算法不同)把收集到的路由信息加工成路由表,供路由器在轉發IP報文時查閱。
在網絡發生變化時,收集到最新的路由信息后,路由算法重新計算,從而可以得到最新的路由表。需要說明的是,路由器之間的路由信息交換在不同的路由協議中的過程和原則是不同的。交換路由信息的最終目的在于通過路由表找到一條轉發IP報文的“最佳”路徑。每一種路由算法都有其衡量“最佳”的一套原則,大多是在綜合多個特性的基礎上進行計算,這些特性有:路徑所包含的路由器結點數(hop count)、網絡傳輸費用(cost)、帶寬(bandwidth)、延遲(delay)、負載(load)、可靠性(reliability)和最大傳輸單元MTU(maximum transmission unit)。常見的動態路由協議有:RIP、OSPF、IS-IS、BGP、IGRP/EIGRP。每種路由協議的工作方式、選路原則等都有所不同。
RIP
路由信息協議(RIP) 是內部網關協議IGP(Interior Gateway Protocol)中最先得到廣泛使用的協議。RIP是一種分布式的基于距離矢量
的路由選擇協議,是因特網的標準協議,其最大優點就是實現簡單,開銷較小。
距離矢量路由協議:
每隔30秒,距離向量路由協議就要向相鄰站點發送整個路由選擇表,使相鄰站點的路由選擇表得到更新。這樣,它就能從別的站點(直接相連的或其他方式連接的)收集一個網絡的列表,以便進行路由選擇。距離向量路由協議使用跳數作為度量值,來計算到達目的地要經過的路由器數。
例如,R I P使用B e l l m a n - F o r d算法確定最短路徑,即只要經過最小的跳數就可到達目的地的線路。最大允許的跳數通常定為1 5。那些必須經過1 5個以上的路由器的終端被認為是不可到達的。
OSPF
OSPF(Open Shortest Path First開放式最短路徑優先)是一個內部網關協議IGP的一種。是基于鏈路狀態路由選擇協議
,它比距離矢量
復雜得多,但基本功能和配置卻很簡單,甚至算法(著名的迪克斯加算法(Dijkstra)被用來計算最短路徑樹。
)也容易理解。
路由器的鏈路狀態的信息稱為鏈路狀態,包括:接口的IP地址和子網掩碼、網絡類型(如以太網鏈路或串行點對點鏈路)、該鏈路的開銷、該鏈路上的所有的相鄰路由器。
IS-IS
IS-IS(Intermediate System-to-Intermediate System,中間系統到中間系統)路由協議最初是ISO(the International Organization for Standardization,國際標準化組織)為CLNP(Connection Less Network Protocol,無連接網絡協議)設計的一種動態路由協議。
BGP
邊界網關協議(BGP)是運行于 TCP 上的一種自治系統的路由協議。 BGP 是唯一一個用來處理像因特網大小的網絡的協議,也是唯一能夠妥善處理好不相關路由域間的多路連接的協議。
BGP用于在不同的自治系統(AS)之間交換路由信息。當兩個AS需要交換路由信息時,每個AS都必須指定一個運行BGP的節點,來代表AS與其他的AS交換路由信息。這個節點可以是一個主機。但通常是路由器來執行BGP。兩個AS中利用BGP交換信息的路由器也被稱為邊界網關(Border Gateway)或邊界路由器(Border Router)
由于可能與不同的AS相連,在一個AS內部可能存在多個運行BGP的邊界路由器。同一個自治系統(AS)中的兩個或多個對等實體之間運行的BGP 被稱為 IBGP(Internal/Interior BGP)。歸屬不同的AS的對等實體之間運行的BGP稱為EBGP (External/Exterior BGP)。在AS邊界上與其他AS交換信息的路由器被稱作邊界路由器(border/edge router)。在互聯網操作系統(Cisco IOS)中,IBGP通告的路由的距離為200,優先級比EBGP和任何內部網關協議(IGP)通告的路由都低。其他的路由器實現中,優先級順序也是EBGP高于IGP,而IGP又高于IBGP。
BGP屬于外部網關路由協議,可以實現自治系統間無環路的域間路由。BGP是溝通Internet廣域網的主用路由協議,例如不同省份、不同國家之間的路由大多要依靠BGP協議。BGP可分為IBGP(Internal BGP)和EBGP(External BGP)。BGP的鄰居關系(或稱通信對端/對等實體)是通過人工配置實現的,對等實體之間通過TCP(端口179)會話交互數據。BGP路由器會周期地發送19字節的保持存活keep-alive消息來維護連接(默認周期為30秒)。在路由協議中,只有BGP使用TCP作為傳輸層協議。
3. 數據鏈路層傳遞
數據鏈路層是OSI參考模型中的第二層,介乎于物理層和網絡層之間。數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點的目標機網絡層。為達到這一目的,數據鏈路必須具備一系列相應的功能,主要有:如何將數據組合成數據塊,在數據鏈路層中稱這種數據塊為幀(frame),幀是數據鏈路層的傳送單位;如何控制幀在物理信道上的傳輸,包括如何處理傳輸差錯,如何調節發送速率以使與接收方相匹配;以及在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。
設計數據鏈路層的主要目的就是在原始的、有差錯的物理傳輸線路的基礎上,采取差錯檢測、差錯控制與流量控制等方法,將有差錯的物理線路改進成邏輯上無差錯的數據鏈路,向網絡層提供高質量的服務。從網絡參考模型的角度看,物理層之上的各層都有改善數據傳輸質量的責任,數據鏈路層是最重要的一層。