日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解TCP/IP

發布時間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解TCP/IP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第1章 網絡基礎知識

本章總結了深入理解TCP/IP所必備的基礎知識,其中包括計算機與網絡發展的歷史及其標準化過程、OSI參考模型、網絡概念的本質、網絡構建的設備等。

1.5.4 OSI參考模型中各個分層的作用

  • 應用層
    為應用程序提供服務并規定應用程序中通信相關的細節。包括文件傳輸、電子郵件、遠程登錄(虛擬終端)等協議。
  • 表示層
    將應用處理的信息轉換為適合網絡傳輸的格式,或將來自下一層的數據轉換為上一層能夠處理的格式。因此它主要復制數據格式的轉換。
    具體來說,就是將設備固有的數據格式轉換為網絡標準傳輸格式。不同設備對同一比特流解釋的結果可能會不同。因此,使它們保持一致是這一層的主要作用。
  • 會話層
    復制建立和斷開通信連接(數據流動的邏輯通路),以及數據的分割等數據傳輸相關的管理。
  • 傳輸層
    起著可靠傳輸的作用。只在通信雙方節點上進行處理,而無需在路由器上處理。
  • 網絡層
    將數據傳輸到目標地址。目標地址可以是多個網絡網絡通過路由器連接而成的某一個地址。因此這一層主要負責尋址和路由選擇。
  • 數據鏈路層
    負責物理層面上互連的、節點之間的通信傳輸。例如與1個以太網相連的2個節點之間的通信。
    將0、1序列劃分為具有意義的數據幀傳送給對端(數據幀的生成與接受)。
  • 物理層
    負責0、1比特流(0、1序列)與電壓的高低、光的亮滅之間的互換。

1.7.3 根據接收端類型分類

  • 單播(Unicast)
    1對1通信。早先的固定電話就是單播通信的一個典型例子。
  • 廣播(Broadcast)
    指將消息從1臺主機發送給與之相連的所有其他主機。廣播通信的一個典型例子就是電視播放,它將電視信號一齊發送給非特定的多個接受對象。
    進行廣播通信的計算機有一個廣播范圍,只有在這個范圍之內的計算機才能接受到對應的廣播消息。這個范圍叫做廣播域。
  • 多播(Multicast)
    多播與廣播類似,也是將消息發送給多個接受主機。不同之處在于多播要限定某一組主機作為接受端。最典型的例子就是電視會議。
  • 任播(Anycast)
    任播是指在特定的多臺主機中選出一臺作為接收端的一種通信方式。任播通信從目標主機群中選擇一臺最符合網絡條件的主機作為目標主機發送消息。通常,所選中的那臺特定主機將返回一個單播信號,隨后發送端主機會只跟這臺主機進行通信。在實際網絡的應用有DNS根域名解析服務器。

1.9 網絡的構成要素

  • 網卡
  • 中繼器(物理層)
    物理層面上延遲網絡的設備。由電纜傳過來的電信號或光信號經由中繼器的波形調整和放大再傳給另一個電纜。中繼器的兩端連接的是相同的通信媒介,但有的中繼器也可以完成不同媒介之間的轉接工作。
  • 網橋/2層交換機(數據鏈路層)
    數據鏈路層面上連接兩個網絡的設備。它能夠識別數據鏈路層中的數據幀,并將這些數據幀臨時存儲于內存,再生成信號作為一個全新的幀轉發給相連的另一個網段
    數據位FCS用以校驗數據是否正確送達目的地。
  • 路由器/3層交換機
    網絡層面上連接兩個網絡、并對分組報文進行轉發的設備。網橋是根據物理地址(MAC)進行處理,而路由器則是根據IP地址進行處理的。
    作用:
    1.路由器可以連接不同的數據鏈路。
    2.路由器還有分擔網絡負荷的作用。
  • 4~7層交換機
    負責處理OSI某些模型中從傳輸層至應用層的數據。
  • 網關
    負責將從傳輸層到應用層的數據進行轉換和轉發的設備。它與4~7層交換機一樣是處理傳輸層以上的數據。但是網關不僅轉發數據還負責對數據進行轉換,它通常會使用一個表示層或應用層網關,在兩個不能直接進行通信的協議之間進行翻譯,最終實現兩者的通信。

第2章 TCP/IP基礎知識

TCP(Transmission Control Protocol)和IP(InternetProtocol)是互聯網的眾多通信協議中最為著名的。本章旨在介紹TCP/IP的發展歷程及其相關協議的概況。

2.2 TCP/IP的標準化

2.2.1 TCP/IP的具體含義

它只是利用IP進行通信時所必須用到的協議群的統稱。具體來講,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都屬于TCP/IP的協議。有時TCP/IP也稱網際協議族。

2.2.2 TCP/IP標準化精髓

TCP/IP的協議的標準化過程有兩大特點:一是具有開放性,二是注重實用性,即被標準化的協議能否被實際運用。

2.4 TCP/IP協議分層模型

2.4.1 TCP/IP與OSI參考模型


區別:OSI參考模型注重“通信協議必要的功能是什么”,而TCP/IP則更強調“在計算機上實現協議應該開發哪種程序”。

  • 硬件(物理層)
    TCP/IP的最底層是負責數據傳輸的硬件。
  • 網絡接口層(數據鏈路層)
    網絡接口層利用以太網中的數據鏈路層進行通信,因此屬于接口層。
  • 互聯網層(網絡層)
    互聯網層使用IP協議,它相當于OSI模型中的第3層網絡層。IP協議基于IP地址轉發分包數據。所有連接互聯網的主機和路由器都必須實現IP的功能,其他連接互聯網的網絡設備(如網橋、中繼器或集線器)就沒必要一定實現IP或TCP的功能。
    IP
    IP是跨域網絡傳送數據包,使整個互聯網都能夠收到數據的協議。
    雖然IP也是分組交換的一種協議,但是它不具有重發機制。即使分組數據包未能到達對端主機也不會重發。因此,屬于非可靠性傳輸協議。
    ICMP
    IP數據包在發送途中一旦發生異常導致無法到達對端目的地址時,需要給發生端發送一個異常的通知。ICMP就是為這一功能而制定的。它有時也被用來診斷網絡的健康狀態。
    ARP
    從分組數據包的IP地址中解析出物理地址(MAC地址)的一種協議。
  • 傳輸層
    傳輸層最主要的功能就是能夠讓應用程序之間實現通信。
    TCP
    TCP是一種面向有連接的傳輸層協議。它可以保證兩端通信主機之間的通信可達。TCP能夠正確處理在傳輸過程中丟包、傳輸順序亂掉等異常情況,。此外,TCP還能夠有效利用帶寬,緩解網絡擁堵。
    UDP
    UDP是一種面向無連接的傳輸層協議。UDP不會關注對端是否真的收到了傳送過去的數據。
    UDP常用于分組數據較少或多播、廣播通信以及視頻通信等多媒體領域。
  • 應用層(會話層以上的分層)
    瀏覽器與服務端之間通信所用的協議是HTTP。所傳輸數據的主要格式是HTML。WWW中的HTTP屬于OSI應用層的協議,而HTML屬于表示層的協議。
    電子郵件(E-Mail)
    發送電子郵件時用到的協議叫做SMTP(Simple Mail Tranfer Protocol)。
    文件傳輸(FTP)
    在FTP中進行文件傳輸時會建立兩個TCP連接,分別是發出傳輸請求時所要用到的控制連接與實際傳輸數據時所要用到的數據連接。
    遠程登錄(TELNET 與 SSH)
    網絡管理(SNMP)
    在TCP/IP中進行網絡管理時,采用SNMP協議。使用SNMP管理的主機、網橋、路由器等稱作SNMP代理(Agent),而進行管理的那一段叫做管理器。

2.5 TCP/IP分層模型與通信示例

2.5.2 發送數據包

1.應用程序處理(應用層)-----編碼處理與建立TCP連接。
2.TCP模塊的處理(傳輸層)----- TCP根據應用的指示,復制建立連接、發送數據以及斷開連接。
3.IP模塊的處理(互聯網層) ----- IP將TCP傳過來的TCP首部和TCP數據合起來當做自己的數據,并在TCP首部的前端在加上自己的IP首部。因此,IP數據包中IP首部后面緊跟著TCP首部,然后才是應用的數據首部和數據本身。IP首部中包含接收端IP地址以及發送端IP地址。緊隨IP首部的還有用來判斷其后面數據時TCP還是UDP的信息。
4.網絡接口(以太網驅動)的處理

2.5.3 經過數據鏈路層的包

包流動時,從前往后依次被附加了以太網包首部、IP包首部、TCP包首部(或UDP包首部)以及應用自己的包首部和數據。而包的最后則追加上了以太網包尾。

每個包首部中至少都會包含兩個信息:一個是發送端和接受端的地址,另一個是上一層的協議類型。

經過每個協議分層時,都必須有識別包發送端和接受端的信息。以太網會用MAC地址、IP會用IP地址,而TCP/UDP則會用端口號作為識別兩端主機的地址。

每個分層的包首部中還包含一個識別位,它是用來標識上一層協議的種類信息。例如以太網的包首部中的以太網類型,IP中的協議類型以及TCP/UDP中兩個端口的端口號等都起著識別協議類型的作用。

2.5.4 數據包接收處理

1.網絡接口(以太網驅動)的處理
主機收到以太網包后,首先從以太網的包首部找到MAC地址判斷是否為發給自己的包。如果不是發給自己的包則丟棄。而如果是發給自己的包,就查找以太網包首部中的類型域從而確定以太網協議所傳送過來的數據類型。如果這時不是IP而是其他諸如ARP的協議,就把數據傳給ARP處理。總之,如果以太網包首部的類型域包含了一個無法識別的協議類型,則丟棄數據。
2.IP模塊的處理
IP模塊收到IP包首部及后面的數據部分以后,也做類似的處理。如果判斷得出包首部中的IP地址與自己的IP地址匹配,則可以接收數據并從中查找上一層的協議。即如果上一層是TCP則交給TCP處理,如果是UDP則交給UDP處理。對于有路由器的情況下,接收端地址往往不是自己的地址,此時,需要借助路由控制表,在調查應該送達的主機或路由器以后再轉發數據。
3.TCP模塊的處理
在TCP模塊中,首先會計算一下校驗和,判斷數據是否被破壞。然后檢查是否在按照序號接受數據。最后檢查端口號,確定具體的應用程序。數據接收完畢后,接收端會發生一個“確認回執”給發送端。如果這個回執未能到達發送端,則發送端會認為接收端沒有接收到數據而一直反復發送。
4.應用程序的處理
接收端應用程序接收數據。通過解析獲取目的地址,如果沒有該地址,會給發送端返回一個報錯信息表明找不到目標。如果發送正常完成,就會給發送端發送一個“處理正常”的回執,反之發送“處理異常”。

第3章 數據鏈路

本章主要介紹計算機網絡最基本的內容——數據鏈路層。如果沒有數據鏈路層,基于TCP/IP的通信也就無從談起。因此,本章將著重介紹TCP/IP的具體數據鏈路,如以太網、無線局域網、PPP等。

3.2 數據鏈路相關技術

3.2.1 MAC地址

MAC地址用于識別數據鏈路中互連的節點(如圖3.4)。以太網或FDDI中,根據IEEE02.3的規范使用MAC地址。其他諸如無線LAN、藍牙等設備中也是用相同規格的MAC地址。


MAC地址長48比特,如下圖。任何一個網卡的MAC地址都是唯一的。但存在例外情況,實際上即使MAC地址相同,只要不是同屬一個數據鏈路就不會出現問題。

3.2.2 共享介質型網絡

從通信介質的使用方法上看,網絡可分為共享介質型和非共享介質型。

共享介質型網絡指多個設備共享一個通信介質的一種網絡,如最早的以太網和FDDI,在這種方式下,設備之間使用同一個載波信道進行發送和接收。為此,基本上采用半雙工通信方式,并有必要對介質進行訪問控制。

共享介質型網絡有兩種介質訪問控制方式:
1.爭用方式
爭用方式是指多去數據傳輸的權利,也叫CSMA(載波監聽多路訪問)。這種方式通常令網絡中的各個站采用先到先得的方式占用信道發送數據,如果多個站同時發送幀,則會發送沖突現象,因此導致網絡擁堵與性能下降。

減弱沖突現象:
采用改良CSMA的另一種方式——CSMA/CD(載波監聽多路訪問/沖突檢測)方式。CSMA/CD要求每個站提前檢查沖突,一旦發生沖突,則盡早釋放信道。

CSMA/CD工作原理(如圖3.7):
①如果載波信道上沒有數據流動,則任何站都可以發送數據。
②檢查是否會發生沖突。一旦發生沖突,放棄發送數據,同時立即釋放載波信道。
③放棄發送以后,隨機延時一段時間,再重新爭用介質,重新發送幀。

2.令牌傳遞方式
令牌傳遞方式是沿著令牌環發送一種叫做“令牌”的特殊報文,是控制傳輸的一種方式。只有獲取令牌的站才能發送數據。 但在網絡不太擁堵的情況下數據鏈路的利用率也達不到100%。
這種方式有兩個特點:
①不會有沖突
②每個站都有通過平等循環獲得令牌的機會。因此,既是網絡擁堵也不會導致性能下降。

3.2.3 非共享介質型網絡

網絡中的每個站直連交換機,由交換機轉發幀。此方式下,發送端和接收端并不共享通信介質,因此很多情況下采用全雙工通信方式。在一對一連接全雙工的方式下不會發生沖突,因此不需要CSNA/CD就可以實現更高效的通信。

該方式還可以根據交換機的高效特性構建虛擬局域網(VLAN)、進行流量控制等。缺點是一旦換機發生故障,與之相連的計算機之間都無法通信。

3.2.4 根據MAC地址轉發

以太網交換機就是持有多個端口的網橋。它們根據數據鏈路層中每個幀的目的MAC地址,決定從哪個網絡接口發送數據。這時所參考的、用以記錄發送接口的表叫做轉發表。轉發表的內容是自動生成的,這一過程叫自學過程。

3.2.5 環路檢測技術

解決網絡中的環路問題有生成樹和源路由兩種方式。
1.生成樹方式
每個網橋必須在每1~10秒內相互交換BPDU包,從而判斷哪些端口使用哪些不使用,以便消除環路。一旦發生故障,則自動切換通信線路,利用那些沒有被使用的端口繼續進行傳輸。
2.源路由法
該方法可以判斷發送數據的源地址是哪個網橋實現傳輸的,并將幀寫入RIF。網橋根據這個RIF信息發送幀給目標地址。因此網橋中即使出現環路,數據幀也不會被反復轉發。

3.2.6 VLAN

相比一般的網橋/2層交換機,VLAN可以過濾多余的包,提高網絡的承載效率。

如圖3.15所示,該交換機按照其端口區分了多個網段,從而區分了廣播數據傳播的范圍,減少了網絡負載并提高了網絡的安全性。

TAG VLAN中對每個網段都用一個VLAN ID 的標簽進行唯一表示。在交換機傳輸幀時,在以太網首部加入這個VID標簽,根據這個值決定將數據幀發送給哪個網段(如圖3.16)。

3.3 以太網

3.3.2 以太網的分類

以太網中以時鐘頻率決定傳輸速度。
1K=1000
1M=1000K
1G=1000M

3.3.4 以太網幀格式

以太網幀前端有一個前導碼,它由0、1數字交替組成,表示一個以太網幀的開始,也是對端網卡能夠確保與其同步的標志。如圖3.19所示。前導碼末尾是一個叫做SFD的域,它的值時“11”。在這個域之后就是以太網幀的本體。前導碼與SFD合起來占8個字節。

以太網幀本體的前端是以太網的首部,它總共占14個字節。分別是6個字節的目標MAC地址、6個字節的源MAC地址以及2個字節的上層協議類型。

緊隨幀頭后面的是數據。一個數據幀所能容納的最大數據范圍是46~1500個字節。幀尾是一個叫做FCS(幀檢驗序列)的4個字節。它可以檢查幀是否有所損壞,通過檢查這個FCS字段的值可以將那些受到噪聲干擾的錯誤幀丟棄。FCS中保存著整個幀除以生成多項式的余數。在接收端也用同樣的方法計算,如果得到的FCS值相同,就說明幀沒有差錯。

VLAN中以太網幀的格式

3.5 PPP

3.5.1 PPP定義

PPP是指點對點,即1對1連接計算機的協議。PPP相當于位于OSI參考模型第2層的數據鏈路層。PPP可以使用電話線或ISDN、專線、ATM線路。

3.5.2 LCP與NCP

在PPP的主要功能中包含兩個協議:一個是不依賴上層的LCP(Link Control Protocol)協議,另一個是依賴上層的NCP(Network Control Protocol)協議,如果上層為IP,也叫做IPCP(IP Control Protocol)。

LCP主要負責建立和斷開連接、設置最大接受單元、設置驗證協議(PAP或CHAP)以及設置是否進行通信質量的監控。

IPCP負責IP地址設置以及是否進行TCP/IP首部壓縮等設備。

3.5.3 PPP的幀格式

PPP的數據幀如圖3.26所示。其中標志碼用來區分每一個幀。在兩個標志碼中間不允許出現連續6個以上的“1”,因此在發送幀的時候,當連續出現5個“1”時后面必須插入一個0,接受端則當收到連續5個“1”且后面是0,則必須刪除后面的0。

3.5.4 PPPoE

有些互聯網接入服務商在以太網上利用PPPoE提供PPP功能。

3.6 其他數據鏈路

3.6.1 ATM

ATM(Asunchronous Transfer Mode)是以一個叫做信元(5字節首部加488字節數據)的單位進行傳輸的數據鏈路,由于其線路占用時間短和能夠高效傳輸大容量數據等特點主要用于廣域網絡的連接。

特點:
1.是一種面向連接的數據鏈路。允許同時與多個對端建立通信連接。
2.允許任何時候發送任何數據。因此,當大量計算機同時發送大量數據時容易引發網絡擁堵甚至使網絡進入收斂狀態。

收斂狀態:指當網絡非常擁堵時,路由器或交換機無法完成包的處理,從而丟棄這些包的一種狀態。

ATM與上層協議

ATM的一個信元只能發送固定的48字節數據。這48個字節的數據部分若包含IP首部和TCP首部,則基本無法存放上層的數據。為此,一般不會單獨使用ATM,而是使用上層的AAL。在上層為IP的情況下叫做AAL5。如圖3.30所示,每個IP包被附加各層的協議首部以后,最多可以被分為192個信元發送出去。

弊端:在ATM網中即使只是一個信元丟失,也要重新發送最多192個信元。
所以在構建ATM網絡的時候。必須保證終端的帶寬合計小于主干網的帶寬,還要盡量保證信元不易丟失。

3.7 專用網絡

3.7.7 VPN

虛擬專用網絡(VPN)用于連接距離較遠的地域。這種服務包括IP-VPN和廣域以太網。

IP-VIN
指在IP網絡(互聯網)上建立VPN。

網絡服務商提供一種在IP網絡上使用MPLS技術構建VPN的服務。其中MPLS在IP包中附加一個叫做標簽的信息進行傳輸控制。每個用戶的標簽信息不同,因此在通過MPLS網時,可以輕松地判斷出目標地址。

廣域以太網
服務提供商所提供的用于連接相距較遠的地域一種服務。IP-VPN是在IP層面的連接,廣域以太網則是在作為數據鏈路層的以太網上利用VLAN實現VPN的技術。

第4章 IP協議

4.1 IP即網際協議

4.1.1 IP相當于OSI參考模型的第3層

IP(IPv4、IPv6)相當于OSI參考模型中的第3層——網絡層。

網絡層的主要作用是實現終端節點之間的通信。這種終端節點之間的通信也叫做“點對點(ebd-to-end)通信”。

網絡層可以跨越不同的數據鏈路層,即使是在不同的數據鏈路上也能實現兩端節點之間的數據包傳輸。

主機與節點
準確的說,主機的定義是指“配置有IP地址,但是不進行路由控制的設備”。既配有IP地址又具有路由控制能力的設備叫做路由器。

4.1.2 網絡層與數據鏈路層的關系

數據鏈路層提供直連兩個設備之間的通信功能。與之相比,作為網絡層的IP則負責在沒有直連的兩個網絡之間進行通信傳輸。以旅行為例:

4.2 IP基礎知識

本章我們來學習IP(Internet Protocol,網際協議)。IP作為整個TCP/IP中至關重要的協議,主要負責將數據包發送給最終的目標計算機。因此,IP能夠讓世界上任何兩臺計算機之間進行通信。本章旨在詳細介紹IP協議的主要功能及其規范。

IP大致分為三大作用模塊:IP尋址、路由(最終節點為止的轉發)以及IP分包與組包。

4.2.1 IP地址屬于網絡層地址

在數據鏈路中MAC地址是用來標識同一個鏈路中的不同計算機的一種識別碼,而網絡層的IP也有這種地址信息,叫做IP地址。IP地址用于在“連接到網絡中的所有主機中識別出進行通信的目標地址”。因此,在TCP/IP通信中所有主機或路由器必須設定自己的IP地址。

4.2.2 路由控制

路由控制(Routing)是指將分組數據發送到最終目標地址的功能。一個數據包之所以能夠成功的到達最終的目標地址,全靠路由控制。

發送數據至最終目標地址
“跳”是指網絡中的一個區間。IP路由也叫多跳路由,在每個區間內決定著包在下一跳被轉發的路徑。

多跳路由是指路由器或主機在轉發IP數據包時只指定下一個路由器或主機,而不是將到最終目標地址為止的所有通路全都指出來。如圖4.6,以乘坐火車旅游為例:

路由控制表
為了將數據包發送給目標主機,所有主機都維護著一張路由控制表(Routing Table)。該表記錄IP數據在下一步應該發送給哪個路由器。IP包將根據這個路由表在各個數據鏈路上傳輸。

4.2.3 數據鏈路的抽象化

不同數據鏈路有個最大的區別,就是它們各自的最大傳輸單位(MTU)不同。如圖4.9展示:

MTU的值在以太網中是1500字節,在FDDI中是4352字節,而ATM則為9180字。IP的上一層可能會要求傳送比這些MTU更多字節的數據,因此必須在線路上傳送比包長還要小的MTU。

為了解決這個問題,IP進行分片處理,就是將較大的IP包分成多個較小的IP包。分片的包到了對端目標地址以后會再被組合起來傳給上一層。即從IP的上次層來看,它完全可以忽略數據包在途中的各個數據鏈路上的MTU,而只需按照源地址發送的長度接收數據包。

4.2.4 IP屬于面向無連接型

采用面向無連接的原因一是為了簡化,二是為了提速。面向連接比起面向無連接處理相對復雜。每次通信之前都要事先建立連接,降低了處理速度。

為了提高可靠性,上一層的TCP采用面向有連接型。

4.3 IP地址的基礎知識

4.3.1 IP地址的定義

IP地址(IPv4地址)由32位正整數來表示。IP地址在計算機內部以二進制方式被處理。將32位的IP地址以每8位為一組,分成4組,每組以“.”隔開,再將每組數轉換成十進制數。如:

4.3.2 IP地址由網絡和主機兩部分標識組成

如圖4.11,網絡標識在數據鏈路的每個段配置不同的值。網絡標識必須保證相互連接的每個段的地址不相重復。而相同段內相連的主機必須有相同的網絡地址。

IP地址的“主機標識”則不允許在同一個網段內重復出現。由此,可以通過設置網絡地址和主機地址,在相互連接的整個網絡中保證每臺主機的IP地址都不會相互重疊。即IP地址具有了唯一性。


如圖4.12所示,IP包被轉發到途中某個路由器時,正是利用目標IP地址的網絡標識進行路由。

4.3.3 IP地址的分類

IP地址分為四個等級,分別為A類、B類、C類、D類。它根據IP地址中從第1位到第4位的比特列對其網絡標識和主機標識進行區分。

A類地址:
A類地址:0.0.0.0~127.0.0.0是A類地址的網絡地址。A類地址的后24位相當于主機標識。

B類地址:
B類地址:128.0.0.1~191.255.0.0是B類地址的網絡地址。B類地址的后16位相當于主機標識。

C類地址:
C類地址:192.168.0.0~239.255.255.0是C類地址的網絡地址。C類地址的后8位相當于主機標識。

D類地址:
D類地址:224.0.0.0~239.255.255.255是D類地址的網絡地址。D類地址沒有主機標識,常被用于多播。

關于分配IP主機地址的注意事項
主機地址不可以全為0或全為1,因為只有0在表示對應的網絡地址或IP地址不可獲知的情況下才使用。全為1的主機地址通常作為廣播地址。

4.3.4 廣播地址

廣播地址用于在同一個鏈路中相互連接的主機之間發送數據包。

兩種廣播: 本地廣播和直接廣播。
本地廣播:在本網絡內的廣播叫做本地廣播。例如網絡地址為192.168.0.0/24的情況下,廣播地址是192.168.0.255。因為這個廣播地址會的IP包會被路由器屏蔽,所以不會到達192.168.0.0/24以外的其他鏈路上。

直接廣播:在不同網絡之間的廣播叫做直接廣播。例如網絡地址為192.168.0.0/24的主機向192.168.1.255/24的目標地址發送IP包。收到這個包的路由器,將數據轉發給192.168.1.255/24,從而使得所有192.168.1.1~192.168.1.254的主機都能接收到這個包。

4.3.5 IP多播

多播用于將包發送給特定組內的所有主機。由于其直接使用IP地址,因此也不存在可靠傳輸。多播既可以穿透路由器(廣播不可以),又可以實現只給那些必要的組發送數據包。



IP多播與地址
多播使用D類地址。因此,如果從首位開始到第4位是“1110”,就可以認為是多播地址。而剩下的28位可以成為多播的組編號。

從224.0.0.0到239.255.255.255都是多播地址的可用范圍。其中從224.0.0.0到224.0.0.255的范圍不需要路由控制,在同一個鏈路內也能實現多播。而在這個范圍之外設置多播地址會給全網所有組內成員發送多播的包。

此外,對于多播,所有的主機(路由器意外的主機和終端主機)必須屬于224.0.0.1的組,所有的路由器必須屬于224.0.0.2的組。

4.3.6 子網掩碼

子網與子網掩碼
這種方式實際上就是將原來的A類、B類、C類等分類中的主機地址部分用作子網地址,可以將原網絡分為多個物理網絡的一種機制。

自從引入子網以后,一個IP地址就有了兩種識別碼。一是IP地址本身,另一個是表示網絡部的子網掩碼。子網掩碼對應IP地址網絡標識部分的位全部為“1”,對應IP地址主機標識的部分全部為“0”。子網掩碼必須是IP地址的首位開始連續的“1”。

以172.20.100.52是網絡地址的情況為例:

4.3.8 全局地址與私有地址

私有網絡的IP地址范圍如下:

如果配有私有IP的地址主機聯網時,則通過NAT進行通信。

4.4 路由控制

4.4.1 IP地址與路由控制

路由控制表中記錄著網絡地址與下一步應該發送至路由器的地址。在發送IP包時,首先要確定IP包首部中的目標地址,再從路由控制表中找到與該地址具有相同網絡地址的記錄,根據該記錄將IP包轉發給相應的下一個路由器。如果路由控制表中存在多條相同網絡地址的記錄,就選擇一個最為吻合的網絡地址,所謂最為吻合是指相同位數最多的意思。
主機路由
例如,192.168.153.15/32就是一種主機路由。它的意思是整個IP地址的所有位都將參與路由。
環回地址
127.0.0.1/localhost,使用這個IP或主機名時,數據包不會流向網絡。

4.4.2 路由控制表的聚合

4.5 IP分割處理與再構成處理

4.5.2 IP報文的分片與重組

圖4.24展示了網絡傳輸過程中進行分片處理的一個例子。

經過分片后的IP數據報在被重組的時候,只能有目標主機進行。路由器雖然做分片但不會進行重組。因為即使在途中某一處被重組,但如果下一站再經過其他路由是還會面臨被分片的可能。這會給路由器帶來多余的負擔,也會降低網絡傳送效率。

4.5.3 路徑MTU發現

分片機制的不足:

  • 路由器的處理負荷加重。
  • 在分片處理中,一旦某個分片丟失,則會造成整個IP數據報作廢。
  • 如果使用更小的分片進行傳輸,會導致網路的利用率明顯下降。
  • 為了應對以上問題,產生了“路徑MTU發現”(Path MTU Discovery)。所謂路徑MTU發現是指從發送端到接收端主機之間不需要分片時最大MTU的大小。即路徑中存在的所有數據鏈路中最小的MTU。

    路徑MTU發現工作原理:

    首先在發送端主機發送IP數據報時將其首部的分片禁止標志位設置為1。根據這個標志位,途中的路由器即使遇到需要分片才能處理的大包,也不會去分片,而是將包丟棄。隨后,通過一個ICMP的不可達消息將數據鏈路上MTU的值發送給主機。

    下一次,從發送給同一個目標主機的IP報獲得ICMP所通知的MTU值以后嗎,將它設置為當前MTU。

    路徑MTU發現的機制(UDP): IP層負責分片!

    路徑MTU發現的機制(TCP): TCP負責分片,IP層不分片!!

    4.6 IPv6

    IPv6的特點

    1. IP地址的擴大與路由控制表的聚合
    IP地址依然適應互聯網分層構造。分配與其地址結構相適應的IP地址,盡可能避免路由表膨大。

    2.性能提升
    包首部長度采用固定的值(40字節),不再采用首部檢驗碼。簡化首部結構,減輕路由器負荷。路由器不再做分片處理(通過路徑MTU發現只由發送端主機進行分片處理)。

    3.支持即插即用功能
    即使沒有DHCP服務器也可以實現自動分配IP地址。

    4.采用認證與加密功能

    5.多播、Mobile IP成為擴展功能

    4.7 IPv4首部

    版本
    由4比特構成。

    首部長度

    由4比特構成,標識IP首部的大小,單位為4字節。

    區分服務

    總長度
    由16比特構成。

    標識(ID)
    由16比特構成,用于分片重組。同一個分片的標識值相同。通常,每發送一個IP包,它的值也逐漸增加。此外,即使ID相同,如果目標地址、源地址或協議不同的話也認為是不同的分片。

    標志(Flags)
    由3比特構成。

    片偏移(FO)
    由13比特構成,用來標識被分片的每一個分段相對于原始數據的位置。由于FO域占13位,因此最多可以表示8192(=2^13)個相對位置。單位為8字節,因此最大可表示原始數據8 x 8192 = 65536字節的位置。

    生存時間(TTL)
    由8比特構成,實際中是指可以中轉多少個路由器,每經過一個路由器TTL就減1,直到變成0則丟棄該包。

    協議
    由8比特構成,標識IPO首部的下一個首部隸屬于哪個協議。

    首部校驗和
    由16比特(2個字節)構成,也叫IP首部校驗和。該字段只校驗數據報的首部,不校驗數據部分。它主要用來確保IP數據報不被破壞。校驗和的計算過程,首先要將該校驗和的所有位置置0,然后以16比特為單位劃分IP首部,并用1補救所有的16位字的和。最后將所得到的這個和的1補救賦給首部校驗和字段。

    源地址
    由32比特(4個字節)構成。

    目標地址
    由32比特(4個字節)構成。

    可選項
    長度可變。

    填充

    數據

    4.8 IPv6首部格式

    IPv6中為了減少路由器的負擔,省略了首部校驗和字段。因此路由器不再需要計算校驗和,從而也提高了包的轉發效率。

    版本
    由4比特構成。

    通信量類
    由8比特構成。

    流標號
    由20比特構成。

    有效載荷長度
    有效載荷是指包的數據部分,不包含首部。

    下一個首部

    跳數限制(Hop Limit)
    由8比特構成。

    源地址

    目標地址

    擴展首部
    擴展首部通常介于IPv6首部與TCP/IP首部之間。

    第5 章IP協議相關技術

    IP(Internet Protocol)旨在讓最終目標主機收到數據包,但是在這一過程中僅僅有IP是無法實現通信的。必須還有能夠解析主機名稱和MAC地址的功能,以及數據包在發送過程中異常情況處理的功能。此外,還會涉及IP必不可少的其他功能。

    本章主要介紹作為IP的輔助和擴展規范的DNS、ARP、ICMP以及DHCP等協議。

    5.2 DNS

    可以有效管理主機名和IP地址之間對應關系的系統,那就是DNS。在這個系統中主機的管理機構可以對數據進行變更和設定。也就是說,它可以維護一個用來表示組織內部主機名和IP地址之間對應關系的數據庫。

    5.2.4 DNS查詢


    解析器(進行DNS查詢的主機和軟件叫做DNS解析器,如工作站或個人電腦)為了調查IP地址,向域名服務器進行查詢處理。接收這個查詢請求的域名服務器首先在自己的數據庫進行查找。如果有該域名所對應的IP地址就返回。如果沒有,則域名服務器再向上一層根域名服務器進行查詢處理。

    解析器和域名服務器將最新了解到的信息暫時保存在緩存中。這樣,可以減少每次查詢時的性能消耗。

    5.3 ARP

    5.3.1 ARP概要

    ARP是一種解決地址問題的協議。以目標IP地址為線索,用來定位下一個應該接收數據分包的網絡設備對應的MAC地址。如果目標主機不在同一個鏈路上時,可以通過ARP查找下一跳路由器的MAC地址。不過ARP只適用于IPv4,IPv6可以用ICMPv6代替ARP發送鄰居探索消息。

    5.3.2 ARP的工作原理

    ARP是借助ARP請求與ARP響應兩種類型的包確定MAC地址的。


    如圖5.6,主機A為了獲得主機B的MAC地址,起初要通過廣播發送一個ARP請求包。這個包中包含了想要了解其MAC地址的主機IP地址。也就是說,ARP請求包中已經包含了主機B的IP地址172.20.1.2。ARP的請求包會被這同一個鏈路上的所有主機或路由器接收,如果ARP請求包中的目標IP地址與自己的IP地址一致,那么這個節點就將自己的MAC地址塞入ARP響應包返回給主機A。

    總之,從一個IP地址發送ARP請求以了解其MAC地址,目標地址將自己的MAC地址填入其中的ARP響應包返回到IP地址。由此,可以通過ARP從IP地址獲得MAC地址,實現鏈路內的IP通信。

    如果每發送一個IP數據報都有進行一次ARP請求以確定MAC地址,那將會造成不必要的網絡流量,因此,通常的做法是把獲取到的MAC地址緩存一段時間。 在發送主機端和接收主機端緩存MAC地址也是一種提高效率的方法。

    ARP包格式

    5.3.3 IP地址與MAC地址缺一不可

    一、有了mac為什么還需要ip

    有唯一mac固然可以尋址,但是卻不方便。mac地址是出廠自帶的,至于后續設備到了哪里都是不可控的,所以mac沒有規律可循。就好像快遞員只用身份證號找人,由于人口是流動的,不一定就待在身份證號上的戶籍地址,所以尋找難度過大。ip的優勢正在于此。因為ip地址是可變的,且分為網絡地址和主機地址,每一個接入網絡的設備由DHCP服務器自動分配ip地址,同一個子網中的ip前幾位是一樣的,空間上靠近的設備ip前幾位一樣大大方便了尋址過程,再也不用滿世界去找了,可以先找到子網,再在子網內找設備。

    二、有了ip為什么還需要mac

    (1)ip地址不是與生俱來,需要在接入網絡后設備發送廣播請求ip,DHCP服務器收到請求發送一個空閑的ip,設備收到回復發送租用請求,最后DHCP發送消息表示租用成功。在這個過程中由于設備還沒有ip地址,所以需要mac地址來標識自己。假如同時有兩個沒有mac的設備接入網絡,同時請求ip,那么DHCP服務器將不能區分是收到了兩個請求還是同一個請求收到了兩遍。

    (2)mac先于ip存在,tcp/ip協議誕生之前就有五花八門的網絡,互相之間協議不互通,mac就是其中一個,tcp/ip在更高層次上將他們連接起來,至于底層是什么交由各自管理。后來mac接近一統江湖,但是大局已定,而且這樣做并沒有明顯的缺點,如果改動反而是困難重重(ipv6比v4那么大的優勢缺還是難以取代),所以便沿用早期設計。

    5.3.4 RARP

    RARP是將ARP反過來,從MAC地址定位IP地址的一種協議。如圖5.9

    5.3.5 代理ARP

    通常ARP包會被路由器隔離,但是采用代理ARP(Proxy ARP)的路由器可以將ARP請求轉發給鄰近的網段。由此,兩個以上網段的節點之間可以像在同一個網段中一樣進行通信。

    5.4 ICMP

    5.4.1 輔助IP的ICMP

    構架IP網絡時需要注意兩點:確定網絡是否正常運行以及遇到異常時進行問題診斷。ICMP(Internet Control Message Protocol)網際控制報文協議,正時提供這類功能的一種協議。

    主要功能:
    1.確認IP包是否發送成功送達目標地址
    2。通知在發送過程當中IP包被廢棄的具體原因
    3.改善網絡設置等。
    4.有了這些功能,就可以獲取網絡是否正常、設置是否有誤以及設備有何異常等信息,從而便于進行網絡上的問題診斷。

    如圖5.10,主機A向主機B發送了數據包,由于某種原因,途中的路由器2未能發現主機B的存在,這時,路由器2就會向主機A發送一個ICMP包,說明發往主機B的包未能成功。

    ICMP的這種通知消息會使用IP進行發送。因此,從路由器2返回的ICMP包會按照往常的路由控制先經過路由器1再轉發給主機A。收到該ICMP包的主機則分解ICMP的首部和數據域以后得知具體發送問題的原因。

    ICMP的消息大致可分為兩類:一類是通知出錯原因的錯誤消息,另一類是用于診斷的查詢消息

    ICMP消息類型:

    5.4.2 主要的ICMP消息

    ICMP目標不可達消息(類型3)
    IP路由器無法將IP數據包發送給目標地址時,會給發送端主機返回一個目標地址不可達的ICMP消息,并在這個消息中顯示不可達的具體原因。如表5.3所示

    ICMP重定向消息(類型5)
    如果路由器發現發送端主機使用了次優的路徑發送數據,那么它會返回一個ICMP重定向的消息給這個主機。在這個消息中包含了最合適的路由信息和源數據。這主要發生在路由器持有更好的路由信息的情況下。路由器會通過這樣的ICMP消息給發送端主機一個更合適的發送路由。

    ICMP超時消息(類型11)
    IP包中有一個字段叫做TTL(Time to Live,生存周期),它的值隨著每經過一次路由器就會減1,直到減到0時該IP包會被丟棄。此時,IP路由器將會發送一個ICMP超時的消息給發送端主機,并通知該包已被丟棄。

    設置IP包生存周期的主要目的,是為了在路由控制遇到問題發生循環狀況時,避免IP包無休止地在網絡上上被轉發。此外,有時可以用TTL控制包的到達范圍,例如設置一個較小的TTL值。

    ICMP回送消息(類型0、8)
    用于進行通信的主機或路由器之間,判斷所發送的數據包是否成功到達對端的一種消息。可以向對端主機發送回送請求的消息,也可以接收對端主機發回來的回送應答消息,網絡上最常用的ping命令就是利用這個消息實現的。

    5.5 DHCP

    5.5.1 DHCP實現即插即用

    為了實現自動設置IP地址、統一管理IP地址分配,就產生了DHCP協議。DHCP在IPv4和IPv6都可以使用。

    5.5.2 DHCP的工作機制

    使用DHCP之前,首先要架構一臺DHCP服務器。然后將DHCP所要分配的IP地址設置到服務器上。此外,還需要將響應的子網掩碼、路由控制信息以及DNS服務器的地址等設置到服務器上。

    關于從DHCP中獲取IP地址的流程,以圖5.17為例

    為了檢查所要分配的IP地址以及已經分配了的IP地址是否可用,DHCP服務器或客戶端必須具備以下功能:
    DHCP服務器
    在分配IP地址前發送ICMP回送請求包,確定沒有返回應答。
    DHCP客戶端
    針對從DHCP那里獲得的IP地址發送ARP請求包,確認沒有返回應答。

    5.5.3 DHCP中繼代理

    一個企業或學校等大規模組織機構的網絡環境當中,會有多個以太網(無線LAN)網段。在這種情況下,若要針對每個網段都設置DHCP服務器將會是個龐大的工程。

    因此,在這類網絡環境中,往往需要將DHCP統一管理。具體方法可以使用DHCP中繼代理來實現。

    DHCP客戶端會向DHCP中繼代理發送DHCP請求包,而DHCP中繼代理在收到這個廣播包以后再以單播的形式發給DHCP服務器。服務器端收到該包以后再向DHCP中繼代理返回應答,并由DHCP中繼代理將此包轉發給DHCP客戶端。由此,DHCP服務器即使不在同一個鏈路上也可以實現統一分配和管理IP地址。

    5.6 NAT

    5.6.1 NAT定義

    NAT(Network Address Translator)是用于在本地網絡中使用私有地址,在連接到互聯網時轉而使用全局IP地址的技術。除轉換IP地址外,還出現了可以轉換TCP、UDP端口號的NAPT。

    5.6.2 NAT的工作機制

    如圖5.19所示

    不包含端口號的轉換方式(NAT)

    包含端口號的轉換方式(NAPT)

    在使用TCP/UDP的通信當中,只有目標地址、源地址、目標端口、源端口以及協議類型(TCP還是UDP)五項內容都一致時才被認為是同一個通信連接。此時所使用的正是NAPT。

    如圖5.20所示,生成一個NAPT路由器的轉換表,就可以正確地轉換地址跟端口的組合。這種轉換表在NAT路由器上自動生成。例如,在TCP的情況下,建立TCP連接首次握手時的SYN包一經發出,就會生成這個表。而后又隨著收到關閉連接時發出FIN包的確認應答從表中被刪除。

    5.6.3 NAT-PT(NAPT-PT)

    NAT-PT是將IPv6的首部轉換為IPv4的首部的一種技術。

    5.8 其他IP相關技術

    5.8.2 IP任播

    IP任播是指為那些提供同一種服務的服務器配置同一個IP地址,并與最近的服務器進行通信的一種方法。主要用于110報警和119。

    5.8.3 通信質量控制

    通信質量的定義
    通信線路上的擁塞叫做收斂。當網絡發生故障時,路由器和集線器(交換集線器)的隊列溢出,會出現大量的丟包現象,從而極端影響通信性能。

    控制通信質量的機制

    ① IntServ
    IntServ是針對特定應用之間的通信進行質量控制的一種機制。這里的“特定的應用”是指源IP地址、目標IP地址、源端口、目標端口、以及協議號五項內容完全一致。

    IntServ所涉及的通信并非一直進行,只是在必要的時候進行。一次IntServ也只有在必要的時候才要求在路由器上進行設置,這也叫“流量設置”,實現這種流量控制的協議正是RSVP。

    RSVP中在接收端針對發送端傳送控制包,并在它們之間所有的路由器上進行有質量控制的設定。

    ② DiffServ
    IntServ針對應用的連接進行詳細的通信質量控制。相比之下,DiffServ則針對特定的網絡進行較粗粒度的通信質量控制。

    進行DiffServ質量控制的網絡叫做DiffServ域。在該域中的路由器會對所有進入該域IP包首部的DSCP字段進行替換。對于期望被優化處理的包設置一個優先值。

    5.8.4 顯示擁塞通知

    當發生網絡擁塞時,發生主機應該減少數據包的發送量。作為IP上層協議,TCP雖然也能控制網絡擁塞,不過它是通過數據包的實際損壞情況來判斷是否發生擁塞。然而這種方法并不能在數據包損壞之前減少數據包的發送量。

    為了解決這個問題,人們在IP層新增了一個使用顯示擁塞通知的機制,即ECN。

    ECN的機制概況起來就是在發送包的IP首部中記錄路由器是否遇到擁塞,并在返回包的TCP首部中通知是否發生擁塞。擁塞檢查在網絡層進行,而擁塞通知則在傳輸層進行,這兩層的互相協助實現了擁塞通知的功能。

    第6章 TCP與UDP

    本章旨在介紹傳輸層的兩個主要協議TCP(Transmission ControlProtocol)與UDP(User Datagram Protocol)。

    6.1 傳輸層的作用

    6.1.3 兩種傳輸層協議 TCP和UDP

    TCP

    TCP是面向連接的、可靠的流協議。流就是指不間斷的數據結構。當應用程序采用TCP發送消息時,雖然可以保證發送的順序,但還是猶如沒有任何間隔的數據流發送給接收端。

    TCP為提供可靠性傳輸、實行“順序控制”或“重發控制”機制。此外還具有“流控制(流量控制)”、“擁塞控制”、提高網絡利用率等眾多功能。

    UDP

    UDP是不具備可靠性的數據報協議。在UDP的情況下,雖然可以確保發送消息的大小,卻不能保證消息一定會到達。

    6.1.4 TCP與UDP區分

    UDP主要用于對高速傳輸和實時性有較高要求的通信或廣播通信。以IP電話通信為例,如果使用TCP,數據在傳送過程中如果丟失被重發,這樣無法流暢地傳輸通話人的聲音,會導致無法正常交流。而采用UDP,它不會進行重發處理。即使有部分數據丟失,也只是影響一小部分的通話。此外,在多播和廣播通信中也使用UDP。RIP、DHCP等基于廣播的協議也要依賴于UDP。

    Socket套接字

    6.2 端口號

    TCP:


    UDP:

    6.3 UDP

    UDP是User Datagram Protocol的縮寫。

    UDP不提供復雜的控制協議,利用IP提供面向無連接的通信服務。

    即使是出現網絡擁塞的情況下,UDP也無法進行流量控制等避免網絡擁塞的行為。傳輸途中如果出現丟包,UDP也不負責重發。當出現包順序亂掉的時候也沒有糾正的功能

    由于UDP面向無連接,它可以隨時發送數據。再加上UDP本身的處理既簡單又高效,因此經常用于以下幾個方面:

  • 包總量較少的通信(DNS、SNMP等)
  • 視頻、音頻等多媒體通信(即時通信)
  • 現定于LAN等特定網絡中的應用通信
  • 廣播通信(廣播、多播)
  • 6.4 TCP

    TCP與UDP的區別相當大。它充分地實現了數據傳輸時各種控制功能,可以進行丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。TCP作為一種面向連接的協議,只有在確認通信對端存在時才會發送數據,從而可以控制通信流量的浪費。

    6.4.1 TCP的特點及其目的

    TCP通過檢驗和、序列化、確認應答、重發控制、連接管理以及窗口控制等機制實現可靠性傳輸。

    6.4.2 通過序列號與確認應答提高可靠性

    在TCP中,當發送端的數據到達接收主機時,接收端主機會返回一個億收到消息的通知。這個消息叫做確認應答(ACK)。

    如圖6.8與6.9所示


    這些確認應答處理、重發控制以及重復控制等功能都可以通過序列號實現。序列號是按順序給發送數據的每一個字節(8位字節)都標上號碼的編號。接收端查詢接收數據TCP首部中的序列號和數據的長度,將自己下一步應該接收的序號作為確認應答返送回去。就這樣,通過序列號和確認應答號,TCP可以實現可靠傳輸。

    6.4.4 連接管理

    TCP在數據通信之前,通過TCP首部發送一個SYN包作為建立連接的請求等待確認應答。如果對端發來確認應答,則認為可以進行數據通信。此外,在通信結束時會進行斷開連接的處理(FIN包)。

    可以使用TCP首部用于控制的字段來管理TCP連接。一個連接的建立與斷開,正常過程至少需要來回發送7個包才能完成。

    三次握手四次揮手:

    6.4.5 TCP是以段為單位發送數據

    在建立TCP連接時,也可以確定發送數據包的單位,稱為“最大消息長度”(MSS:Maximun Segment Size)。最理想的情況是:最大消息長度正好是IP中不會被分片處理的最大數據長度。

    TCP在傳送大量數據時,是以MSS的大小將數據進行分割發送。進行重發時也是以MSS為單位。

    MSS是在三次握手的時候,在兩端主機之間被計算得出。兩端的主機在發出建立連接的請求時,會在TCP首部中寫入MSS選項,告訴對方自己的接口能夠適應的MSS的大小,然后在兩者之間選擇一個較小的值。

    6.4.6 利用窗口控制提高速度

    窗口大小就是指無需等待確認應答而可以繼續發送數據的最大值。圖6.15中,窗口大小為4個段。

    滑動窗口方式:

    6.4.7 窗口控制和重發控制

    在使用窗口控制中,如果出現段丟失該怎么辦?

    首先,我們先考慮確認應答未能返回的情況。在這種情況下,數據已經到達對端,是不需要再進行重發的。然而,在沒有使用窗口控制的時候,沒有收到確認應答的數據都會被重發。而使用了窗口控制,就如圖6.17所示,某些確認應答即便丟失也無需重發。


    其次,我們來考慮一下某個報文段丟失的情況。如圖6.18所示,接收主機如果收到一個自己應該接收的序號以外的數據時,會針對當前為止收到數據返回確認應答(不過即使接收端主機收到的包序號并不連續,也不會將數據丟棄而是暫時保存至緩沖區中)。
    如圖6.18所示。當某一報文段丟失后,發送端會一直收到序號為1001的確認應答,這個確認應答好像在提醒發送端“我想接收的是從1001開始的數據”。因此,在窗口比較大,又出現報文段丟失的情況下,同一個序號的確認應答將會被重復不斷地返回。而發送端主機如果連續3次收到同一個確認應答 ,就會將其所對應的數據進行重發。這種機制比之前提到的超時管理更加高效,因此也被稱作高速重發控制。

    6.4.8 流控制

    發送端根據自己的實際情況發送數據。但是,接收端可能收到的是一個毫無關系的數據包又可能會在處理其他問題上花費一些時間。為了防止這種現象的發生,TCP提供一種機制可以讓發送端根據接收端的實際接收能力控制發送的數據量。這就是所謂的流控制。它的具體操作是,接收端主機向發送端主機通知自己可以接收數據的大小,于是發送端會發送不超過這個限度的數據。該大小限度就被稱作窗口大小。

    TCP首部中,專門有一個字段用來通知窗口大小。接收主機將自己可以接收的緩沖區大小放入這個字段中通知給發送端。這個字段的值越大,說明網絡的吞吐量越高。

    不過,接收端的這個緩沖區一旦面臨數據溢出時,窗口大小的值也會隨之被設置為一個更小的值通知給發送端,從而控制數據發送量。也就是說,發送端主機會根據接收端主機的指示,對發送數據的量進行控制。這也就形成了一個完整的TCP流控制(流量控制)。

    圖6.19為根據窗口大小控制流量過程的示例。

    如圖6.19所示,當接收端收到從3001號開始的數據段后其緩沖區即滿,不得不暫時停止接收數據。之后,在收到發送窗口更新通知后通信才得以繼續進行。如果這個窗口的更新通知在傳送途中丟失,可能會導致無法繼續通信。為避免此類問題的發生,發送端主機會時不時的發送一個叫做窗口探測的數據段,此數據段僅含一個字節以獲取最新的窗口大小信息

    6.4.9 擁塞控制

    一般來說,計算機網絡都處在一個共享的環境。因此也有可能會因為其他主機之間的通信使得網絡擁堵。在網絡出現擁堵時,如果突然發送一個較大量的數據,極有可能會導致整個網絡的癱瘓。

    TCP為了防止該問題的出現,在通信一開始時就會通過一個叫做慢啟動的算法得出的數值,對發送數據量進行控制。

    首先,為了在發送端調節所要發送數據的量,定義了一個叫做“擁塞窗口”的概念。于是在慢啟動的時候,將這個擁塞窗口的大小設置為1個數據段(1MSS) 發送數據,之后每收到一次確認應答(ACK),擁塞窗口的值就加1。在發送數據包時,將擁塞窗口的大小與接收端主機通知的窗口大小做比較,然后按照它們當中較小那個值,發送比其還要小的數據量。

    如果重發采用超時機制,那么擁塞窗口的初始值可以設置為1以后再進行慢啟動修正。有了上述這些機制,就可以有效地減少通信開始時連續發包導致的網絡擁堵,還可以避免網絡擁塞情況的發生。

    不過,隨著包的每次往返,擁塞窗口也會以1、2、4等指數函數的增長,擁堵狀況激增甚至導致網絡擁塞的發生。為了防止這些,引入了慢啟動閥值的概念。只要擁塞窗口的值超出這個閥值,在每收到一次確認應答時,只允許以下面這種比例放大擁塞窗口:

    擁塞窗口越大,確認應答的數目也會增加。不過隨著每收到一個確認應答,其漲幅也會逐漸減少,甚至小過比一個數據段還要小的字節數。因此,擁塞窗口的大小會呈直線上升的趨勢。

    TCP的通信開始時,并沒有設置相應的慢啟動閥值 。而是在超時重發時,才會設置為當時擁塞窗口一半的大小。

    由重復確認應答而觸發的高速重發與超時重發機制的處理多少有些不同。因為前者要求至少3次的確認應答數據段到達對方主機后才會觸發,相比后者網絡的擁堵要輕一些。

    而由重復確認應答進行高速重發控制時,慢啟動閥值的大小被設置為當時窗口大小的一半(嚴格來說,是設置為“實際已發送但未收到確認應答的數據量”的一半)。然后將窗口的大小設置為該慢啟動閥值+3個數據段的大小。

    有了這樣一種控制,TCP的擁塞窗口如圖6.21所示發生變化。由于窗口的大小會直接影響數據被轉發時的吞吐量,所以一般情況下,窗口越大,越會形成高吞吐量的通信。

    6.5 其他傳輸層協議

    6.5.1 UDP-Lite

    UDP-Lite(Lightweight User Datagram Protocol,輕量級用戶數據報協議)是擴展UDP機能的一種傳輸層協議。在基于UDP的通信當中如果校驗和出現錯誤,所收到的包將被全部丟棄。然而,現實操作中,有些應用(例如那些使用H.263+,H.264,MPEG-4等圖像與音頻數據格式的應用。) 在面對這種情況時并不希望把已經收到的所有包丟棄。

    UDP-Lite提供與UDP幾乎相同的功能,不過計算校驗和的范圍可以由應用自行決定。這個范圍可以是包加上偽首部的校驗和計算,可以是首部與偽首部的校驗和計算,也可以是首部、偽首部與數據從起始到中間某個位置的校驗和計算 。有了這樣的機制,就可以只針對不允許發生錯誤的部分進行校驗和的檢查。對于其他部分,即使發生了錯誤,也會被忽略不計。而這個包也不會被丟棄,而是直接傳給應用繼續處理。

    6.5.2 SCTP

    SCTP(Stream Control Transmission Protocol,流控制傳輸協議)與TCP一樣,都是對一種提供數據到達與否相關可靠性檢查的傳輸層協議。其主要特點如下:

    • 以消息為單位收發
      TCP中接收端并不知道發送端應用所決定的消息大小。在SCTP中卻可以。
    • 支持多重宿主
      在有多個NIC的主機中,即使其中能夠使用的NIC發生變化,也仍然可以繼續通信(這與TCP相比提高了故障應對能力) 。
    • 支持多數據流通信
      TCP中建立多個連接以后才能進行通信的效果,在SCTP中一個連接就可以。(吞吐量得到有效提升。)
    • 可以定義消息的生存期限
      超過生存期限的消息,不會被重發。

    SCTP主要用于進行通信的應用之間發送眾多較小消息的情況。這些較小的應用消息被稱作數據塊(Chunk),多個數據塊組成一個數據包。

    此外,SCTP具有支持多重宿主以及設定多個IP地址的特點。多重宿主是指同一臺主機具備多種網絡的接口。例如,筆記本電腦既可以連接以太網又可以連接無線LAN。同時使用以太網和無線LAN時,各自的NIC會獲取到不同的IP地址。進行TCP通信,如果開始時使用的是以太網,而后又切換為無線LAN,那么連接將會被斷開。因為從SYN到FIN包必須使用同一個IP地址。

    然而在SCTP的情況下,由于可以管理多個IP地址使其同時進行通信,因此即使出現通信過程當中以太網與無線LAN之間的切換,也能夠保持通信不中斷。所以SCTP可以為具備多個NIC的主機提供更可靠的傳輸(持有多個NIC的應用服務器中,即使某一個NIC發生故障,只要有一個能夠正常工作的NIC就可以保持通信無阻) 。

    6.5.3 DCCP

    DCCP(Datagram Congestion Control Protocol,數據報擁塞控制協議)是一個輔助UDP的嶄新的傳輸層協議。UDP沒有擁塞控制機制。為此,當應用使用UDP發送大量數據包時極容易出現問題。于是便出現了DCCP這樣的規范。

    DCCP具有如下幾個特點:

    • 與UDP一樣,不能提供發送數據的可靠性傳輸。
    • 它面向連接,具備建立連接與斷開連接的處理。在建立和斷開連接上是具有可靠性。
    • 能夠根據網絡擁堵情況進行擁塞控制。使用DCCP(RFC4340)應用可以根據自身特點選擇兩種方法進行擁塞控制。它們分別是“類似TCP(TCP-Like)擁塞控制”和“TCP友好升級控制”(TCP-Friendly Rate Control)。
    • 為了進行擁塞控制,接收端收到包以后返回確認應答(ACK)。該確認應答將被用于重發與否的判斷。

    6.6 UDP首部的格式

    圖6.24展示了UDP首部的格式。除去數據的部分正是UDP的首部。UDP首部由源端口號,目標端口號,包長和校驗和組成。

    ■ 源端口號(Source Port)
    表示發送端端口號,字段長16位。該字段是可選項,有時可能不會設置源端口號。沒有源端口號的時候該字段的值設置為0。可用于不需要返回的通信中。

    ■ 目標端口號(Destination Port)
    表示接收端端口,字段長度16位。

    ■ 包長度(Length)
    該字段保存了UDP首部的長度跟數據的長度之和 。單位為字節(8位字節)。

    ■ 校驗和(Checksum)
    校驗和是為了提供可靠的UDP首部和數據而設計。

    6.7 TCP首部格式

    圖6.26展示了TCP首部的格式。TCP首部相比UDP首部要復雜得多。另外,TCP中沒有表示包長度和數據長度的字段。可由IP層獲知TCP的包長由TCP的包長可知數據的長度。

    ■ 源端口號(Source Port)
    表示發送端端口號,字段長16位。

    ■ 目標端口號(Destination Port)
    表示接收端端口號,字段長度16位。

    ■ 序列號(Sequence Number)
    字段長32位。序列號(有時也叫序號)是指發送數據的位置。每發送一次數據,就累加一次該數據字節數的大小。

    序列號不會從0或1開始,而是在建立連接時由計算機生成的隨機數作為其初始值,通過SYN包傳給接收端主機。然后再將每轉發過去的字節數累加到初始值上表示數據的位置。此外,在建立連接和斷開連接時發送的SYN包和FIN包雖然并不攜帶數據,但是也會作為一個字節增加對應的序列號。

    ■ 確認應答號(Acknowledgement Number)
    確認應答號字段長度32位。是指下一次應該收到的數據的序列號。實際上,它是指已收到確認應答號減一為止的數據。發送端收到這個確認應答以后可以認為在這個序號以前的數據都已經被正常接收。

    ■ 數據偏移(Data Offset)
    該字段表示TCP所傳輸的數據部分應該從TCP包的哪個位開始計算,當然也可以把它看作TCP首部的長度。該字段長4位,單位為4字節(即32位)。不包括選項字段的話,如圖6.26所示TCP的首部為20字節長,因此數據偏移字段可以設置為5。反之,如果該字段的值為5,那說明從TCP包的最一開始到20字節為止都是TCP首部,余下的部分為TCP數據。

    ■ 保留(Reserved)
    該字段主要是為了以后擴展時使用,其長度為4位。一般設置為0,但即使收到的包在該字段不為0,此包也不會被丟棄 。

    ■ 控制位(Control Flag)
    字段長為8位,每一位從左至右分別為CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。這些控制標志也叫做控制位。當它們對應位上的值為1時,具體含義如圖6.27所示。

    CWR(Congestion Window Reduced)
    CWR標志 與后面的ECE標志都用于IP首部的ECN字段。ECE標志為1時,則通知對方已將擁塞窗口縮小。

    ECE(ECN-Echo)
    ECE標志 表示ECN-Echo。置為1會通知通信對方,從對方到這邊的網絡有擁塞。在收到數據包的IP首部中ECN為1時將TCP首部中的ECE設置為1。

    URG(Urgent Flag)
    該位為1時,表示包中有需要緊急處理的數據。

    ACK(Acknowledgement Flag)
    該位為1時,確認應答的字段變為有效。TCP規定除了最初建立連接時的SYN包之外該位必須設置為1。

    PSH(Push Flag)
    該位為1時,表示需要將受到的數據立刻傳給上層應用協議。PSH為0時,則不需要立即傳而是先進行緩存。

    RST(Reset Flag)
    該位為1時表示TCP連接中出現異常必須強制斷開連接。例如,一個沒有被使用的端口即使發來連接請求,也無法進行通信。此時就可以返回一個RST設置為1的包。

    SYN(Synchronize Flag)
    用于建立連接。SYN為1表示希望建立連接,并在其序列號的字段進行序列號初始值的設定(Synchronize本身有同步的意思。也就意味著建立連接的雙方,序列號和確認應答號要保持同步) 。

    FIN(Fin Flag)
    該位為1時,表示今后不會再有數據發送,希望斷開連接。當通信結束希望斷開連接時,通信雙方的主機之間就可以相互交換FIN位置為1的TCP段。每個主機又對對方的FIN包進行確認應答以后就可以斷開連接。不過,主機收到FIN設置為1的TCP段以后不必馬上回復一個FIN包,而是可以等到緩沖區中的所有數據都因已成功發送而被自動刪除之后再發。

    ■ 窗口大小(Window Size)
    該字段長為16位。用于通知從相同TCP首部的確認應答號所指位置開始能夠接收的數據大小(8位字節)。TCP不允許發送超過此處所示大小的數據。不過,如果窗口為0,則表示可以發送窗口探測,以了解最新的窗口大小。但這個數據必須是1個字節。

    ■ 校驗和(Checksum)

    TCP和UDP一樣在計算校驗和的時候使用TCP偽首部。這個偽首部如圖6.28所示。為了讓其全長為16位的整數倍,需要在數據部分的最后填充0。首先將TCP校驗和字段設置為0。然后以16位為單位進行1的補碼和計算,再將它們總和的1的補碼和放入校驗和字段。

    接收端在收到TCP數據段以后,從IP首部獲取IP地址信息構造TCP偽首部,再進行校驗和計算。由于校驗和字段里保存著除本字段以外其他部分的和的補碼值,因此如果計算校驗和字段在內的所有數據的16位和以后,得出的結果是“16位全部為1 ”說明所收到的數據是正確的。

    使用校驗和的目的是什么?
    TCP或UDP如果能夠提供校驗和計算,也可以判斷協議首部和數據是否被破壞。

    ■ 緊急指針(Urgent Pointer)

    該字段長為16位。只有在URG控制位為1時有效。該字段的數值表示本報文段中緊急數據的指針。正確來講,從數據部分的首位到緊急指針所指示的位置為止為緊急數據。因此也可以說緊急指針指出了緊急數據的末尾在報文段中的位置。

    ■ 選項(Options)
    選項字段用于提高TCP的傳輸性能。因為根據數據偏移(首部長度)進行控制,所以其長度最大為40字節。

    窗口大小與吞吐量

    TCP通信的最大吞吐量由窗口大小和往返時間決定。假定最大吞吐量為Tmax ,窗口大小為W,往返時間是RTT的話,那么最大吞吐量的公式如下:

    假設窗口為65535字節,RTT為0.1秒,那么最大吞吐量Tmax 如下:

    以上公式表示1個TCP連接所能傳輸的最大吞吐量為5.2Mbps。如果建立兩個以上連接同時進行傳輸時,這個公式的計算結果則表示每個連接的最大吞吐量。也就是說,在TCP中,與其使用一個連接傳輸數據,使用多個連接傳輸數據會達到更高的網絡吞吐量。在Web瀏覽器中一般會通過同時建立4個左右連接來提高吞吐量。

    第7章 路由協議

    在互聯網世界中,夾雜著復雜的LAN和廣域網。然而,再復雜的網絡結構中,也需要通過合理的路由將數據發送到目標主機。而決定這個路由的,正是路由控制模塊。本章旨在詳細介紹路由控制以及實現路由控制功能的相關協議。

    7.1 路由控制的定義

    7.1.1 IP地址與路由控制

    互聯網是由路由器連接的網絡組合而成的。為了能讓數據包正確達地到達目標主機,路由器必須在途中進行正確地轉發。這種向“正確的方向”轉發數據所進行的處理就叫做路由控制或路由。

    路由器根據路由控制表(Routing Table)轉發數據包。它根據所收到的數據包中目標主機的IP地址與路由控制表的比較得出下一個應該接收的路由器。因此,這個過程中路由控制表的記錄一定要正確無誤。但凡出現錯誤,數據包就有可能無法到達目標主機。

    7.1.2 靜態路由與動態路由

    路由控制分靜態(Static Routring) 和動態(Dynamic Routing) 兩種類型。

    靜態路由是指事先設置好路由器和主機中并將路由信息固定的一種方法。而動態路由是指讓路由協議在運行過程中自動地設置路由控制信息的一種方法。這些方法都有它們各自的利弊。

    靜態路由的設置通常是由使用者手工操作完成的。例如,有100個IP網的時候,就需要設置近100個路由信息。并且,每增加一個新的網絡,就需要將這個新被追加的網絡信息設置在所有的路由器上。因此,靜態路由給管理者帶來很大的負擔,這是其一。還有一個不可忽視的問題是,一旦某個路由器發生故障,基本上無法自動繞過發生故障的節點,只有在管理員手工設置以后才能恢復正常。

    使用動態路由的情況下,管理員必須設置好路由協議,其設定過程的復雜程度與具體要設置路由協議的類型有直接關系。例如在RIP的情況下,基本上無需過多的設置。而根據OSPF進行較詳細路由控制時,設置工作將會非常繁瑣。

    如果有一個新的網絡被追加到原有的網絡中時,只要在新增加網絡的路由器上進行一個動態路由的設置即可。而不需要像靜態路由那樣,不得不在其他所有路由器上進行修改。對于路由器個數較多的網絡,采用動態路由顯然是一個能夠減輕管理員負擔的方法

    況且,網絡上一旦發生故障,只要有一個可繞的其他路徑,那么數據包就會自動選擇這個路徑,路由器的設置也會自動重置。路由器為了能夠像這樣定期相互交換必要的路由控制信息,會與相鄰的路由器之間互發消息。這些互換的消息會給網絡帶來一定程度的負荷。

    7.1.3 動態路由的基礎

    動態路由如圖7.2所示,會給相鄰路由器發送自己已知的網絡連接信息,而這些信息又像接力一樣依次傳遞給其他路由器,直至整個網絡都了解時,路由控制表也就制作完成了。而此時也就可以正確轉發IP數據包了。

    7.2 路由控制范圍

    7.2.3 IGP與EGP

    路由協議大致分為兩大類。一類是外部網關協議EGP,另一類是內部網關協議IGP(Interior Gateway Protocol)。

    EGP與IGP的關系與IP地址網絡部分和主機部分的關系有相似之處。就像根據IP地址中的網絡部分在網絡之間進行路由選擇、根據主機部分在鏈路內部進行主機識別一樣,可以根據EGP在區域網絡之間(或ISP之間)進行路由選擇,也可以根據IGP在區域網絡內部(或ISP內部)進行主機識別。

    IGP中還可以使用RIP(Routing Information Protocol,路由信息協議)、RIP2、OSPF(Open Shortest Path First,開放式最短路徑優先)等眾多協議。與之相對,EGP使用的是BGP(Border Gateway Protocol,邊界網關協議)協議。

    7.3 路由算法

    路由控制有各種各樣的算法,其中最具代表性的有兩種,是距離向量(Distance-Vector)算法和鏈路狀態(Link-State)算法。

    7.3.1 距離向量算法

    距離向量算法(DV)是指根據距離和方向決定目標網絡或目標主機位置的一種方法。

    7.3.2 鏈路狀態算法

    鏈路狀態算法是路由器在了解網絡整體連接狀態的基礎上生成路由控制表的一種方法。該方法中,每個路由器必須保持同樣的信息才能進行正確的路由選擇。

    7.3.3 主要路由協議

    路由協議分很多種。表7.1列出了主要的幾種路由協議。

    7.4 RIP

    RIP(Routing Information Protocol)是距離向量型的一種路由協議,廣泛用于LAN。

    7.4.1 廣播路由控制信息

    RIP將路由控制信息定期(30秒一次)向全網廣播。如果沒有收到路由控制信息,連接就會被斷開。不過,這有可能是由于丟包導致的,因此RIP規定等待5次。如果等了6次(180秒)仍未收到路由信息,才會真正關閉連接。

    7.4.2 根據距離向量確定路由

    RIP基于距離向量算法決定路徑。距離(Metrics)的單位為“跳數”。跳數是指所經過的路由器的個數。RIP希望盡可能少通過路由器將數據包轉發到目標IP地址,如圖7.7所示。根據距離向量生成距離向量表,再抽出較小的路由生成最終的路由控制表。

    7.4.3 使用子網掩碼時的RIP處理

    RIP雖然不交換子網掩碼信息,但可以用于使用子網掩碼的網絡環境。不過在這種情況下需要注意以下幾點:

    • 從接口的IP地址對應分類得出網絡地址后,與根據路由控制信息流過此路由器的包中的IP地址對應的分類得出的網絡地址進行比較。如果兩者的網絡地址相同,那么就以接口的網絡地址長度為準。
    • 如果兩者的網絡地址不同,那么以IP地址的分類所確定的網絡地址長度為準。

    例如,路由器的接口地址為192.168.1.33/27。很顯然,這是一個C類地址,因此按照IP地址分類它的網絡地址192.168.1.33/24。與192.168.1.33/24相符合的IP地址,其網絡地址長度都被視為27位。除此之外的地址,則采用每個地址的分類所確定的網絡地址長度。

    因此,采用RIP進行路由控制的范圍內必須注意兩點:一是,因IP地址的分類而產生不同的網絡地址時;二是,構造網絡地址長度不同的網絡環境時。

    7.4.4 RIP中路由變更時的處理

    RIP的基本行為可歸納為如下兩點:

    • 將自己所知道的路由信息定期進行廣播。
    • 一旦認為網絡被斷開,數據將無法流過此路由器,其他路由器也就可以得知網絡已經斷開。

    如圖7.9,路由器A將網絡A的連接信息發送給路由器B,路由器B又將自己掌握的路由信息在原來的基礎上加1跳后發送給路由器A和路由器C。假定這時與網絡A發生了故障。

    路由器A雖然覺察到自己與網絡A的連接已經斷開,無法將網絡A的信息發送給路由器B,但是它會收到路由器B曾經獲知的消息。這就使得路由器A誤認為自己的信息還可以通過路由器B到達網絡A。

    像這樣收到自己發出去的消息,這個問題被稱為無限計數(Counting to Infinity)。為了解決這個問題可以采取以下兩種方法:

    • 一是最長距離不超過16 。由此即使發生無限計數的問題,也可以從時間上進行控制。
    • 二是規定路由器不再把所收到的路由消息原路返還給發送端。這也被稱作水平分割(Split Horizon)

    7.4.5 RIP2

    ■ 使用多播
    RIP中當路由器之間交換路由信息時采用廣播的形式,然而在RIP2中改用了多播。這樣不僅減少了網絡的流量,還縮小了對無關主機的影響。

    ■ 支持子網掩碼
    與OSPF類似的,RIP2支持在其交換的路由信息中加入子網掩碼信息。

    ■ 路由選擇域
    與OSPF的區域類似,在同一個網絡中可以使用邏輯上獨立的多個RIP。

    ■ 外部路由標志
    通常用于把從BGP等獲得的路由控制信息通過RIP傳遞給AS內。

    ■ 身份驗證密鑰
    與OSPF一樣,RIP包中攜帶密碼。只有在自己能夠識別這個密碼時才接收數據,否則忽略這個RIP包。

    7.5 OSPF

    OSPF(Open Shortest Path First)是根據OSI的IS-IS 協議而提出的一種鏈路狀態型路由協議。由于采用鏈路狀態類型,所以即使網絡中有環路,也能夠進行穩定的路由控制。

    另外,OSPF支持子網掩碼。由此,曾經在RIP中無法實現的可變長度子網構造的網絡路由控制成為現實。

    甚至為了減少網絡流量,OSPF還引入了“區域”這一概念。區域是將一個自治網絡劃分為若干個更小的范圍。由此,可以減少路由協議之間不必要的交換。

    7.5.1 OSPF是鏈路狀態型路由協議

    OSPF為鏈路狀態型路由器。路由器之間交換鏈路狀態生成網絡拓撲信息,然后再根據這個拓撲信息生成路由控制表。

    RIP的路由選擇,要求途中所經過的路由器個數越少越好。與之相比,OSPF可以給每條鏈路賦予一個權重(也可以叫做代價),并始終選擇一個權重最小的路徑作為最終路由。也就是說OSPF以每個鏈路上的代價為度量標準,始終選擇一個總的代價最小的一條路徑。如圖7.14對比所示,RIP是選擇路由器個數最少的路徑,而OSPF是選擇總的代價較小的路徑。

    7.5.2 OSPF基礎知識

    在OSPF中,把連接到同一個鏈路的路由器稱作相鄰路由器(Neighboring Router)。在一個相對簡單的網絡結構中,例如每個路由器僅跟一個路由器相互連接時,相鄰路由器之間可以交換路由信息。但是在一個比較復雜的網絡中,例如在同一個鏈路中加入了以太網或FDDI等路由器時,就不需要在所有相鄰的路由器之間都進行控制信息的交換,而是確定一個指定路由器(Designated Router),并以它為中心交換路由信息即可。

    在OSPF中,根據作用的不同可以分為5種類型的包。


    通過發送問候(HELLO)包確認是否連接。每個路由器為了同步路由控制信息,利用數據庫描述包相互發送路由摘要信息和版本信息。如果版本比較老,則首先發出一個鏈路狀態請求包請求路由控制信息,然后由鏈路狀態更新包接收路由狀態信息,最后再通過鏈路狀態確認包通知大家本地已經接收到路由控制信息。

    有了這樣一個機制以后,OSPF不僅可以大大地減少網絡流量,還可以達到迅速更新路由信息的目的。

    7.5.3 OSPF工作原理概述

    OSPF中進行連接確認的協議叫做HELLO協議。

    LAN中每10秒(可自行設置)發送一個HELLO包。如果沒有HELLO包到達,則進行連接是否斷開的判斷。具體為,允許空等3次,直到第4次(40秒后)仍無任何反饋就認為連接已經斷開。之后在進行連接斷開或恢復連接操作時,由于鏈路狀態發生了變化,路由器會發送一個鏈路狀態更新包通知其他路由器網絡狀態的變化。

    鏈路狀態更新包所要傳達的消息大致分為兩類:一是網絡LSA ,另一個是路由器LSA。

    網絡LSA是以網絡為中心生成的信息,表示這個網絡都與哪些路由器相連接。而路由器LSA是以路由器為中心生成的信息,表示這個路由器與哪些網絡相連接。

    7.6 BGP

    BGP(Border Gateway Protocol),邊界網關協議是連接不同組織機構(或者說連接不同自治系統)的一種協議。因此,它屬于外部網關協議(EGP)。具體劃分,它主要用于ISP之間相連接的部分。只有BGP、RIP和OSPF共同進行路由控制,才能夠進行整個互聯網的路由控制。BGP是路徑向量協議

    7.7 MPLS

    現如今,在轉發IP數據包的過程中除了使用路由技術外,還在使用標記交換技術。路由技術基于IP地址中最長匹配原則進行轉發,而標記交換則對每個IP包都設定一個叫做“標記”的值,然后根據這個“標記”再進行轉發。標記交換技術中最具代表性的當屬多協議標記交換技術,即MPLS(Multi Protocol Label Switching)。

    由于基于標記的轉發通常無法在路由器上進行,所以MPLS也就無法被整個互聯網采用。如圖7.22所示,它的轉發處理方式甚至與IP網也有所不同。

    MPLS網絡中實現MPLS功能的路由器叫做標記交換路由器(LSR,Label Switching Router)。特別是與外部網路連接的那部分LSR叫做標記邊緣路由器(LER,Label Edge Router)。MPLS正是在LER上對數據包進行追加標記和刪除標記的操作。

    在一個數據包上附加標記是一個及其簡單的動作。如果數據鏈路本來就有一個相當于標記的信息,那么可以直接進行映射。如果數據鏈路中沒有攜帶任何相當于標記的信息(最典型的就是以太網),那么就需要追加一個全新的墊片頭(Shim Header)。這個墊片頭中就包含標記信息 。

    如圖7.23展示了數據從以太網的IP網開始經過MPLS網再發送給其他IP網的整個轉發過程。數據包在進入MPLS時,在其IP首部的前面被追加了32比特的墊片頭(其中包含20比特的標記值)。MPLS網絡內,根據墊片頭中的標記進一步進行轉發。當數據離開MPLS時,墊片頭就被去除。在此我們稱附加標記轉發的動作為Push,替換標記轉發的動作為Swap,去掉標記轉發的動作為Pop。


    MPLS中目標地址和數據包都要通過由標記決定的同一個路徑,這個路徑叫做標記交換路徑(LSP,Label SwitchPath)。LSP又可以劃分為一對一連接的點對點LSP,和一對多綁定的合并LSP兩類。

    擴展LSP有兩種方式。可以通過各個LSR向自己鄰接的LSR分配MPLS標記,也可以由路由協議載著標記信息進行交互。LSP屬于單方向的通路,如果需要雙向的通信則需要兩個LSP。

    7.7.2 MPLS的優點

    ① 轉發速度快。
    通常,路由器轉發IP數據包時,首先要對目標地址和路由控制表中可變長的網絡地址進行比較,然后從中選出最長匹配的路徑才能進行轉發。MPLS則不然。它使用固定長度的標記信息,使得處理更加簡單,可以通過高速的硬件實現轉發。

    此外,相比互聯網中的主干路由器需要保存大量路由表才能進行處理的現狀,MPLS只需要設置必要的幾處信息即可,所要處理的數據量也大幅度減少。而且除了IPv4、IPv6之外,針對其他協議,MPLS仍然可以實現高速轉發。

    ②利用標記生成虛擬的路徑,并在它的上面實現IP等數據包的通信。
    基于這些特點,被稱之為“盡力而為”的IP網也可以提供基于MPLS的通信質量控制、帶寬保證和VPN等功能。

    第8章 應用協議

    一般情況下,人們不會太在意網絡應用程序實際上是按照何種機制正常運行的。本章則旨在介紹TCP/IP中所使用的幾個主要應用協議,它們多處于OSI模型的第5層以上。

    8.2 遠程登錄

    遠程登錄是為了實現TSS環境,是將主機和終端的關系應用到計算機網絡上的一個結果。TSS中通常有一個處理能力非常強的主機,圍繞著這臺主機的是處理能力沒有那么強的多個終端機器。這些終端通過專線與主機相連。

    類似地,實現從自己的本地計算機登錄到網絡另一端計算功能的應用就叫做遠程登錄。通過遠程登錄到通用計算機或UNIX工作站以后,不僅可以直接使用這些主機上的應用,還可以對這些計算機進行參數設置。遠程登錄主要使用TELNET和SSH(Secure SHell) 兩種協議。

    8.2.1 TELNET

    TELNET利用TCP的一條連接,通過這一條連接向主機發送文字命令并在主機上執行。本地用戶好像直接與遠端主機內部的Shell 相連著似的,直接在本地進行操作。

    TELNET可以分為兩類基本服務。一是仿真終端功能,二是協商選項機制。

    TELNET經常用于登錄路由器或高性能交換機等網絡設備進行相應的設置 。通過TELNET登錄主機或路由器等設備時需要將自己的登錄用戶名和密碼注冊到服務端。

    ■ 選項
    TELNET中除了處理用戶所輸入的文字外,還提供選項的交互和協商功能。例如,為實現仿真終端所用到的界面控制信息就是通過選項功能發送出去的。而且,如圖8.4所示TELNET中的行模式或透明模式兩種模式的設置,也是通過TELNET客戶端與TELNET服務端之間的選項功能進行設置的。


    ■ TELNET客戶端

    所謂TELNET客戶端是指利用TELNET協議實現遠程登錄的客戶端程序。很多情況下,它的程序名就是telnet命令。

    TELNET客戶端通常與目標主機的23號端口建立連接,并與監聽這個端口的服務端程序telnetd進行交互。當然,也可以與其他的TCP端口號連接,只要在該端口上有監聽程序能夠處理telnet請求即可。

    8.2.2 SSH

    SSH是加密的遠程登錄系統。TELNET中登錄時無需輸入密碼就可以發送,容易造成通信竊聽和非法入侵的危險。使用SSH后可以加密通信內容。即使信息被竊聽也無法破解所發送的密碼、具體命令以及命令返回的結果是什么。

    SSH還包括很多非常方便的功能:

    • 可以使用更強的認證機制。
    • 可以轉發文件。
    • 可以使用端口轉發功能

    端口轉發是指將特定端口號所收到的消息轉發到特定的IP地址和端口號碼的一種機制。由于經過SSH連接的那部分內容被加密,確保了信息安全,提供了更為靈活的通信。

    8.3 文件傳輸

    FTP是在兩個相連的計算機之間進行文件傳輸時使用的協議。

    ■ FTP的工作機制概要

    它使用兩條TCP連接:一條用來控制,另一條用于數據(文件)的傳輸。

    用于控制的TCP連接主要在FTP的控制部分使用。例如登錄用戶名和密碼的驗證、發送文件的名稱、發送方式的設置。利用這個連接,可以通過ASCII碼字符串發送請求和接收應答。在這個連接上無法發送數據,數據需要一個專門的TCP進行連接。

    FTP控制用的連接使用的是TCP21號端口。在TCP21號端口上進行文件GET、PUT、以及文件一覽等操作時,每次都會建立一個用于數據傳輸的TCP連接。數據的傳輸和文件一覽表的傳輸正是在這個新建的連接上進行。當數據傳送完畢之后,傳輸數據的這條連接也會被斷開,然后會在控制用的連接上繼續進行命令或應答的處理。

    通常,用于數據傳輸的TCP連接是按照與控制用的連接相反的方向建立的。因此,在通過NAT連接外部FTP服務器的時候,無法直接建立傳輸數據時使用的TCP連接。此時,必須使用PASV命令修改建立連接的方向才行。

    數據傳輸用的TCP連接通常使用端口20。不過可以用PORT命令修改為其他的值。最近,出于安全的考慮,普遍在數據傳輸用的端口號中使用隨機數進行分配。

    8.4 電子郵件

    8.4.1 電子郵件的工作機制

    提供電子郵件服務的協議叫做SMTP(Simple Mail TransferProtocol)。SMTP為了實現高效發送郵件內容,在其傳輸層使用了TCP協議。

    早期電子郵件是在發送端主機與接收端主機之間直接建立TCP連接進行郵件傳輸。發送人編寫好郵件以后,其內容會保存在發送端主機的硬盤中。然后與對端主機建立TCP連接,將郵件發送到對端主機的硬盤。當發送正常結束后,再從本地硬盤中刪除郵件。而在發送過程中一旦發現對端計算機因沒有插電等原因沒有收到郵件時,發送端將等待一定時間后重發。


    為此,在技術上改變了以往直接在發送端與接收端主機之間建立TCP連接的機制,而引進了一種一直會連接電源的郵件服務器 。發送和接收端通過郵件服務器進行收發郵件。接收端從郵件服務器接收郵件時使用POP3(Post Office Protocol)協議。

    電子郵件的機制由3部分組成,它們分別是郵件地址,數據格式以及發送協議。

    8.4.3 MIME

    很長一段時間里,互聯網中的電子郵件只能處理文本格式的郵件。不過現在,電子郵件所能發送的數據類型已被擴展到MIME ,可以發送靜態圖像、動畫、聲音、程序等各種形式的數據。鑒于MIME規定了應用消息的格式,因此在OSI參考模型中它相當于第6層表示層。

    MIME基本上由首部和正文(數據)兩部分組成。

    8.4.4 SMTP

    SMTP是發送電子郵件的協議。它使用的是TCP的25號端口。SMTP建立一個TCP連接以后,在這個連接上進行控制和應答以及數據的發送。客戶端以文本的形式發出請求,服務端返回一個3位數字的應答。每個指令和應答的最后都必須追加換行指令(CR、LF)。

    8.4.5 POP


    該協議是一種用于接收電子郵件的協議。發送端的郵件根據SMTP協議將被轉發給一直處于插電狀態的POP服務器。客戶端再根據POP協議從POP服務器接收對方發來的郵件。在這個過程中,為了防止他人盜竊郵件內容,還要進行用戶驗證。

    POP與SMTP一樣,也是在其客戶端與服務器之間通過建立一個TCP連接完成相應操作。

    總結

    以上是生活随笔為你收集整理的图解TCP/IP的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。