乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      多媒體技術(shù)教程(林福宗)第15章因特網(wǎng)與TCP/IP

       百眼通 2014-09-29

        因特網(wǎng)(Internet)是全世界使用TCP/IP協(xié)議堆和網(wǎng)關(guān)設(shè)備(gateway)組成的網(wǎng)絡(luò),TCP/IP實際上已成為因特網(wǎng)的代名詞。為對多媒體網(wǎng)絡(luò)應(yīng)用有比較深入的理解,就需要了解因特網(wǎng)的基本術(shù)語、結(jié)構(gòu)和協(xié)議。因特網(wǎng)上使用的協(xié)議非常多,本章只選擇了最普通的幾個協(xié)議作了簡單介紹,這些協(xié)議是HTTP、UDP、TCP和IP。在介紹協(xié)議過程中自然要涉及到協(xié)議定義的各種內(nèi)部結(jié)構(gòu),這是為了更好地理解協(xié)議的功能和執(zhí)行這些協(xié)議的軟件。

      15.1 因特網(wǎng)

      15.1.1 因特網(wǎng)的結(jié)構(gòu)

        因特網(wǎng)是由網(wǎng)絡(luò)ARPANET(Advanced Research Projects Agency Network)發(fā)展而來,而ARPANET是美國國防部高級研究計劃署在20世紀(jì)60年代支持創(chuàng)建的資源共享計算機(jī)網(wǎng)絡(luò)。因特網(wǎng)是許許多多子網(wǎng)(subnetwork)集合而成的網(wǎng)絡(luò),這些子網(wǎng)都有一個共同的通信協(xié)議,這就是TCP/IP通信協(xié)議。因此不難理解人們往往把Internet與TCP/IP緊緊聯(lián)系在一起。
        因特網(wǎng)的組織和新標(biāo)準(zhǔn)的采納由因特網(wǎng)體系結(jié)構(gòu)研究部(Internet Architecture Board,IAB)統(tǒng)管。IAB還協(xié)調(diào)好幾個特別工作組,包括因特網(wǎng)工程特別工作組(Internet Engineering Task Force,IETF)和因特網(wǎng)研究特別工作組(Internet Research Task Force,IRTF)。
        組成因特網(wǎng)的子網(wǎng)之間在物理上的相互連接都是通過網(wǎng)關(guān)設(shè)備實現(xiàn)的,如圖15-01所示。通過網(wǎng)關(guān)設(shè)備互相連接在一起的不同的網(wǎng)絡(luò)通常稱為子網(wǎng)(subnetwork),因為它們是大網(wǎng)絡(luò)之中的網(wǎng)絡(luò)。子網(wǎng)是一個完整的網(wǎng)絡(luò),是互聯(lián)網(wǎng)絡(luò)中的一部分,或者說子網(wǎng)是因特網(wǎng)中的一部分。網(wǎng)關(guān)設(shè)備與執(zhí)行TCP/IP協(xié)議的其他設(shè)備和軟件一起工作,它的最基本的任務(wù)就是從互聯(lián)網(wǎng)絡(luò)或者局域網(wǎng)絡(luò)上接收按照協(xié)議規(guī)范封裝的協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU),然后把它們遞送到下一個網(wǎng)關(guān)設(shè)備或者局域網(wǎng)絡(luò)。


      圖15-01 子網(wǎng)之間通過網(wǎng)關(guān)設(shè)備相互連接

        在美國,因特網(wǎng)使用美國國家科學(xué)基金會NSF(National Science Foundation)資助的網(wǎng)絡(luò)NSFnet作為全國性的主干網(wǎng)絡(luò),如圖15-02所示。連接到主干網(wǎng)絡(luò)NSFnet的網(wǎng)絡(luò)有美國國家航空和宇宙航行局(National Aeronautics and Space Administration,NASA)的空間物理分析網(wǎng)絡(luò)(Space Physics Analysis Network,SPAN),計算機(jī)科學(xué)網(wǎng)絡(luò)(Computer Science Network,CSNET), BITNET(Because It's Time Network),WESTNET,UUNET(UNIX to UNIX Network)和圣地亞哥的巨型計算機(jī)網(wǎng)絡(luò)(San Diego Supercomputer Network,SDSCNET),在圖15-02上沒有標(biāo)出,……。


      圖15-02 美國在因特網(wǎng)上的部分子網(wǎng)

        NFSnet主干網(wǎng)由3000多個研究站點組成,通過T-3線路把它們互連在一起,數(shù)據(jù)速率是44.736 Mbps。為提高傳輸速率而采用的技術(shù)有同步光纖網(wǎng)絡(luò)(Synchronous Optical Network,SONET),異步傳輸模式(Asynchronous Transfer Mode,ATM)網(wǎng)絡(luò)以及由美國國家標(biāo)準(zhǔn)化學(xué)會ANSI提議的高性能并行接口(High-Performance Parallel Interface,HPPI)等技術(shù),數(shù)據(jù)傳輸速率將達(dá)到1 Gb/s。

      15.1.2 因特網(wǎng)地址的概念

        由通信協(xié)議使用的術(shù)語——地址(address)的含義很多,它可以指發(fā)送端地址、接收端地址、機(jī)器的端口地址、存儲器地址、應(yīng)用程序地址等等。因此當(dāng)遇到這個術(shù)語時需要倍加小心,確信它所指的真正含義。
        網(wǎng)絡(luò)地址(network address)類似于信函上的地址,它告訴傳輸系統(tǒng)把數(shù)據(jù)包(datagram)遞送到何處去。在因特網(wǎng)上與地址相關(guān)的術(shù)語主要有3個:名稱(name)、地址(address)和傳輸路線(route)。名稱是一臺機(jī)器、一個用戶或者一個應(yīng)用軟件的唯一的標(biāo)識符,它為數(shù)據(jù)包(datagram)提供一個絕對目標(biāo);地址用來標(biāo)識這個絕對目標(biāo)所在的位置,通常是它指網(wǎng)絡(luò)上的物理位置或者邏輯位置;傳輸路線是告訴傳輸系統(tǒng)如何從這個地址中獲取數(shù)據(jù)包。
        1. 名稱地址
        人們經(jīng)常使用收發(fā)者的名字來指定一個用戶名或者一臺機(jī)器。根據(jù)指定的名稱,通過稱為域名服務(wù)器(Domain Name Server,DNS)也叫做名稱服務(wù)器(name server)的網(wǎng)絡(luò)軟件包去分析物理地址。例如,當(dāng)發(fā)送電子郵件時,你可簡單地指出接收者的名稱,域名服務(wù)器就會想辦法解決如何把電子郵件傳送給接收者。使用域名服務(wù)器除了把名稱轉(zhuǎn)換成地址和傳輸路徑之外,也為系統(tǒng)管理員或者網(wǎng)絡(luò)管理員提供許多方便,更改網(wǎng)絡(luò)時就不必要把更改內(nèi)容告訴每一臺機(jī)器。
        2. 物理地址
        網(wǎng)絡(luò)上需要與他人通信的任何一臺設(shè)備都需要一個唯一的地址——物理地址(physical address),有時也叫做硬件地址。在一個給定的網(wǎng)絡(luò)上一個物理地址只能出現(xiàn)一次,否則域名服務(wù)系統(tǒng)就無法準(zhǔn)確確定目標(biāo)設(shè)備。硬件地址通常設(shè)計在網(wǎng)絡(luò)接口卡上,通過開關(guān)或者軟件進(jìn)行設(shè)置。
        在物理層(物理層的概念見后面的介紹)上對每個過往的數(shù)據(jù)包(即協(xié)議數(shù)據(jù)單元PDU)進(jìn)行分析,如果數(shù)據(jù)包中接收者的機(jī)器地址與這臺設(shè)備的物理地址相匹配,就把這個數(shù)據(jù)包傳送到這臺設(shè)備的物理層,否則就不理睬。
        不同的計算機(jī)平臺、網(wǎng)絡(luò)和軟件版本可能使用不同的名稱約定,物理地址的長度也不相同。例如,以太網(wǎng)的物理地址使用48位,這是開發(fā)以太網(wǎng)的Xerox公司指定的地址長度?,F(xiàn)在,為子網(wǎng)分配通用物理地址的任務(wù)由電氣和電子工程師協(xié)會(Institute of Electrical & Electronic Engineers,IEEE)承擔(dān)。IEEE為每個子網(wǎng)分配24位長的組織唯一標(biāo)識符(organization unique identifier,OUI),而組織可指派另外一個24位的標(biāo)識符。組織唯一標(biāo)識符OUI的格式如圖15-03所示。

      1位

      1位

      22位

      24位

      I/G

      U/L

      IEEE指派的子網(wǎng)地址

      當(dāng)?shù)胤峙涞奈锢淼刂?/font>

           注:I/G(individual / group)=0:  個人地址 1:組地址(group)
             U/L(universal / local)=0:   IEEE指派 1:當(dāng)?shù)刂概?/font>

      圖15-03 組織唯一標(biāo)識符(OUI)

        在24位OUI格式中,有2位用作標(biāo)志位,其余22位表示IEEE指派的子網(wǎng)物理地址。當(dāng)整個OUI都設(shè)置成1時,表示網(wǎng)絡(luò)上的所有站點都是目的地址。其余的24位用來表示當(dāng)?shù)毓芾淼木W(wǎng)絡(luò)地址。用作組織唯一標(biāo)識符OUI的24位和當(dāng)?shù)毓芾淼?4位組合在一起形成的地址稱為媒體接入控制(media access control,MAC)地址。當(dāng)封裝在網(wǎng)絡(luò)上傳輸信息包時,有兩種MAC地址:發(fā)送地址和接收地址。
        3. 數(shù)據(jù)鏈路地址
        IEEE以太網(wǎng)標(biāo)準(zhǔn)使用的另一種地址叫做鏈路層地址(link layer address),用LSAP(link service access point)表示。LSAP表示在數(shù)據(jù)鏈路層(data link layer)上使用的鏈接協(xié)議的類型,自帶尋址信息的、能夠獨立地從源端傳送到終端的數(shù)據(jù)包(datagram)就攜帶有這種發(fā)送和接收的LSAP信息。

      15.1.3 網(wǎng)際協(xié)議地址

        在因特網(wǎng)上的每臺聯(lián)網(wǎng)計算機(jī)都需要有一個唯一的地址,這樣才能在計算機(jī)之間進(jìn)行通信。為此,定義了兩種形式來表示計算機(jī)在因特網(wǎng)上的地址:一種是機(jī)器可識別的用數(shù)字表示的地址,通常稱為網(wǎng)際協(xié)議地址(Internet Protocol address,IP),簡稱為IP地址。因特網(wǎng)的IP地址由美國國家科學(xué)基金會于1993年組成的因特網(wǎng)信息中心注冊服務(wù)部門(InterNIC Registration Services)進(jìn)行分配和注冊,InterNIC是NSFnet (Internet) Network Information Center的簡寫。IP地址就像你家中的電話一樣,每一部電話都有一個唯一的電話號碼,它是識別電話網(wǎng)絡(luò)上某一部電話的標(biāo)準(zhǔn)方法。另一種是人比較容易看懂的用字母表示的地址,稱為域名地址(domain name address)。這兩種地址可用一個可能不太恰當(dāng)?shù)谋确絹韼椭斫?,例如我國的人口管理系統(tǒng),每個公民都有一個用數(shù)字表示的身份證ID號碼,又有一個用中文字表示的名字。
        IP地址在擴(kuò)充之前共有32比特,由類別、網(wǎng)絡(luò)地址和主機(jī)地址共3個部分組成:

      類別

      網(wǎng)絡(luò)地址

      主機(jī)地址

        IP地址分成5類:A類(Class A),B類(Class B),C類(Class C),D類(Class D)和E類(Class E)。其中A、B和C類地址是基本的因特網(wǎng)地址,是用戶使用的地址,D類地址用于多目標(biāo)廣播的廣播地址,E類地址為保留地址。IP地址的詳細(xì)結(jié)構(gòu)如圖15-04所示。


      圖15-04 IP地址的組成

        A類地址用于有許多機(jī)器連網(wǎng)的大型網(wǎng)絡(luò),在這種情況下需要使用24位的主機(jī)地址(host address)來標(biāo)識連網(wǎng)計算機(jī),而網(wǎng)絡(luò)地址(network address)使用7位來限制可被識別的網(wǎng)絡(luò)數(shù)目;B類地址用于連網(wǎng)機(jī)器數(shù)目和網(wǎng)絡(luò)數(shù)目都為中等程度的網(wǎng)絡(luò),在這種情況下使用16位的主機(jī)地址和14位的網(wǎng)絡(luò)地址;C類地址用于連網(wǎng)機(jī)器數(shù)目少(最多256)而網(wǎng)絡(luò)數(shù)目多的網(wǎng)絡(luò);D類地址用于多目標(biāo)廣播(multicasting)。
        32位的IP地址分成4組,每組為8位。因此可把A類地址想象成“網(wǎng)絡(luò)地址.主機(jī)地址.主機(jī)地址.主機(jī)地址 ”,把B類地址想象成“網(wǎng)絡(luò)地址.網(wǎng)絡(luò)地址.主機(jī)地址.主機(jī)地址”,而把C類地址想象成“網(wǎng)絡(luò)地址.網(wǎng)絡(luò)地址.網(wǎng)絡(luò)地址.主機(jī)地址”。
        32比特的IP地址用4個十進(jìn)制數(shù)表示,并用句點(.)隔開,每個數(shù)都小于256。
        例如,10100110 01101111 00000001 01000010,用4個十進(jìn)制數(shù)表示成166.111.1.66,是某個大學(xué)的一臺服務(wù)器地址;
        又例如,11001010 01100000 00111101 10101000,用4個十進(jìn)制數(shù)表示成202.96.61.168,是某個電報局的一臺服務(wù)器地址。
        如果用w, x, y, z分別表示這4個字節(jié),這3類地址的范圍就為:
        A類:1.x.y.z ~ 126.x.y.z (其中,127.0.0.1不作IP地址,用于網(wǎng)絡(luò)內(nèi)部使用)
        B類:128.x.y.z ~ 191.x.y.z
        C類:192.x.y.z ~ 223.x.y.z
        D類:224.0.0.0~239.255.255.255 (其中,244.0.0.0不用,224.0.0.1分配給永久性IP主機(jī)組,包括網(wǎng)關(guān))
        多目標(biāo)廣播的地址范圍從224.0.0.0到239.255.255.255,也就是D類地址的范圍。用于視聽會議的MBone(multicast backbone)的地址由因特網(wǎng)號碼分配局(Internet Assigned Numbers Authority,IANA)指定為224.2.*.* 。
        網(wǎng)絡(luò)使用IP地址可以確定數(shù)據(jù)是否要通過網(wǎng)關(guān)設(shè)備送出。如果網(wǎng)絡(luò)地址與當(dāng)前的網(wǎng)絡(luò)地址相同就不必通過網(wǎng)關(guān)設(shè)備,否則就要通過網(wǎng)關(guān)設(shè)備。

      15.1.4 域名和域名系統(tǒng)

        域名(Domain Name)是連接到網(wǎng)絡(luò)上的計算機(jī)或者計算機(jī)組的名稱,在數(shù)據(jù)傳輸時用來標(biāo)識計算機(jī)的電子方位,有時也指地理位置。域名通常包含組織名,而且始終包括兩到三個字母的后綴,以指明組織的類型和所在的國家或者地區(qū)。例如,域名microsoft.com,其中microsoft是組織名,com是commercial的縮寫,代表商業(yè)組織。在美國使用的其它后綴包括gov(政府)、edu(教育機(jī)構(gòu))、org(組織,一般指非盈利組織)以及net(網(wǎng)絡(luò),ISP使用)。在美國以外,兩個字的后綴表示該域所在的國家或者地區(qū),例如uk(英國)、de(德國)、jp(日本)。
        例如,www.bta.net.cn,其中,
         cn:       表示在中國的Internet
         net.cn:     表示中國郵電部負(fù)責(zé)組建的Internet商業(yè)網(wǎng),即ChinaNET
         bta.net.cn:   表示北京地區(qū)的ChinaNET
         www.bta.net.cn: 表示北京地區(qū)ChinaNET上一臺聯(lián)網(wǎng)服務(wù)器的名字

        從這個例子可以看到,域名分成幾個區(qū)域,從左到右表示區(qū)域的范圍越來越大。域名最右邊的區(qū)域具有最高級別,表示國家,如cn表示中國。
        因特網(wǎng)上的域名分為頂級(又稱最高級)、二級、三級等不同等級,級別越低,域名越長。頂級域名有三類:
        1.國家和地區(qū),如CN(中國)。
        2.國際頂級域名,INT(僅此一個)。
        3.通用頂級域名,共有10個(至1996年12月),如表15-01所示。

      表15-01 通用頂級域名

      域名

      arts

      文化娛樂

      com

      公司

      firm

      企業(yè)或公司

      info

      信息提供單位

      net

      網(wǎng)絡(luò)單位

      nom

      個人

      org

      事業(yè)單位

      rec

      娛樂活動單位

      store

      售貨企業(yè)

      web

      www單位

        由于美國是Internet的發(fā)起國,她的最高級別域名的表示法是一個特殊情況,最高級別域名表示的不是國家,而是網(wǎng)絡(luò)的類型,例如www.microsoft.com。美國的最高級別域名分成6類,如表15-02所示。

      表15-02 美國的最高級別域名

      域名

      com

      edu

      gov

      mil

      org

      net

      商業(yè)

      教育

      政府

      軍隊

      其它組織

      網(wǎng)絡(luò)資源

        由于人們不容易閱讀使用4個十進(jìn)制數(shù)表示連網(wǎng)機(jī)器和網(wǎng)絡(luò)的IP地址,因此許多系統(tǒng)都采納對人更容易閱讀和理解的名稱,這種地址叫做域名地址(domain name address)。域名地址是連接到因特網(wǎng)或者任何TCP/IP網(wǎng)絡(luò)的某一臺設(shè)備的地址。在分等級結(jié)構(gòu)的系統(tǒng)中,使用“詞”來標(biāo)識服務(wù)器、組織和類型。例如www.代表中國教育領(lǐng)域中清華大學(xué)使用HTTP協(xié)議的一臺計算機(jī)。因此一臺連網(wǎng)機(jī)器在因特網(wǎng)上既有用戶使用的域名地址(例如,www.),又有遞送信息送軟件使用的IP地址(例如,166.111.9.2),域名系統(tǒng)(Domain Name System,DNS)就是自動地把域名地址翻譯成IP地址的系統(tǒng)。
        域名服務(wù)系統(tǒng)DNS(Domain Name System)中的域名服務(wù)DNS(Domain Name Service)軟件實際上是一張兩列的查找表,一列是幫助記憶計算機(jī)的名稱,另一列是用數(shù)字表示的IP地址,計算機(jī)的名稱和它的IP地址是相對應(yīng)的,這個軟件存放在域名服務(wù)器DNS(Domain Name Server)上。用戶申請入網(wǎng)時需要因特網(wǎng)接入服務(wù)公司(Internet service provider,ISP)提供域名服務(wù)器的地址,例如ChinaNET網(wǎng)絡(luò)上的一個域名服務(wù)器地址是202.96.0.133,當(dāng)計算機(jī)首次連網(wǎng)時需要人工設(shè)置這個地址。

      15.1.5 統(tǒng)一資源地址

        因特網(wǎng)上資源所在的地址使用統(tǒng)一資源地址(Uniform Resource Locator,URL)表示法,它是識別因特網(wǎng)上任何一個文件或資源地址的標(biāo)準(zhǔn)表示法。例如,清華大學(xué)網(wǎng)頁(Web page)上的一個文件,用URL表示成:
          http://www./docs/xydy/bjtag.html
        又如,微軟公司的主頁(home page)用URL表示成:
          http://www.microsoft.com
        組成URL的各部分的名稱如圖15-05所示。


      圖15-05 統(tǒng)一資源地址的結(jié)構(gòu)

      15.2 TCP/IP的參考模型

      15.2.1 協(xié)議層次和協(xié)議的概念

        為減少網(wǎng)絡(luò)設(shè)計的復(fù)雜性,網(wǎng)絡(luò)設(shè)計人員把整個數(shù)據(jù)交換過程劃分成層(layer),并制定了各層次上的協(xié)議,以便于網(wǎng)絡(luò)軟硬件分層管理和執(zhí)行,這種層就稱為協(xié)議層(Protocol Layer)。為了敘述方便,我們把客戶機(jī)、服務(wù)機(jī)、路由器和網(wǎng)橋等設(shè)備稱為網(wǎng)絡(luò)單元。一個網(wǎng)絡(luò)單元層n(layer n)與另一個網(wǎng)絡(luò)單元層n(layer n)交換的消息是層n(layer n)上的消息,不是層-(n+1)上的消息,也不是層-(n-1)上的消息,這些消息稱為層n協(xié)議數(shù)據(jù)單元,簡寫成n-PDU(layer-n protocol data unit)。n-PDU的格式以及n-PDU在網(wǎng)絡(luò)單元之間如何交換則由層n協(xié)議(layer-n protocol)定義。當(dāng)各層協(xié)議組合在一起時,就把這整套協(xié)議稱為協(xié)議堆(protocol stack),也稱協(xié)議組(protocol suite)。例如,因特網(wǎng)上使用的許許多多協(xié)議都?xì)w納在傳輸控制協(xié)議/網(wǎng)際協(xié)議TCP/IP中,稱為TCP/IP協(xié)議堆。
        當(dāng)主機(jī)A的層n發(fā)送一個n-PDU到主機(jī)B的層n時,主機(jī)A就把n-PDU傳到下一層,即層n-1,然后讓層n-1把n-PDU遞送給主機(jī)B的層n,這就是說,層n依靠層n-1把n-PDU遞送到目的地,這也叫做層n-1給層n提供服務(wù)。我們把發(fā)送端稱為源端(如主機(jī)A),接收端稱為終端(如主機(jī)B)。
        假設(shè)有一個用4層通信協(xié)議組織的網(wǎng)絡(luò),如圖15-06所示。由于網(wǎng)絡(luò)用4層通信協(xié)議組織,因此就有4種類型的PDU:1-PDU,2-PDU,3-PDU和4-PDU。運行在最高層的層4稱為應(yīng)用層,它給出一個消息M,即M為4-PDU。在源端機(jī),M被分成2部分:M1和M2,加上層-3消息標(biāo)題生成2個3-PDU。這個過程在源端機(jī)一直到生成1-PDU,然后從源端機(jī)把它們發(fā)送到物理鏈路上。終端機(jī)接收1-PDU,然后引導(dǎo)1-PDU到上一層,并把相應(yīng)層的消息頭去掉,最后重新裝配成M消息。


      圖15-06 協(xié)議層和協(xié)議堆的概念

      15.2.2 TCP/IP和OSI模型

        顧名思義,TCP/IP固然是指傳輸控制協(xié)議(Transmission Control Protocol,TCP)和網(wǎng)際協(xié)議(Internet Protocol,IP),但是TCP/IP協(xié)議堆不僅僅是指這兩個單獨的協(xié)議組成的協(xié)議堆,而是由許多協(xié)議組成的協(xié)議堆。TCP/IP協(xié)議堆組合了100多個協(xié)議,包括文件傳送協(xié)議(File Transfer Protocol,F(xiàn)TP),簡單郵件傳輸協(xié)議(Simple Message Transfer Protocol,SMTP), 用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol,UDP),用于遠(yuǎn)程訪問的Telnet協(xié)議,普通文件傳輸協(xié)議(Trivial File Transfer Protocol,TFTP),地址解析協(xié)議(Address Resolution Protocol,ARP),逆向地址解析協(xié)議(Reverse Address Resolution Protocol,RARP)和網(wǎng)際控制消息協(xié)議(Internet Control Messages Protocol,ICMP)等協(xié)議。這些協(xié)議是用來把計算機(jī)和數(shù)據(jù)通信設(shè)備組織到計算機(jī)網(wǎng)絡(luò)中的標(biāo)準(zhǔn)通信協(xié)議,它們要管理傳輸數(shù)據(jù)的路線、實際的傳輸以及處理傳輸過程中出現(xiàn)的錯誤。
        在計算機(jī)通信網(wǎng)絡(luò)中,有一個叫做國際標(biāo)準(zhǔn)化組織/開放系統(tǒng)互連參考模型(International Organization for Standardization Open Systems Interconnection reference model,ISO/OSI reference model ),通常把它翻譯成開放式系統(tǒng)互連參考模型OSI Reference Model 。OSI參考模型分成7層,TCP/IP也采用層次結(jié)構(gòu),但并不與OSI參考模型的層次一一對應(yīng)。因特網(wǎng)采用的TCP/IP模型并不與OSI模型發(fā)生沖突,因為這兩種標(biāo)準(zhǔn)是并行開發(fā)的,它們是互相補(bǔ)充的。OSI模型和TCP/IP模型相比,認(rèn)為OSI的結(jié)構(gòu)更嚴(yán)謹(jǐn),層次更加獨立,但現(xiàn)在似乎更喜歡使用TCP/IP模型,OSI模型是否放棄也難說。
        TCP/IP結(jié)構(gòu)的分層不太統(tǒng)一,有的把它分成5層,如圖15-07所示,有的把數(shù)據(jù)鏈路層(data link layer)和物理層(physical layer)算作一層,把它分成4層。本教材使用前一種分層方法,TCP/IP的5層是:應(yīng)用層(application layer)、傳輸層( transport layer)、網(wǎng)絡(luò)層(network layer)/互聯(lián)網(wǎng)絡(luò)層(internet layer)、網(wǎng)絡(luò)接口層(network interface layer)或者叫做數(shù)據(jù)鏈路層(data link)和物理層(physical layer),并給其中4層中的PDU分別命名為消息(message)、消息段(segment)、數(shù)據(jù)包(datagram)和數(shù)據(jù)幀(frame)。因特網(wǎng)的協(xié)議堆(Internet Protocol Stack)由層3-層5上的協(xié)議組成。TCP/IP參考模型和其相應(yīng)的PDU的名稱如圖15-08所示,各層執(zhí)行的部分協(xié)議如圖15-09所示。雖然這樣劃分有點簡單化,而且不是100%的正確,但可幫助我們比較好地理解整個協(xié)議堆的全貌。

      OSI參考模型

      TCP/IP(Internet)模型

      應(yīng)用層(application)

       

      表示層(presentation)

      應(yīng)用層(application)

      對話層(session)

       

      傳輸層( transport)

      傳輸層( transport)

      網(wǎng)絡(luò)層(network)

      網(wǎng)絡(luò)層(network)

      數(shù)據(jù)鏈路層(data link)

      數(shù)據(jù)鏈路層(data link)

      物理層(physical)

      物理層(physical)

      圖15-07 TCP/IP的參考模型

       

      TCP/IP參考模型
      (TCP/IP reference model )

      協(xié)議數(shù)據(jù)單元
      PDU(protocol data unit)

      執(zhí)行器

      層5

      應(yīng)用層(application)

      消息(message)

      軟 件

      層4

      傳輸層( transport)

      消息段(segment)

      軟 件

      層3

      網(wǎng)絡(luò)層(network)

      數(shù)據(jù)包(datagram)

      軟件/硬件

      層2

      數(shù)據(jù)鏈路層(data link)

      數(shù)據(jù)幀(frame)

      硬 件

      層1

      物理層(physical)

      1-PDU

      硬 件

      圖15-08 協(xié)議堆中的協(xié)議層和相應(yīng)的PDU名稱

      網(wǎng)絡(luò)層次

      執(zhí)行的協(xié)議

      應(yīng)用層

      FTP,Telnet,SMTP,MIME, X,HTTP,Kerberos,DNS

      NFS,SNMP,TFTP,RPC,DNS,專用協(xié)議

      傳輸層

      TCP

      UDP

      網(wǎng)絡(luò)層

      IP,ICMP,IGMP

      數(shù)據(jù)鏈路層

      HDLC,PPP,SLIP,Ethernet,X.25,F(xiàn)DDI,TokenRing

      物理層

      RS-232,V.35,10Base,F(xiàn)iberOptic

          圖中:
           CLNP(Connectionless Network Protocol) 無連接網(wǎng)絡(luò)協(xié)議
           DNS(Domain Name System) 域名系統(tǒng)
           HDLC(High-level Data Link Control) (IBM)高級數(shù)據(jù)鏈路控制規(guī)程
           ICMP(Internet Control Messages Protocol) 網(wǎng)際控制消息協(xié)議
           IGMP(Internet Group Multicast Protocol) 因特網(wǎng)多目標(biāo)廣播協(xié)議
           Kerberos 科巴樓司協(xié)議(美國麻省理工學(xué)院制定的一種網(wǎng)絡(luò)確認(rèn)協(xié)議)
           MIME(Multipurpose Internet Mail Extension protocol) 多用途網(wǎng)際郵件擴(kuò)充協(xié)議
           NFS(Network File System) 網(wǎng)絡(luò)文件系統(tǒng)
           RPC(Remote Procedure Call) 遠(yuǎn)程過程調(diào)用
           SMTP(Simple Message Transfer Protocol) 簡單郵件傳輸協(xié)議
           SNMP(Simple Network Management Protocol) 簡單網(wǎng)絡(luò)管理協(xié)議
           TFTP(Trivial File Transfer Protocol) 普通文件傳輸協(xié)議
           TP4(Transport Protocol Class 4) 傳輸協(xié)議類4
           X:X-Windows

      圖15-09 各層上的部分協(xié)議(供參考)

        協(xié)議層上的協(xié)議由軟件、硬件或者組合軟硬件一起執(zhí)行。應(yīng)用層協(xié)議(如HTTP和SMTP)和傳輸層協(xié)議(如TCP和UDP)幾乎都是用軟件執(zhí)行;物理層和數(shù)據(jù)鏈路層協(xié)議是負(fù)責(zé)鏈路上的通信,因此通常在網(wǎng)絡(luò)接口卡上執(zhí)行,例如以太網(wǎng)卡或者ATM接口卡;網(wǎng)絡(luò)層上的協(xié)議通常由軟件或者由軟硬件聯(lián)合執(zhí)行。網(wǎng)絡(luò)協(xié)議堆中的每一層協(xié)議都有它自己的職責(zé)。此外,為使上下層之間工作協(xié)調(diào),層與層之間的接口必需要有精確的定義,這些精確的定義在相應(yīng)的標(biāo)準(zhǔn)中都有詳盡的說明?,F(xiàn)將各層的主要功能說明如下。
        (1) 應(yīng)用層:負(fù)責(zé)支持網(wǎng)絡(luò)應(yīng)用。它所包含的協(xié)議包括支持Web的HTTP,支持電子郵件的SMTP和支持文件傳輸?shù)腇TP等協(xié)議。
        (2) 傳輸層:負(fù)責(zé)把應(yīng)用層消息遞送給終端機(jī)的應(yīng)用層。因特網(wǎng)上的傳輸控制協(xié)議(Transfer Control Protocol,TCP)和用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol,UDP)這兩種傳輸協(xié)議都能遞送應(yīng)用層消息。TCP提供面向連接服務(wù),而UDP提供無連接服務(wù)。TCP為應(yīng)用層提供許多重要的服務(wù),包括保證把應(yīng)用層消息遞送到目的地,把很長的消息分割成比較小的消息段,提供超時監(jiān)視和端對端的確認(rèn)和重遞送功能,提供流程控制方法使得源端能夠根據(jù)擁擠情況調(diào)節(jié)傳輸速率。
        (3) 網(wǎng)絡(luò)層:為數(shù)據(jù)包安排從源端到終端的行程。因特網(wǎng)在網(wǎng)絡(luò)層上有網(wǎng)際IP協(xié)議和網(wǎng)際控制消息協(xié)議(Internet Control Message Protocol,ICMP)等協(xié)議。傳輸層協(xié)議就是依賴IP協(xié)議安排傳輸層消息段從源端到達(dá)終端的。
        (4) 數(shù)據(jù)鏈路層:負(fù)責(zé)把數(shù)據(jù)幀從一個網(wǎng)絡(luò)單元(主機(jī)或者交換機(jī))遞送到相鄰網(wǎng)絡(luò)單元。鏈路層協(xié)議包括Ethernet, ATM和端對端協(xié)議(Peer-Peer Protocol,PPP)等。由于數(shù)據(jù)包需要途經(jīng)好幾個鏈路才能從源端到達(dá)終端,因此數(shù)據(jù)包可能要沿著它所經(jīng)歷的路線由不同的鏈路層協(xié)議來處理。例如,一個數(shù)據(jù)包也許要由一個鏈路上的以太網(wǎng)協(xié)議和下一個鏈路上的PPP協(xié)議來處理。
        (5) 物理層:物理層的主要工作是把整個數(shù)據(jù)幀從一個網(wǎng)絡(luò)單元遞送到相鄰網(wǎng)絡(luò)單元。物理層的責(zé)任是把數(shù)據(jù)幀中的數(shù)據(jù)從一個網(wǎng)絡(luò)單元遞送到相鄰網(wǎng)絡(luò)單元。這一層的協(xié)議則取決于鏈路的實際的傳輸媒介,例如雙絞線和單模態(tài)光纖。在這一層上就要規(guī)定位速率、傳輸電壓的高低、調(diào)制方式和編碼方法。

      15.2.3 部分網(wǎng)絡(luò)設(shè)備執(zhí)行的協(xié)議

        任何一個數(shù)據(jù)網(wǎng)絡(luò)不僅要有許多硬件支持,而且還要有許多軟件支持才能運轉(zhuǎn)。網(wǎng)絡(luò)硬件包括路由器、網(wǎng)橋、計算機(jī)和接口卡,如以太網(wǎng)、ATM等網(wǎng)卡,而網(wǎng)絡(luò)軟件通常集成到主機(jī)的操作系統(tǒng)和網(wǎng)絡(luò)設(shè)備中,這些軟硬件組合在一起共同執(zhí)行相互通信的協(xié)議。
        在因特網(wǎng)中,最主要的網(wǎng)絡(luò)設(shè)備是主機(jī)和信息包交換機(jī)。主機(jī)就是我們每天使用的PC機(jī)和工作站等,信息包交換機(jī)實際上也是計算機(jī),只是它的用途和名稱不同而已,例如路由器(router)和網(wǎng)橋(bridge)。這些設(shè)備用來連接運行相同類型的網(wǎng)絡(luò)或者是不同類型的網(wǎng)絡(luò)。如圖15-10所示,路由器是局域網(wǎng)(LAN)和因特網(wǎng)之間的接口,用于疏導(dǎo)消息傳輸?shù)闹虚g設(shè)備,它的功能像分類器和解釋器,它查看信息包的地址然后把它們發(fā)送到目的地。網(wǎng)橋主要用于連接使用相同通信協(xié)議和地址結(jié)構(gòu)的網(wǎng)絡(luò),如果在一個組織里有多個局域網(wǎng),而且它們之間的通信很頻繁,使用網(wǎng)橋連接可不必通過主干線。

      圖15-10 路由器和網(wǎng)橋的概念

        如前所述,主機(jī)和信息包交換機(jī)都是以協(xié)議層來組織網(wǎng)絡(luò)軟硬件的,主機(jī)要執(zhí)行所有層次的協(xié)議,而信息包交換機(jī)一般只執(zhí)行底層協(xié)議。例如,網(wǎng)橋(bridge)和路由器(router)都屬于信息包交換機(jī),網(wǎng)橋執(zhí)行層1和層2的協(xié)議,路由器執(zhí)行層1、層2和層3的協(xié)議,而主機(jī)執(zhí)行所有5層的協(xié)議。上述設(shè)備執(zhí)行的協(xié)議如圖15-11所示。此外,中繼器又稱為轉(zhuǎn)發(fā)器(repeater)是另一種網(wǎng)絡(luò)設(shè)備(在圖中沒有表示),它僅僅執(zhí)行層1的協(xié)議。

      層5

               

      層5

      層4

               

      層4

      層3

           

      層3

       

      層3

      層2

       

      層2

       

      層2

       

      層2

      層1

       

      層1

       

      層1

       

      層1

      主機(jī)
      (Host)

       

      網(wǎng)橋
      (bridge)

       

      路由器
      (router)

       

      主機(jī)
      (Host)

      圖15-11 部分網(wǎng)絡(luò)設(shè)備執(zhí)行的協(xié)議

      15.2.4 TCP/IP與以太網(wǎng)

        由于歷史的原因,以及以以太網(wǎng)(Ethernet)為基礎(chǔ)的TCP/IP網(wǎng)絡(luò)比其他類型的網(wǎng)絡(luò)要多,因此很自然地往往把TCP/IP和以太網(wǎng)這兩個術(shù)語連在一起。以太網(wǎng)最初是在1976年由在美國加州的施樂公司(Xerox)的帕洛阿爾托研究中心(Palo Alto Research Center,PARC)開發(fā)的,它在實現(xiàn)電子辦公通信系統(tǒng)道路上向前邁出了一大步。隨后,它的功能不斷得到增強(qiáng),而應(yīng)用不斷擴(kuò)大。
        以太網(wǎng)是一個硬件系統(tǒng),相當(dāng)于OSI模型中的數(shù)據(jù)鏈路層和物理層?,F(xiàn)在已經(jīng)有幾種類型的以太網(wǎng)得到普遍使用,例如稱為10Base2的細(xì)纜以太網(wǎng)(thin Ethernet)和10BaseT的雙絞線以太網(wǎng)(twisted-pair Ethernet),它們的結(jié)構(gòu)是總線結(jié)構(gòu),前者使用類似于電纜電視系統(tǒng)中的同軸電纜,在電纜長度為200米的情況下數(shù)據(jù)傳輸速率為10 Mbps,后者使用普通的非屏蔽雙扭線,在電纜長度為100米的情況下數(shù)據(jù)傳輸速率為10 Mbps。
        以太網(wǎng)和TCP/IP結(jié)合在一起工作得很好,以太網(wǎng)提支持?jǐn)?shù)據(jù)鏈路層和物理層的通信,而TCP/IP支持網(wǎng)絡(luò)層、傳輸層和應(yīng)用層的通信。以太網(wǎng)和TCP/IP都有它們各自的信息包地址的標(biāo)記方法,TCP/IP使用32位地址,而以太網(wǎng)使用48位地址,這兩種地址方案通過TCP/IP中的地址解析協(xié)議(Address Resolution Protocol,ARP)進(jìn)行轉(zhuǎn)換。
        以太網(wǎng)是依靠一個稱為帶有檢測沖突的載波偵聽多路存取(Carrier Sense Multiple Access with Collision Detection,CSMA/CD )協(xié)議進(jìn)行工作的。為了簡化通信操作過程,通信設(shè)備在發(fā)送數(shù)據(jù)之前就先查看網(wǎng)絡(luò)電纜上是否有信息在傳送,如果忙就等待,如果空閑就發(fā)送。如果有兩臺設(shè)備同時在傳輸,這叫做“沖突(collision)”,就等待獲得一個隨機(jī)的空閑時間之后再發(fā)送。

      15.3 網(wǎng)絡(luò)應(yīng)用層協(xié)議

      15.3.1 網(wǎng)絡(luò)應(yīng)用與應(yīng)用層協(xié)議

        在過去的20多年中,人們已經(jīng)發(fā)明了許多非常富有創(chuàng)造性的和奇妙的應(yīng)用。例如,Web、文件傳輸、電子郵件、網(wǎng)絡(luò)新聞和遠(yuǎn)程存取等等,以及現(xiàn)在正在構(gòu)思和開發(fā)的應(yīng)用,例如聲音點播、網(wǎng)際多目標(biāo)網(wǎng)絡(luò)廣播(IP multicasting)、影視點播和因特網(wǎng)電話等等,這些叫做網(wǎng)絡(luò)應(yīng)用(networking applications)。
        這些網(wǎng)絡(luò)應(yīng)用通過相應(yīng)的應(yīng)用層協(xié)議(application-layer protocol)來支持。例如,HTTP,F(xiàn)TP,SMTP,網(wǎng)絡(luò)新聞傳輸協(xié)議(Network News Transfer Protocol,NNTP)和Telnet等等。這些應(yīng)用層協(xié)議的主要職責(zé)是把文件從一臺主機(jī)傳送到另一臺主機(jī),協(xié)議的主要內(nèi)容是定義:
        (1) 消息的內(nèi)容,例如請求消息和響應(yīng)消息。
        (2) 各種消息類型的語法結(jié)構(gòu),也就是消息中的域(field)以及如何描述消息中的域。
        (3) 域的語義,也就是域所包含的信息的含義。
        (4) 確定通信程序何時發(fā)送消息和接收消息的規(guī)則。
        表15-03列出了流行的部分應(yīng)用層協(xié)議。這些應(yīng)用層協(xié)議留駐在協(xié)議堆的最高層(層5),它們依賴傳輸層(層4)提供兩種類型的服務(wù),一種是使用TCP的面向連接服務(wù),另一種是使用用戶數(shù)據(jù)包(User Datagram Protocol,UDP)的無連接服務(wù)。例如,HTTP使用TCP協(xié)議提供可靠的面向連接的服務(wù),而為多媒體應(yīng)用制定的協(xié)議一般都使用UDP協(xié)議提供不可靠的服務(wù),所謂不可靠是指不保證在傳輸過程不丟失信息包,出現(xiàn)的錯誤數(shù)據(jù)既不糾正也不重傳。

      表15-03 流行的部分應(yīng)用層協(xié)議

      網(wǎng)絡(luò)應(yīng)用

      應(yīng)用層(層5)協(xié)議

      傳輸層(層4)協(xié)議

      電子郵件(e-mail)

      SMTP(RFC 821)

      TCP

      遠(yuǎn)程存取 

      Telnet(RFC 854)

      TCP

      萬維網(wǎng)(WWW)

      HTTP(RFC 2068)

      TCP

      文件傳輸

      FTP(RFC 959)

      TCP

      流式多媒體(streaming multimedia)

      (如Real Network公司的)專用協(xié)議

      UDP或者TCP

      因特網(wǎng)電話(Internet telephony)

      (如Vocaltec公司的)專用協(xié)議

      UDP

        網(wǎng)絡(luò)應(yīng)用和網(wǎng)絡(luò)應(yīng)用層協(xié)議是兩個不同的概念。例如,萬維網(wǎng)(Web,World Wide Web,WWW)是環(huán)球超媒體信息網(wǎng),是網(wǎng)絡(luò)應(yīng)用的典范,它可讓用戶從Web服務(wù)器上得到文檔資料,它所運行的模式叫做客戶機(jī)/服務(wù)機(jī)(Client/Server)模式,如圖15-12所示。Web應(yīng)用主要由下面幾個部分組成:①文檔格式標(biāo)準(zhǔn)(如HTML),②Web瀏覽器(如Netscape Navigator,Internet Explorer),③Web服務(wù)器(如Microsoft公司和Netscape公司的服務(wù)器),④應(yīng)用層上的協(xié)議HTTP。Web系統(tǒng)是負(fù)責(zé)把以HTML語言編寫的多媒體文件從運行Web服務(wù)器的服務(wù)機(jī)上傳送到運行Web瀏覽器的客戶機(jī),而Web的超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是網(wǎng)絡(luò)應(yīng)用的一小部分。又如電子郵件系統(tǒng)是負(fù)責(zé)把電子郵件從源端電子郵件服務(wù)器(mail server)傳送到終端電子郵件服務(wù)器,而簡單郵件傳輸協(xié)議(Simple Message Transfer Protocol,SMTP)是該應(yīng)用系統(tǒng)的一部分。

      圖15-12 客戶機(jī)/服務(wù)機(jī)模式

        因特網(wǎng)的許多協(xié)議都定義在征求評議文件(Request For Comments,RFC)中。例如,應(yīng)用層協(xié)議HTTP/1.1定義在RFC 2068中,簡單郵件傳輸協(xié)議SMTP定義在RFC 821中。隨著技術(shù)的不斷更新,RFC也在不斷修改。RFC經(jīng)過討論和實踐之后就成為標(biāo)準(zhǔn),并用“STD XXXX”來命名。
        執(zhí)行應(yīng)用層協(xié)議的軟件有兩個單獨的部分:一部分在服務(wù)機(jī)上運行,通常稱為server(服務(wù)器),另一部分在客戶機(jī)上運行。例如,執(zhí)行HTTP協(xié)議的軟件,在服務(wù)機(jī)上的軟件叫做HTTP服務(wù)器或者叫做WWW服務(wù)器,在客戶機(jī)上的軟件通常稱為瀏覽器(browser)。
        許多軟件包都組合了執(zhí)行多種協(xié)議的應(yīng)用程序。例如Microsoft公司的Internet Explorer和Netscape公司的Netscape Communicator就有Web瀏覽器、電子郵件讀寫器、新聞閱讀器等應(yīng)用程序,這樣就把用戶、應(yīng)用程序、應(yīng)用層協(xié)議和傳輸層協(xié)議鏈在一起,如圖15-13所示。


      圖15-13 “用戶-應(yīng)用程序包-協(xié)議”鏈

      15.3.2 超文本傳送協(xié)議HTTP

        1989年~1991年在歐洲粒子物理研究所(Conseil Européen pour la Recherche Nucléaire,the European Laboratory for Particle Physics,CERN)由Tim Berners-Lee構(gòu)思了萬維網(wǎng)(Web),它的4個核心部分是HTML,HTTP,Web服務(wù)器和Web瀏覽器。超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是應(yīng)用層協(xié)議,它定義Web頁面如何從Web服務(wù)器傳送到Web瀏覽器。直到1997年,幾乎所有Web瀏覽器和Web服務(wù)器都使用HTTP/1.0,該協(xié)議定義在RFC 1945中。從1998年開始Web瀏覽器和Web服務(wù)器開始執(zhí)行HTTP/1.1,該協(xié)議定義在RFC 2068中。
        1. HTTP的執(zhí)行過程
        在服務(wù)機(jī)向客戶機(jī)傳送文檔之前,客戶機(jī)和服務(wù)機(jī)需要建立TCP連接(參考下一節(jié)的介紹)。TCP連接由客戶機(jī)上的Web瀏覽器使用URL中的域名地址(如www.)或者叫做服務(wù)器的地址來啟動(編者已注意到URL中的這個域的英文名稱很多,因此中文的名稱也很多,但它們的含義都相同)。與TCP的連接一旦建立,Web瀏覽器就發(fā)送一個HTTP請求消息(HTTP Request Message)到這個連接上,服務(wù)器接收到請求之后就給Web瀏覽器回送一個HTTP響應(yīng)消息(Response Message),在服務(wù)器發(fā)送響應(yīng)信息之后就斷開TCP連接。Web服務(wù)器和Web瀏覽器之間的通信如圖15-14所示。

      圖15-14 Web服務(wù)器和Web瀏覽器之間的通信

        一個典型的Web頁面(Web page)由許多Web對象組成,這些對象通常存儲在服務(wù)機(jī)的文件系統(tǒng)中。所謂Web對象是指用URL標(biāo)識的HTML文件、GIF圖象文件、JPEG圖象文件、電視圖象、聲音文件或者Java小應(yīng)用程序等等,Web網(wǎng)頁本身也是Web對象。例如,Web頁面可由HTML格式的文本、JPEG格式的圖象和Java小應(yīng)用程序組成。在傳送Web網(wǎng)頁時,傳送一個對象需要建立一次TCP連接,如圖15-15。


      圖15-15 使用TCP連接傳送對象

        當(dāng)客戶機(jī)接收到Web頁面之后,Web瀏覽器就顯示該網(wǎng)頁。但不同公司開發(fā)的瀏覽器解釋W(xué)eb頁面時,在客戶機(jī)上顯示出的格式可能會有些不相同。HTTP對如何在客戶機(jī)上顯示W(wǎng)eb頁面不做任何事情,HTTP僅僅定義在客戶機(jī)和服務(wù)機(jī)之間如何傳送數(shù)據(jù)。
        2. HTTP請求消息
        HTTP協(xié)議(RFC 1945和RFC 2068)定義了兩種消息格式:HTTP請求消息(HTTP Request Message)格式和HTTP響應(yīng)消息(HTTP Response Message)格式。HTTP消息請求格式如圖15-16所示,如前所述,當(dāng)用戶點擊超鏈接以請求Web頁面時,首先與相應(yīng)的Web服務(wù)器建立TCP連接,然后經(jīng)TCP連接把HTTP請求消息發(fā)送給Web服務(wù)器。


      圖15-16 HTTP請求消息格式

        請求消息由請求行、標(biāo)題行中的各種標(biāo)題域和實體主體(entity body)組成。請求行和標(biāo)題行由ASCII字符組成。圖中的sp域、cr域和if域分別代表空格(space)字符、回車-換行(carriage-return)字符和換行(line-feed)字符。我們先看請求行中的那些域:
        (1) 統(tǒng)一資源地址<URL>域是用戶請求訪問的Web頁面的路徑和文件名,而服務(wù)器的名稱和應(yīng)用層協(xié)議的名稱(如http://)是系統(tǒng)自動設(shè)置的。如<URL>域包含
          chinese/internet/search.html
        (2) 版本<version>域是客戶機(jī)使用的HTTP的版本號。1997年是使用HTTP/1.0(RFC 1945),1998年開始使用HTTP/1.1(RFC 2068),它向后兼容HTTP/1.0。
        (3) 方法<method>域有很重要的意義,它的值描述請求的方法,兩個普通的值是GET和POST:
        ?、?GET:如果客戶請求一個Web頁面就把GET寫入<method>域,在這種情況下實體主體<entity body>域是空的。
        ?、?POST:如果客戶已經(jīng)填寫了一張表單,例如填寫了一個搜索關(guān)鍵字“多媒體”或者“multimedia”,就把POST填入<method>域,然后把這表單送給給服務(wù)器,再由服務(wù)器交給檢索軟件(如Yahoo)。如果方法域中的值是POST,實體主體<entity body>域就包含用戶寫入表單域中的內(nèi)容。
        在消息請求格式中的其余行是標(biāo)題行。盡管標(biāo)題行是可選擇的,但客戶一般都要在請求消息時插入許多標(biāo)題行。每一標(biāo)題行都包含兩個部分:標(biāo)題域名<header field name>和相關(guān)的值<value>。下面是一個使用GET方法向Web服務(wù)器請求對象的一個例子。
        ****************************************
         GET normal/html_design.html HTTP/1.1
         Connection:close
         User-agent:Netscape Communicator/4.5
         Accept:text/html, image/gif, image/jpeg
         Accept-language:cn
         (extra carriage return, line feed)
        ****************************************
        這個請求消息包含一行請求行和4行標(biāo)題行,整個消息共有5行ASCII文本。 請求行(GET normal/html_design.html HTTP/1.1)用來告訴服務(wù)器:瀏覽器使用GET方法想要得到的對象是“normal/html_design.html”,使用的應(yīng)用層協(xié)議是HTTP/1.1。
        標(biāo)題行共有4行,分別是:
       ?、?標(biāo)題行“Connection:close”用來告訴服務(wù)器:瀏覽器不想采用持續(xù)連接,在發(fā)送請求對象之后服務(wù)器就可斷開連接。
        ② 標(biāo)題行“User-agent:Netscape Communicator/4.5”用來告訴服務(wù)器用戶代理的類型,也就是用戶使用的瀏覽器的類型,在這個例子中的用戶代理是Communicator/4.5。
       ?、?標(biāo)題行“Accept:text/html, image/gif, image/jpeg”用來告訴服務(wù)器瀏覽器準(zhǔn)備接收對象的類型。
       ?、?標(biāo)題行“Accept-language:cn”用來告訴服務(wù)器如果有中文版的對象就發(fā)送中文版的對象,沒有就發(fā)送服務(wù)器默認(rèn)的對象。
        3. HTTP響應(yīng)消息
        服務(wù)器接收到客戶的HTTP請求消息(HTTP Request Message)之后進(jìn)行分析,將分析和操作結(jié)果返回給客戶機(jī),具體做法就是發(fā)送一條HTTP響應(yīng)消息(HTTP Response Message),然后斷開相應(yīng)的TCP連接。響應(yīng)消息的一般格式如圖15-17所示。


      圖15-17 HTTP響應(yīng)消息格式

        從圖中可以看到,除了狀態(tài)行之外,響應(yīng)消息的格式與請求消息的格式相同。實體主體(entity body)包含有請求消息要求獲得的對象,即文件。
        除了HTTP的版本號之外,狀態(tài)行還包含狀態(tài)碼<status code>和短語<phrase>,它們組合起來表示客戶請求所獲得的結(jié)果。例如,如果請求文件存放在Web服務(wù)器的文件系統(tǒng)中,而且可發(fā)送給客戶機(jī),狀態(tài)碼和短語就分別包含“200”和“Document follows”(文檔如下)或“OK”。如果客戶機(jī)請求的文件沒有得到的授權(quán),這兩個域中的值就分別為“403”和“Forbidden”(禁止),而實體主體可能有一個解釋,例如“your client does not have permission to get this URL”(你的客戶沒有得到允許去訪問這個URL)。
        一般情況下,3位狀態(tài)碼中的第1位包含一般信息?!?”表示信息碼,“2”表示訪問成功,“3”表示重定向(即URL已經(jīng)改變),“4”表示你的請求有誤,“5”Web服務(wù)器出錯。當(dāng)你存取某個文件時有可能看到下面的一些信息:
        200:表示你的請求得到滿足,信息在響應(yīng)消息中返回。
        301:表示請求的對象已經(jīng)被刪除;新的URL放在響應(yīng)消息標(biāo)題中,客戶的軟件將自動轉(zhuǎn)到新的URL。
        400:表示服務(wù)器不能理解你的請求。
        404:表示服務(wù)器沒有找到請求的文件,請求的文件不存在。
        505:表示服務(wù)器不支持瀏覽器請求使用的的HTTP版本號。

        一個HTTP響應(yīng)消息的例子如下:
        ****************************************
        HTTP/1.1 200 OK
        Connection: close
        Date: Thu, 08 Jan 1999 12:00:15 GMT
        Server: XXXX
        Last-Modified: Mon, 22 Jun 1998 09:23:24 GMT
        Content-Length: 3456
        Content-Type: text/html
        data data data ...
        ****************************************
        在這個例子中,除了狀態(tài)行之外還包含6行標(biāo)題行,而且大多數(shù)都自含解釋。最后一行標(biāo)題行的“data data data ……”是傳送的實際對象。
        服務(wù)器一旦發(fā)送響應(yīng)消息,就斷開TCP連接。如果HTML文件包含其他對象(如GIF圖,JPG圖象,AVI文件等),HTTP就對每個對象分別打開一個TCP連接進(jìn)行傳送。HTTP服務(wù)器軟件不保留任何客戶機(jī)的狀態(tài)信息,它只是簡單地接收在TCP連接上的對象請求,從文件系統(tǒng)中獲取對象,把響應(yīng)消息中的對象傳送給同一TCP連接,然后斷開TCP連接。由于HTTP服務(wù)器不保留客戶的狀態(tài)信息,所以把HTTP協(xié)議稱為無狀態(tài)協(xié)議(stateless protocol)。
        4. 條件獲取
        使用過Web瀏覽器的用戶可能已經(jīng)知道,Web瀏覽器有一個功能可供用戶進(jìn)行設(shè)置,即把客戶訪問過的Web對象存放在高速緩存(cache)中,Web的高速緩存留駐在客戶機(jī)上或者留駐在網(wǎng)絡(luò)上的代理服務(wù)機(jī)(proxy server)中。瀏覽器的這種功能是減少已經(jīng)閱讀的對象的時延和減輕Web網(wǎng)絡(luò)交通負(fù)擔(dān)的一種非常重要的手段,這也是用戶(特別是調(diào)制解調(diào)器用戶)省錢的好辦法,尤其是對網(wǎng)絡(luò)速度很低的國家和地區(qū)顯得更為重要。
        使用Web頁面緩存有一個危險,就是留駐在緩存中的對象副本會過時,因此用戶對一些經(jīng)常會作修改的網(wǎng)頁(如公告欄)需要使用瀏覽器界面上的刷新操作(如IE瀏覽器的或者網(wǎng)景公司的)重新獲取。幸運的是HTTP有一種措施來保證遞送給Web瀏覽器的頁面是最新的,這個措施叫做條件獲取(conditional GET)。如果請求消息使用GET方法并且包含If-Modified-Since(如果從…之后修改)標(biāo)題行,這個HTTP請求就是條件獲取。
        例如,一個Web瀏覽器希望得到一個對象,Web瀏覽器首先檢查本機(jī)Web瀏覽器的緩存中是否有此對象。如果請求的對象不在緩存中,Web瀏覽器就使用標(biāo)準(zhǔn)的GET方法,即不包含If-Modified-Since的標(biāo)題行;如果對象已經(jīng)在緩存中,Web瀏覽器就發(fā)送一條帶標(biāo)題行的條件GET消息到原來的Web服務(wù)器,如,
         If-Modified-Since: Wed, 27 May 1998 10:15:30 GMT
        這行標(biāo)題行表示緩存中的對象是在1998年5月27日格林尼治標(biāo)準(zhǔn)時間10:15:30存儲的。當(dāng)Web服務(wù)器接收到這個條件獲取消息(conditional GET message)時,如果對象已經(jīng)修改,就發(fā)送這個對象的拷貝給客戶機(jī),否則就給客戶機(jī)發(fā)送一條對象沒有被修改的響應(yīng)消息。
        5 HTTP/1.0與HTTP/1.1
        如前所述,Web服務(wù)器和Web瀏覽器從1998年開始執(zhí)行新的協(xié)議——HTTP/1.1。它是向后兼容HTTP/1.0的協(xié)議,即執(zhí)行HTTP/1.0的Web瀏覽器能夠與執(zhí)行HTTP/1.1的服務(wù)器進(jìn)行通信,而執(zhí)行HTTP/1.1的Web瀏覽器能夠與執(zhí)行HTTP/1.0的服務(wù)器進(jìn)行通信。
        HTTP/1.0和HTTP/1.1都有非持續(xù)連接(non-persistent connection)和持續(xù)連接(persistent connection)功能。非持續(xù)連接是指啟動一次TCP連接服務(wù)機(jī)就向客戶機(jī)傳送一個對象,而持續(xù)連接是指服務(wù)機(jī)可在相同的TCP連接上向客戶機(jī)發(fā)送多個對象。HTTP/1.0的默認(rèn)設(shè)置是非持續(xù)連接,而HTTP/1.1的默認(rèn)設(shè)置是持續(xù)連接。
        在使用HTTP/1.0的情況下,如果打開一個包含一個HTML文件和10個內(nèi)聯(lián)圖象對象的網(wǎng)頁時,HTTP就要建立11次TCP連接才能把文件從服務(wù)機(jī)傳送到客戶機(jī)。而使用HTTP/1.1的情況下,如果打開同樣的文件時,HTTP建立一次TCP連接就可把文件從服務(wù)機(jī)傳送到客戶機(jī)。使用一次TCP連接傳送一個對象的效率比較低,這體現(xiàn)在下列幾個方面:
        (1) 每次TCP連接必需要建立和斷開??蛻魴C(jī)和服務(wù)機(jī)建立一次連接需要執(zhí)行三向溝通連接法(three-way handshake),服務(wù)機(jī)在對象遞送之后要斷開TCP連接。在建立和斷開連接時要占用CPU的資源。如果使用一次連接代替11次連接的話,占用客戶機(jī)和服務(wù)機(jī)的CPU時間可大大減少。
        (2) 對每次連接,客戶機(jī)和服務(wù)機(jī)都必須分配發(fā)送和接收緩存。這就意味著要影響客戶機(jī)和服務(wù)機(jī)的存儲器資源,這同樣要占用CPU的時間。
        (3) 對由大數(shù)量對象組成的文件,TCP的低速啟動算法(slow start-up algorithm)會限制服務(wù)機(jī)向客戶機(jī)傳送對象的速度。使用HTTP/1.1之后,大多數(shù)對象都可以盡最大的速率傳送。
        由于HTTP/1.1允許持續(xù)連接,文件中的所有對象都可在相同的TCP連接上傳送。HTTP/1.1也允許在客戶機(jī)接收到服務(wù)機(jī)的消息響應(yīng)之前發(fā)送多個消息請求,這叫做流水線式請求(pipelined request)。

      15.4 網(wǎng)絡(luò)傳輸層協(xié)議

      15.4.1 傳輸層簡介

        如果因特網(wǎng)協(xié)議堆按5層來劃分,第4層就是傳輸層(transport layer),它是應(yīng)用層(第5層)和網(wǎng)絡(luò)層(第3層)之間的接口。傳輸層為應(yīng)用層上的應(yīng)用提供兩類截然不同的服務(wù):第一類服務(wù)叫做可靠的面向連接服務(wù)(connection-oriented service),確保正確無誤地把消息從源端傳送到目的地,使用的協(xié)議是TCP協(xié)議。第二類服務(wù)是不可靠的無連接服務(wù)(unreliable, connectionless service),使用的協(xié)議是用戶數(shù)據(jù)包協(xié)議UDP(User Datagram Protocol)。一般來說,應(yīng)用層協(xié)議運行在操作系統(tǒng)之上,而傳輸層協(xié)議集成在操作系統(tǒng)之中。因此,當(dāng)設(shè)計網(wǎng)絡(luò)應(yīng)用時,設(shè)計人員必需要指定其中的一種網(wǎng)絡(luò)傳輸協(xié)議,網(wǎng)絡(luò)多媒體應(yīng)用通常使用UDP協(xié)議。
        在前面已經(jīng)提到,一個網(wǎng)絡(luò)單元層n(layer n)與另一個網(wǎng)絡(luò)單元層n(layer n)交換的消息是層n(layer n)上的消息,這些消息稱為層n協(xié)議數(shù)據(jù)單元(layer-n protocol data unit,n-PDU)。如圖15-18所示,主機(jī)A的傳輸層與主機(jī)B的傳輸層交換的消息就是傳輸層上的消息,這叫做邏輯上的端-端傳輸,當(dāng)信息包通過中間設(shè)備(例如路由器、網(wǎng)橋和中繼器等設(shè)備)時,這些網(wǎng)絡(luò)設(shè)備對使用UDP協(xié)議的信息包和使用TCP協(xié)議的信息包將一視同仁。在一些網(wǎng)絡(luò)文獻(xiàn)中,通常把使用UDP的協(xié)議數(shù)據(jù)單元(protocol data unit,PDU)稱為數(shù)據(jù)包(datagram),但網(wǎng)絡(luò)文獻(xiàn)也使用數(shù)據(jù)包(datagram)這個術(shù)語表示網(wǎng)絡(luò)層的PDU,名詞術(shù)語不統(tǒng)一就會使人很混亂。為了簡化術(shù)語,本書把傳輸層上的協(xié)議數(shù)據(jù)單元PDU稱為消息段(segment),或者就叫做傳輸層協(xié)議數(shù)據(jù)單元。


      圖15-18 傳輸層之間的通信

      15.4.2 端口號和套接號的概念

        在客戶機(jī)/服務(wù)機(jī)(client/server)運行模式中,一端的主機(jī)叫做客戶機(jī),另一端的主機(jī)叫做服務(wù)機(jī)。一臺服務(wù)機(jī)可以同時運行同一應(yīng)用程序的幾個進(jìn)程,例如服務(wù)機(jī)上的FTP服務(wù)軟件可以同時給幾個客戶傳送文件,對每個客戶至少要調(diào)用一個FTP服務(wù)軟件的進(jìn)程。同樣,一個客戶可以同時與幾臺不同的主機(jī)進(jìn)行遠(yuǎn)程對話,對每個不同的主機(jī),客戶軟件至少要調(diào)用一個遠(yuǎn)程客戶軟件的進(jìn)程。因此,對連網(wǎng)計算機(jī)上的進(jìn)程就需要相互聯(lián)系的端口號來遞送IP信息包。
        在因特網(wǎng)上,所有使用TCP或者UDP協(xié)議的應(yīng)用程序都有一個標(biāo)識協(xié)議本身的永久性端口號(port number)。例如,我們在設(shè)置Web瀏覽器或者FTP文件傳輸程序時會經(jīng)常遇到的端口號:HTTP的端口號=80,F(xiàn)TP的端口號=21,電子郵件協(xié)議SMTP的端口號=25,Telnet的端口號=23,這些端口號叫做眾所周知的端口號(well-known port number)。端口號的分配定義在RFC 1700中,并在1994年成為一個標(biāo)準(zhǔn),標(biāo)準(zhǔn)號是STD0002??晒㏕CP使用的端口號共計65,535,一般來說,大于255的端口號由本地的機(jī)器使用,小于255的端口號用于頻繁使用的進(jìn)程,0和255是保留端口號。
        收發(fā)兩端的傳輸層TCP之間的通信由兩個號碼的組合來鑒別,一個是機(jī)器的IP地址,另一個是TCP軟件使用的端口號,這兩個號碼組合在一起就叫做套接標(biāo)識符(socket)或者叫做套接號,而且收發(fā)雙方都需要有套接標(biāo)識符。因為在互聯(lián)網(wǎng)上機(jī)器的IP地址是唯一的,而對單臺機(jī)器的端口號也是唯一的,因此套接標(biāo)識符在互聯(lián)網(wǎng)上也是唯一的,這就可通過套接標(biāo)識符使互聯(lián)網(wǎng)絡(luò)上的進(jìn)程之間相互通信。互聯(lián)網(wǎng)上收發(fā)兩端的進(jìn)程之間的通信建立過程如圖15-19所述。


      圖15-19 使用套接標(biāo)識符建立虛擬線路連接

      15.4.3 用戶數(shù)據(jù)包傳輸協(xié)議(UDP)

        1. UDP協(xié)議簡介
        因特網(wǎng)為網(wǎng)絡(luò)應(yīng)用提供有兩種不同的傳輸協(xié)議:用戶數(shù)據(jù)包傳輸協(xié)議(User Datagram Protocol,UDP)和傳輸控制協(xié)議TCP(Transfer Control Protocol)。不同的網(wǎng)絡(luò)應(yīng)用使用不同的協(xié)議,如圖15-20所示。例如,HTTP使用TCP協(xié)議,而普通文件傳輸協(xié)議(Trivial File Transfer Protocol,TFTP)則使用UDP。
        UDP協(xié)議不提供端-端的確認(rèn)和重傳功能,它不保證信息包一定能到達(dá)目的地,因此稱為不可靠協(xié)議。應(yīng)用開發(fā)人員選擇UDP時,應(yīng)用層協(xié)議軟件幾乎是直接與IP通信。

      應(yīng)用層協(xié)議

      HTTP,F(xiàn)TP,Telnet,SMTP,NNTP,……

      TFTP,RTP,Real Audio,……

      傳輸層協(xié)議

      TCP

      UDP

      網(wǎng)絡(luò)層

      IP,ICMP,IGMP

        HTTP(Hypertext Transfer Protocol) 超文本傳送協(xié)議
        FTP(File Transfer Protocol) 文件傳輸協(xié)議
        Telnet 遠(yuǎn)程聯(lián)接服務(wù)標(biāo)準(zhǔn)協(xié)議
        SMTP(Simple Mail Transfer Protocol) 簡單郵件傳輸協(xié)議
        RTP(Real-time Transport Protocol) 實時傳輸協(xié)議

      圖15-20 傳輸層協(xié)議與相鄰層協(xié)議之間的關(guān)系

        UDP有下述幾個特性:
        (1) UDP是一個無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。
        (2) 由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務(wù)機(jī)可同時向多個客戶機(jī)傳輸相同的消息。
        (3) UDP信息包的標(biāo)題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包的額外開銷很小。
        (4) 吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。
        雖然UDP是一個不可靠的協(xié)議,但它是分發(fā)信息的一個理想?yún)f(xié)議。例如,在屏幕上報告股票市場、在屏幕上顯示航空信息等等。UDP也用在路由信息協(xié)議RIP(Routing Information Protocol)中修改路由表。在這些應(yīng)用場合下,如果有一個消息丟失,在幾秒之后另一個新的消息就會替換它。UDP廣泛用在多媒體應(yīng)用中,例如,Progressive Networks公司開發(fā)的RealAudio軟件,它是在因特網(wǎng)上把預(yù)先錄制的或者現(xiàn)場音樂實時傳送給客戶機(jī)的一種軟件,該軟件使用的RealAudio audio-on-demand protocol協(xié)議就是運行在UDP之上的協(xié)議,大多數(shù)因特網(wǎng)電話軟件產(chǎn)品也都運行在UDP之上。
        2. UDP協(xié)議的標(biāo)題結(jié)構(gòu)
        UDP信息包由UDP標(biāo)題和數(shù)據(jù)組成。UDP的標(biāo)題結(jié)構(gòu)如圖15-21所示,它由5個域組成:源端端口(Source Port)、目的地端口(Destination Port)、用戶數(shù)據(jù)包的長度(Length)和檢查和(Checksum)。其中,前4個域組成UDP標(biāo)題(UDP header),每個域由4個字節(jié)組成;檢查和域占據(jù)2個字節(jié),它用來檢測傳輸過程中是否出現(xiàn)了錯誤;用戶數(shù)據(jù)包的長度包括所有5個域的字節(jié)數(shù)。


      圖15-21 UDP信息包的標(biāo)題結(jié)構(gòu)

        檢查和的詳細(xì)計算可在RFC 1071中找到,現(xiàn)舉一例說明使用檢查和檢測錯誤的道理。例如,假設(shè)從源端A要發(fā)送下列3個16位的二進(jìn)制數(shù):word1,word2和word3到終端B,檢查和計算如下:

      word1

      0110011001100110

      word2

      0101010101010101

      word3

      0000111100001111

      sum=word1+ word2+ word3

      1100101011001010

      檢查和(sum的反碼)

      0011010100110101

        從發(fā)送端發(fā)出的4個(word1,2,3以及檢查和)16位二進(jìn)制數(shù)之和為1111111111111111,如果接收端收到的這4個16位二進(jìn)制數(shù)之和也是全“1”,就認(rèn)為傳輸過程中沒有出差錯。
        許多鏈路層協(xié)議都提供錯誤檢查,包括流行的以太網(wǎng)協(xié)議,讀者也許想知道為什么UDP也要提供檢查和。其原因是鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯誤檢測。雖然UDP提供有錯誤檢測,但檢測到錯誤時,UDP不做錯誤校正,只是簡單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息。
        讀者也可能會問,收發(fā)兩端的兩個進(jìn)程是否有可能通過UDP提供可靠的數(shù)據(jù)傳輸?答案是可以的。但必需要把確認(rèn)和重傳措施加到應(yīng)用程序中,應(yīng)用程序不能指望UDP來提供可靠的數(shù)據(jù)傳輸。

      15.4.4 傳輸控制協(xié)議(TCP)

        1. TCP協(xié)議簡介
        傳輸控制協(xié)議TCP(Transmission Control Protocol)是TCP/IP協(xié)議堆中的一部分。消息在網(wǎng)絡(luò)內(nèi)部或者網(wǎng)絡(luò)之間傳遞時要打包,TCP負(fù)責(zé)把來自高層協(xié)議的數(shù)據(jù)裝配成標(biāo)準(zhǔn)的數(shù)據(jù)包,相當(dāng)于在數(shù)據(jù)包上貼包裝清單,而IP則相當(dāng)于在數(shù)據(jù)包上貼收、發(fā)人的姓名和地址,TCP和IP之間要進(jìn)行相互通信才能完成數(shù)據(jù)的傳輸。TCP/IP協(xié)議中的IP主要負(fù)責(zé)在計算機(jī)之間搬運數(shù)據(jù)包,而TCP主要負(fù)責(zé)傳輸數(shù)據(jù)的正確性。TCP/IP有3個主要的特性:功能豐富,開放性和普遍型。隨著新的網(wǎng)絡(luò)服務(wù)的不斷出現(xiàn),TCP/IP協(xié)議也在不斷修改和擴(kuò)充。
        TCP是傳輸層上的協(xié)議,該協(xié)議定義在RFC 793,RFC 1122,RFC 1323和RFC 2001文件中。目前,TCP協(xié)議比UDP協(xié)議用得更廣泛,也更復(fù)雜。
        TCP是面向連接的協(xié)議。面向連接的意思是在一個應(yīng)用程序開始傳送數(shù)據(jù)到另一個應(yīng)用程序之前,它們之間必須相互溝通,也就是它們之間需要相互傳送一些必要的參數(shù),以確保數(shù)據(jù)的正確傳送。
        TCP是全雙工的協(xié)議。全雙工(full duplex)的意思是,如果在主機(jī)A和主機(jī)B之間有連接,A可向B傳送數(shù)據(jù),而B也可向A傳送數(shù)據(jù)。TCP也是點對點的傳輸協(xié)議,但不支持多目標(biāo)廣播。TCP連接一旦建立,應(yīng)用程序就不斷地把數(shù)據(jù)送到TCP發(fā)送緩存(TCP send buffer),如圖15-22 所示TCP就把數(shù)據(jù)流分成一塊一塊(chunk),再裝上TCP協(xié)議標(biāo)題(TCP header)以形成TCP消息段(TCP segment)。這些消息段封裝成IP數(shù)據(jù)包(IP datagram)之后發(fā)送到網(wǎng)絡(luò)上。當(dāng)對方接收到消息段之后就把它存放到TCP接收緩存(TCP receive buffer)中,應(yīng)用程序就不斷地從這個緩存中讀取數(shù)據(jù)。


      圖15-22 TCP發(fā)送和接收緩存

        TCP為應(yīng)用層和網(wǎng)絡(luò)層上的IP提供許多服務(wù),其中3個最重要的服務(wù)是:
        (1) 可靠地傳輸消息:為應(yīng)用層提供可靠的面向連接服務(wù),確保發(fā)送端發(fā)出的消息能夠被接收端正確無誤地接收到。接收端的應(yīng)用程序確信從TCP接收緩存中讀出的數(shù)據(jù)是否正確是通過檢查傳送的序列號(sequence number)、確認(rèn)(acknowledgement)和出錯重傳(retransmission)等措施給予保證的。
        (2) 流程控制:連接雙方的主機(jī)都給TCP連接分配了一定數(shù)量的緩存。每當(dāng)進(jìn)行一次TCP連接時,接收方主機(jī)只允許發(fā)送端主機(jī)發(fā)送的數(shù)據(jù)不大于緩存空間的大小。如果沒有流程控制,發(fā)送端主機(jī)就可能以比接收端主機(jī)快得多的速度發(fā)送數(shù)據(jù),使得接收端的緩存出現(xiàn)溢出。
        (3) 擁擠控制:TCP保證每次TCP連接不過分加重路由器的負(fù)擔(dān)。當(dāng)網(wǎng)絡(luò)上的鏈路出現(xiàn)擁擠時,經(jīng)過這個鏈路的TCP連接將自身調(diào)節(jié)以減緩擁擠。
        2 TCP協(xié)議標(biāo)題的結(jié)構(gòu)
        如前所述,TCP遞給IP的數(shù)據(jù)塊叫做消息段(segment)。這個消息段由TCP協(xié)議標(biāo)題域(TCP header field)和存放應(yīng)用程序的數(shù)據(jù)域(header fields)組成,如圖15-23所示。

       
      圖15-23 TCP協(xié)議標(biāo)題的結(jié)構(gòu)

        TCP協(xié)議標(biāo)題有很多域組成,現(xiàn)將幾個比較重要的域作一個簡單介紹。
        (1) 源端端口號(Source Port Number)域和目的地端口號(Destination port Number)域:前者的16位域用來識別本機(jī)TCP;后者的16域用來識別遠(yuǎn)程機(jī)器的TCP。
        (2) 順序號(sequence number)域和確認(rèn)號(acknowledgment number)域:這兩個域是TCP標(biāo)題中兩個最重要的域。32位的順序號域用來指示當(dāng)前數(shù)據(jù)塊在整個消息中的位置,而32位的確認(rèn)號域用來指示下一個數(shù)據(jù)塊順序號,也可間接表示最后接收到的數(shù)據(jù)塊順序號。順序號域和確認(rèn)號域由TCP收發(fā)兩端主機(jī)在執(zhí)行可靠數(shù)據(jù)傳輸時使用。
        在介紹順序號(sequence number)和確認(rèn)號(acknowledgement number)之前,首先要介紹TCP最大消息段大小(maximum segment size,MSS)的概念。在建立TCP連接期間,源端主機(jī)和終端主機(jī)都可能宣告最大消息段大小MSS和一個用于連接的最小消息段大小。如果有一端沒有宣告MSS,就使用預(yù)先約定的字節(jié)數(shù)(如1500,536或者512字節(jié))。當(dāng)TCP發(fā)送長文件時,就把這個文件分割成許多按照特定結(jié)構(gòu)組織的數(shù)據(jù)塊(chunk),除了最后一個數(shù)據(jù)塊小于MSS外,其余的數(shù)據(jù)塊大小都等于MSS。在交互應(yīng)用的情況下,消息段通常小于MSS,像Telnet那樣的遠(yuǎn)程登錄應(yīng)用中,TCP消息段中的數(shù)據(jù)域通常僅有一個字節(jié)。
        在TCP數(shù)據(jù)流中的每個字節(jié)都編有號碼。例如,一個106字節(jié)長的文件,假設(shè)MSS為103字節(jié),第一個字節(jié)的順序號定義為0,如圖15-24所示。


      圖15-24 TCP順序號和確認(rèn)號

        順序號就是消息段的段號,段號是分配給該段中第一個字節(jié)的編號。例如,第1個消息段的段號為0,它的順序號就是0;第2個消息段的段號為1000,順序號就為1000;第3個為2000,順序號為2000;… ,依此類推。
        確認(rèn)號(Acknowledgement Number)是終端機(jī)正在等待的字節(jié)號。在這個例子中,當(dāng)終端機(jī)接收到包含字節(jié)0~999的第1個消息段之后,就回送一個第2消息段數(shù)據(jù)的第1個字節(jié)編號(本例中為1000),這個字節(jié)編號就叫做確認(rèn)號,本例中的確認(rèn)號就是1000。依此類推。
        (3) 檢查和(Checksum)域,它的功能和計算方法同UDP中的檢查和。
        (4) 標(biāo)志(flag)域:6位標(biāo)志位中的(Urgent Pointer,URG)標(biāo)志用來表示消息段中的數(shù)據(jù)已經(jīng)被發(fā)送端的高層軟件標(biāo)為“urgent(緊急數(shù)據(jù))”,緊急數(shù)據(jù)的位置由緊急數(shù)據(jù)指針(Urgent Data Pointer)域中的值指定,遇到這種情況時TCP就必須通知接收端的高層軟件;確認(rèn)(Acknowledgment,ACK)標(biāo)志用來表示確認(rèn)號(Acknowledgment Number)的值是有效的;PSH(Push)功能標(biāo)志等于1時接收端應(yīng)該把數(shù)據(jù)立即送到高層;RST(Reset)標(biāo)志等于1時表示TCP連接要重新建立;SYN(Synchronize)標(biāo)志等于1時表示連接時要與順序號同步; FIN標(biāo)志等于1時表示數(shù)據(jù)已發(fā)送完畢。
        (5) 窗口大小(Window Size)域:16位的窗口域用于數(shù)據(jù)流的控制。域中的值表示接收端主機(jī)可接收多少數(shù)據(jù)塊。對每個TCP連接主機(jī)都要設(shè)置一個接收緩存,如圖15-22 所示,當(dāng)主機(jī)從TCP連接中接收到正確數(shù)據(jù)時就把它放在接收緩存中,相關(guān)的應(yīng)用程序就從緩存中讀出數(shù)據(jù)。但有可能當(dāng)從TCP連接來的數(shù)據(jù)到達(dá)時操作系統(tǒng)正在執(zhí)行其他任務(wù),應(yīng)用程序就來不及讀這些數(shù)據(jù),這就很可能會使接收緩存溢出。因此,為了減少這種可能性的出現(xiàn),接收端必須告訴發(fā)送端它有多少緩存空間可利用,TCP就是借助它來提供數(shù)據(jù)流的控制,這就是設(shè)置TCP接收窗口大小的目的。收發(fā)雙方的應(yīng)用程序可以經(jīng)常變更TCP接收緩存大小的設(shè)置,也可以簡單地使用預(yù)先設(shè)定的數(shù)值,這個值通常是2 KB~64 KB。
        (6) 標(biāo)題長度(length)域:4位標(biāo)題長度域用來說明TCP標(biāo)題的長度,單位是32位組成的字的數(shù)目。由于TCP選擇域(option)是可選的,所以TCP標(biāo)題的長度是可變的。這個域通常是空的,因此該域中的值通常是5,標(biāo)題的長度合計20個字節(jié)。
        3. 確立連接
        TCP連接不是端對端的TDM或者FDM線路連接,因為收發(fā)端之間的路由器并不維持TCP連接的任何狀態(tài),TCP連接狀態(tài)完全是留駐在收發(fā)兩端的主機(jī)中。現(xiàn)在讓我們來分析TCP連接建立的過程。
        假設(shè)主機(jī)A想與主機(jī)B建立TCP連接,主機(jī)A就發(fā)送一個特殊的TCP“連接請求消息段(connection request segment)”給主機(jī)B,這個消息段封裝在IP數(shù)據(jù)包中,然后發(fā)送到因特網(wǎng)。主機(jī)B接收到這個消息段之后就分配接收緩存和發(fā)送緩存給這個TCP連接,然后就給主機(jī)A回送一個“允許連接消息段(connection-granted segment)”。主機(jī)A接收到這個回送消息段之后也分配接收緩存和發(fā)送緩存,然后就給主機(jī)B回送“確認(rèn)消息段(acknowledgement segment) ”,這時主機(jī)A和主機(jī)B之間就建立了TCP連接,它們就可在這個連接上相互傳送數(shù)據(jù)。由于主機(jī)A和主機(jī)B之間連接要連續(xù)交換3次消息,因此把這種TCP連接建立的方法稱為三向溝通(three-way handshake)連接法,如圖15-25所示。在三向溝通期間,完成分配收發(fā)緩存、分配發(fā)送端端口號和接收端端口號等工作。


      圖15-25 TCP連接使用三向溝通連接法

        4. 確認(rèn)和重傳
        假設(shè)主機(jī)A和主機(jī)B之間有一個TCP連接,當(dāng)主機(jī)A發(fā)送一個包含數(shù)據(jù)的消息段時,它啟動一個定時器后就等待主機(jī)B對這個消息段的響應(yīng)。主機(jī)A在發(fā)送消息段之后期待在一定的時間范圍里接收到B的響應(yīng),這個期待的時間稱為傳輸?shù)却龝r間(timeout)。如果在等待時間之內(nèi)沒有接收到確認(rèn)消息段,主機(jī)A就重發(fā)包含數(shù)據(jù)的消息段。這個過程如圖15-26所示。


      圖15-26 確認(rèn)和重傳

        當(dāng)主機(jī)B接收到一個消息段時,延遲若干分之一秒(通常200 ms)之后就回送一個確認(rèn)消息段。如果主機(jī)B接收到的消息段是無順序的,TCP執(zhí)行軟件會重新整理使數(shù)據(jù)流符合主機(jī)A的發(fā)送順序,它也會去掉重復(fù)的消息段。

      15.5 網(wǎng)絡(luò)層上的網(wǎng)際協(xié)議

        網(wǎng)際協(xié)議(Internet Protocol,IP)是TCP/IP協(xié)議堆中的一個協(xié)議,是網(wǎng)絡(luò)層上的一個協(xié)議。雖然“Internet”這個詞在協(xié)議名稱里面,但它不限于用在因特網(wǎng)上,它也可以用在與因特網(wǎng)完全無關(guān)的專用網(wǎng)絡(luò)上。IP的主要任務(wù)是把來自TCP或者UDP協(xié)議執(zhí)行軟件裝配的消息裝配成數(shù)據(jù)包(datagram),負(fù)責(zé)安排數(shù)據(jù)包的傳送路線以及在接收端把數(shù)據(jù)包還原成原來的消息段。
        數(shù)據(jù)包是IP使用的傳輸單元,有時更明確地叫做IP數(shù)據(jù)包(IP datagram)。IP協(xié)議的主要內(nèi)容是定義IP數(shù)據(jù)包標(biāo)題(Internet Protocol Datagram Header),它由6個32位長共計24個字節(jié)組成,它的結(jié)構(gòu)如圖15-27所示。如果不使用“選擇(option)”域,最短的標(biāo)題是5個32位長的字。

      Version Number

      Header Length

      Type of Service
      (服務(wù)類型)

      Datagram Length
      (數(shù)據(jù)包長度)

      Identification(標(biāo)識)

      0

      DF

      MF

      Fragment Offset
      (數(shù)據(jù)塊偏移)

      Time to Live (TTL)
      (生存時間)

      Transport Protocol
      (傳輸協(xié)議)

      Header Checksum
      (標(biāo)題檢查和)

      Sending Address(發(fā)送端地址)

      Destination Address(目的地地址)

      Options(現(xiàn)在項)

      Padding(填充)

      圖15-27 IP數(shù)據(jù)包標(biāo)題的結(jié)構(gòu)

        版本號(Version Number)域:4位長的版本號域包含協(xié)議軟件使用的IP版本號,接收軟件根據(jù)版本號就可以知道如何處理標(biāo)題中的其他域的內(nèi)容。目前使用最廣泛的版本號是4。雖然有幾個系統(tǒng)正在測試第6版本,叫做下一代網(wǎng)際協(xié)議(IPng)——IPv6,但因特網(wǎng)和大多數(shù)局域網(wǎng)目前還不支持這個新協(xié)議。
        標(biāo)題長度(Header Length)域:4位長的標(biāo)題長度域包含由發(fā)送端創(chuàng)建的IP標(biāo)題的總長度。最短的標(biāo)題長度為20個字節(jié),最長為24個字節(jié)。
        服務(wù)類型(Type of Service)域:8位長的服務(wù)類型域用來引導(dǎo)IP如何處理數(shù)據(jù)包,它的格式如下:

      Precedence (3 bits)

      Delay

      Throughput

      Reliability

      Not used

        ①前3位表示數(shù)據(jù)包的優(yōu)先權(quán)(precedence),數(shù)值越大表示優(yōu)先權(quán)越高,但執(zhí)行TCP/IP的大多數(shù)軟硬件在實際中都不管這個域的值,對數(shù)據(jù)包的先后傳送次序都一視同仁。
       ?、诤竺?個1位的標(biāo)志域分別是延遲(delay)、吞吐量(throughput)和可靠性標(biāo)志。如設(shè)置為0,表示正常值;如果設(shè)置成1,則分別表示低延遲、高吞吐量和高可靠性。當(dāng)前的軟硬件也都不管它們的設(shè)置。
        數(shù)據(jù)包長度(Datagram Length)域:16位長的數(shù)據(jù)包長度域中的數(shù)值是數(shù)據(jù)本身的字節(jié)數(shù)和標(biāo)題長度的字節(jié)數(shù)之和。一個IP數(shù)據(jù)包的最大長度為65 535個字節(jié)。
        標(biāo)識(Identification)域:該域包含一個由發(fā)送端創(chuàng)建的唯一的標(biāo)識號,它在接收端用來引導(dǎo)如何把數(shù)據(jù)包還原出原來的消息。
        標(biāo)志(Flags)域:該域用來控制數(shù)據(jù)包的分塊。由于一個IP數(shù)據(jù)包的最大長度不能超過65 535個字節(jié),因此有可能要把消息分成碎塊。當(dāng)DF(Don't Fragment)=0,表示數(shù)據(jù)包可以分成碎塊,當(dāng)DF=1,表示數(shù)據(jù)包不可以分碎塊。MF(More Fragments)=0,表示最后的一個碎塊,MF=1表示后面還有碎塊要處理。
        數(shù)據(jù)塊偏移量(Fragment Offset)域:當(dāng)MF(More Fragments)=1時,該域包含有碎塊的位置信息。
        生存時間TTL(Time to Live)域:該域包含有數(shù)據(jù)包在網(wǎng)絡(luò)上保留的時間,其值由發(fā)送端設(shè)置,通常設(shè)置為15秒或者30秒。
        傳輸協(xié)議(Transport Protocol)域:該域包含有傳輸協(xié)議的標(biāo)識號。目前定義和指定了大約50個傳輸協(xié)議號。兩個最重要的協(xié)議是網(wǎng)際控制消息協(xié)議(Internet Control Messages Protocol,ICMP),協(xié)議號為1,和傳輸控制協(xié)議(Transfer Control Protocol,TCP),協(xié)議號為6。
        標(biāo)題檢查和(Header Checksum):該域的值僅由這個協(xié)議標(biāo)題域中的值計算得到,不計算數(shù)據(jù)域中的值。檢查和的計算方法將在后面介紹。
        發(fā)送端地址和目的地地址(Sending Address and Destination Address):該域包含創(chuàng)建數(shù)據(jù)包(datagram)時生成的32位IP地址。
        選擇(Options)域:主要用來提供安全保證的方法,有興趣的讀者請參看RFC 791。
        與網(wǎng)際協(xié)議IP一起工作的一個協(xié)議是網(wǎng)際控制消息協(xié)議ICMP(Internet Control Message Protocol)。在把消息從發(fā)送端傳輸?shù)浇邮斩说倪^程中可能會出現(xiàn)許多問題,例如生存時間TTL定時器到時,網(wǎng)關(guān)設(shè)備把數(shù)據(jù)包錯送到其他地方等問題。讓發(fā)送者知道數(shù)據(jù)包傳輸過程中出現(xiàn)的問題是很重要的事情,ICMP協(xié)議就是為這個目的開發(fā)的協(xié)議。
        因特網(wǎng)現(xiàn)在使用的IP版本號是4,使用的IP地址是32位。隨著因特網(wǎng)用戶的不斷擴(kuò)大,32位IP地址有可能會不能滿足因特網(wǎng)發(fā)展的需求,因此近年來已經(jīng)開始開發(fā)新的IP協(xié)議——IP version 6 (IPv6),稱為下一代IPng(IP Next Generation)?,F(xiàn)在正在研究的幾個提案是TUBA (TCP and UDP with Bigger Addresses)和SIPP(Simple Internet Protocol Plus)等。IPng的其中幾個特性是:
       ?、?使用128位IP地址替代現(xiàn)在的32位IP地址。
       ?、?更有效的IP標(biāo)題,去除標(biāo)題檢查和(Header Checksum)。
       ?、?防止數(shù)據(jù)包分裂。
       ?、?內(nèi)置安全保密措施。
       ?、?增加流動標(biāo)簽域(Flow Label field),用它幫助識別傳輸許多IP數(shù)據(jù)包的發(fā)送端和接收端,以提高傳輸速度。

      練習(xí)與思考題

      1. 查閱一些文獻(xiàn)資料(如工具書等),分析和比較網(wǎng)關(guān)(gateway)、路由器(router)和網(wǎng)橋(bridge)在網(wǎng)絡(luò)中所起的作用。
      2. 什么叫做IP(Internet address)地址,什么叫做域名地址(domain name address),它們之間有什么關(guān)系。
      3. IP地址有哪幾類?總結(jié)它們各有什么特點?
      4. 分別說出IP地址為167.216.130.62和202.98.36.120是哪一類網(wǎng)絡(luò)?它們的網(wǎng)絡(luò)數(shù)目和連網(wǎng)機(jī)器數(shù)目各有什么特點。
      5. 域名服務(wù)DNS(Domain Name Service)的功能是什么?
      6. Web的四個核心部分是什么?
      7. 舉例說明統(tǒng)一資源地址URL(Uniform Resource Locator)的含義。
      8. 用簡潔的語言說出“http://www./~tristan/MPEG/MPEG-content.html”的意思。
      9. 在網(wǎng)絡(luò)上下載詳細(xì)描述HTTP/1.0協(xié)議的RFC 1945文件,試一試看自己讀懂其中的多少內(nèi)容。
      10. TCP和UDP是哪一層的協(xié)議?這兩種協(xié)議的有什么主要差別?
      11. 網(wǎng)絡(luò)技術(shù)人員對因特網(wǎng)的層次結(jié)構(gòu)和各層使用的協(xié)議了如指掌,網(wǎng)絡(luò)用戶對此也需要了解。若因特網(wǎng)粗略劃分成5層,請寫出各層的名稱,各層使用的協(xié)議(寫出1至2個協(xié)議即可)
      12. 寫一篇關(guān)于以太網(wǎng)的性能調(diào)查報告,網(wǎng)絡(luò)類型包含10Base-F,10BASE-T,10Base2(也稱thin Ethernet),10Base5(也稱Thick Ethernet, ThickNet, ThickWire),100BaseT以及千兆以太網(wǎng),內(nèi)容包含使用的標(biāo)準(zhǔn)、使用的電纜和電纜連接器、傳輸?shù)木嚯x、數(shù)據(jù)傳輸率、應(yīng)用場合等,并把要點綜合成表格。
      參考文獻(xiàn)和站點

      [1] 有關(guān)域名協(xié)議的部分RFC文件

      • RFC 1034 Domain names - concepts and facilities
      • RFC 1035 Domain names - implementation and specification
      • RFC 1876 A Means for Expressing Location Information in the Domain Name System.
      • RFC 2065 Domain Name System Security Extensions

      [2] 有關(guān)TCP協(xié)議的部分RFC文件:

      • RFC 1180 TCP/IP Tutorial
      • RFC 2001 W. Stevens, "TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms", 01/24/1997
      • RFC 1323 D. Borman, B. Braden, V. Jacobson, "TCP Extensions for High Performance", 05/13/1992
      • RFC 1122 B. Braden, "Requirements for Internet hosts - communication layers", 10/01/1989. (STD 3)
      • RFC 793 J. Postel, "Transmission Control Protocol", 09/01/1981. (STD 7)

      [3] 有關(guān)UDP協(xié)議的部分文件:

      • RFC 2013 K. McCloghrie, "SNMPv2 Management Information Base for the User Datagram Protocol using SMIv2", 11/12/1996
      • RFC 768 J. Postel, "User Datagram Protocol", 08/28/1980. (STD 6)

      [4] 有關(guān)IP地址協(xié)議的部分RFC文件:

      • 標(biāo)準(zhǔn)號0005 Internet Protocol. J. Postel. September 1981.
      • RFC1112 S. Deering, "Host extensions for IP multicasting", 08/01/1989.
      • RFC 2236 B. Fenner, "Internet Group Management Protocol, Version 2", 11/11/1997. (Updates RFC1112)
      • RFC 1700 J. Reynolds, J. Postel, "ASSIGNED NUMBERS", 10/20/1994. (STD 2)
      • Professor Keith W. Ross,The Internet: Technology, Protocols and Commerce. http://www.seas./,(瀏覽日期:1998年4月)
      • http://www./
      • http://www. vocalte.com/

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多