A. 計算機網路總結
標志欄位中的最低位記為MF (More Fragment)。MF=1即表示後面「還有分片 」的數據報。MF=0表示這已是若干數據報片中的最後一個。
標志欄位中間的一位記為DF (Don't Fragment),意思是「不能分片 」。只有當DF=0時才允許分片。
TCP最初只規定了一種選項,即最大報文段長度 MSS(Maximum Segment Size)[RFC 879]。請注意MSS這個名詞的含義。MSS是每一個TCP報文段中的數據欄位的最大長度 。數據欄位加上TCP首部才等於整個的TCP報文段。所以MSS並不是整個TCP報文段的最大長度,而是「TCP報文段長度減去TCP首部長度」。
假定主機A運行的是TCP客戶程序,而B運行TCP伺服器程序。最初兩端的TCP進程都處於CLOSED(關閉)狀態。圖中在主機下面的方框分別是TCP進程所處的狀態。請注意,在本例中,A主動打開連接 ,而B被動打開連接 。
一開始,B的TCP伺服器進程先創建傳輸控制塊 TCB (15) ,准備接受客戶進程的連接請求。然後伺服器進程就處於LISTEN(收聽)狀態,等待客戶的連接請求。如有,即作出響應。
A的TCP客戶進程也是首先創建傳輸控制模塊 TCB。然後,在打算建立TCP連接時,向B發出連接請求報文段,這時首部中的同步位SYN=1, ACK=0 同時選擇一個初始序號seq=x。TCP規定,SYN報文段(即SYN=1的報文段)不能攜帶數據,但要消耗掉一個序號 。這時,TCP客戶進程進入SYN-SENT(同步已發送)狀態。
B收到連接請求報文段後,如同意建立連接,則向A發送確認。在確認報文段中應把SYN位和ACK位都置1,確認號是ack=x+1,同時也為自己選擇一個初始序號seq=y。請注意,這個報文段也不能攜帶數據,但同樣要消耗掉一個序號 。這時TCP伺服器進程進入SYN-RCVD(同步收到)狀態。
TCP客戶進程收到B的確認後,還要向B給出確認。確認報文段的ACK置1,確認號ack=y+1,而自己的序號seq=x+1。TCP的標准規定,ACK報文段可以攜帶數據。但如果不攜帶數據則不消耗序號 ,在這種情況下,下一個數據報文段的序號仍是seq=x+1。這時,TCP連接已經建立,A進入ESTABLISHED(已建立連接)狀態。
當B收到A的確認後,也進入ESTABLISHED狀態。
B收到連接釋放報文段後即發出確認,確認號是ack=u+1,而這個報文段自己的序號是v,等於B前面已傳送過的數據的最後一個位元組的序號加1。然後B就進入CLOSE-WAIT(關閉等待)狀態。TCP伺服器進程這時應通知高層應用進程,因而從A到B這個方向的連接就釋放了,這時的TCP連接處於半關閉 (half-close)狀態,即A已經沒有數據要發送了,但B若發送數據,A仍要接收。也就是說,從B到A這個方向的連接並未關閉,這個狀態可能會持續一段時間。
A收到來自B的確認後,就進入FIN-WAIT-2(終止等待2)狀態,等待B發出的連接釋放報文段。
若B已經沒有要向A發送的數據,其應用進程就通知TCP釋放連接。這時B發出的連接釋放報文段必須使FIN=1。現假定B的序號為w(在半關閉狀態B可能又發送了一些數據)。B還必須重復上次已發送過的確認號ack=u+1。這時B就進入LAST-ACK(最後確認)狀態,等待A的確認。
A在收到B的連接釋放報文段後,必須對此發出確認。在確認報文段中把ACK置1,確認號ack=w+1,而自己的序號是seq=u+1(根據TCP標准,前面發送過的FIN報文段要消耗一個序號)。然後進入到TIME-WAIT(時間等待)狀態。請注意,現在TCP連接還沒有釋放掉。必須經過時間等待計時器 (TIME-WAIT timer)設置的時間2MSL後,A才進入到CLOSED狀態。時間MSL叫做最長報文段壽命 (Maximum Segment Lifetime),RFC 793建議設為2分鍾。但這完全是從工程上來考慮的,對於現在的網路,MSL=2分鍾可能太長了一些。因此TCP允許不同的實現可根據具體情況使用更小的MSL值。因此,從A進入到TIME-WAIT狀態後,要經過4分鍾才能進入到CLOSED狀態,才能開始建立下一個新的連接。當A撤銷相應的傳輸控制塊TCB後,就結束了這次的TCP連接。
第一,為了保證A發送的最後一個ACK報文段能夠到達B。這個ACK報文段有可能丟失,因而使處在LAST-ACK狀態的B收不到對已發送的FIN+ACK報文段的確認。B會超時重傳這個FIN+ACK報文段,而A就能在2MSL時間內收到這個重傳的FIN+ACK報文段。接著A重傳一次確認,重新啟動2MSL計時器。最後,A和B都正常進入到CLOSED狀態。如果A在TIME-WAIT狀態不等待一段時間,而是在發送完ACK報文段後立即釋放連接,那麼就無法收到B重傳的FIN+ACK報文段,因而也不會再發送一次確認報文段。這樣,B就無法按照正常步驟進入CLOSED狀態。
第二,防止上一節提到的「已失效的連接請求報文段」出現在本連接中。A在發送完最後一個ACK報文段後,再經過時間2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網路中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。
B只要收到了A發出的確認,就進入CLOSED狀態。同樣,B在撤銷相應的傳輸控制塊TCB後,就結束了這次的TCP連接。我們注意到,B結束TCP連接的時間要比A早一些。
B. 計算機網路(四)網路層
主要任務是把分組從源端傳到目的端,為分組交換網上的不同主機提供通信服務。網路層傳輸單位是數據報。
鏈路層數據幀可封裝數據的上限稱為最大傳送單元MTU
標識:同一數據報的分片使用同一標識。
中間位DF(Don』t Fragment):
最低位MF(More Fragment):
片偏移:指出較長分組分片後,某片在原分組中的相對位置。以8B為單位。除了最後一個分片,每個分片長度一定是8B的整數倍。
IP地址:全世界唯一的32位/4位元組標識符,標識路由器主機的介面。IP地址::={<網路號>,<主機號>}
有一些IP地址是不能用的,有其特殊的作用,如:
網路地址轉換NAT(Network Address Translation):在專用網連接到網際網路的路由器上安裝NAT軟體,安裝了NAT軟體的路由器叫NAT路由器,它至少有一個有效的外部全球IP地址。
此外,為了網路安全,劃分出了部分IP地址和私有IP地址,私有IP地址網段如下:
路由器對目的地址是私有IP地址的數據報一律不進行轉發。
分類的IP地址的弱點:
某單位劃分子網後,對外仍表現為一個網路,即本單位外的網路看不見本單位內子網的劃分。
路由器轉發分組的演算法:
無分類域間路由選擇CIDR:
CIDR記法:IP地址後加上「/」,然後寫上網路前綴(可以任意長度)的位數。e.g. 128.14.32.0/20
CIDR把網路前綴都相同的連續的IP地址組成一個「CIDR地址塊」。
使用CIDR時,查找路由表可能得到幾個匹配結果(跟網路掩碼按位相與),應選擇具有最長網路前綴的路由。前綴越長,地址塊越小,路由越具體。
將多個子網聚合成一個較大的子網,叫做構成超網,或路由聚合。方法:將網路前綴縮短(所有網路地址取交集)。
由於在實際網路的鏈路上傳送數據幀時,最終必須使用MAC地址。
ARP協議:完成主機或路由器IP地址到MAC地址的映射。
ARP協議使用過程:
ARP協議4種典型情況:
動態主機配置協議DHCP是 應用層 協議,使用 客戶/伺服器 方式,客戶端和服務端通過 廣播 方式進行交互,基於 UDP 。
DHCP提供即插即用聯網的機制,主機可以從伺服器動態獲取IP地址、子網掩碼、默認網關、DNS伺服器名稱與IP地址,允許地址重用,支持移動用戶加入網路,支持在用地址續租。
DHCP工作流程如下:
ICMP協議支持主機或路由器:包括差錯(或異常)報告和網路探詢,分部發送特定ICMP報文
ICMP差錯報告報文(5種):
不應發送ICMP差錯報文的情況:
ICMP詢問報文:
ICMP的應用:
32位IPv4地址空間已分配殆盡,這時,可以採用更大地址空間的新版本的IPv6,從根本上解決地址耗盡問題
IPv6數據報格式如下圖
IPv6的主要特點如下:
IPv6地址表示形式:
零壓縮:一連串連續的0可以被一對冒號取代。雙冒號表示法在一個地址中僅可出現一次。
IPv6基本地址類型:
IPv6向IPv4過渡的策略:
R1的路由表/轉發表如下:
最佳路由:「最佳」只能是相對於某一種特定要求下得出的較為合理的選擇而已。
路由演算法可分為
由於網際網路規模很大且許多單位不想讓外界知道自己的路由選擇協議,但還想連入網際網路,可以採用自治系統來解決
自治系統AS:在單一的技術管理下的一組路由器,而這些路由器使用一種AS內部的路由選擇協議和共同的度量以確定分組在該AS內的路由,同時還使用一種AS之間的路由協議以確定在AS之間的路由。
一個AS內的所有網路都屬於一個行政單位來管轄,一個自治系統的所有路由器在本自治系統內都必須連通。
路由選擇協議
RIP是一種分布式的基於距離向量的路由選擇協議,是網際網路的協議標准,最大優點是簡單。
RIP協議要求網路中每一個路由器都維護從它自己到其他每一個目的網路的唯一最佳距離 [1] 記錄(即一組距離)。 RIP協議只適用於小互聯網。
RIP是應用層協議,使用 UDP 傳送數據。一個RIP報文最多可包括25個路由,如超過,必須再用一個RIP報文傳送。
RIP協議的交換
路由器剛開始工作時,只知道直接連接的網路的距離(距離為1),接著每一個路由器也只和數目非常有限的相鄰路由器交換並更新路由信息。
經過若干次更新後,所有路由器最終都會知道到達本自治系統任何一個網路的最短距離和下一跳路由器的地址,即「收斂」。
RIP的特點:當網路出現故障時,要經過比較長的時間(例如數分鍾) 才能將此信息傳送到所有的路由器,「慢收斂」。
對地址為X的相鄰路由器發來的RIP報文,修改此報文中的所有項目:把「下一跳」欄位中的地址改為X,並把所有的「距離」欄位+1。
開放最短路徑優先OSPF協議:「開放」標明OSPF協議不是受某一家廠商控制,而是公開發表的;「最短路徑優先」是因為使用了Dijkstra提出的最短路徑演算法SPF。OSPF最主要的特徵就是使用分布式的鏈路狀態協議。 OSPF直接用IP數據報傳送。
OSPF的特點:
為了使OSPF 能夠用於規模很大的網路,OSPF 將一個自治系統再劃分為若干個更小的范圍,叫做區域。每一個區域都有一個32 位的區域標識符(用點分十進製表示)。區域也不能太大,在一個區域內的路由器最好不超過200 個。
BGP 所交換的網路可達性的信息就是要到達某個網路所要經過的一系列AS。當BGP 發言人互相交換了網路可達性的信息後,各BGP 發言人就根據所採用的策略從收到的路由信息中找出到達各AS 的較好路由。
一個BGP 發言人與其他自治系統中的BGP 發言人要交換路由信息,就要先建立TCP 連接,即通過TCP傳送,然後在此連接上交換BGP 報文以建立BGP 會話(session),利用BGP 會話交換路由信息。 BGP是應用層協議,藉助TCP傳送。
BGP協議特點:
BGP-4的四種報文
組播提高了數據傳送效率。減少了主幹網出現擁塞的可能性。組播組中的主機可以是在同一個物理網路,也可以來自不同的物理網路(如果有組播路由器的支持)。
IP組播地址讓源設備能夠將分組發送給一組設備。屬於多播組的設備將被分配一個組播組IP地址(一群共同需求主機的相同標識)。
組播地址范圍為224.0.0.0~239.255.255.255(D類地址),一個D類地址表示一個組播組。只能用作分組的目標地址。源地址總是為單播地址。
同單播地址一樣,組播IP地址也需要相應的組播MAC地址在本地網路中實際傳送幀。組播MAC地址以十六進制值01-00-5E打頭,餘下的6個十六進制位是根據IP組播組地址的最後23位轉換得到的。
TCP/IP 協議使用的乙太網多播地址的范圍是:從01-00-5E-00-00-00到01-00-5E-7F-FF-FF .
收到多播數據報的主機,還要在IP 層利用軟體進行過濾,把不是本主機要接收的數據報丟棄。
ICMP和IGMP都使用IP數據報傳遞報文。組播路由器知道的成員關系只是所連接的區域網中有無組播組的成員。
IGMP工作的兩個階段:
只要有一個主機對某個組響應,那麼組播路由器就認為這個組是活躍的;如果經過幾次探詢後沒有一個主機響應,組播路由器就認為本網路上的沒有此組播組的主機,因此就不再把這組的成員關系發給其他的組播路由器。
組播路由協議目的是找出以源主機為根節點的組播轉發樹。構造樹可以避免在路由器之間兜圈子。對不同的多播組對應於不同的多播轉發樹;同一個多播組,對不同的源點也會有不同的多播轉發樹。
組播路由選擇協議常使用的三種演算法:
移動IP技術是移動結點(計算機/伺服器等)以 固定的網路IP地址 ,實現跨越不同網段的 漫遊 功能,並保證了基於網路IP的網路許可權在漫遊過程中不發生任何改變。
路由器是一種具有多個輸入埠和多個輸出埠的專用計算機,其任務是轉發分組。
若路由器處理分組的速率趕不上分組進入隊列的速率,則隊列的存儲空間最終必定減少到零,這就使後面再進入隊列的分組由於沒有存儲空間而只能被丟棄。 路由器中的輸入或輸出隊列產生溢出是造成分組丟失的重要原因。
路由器(網路層)可以互聯兩個不同網路層協議的網段。
網橋(鏈路層)可以互聯兩個物理層和鏈路層不同的網段。
集線器(物理層)不能互聯兩個物理層不同的網段。
路由表根據路由選擇演算法得出的,主要用途是路由選擇,總用軟體來實現。
轉發表由路由表得來,可以用軟體實現,也可以用特殊的硬體來實現。轉發表必須包含完成轉發功能所必需的信息,在轉發表的每一行必須包含從要到達的目的網路到輸出埠和某些MAC地址信息的映射。