




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章應(yīng)用層
網(wǎng)絡(luò)應(yīng)用是計(jì)算機(jī)網(wǎng)絡(luò)的重要功能之一。20世紀(jì)80年代:基于文本的電子郵件、文件傳輸、文本聊天等等。20世紀(jì)90年代:Web應(yīng)用、IP電話、視頻會(huì)議等。20世紀(jì)末:即時(shí)訊息、P2P對(duì)等文件共享。1學(xué)習(xí)目標(biāo)和主要內(nèi)容學(xué)習(xí)目標(biāo)網(wǎng)絡(luò)應(yīng)用的原理和實(shí)現(xiàn)方面的知識(shí)。主要內(nèi)容應(yīng)用層概念:應(yīng)用層協(xié)議、客戶機(jī)與服務(wù)器、進(jìn)程、套接字和運(yùn)輸層接口。應(yīng)用程序:Web、電子郵件、域名系統(tǒng)DNS及P2P對(duì)等文件共享。開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序的方法:套接字API編程。2本章內(nèi)容2.1應(yīng)用層協(xié)議原理2.2Web和HTTP2.3FTP2.4電子郵件2.5DNS2.6P2P文件共享2.7TCP的套接字編程2.8UDP的套接字編程2.9構(gòu)建一個(gè)Web服務(wù)器2.10小結(jié)3流行的網(wǎng)絡(luò)應(yīng)用程序E-mailWeb即時(shí)訊息遠(yuǎn)程注冊(cè)P2P文件共享多用戶網(wǎng)絡(luò)游戲流式存儲(chǔ)視頻片段因特網(wǎng)電話實(shí)時(shí)視頻會(huì)議大規(guī)模并行計(jì)算編制應(yīng)用程序4網(wǎng)絡(luò)應(yīng)用程序的研發(fā)要點(diǎn)寫(xiě)出能夠分別在不同端系統(tǒng)運(yùn)行,并通過(guò)網(wǎng)絡(luò)相互通信的程序。如Web應(yīng)用程序,由兩個(gè)可以相互通信的程序組成瀏覽器程序:運(yùn)行在用戶主機(jī)上;Web服務(wù)器程序:運(yùn)行在Web服務(wù)器主機(jī)上。應(yīng)用程序軟件只在端系統(tǒng)運(yùn)行,不需在網(wǎng)絡(luò)核心設(shè)備上運(yùn)行。網(wǎng)絡(luò)核心設(shè)備無(wú)應(yīng)用層,只有較低層。
如圖2-1。5本節(jié)內(nèi)容2.1.1網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)2.1.2進(jìn)程通信2.1.3應(yīng)用層協(xié)議2.1.4應(yīng)用所需要的服務(wù)2.1.5因特網(wǎng)運(yùn)輸協(xié)議提供的服務(wù)2.1.6本書(shū)介紹的網(wǎng)絡(luò)應(yīng)用Web、文件傳輸、電子郵件、目錄服務(wù)、對(duì)等文件共享等五個(gè)。62.1.1網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)應(yīng)用程序體系結(jié)構(gòu):規(guī)定如何在各種端系統(tǒng)上組織應(yīng)用程序,由研發(fā)者設(shè)計(jì)。
三種類型:客戶機(jī)/服務(wù)器對(duì)等(P2P)客戶機(jī)/服務(wù)器與P2P的混合71、客戶機(jī)/服務(wù)器體系結(jié)構(gòu)服務(wù)器:
總是打開(kāi)為多個(gè)客戶機(jī)請(qǐng)求提供服務(wù)永久的IP地址可擴(kuò)展為服務(wù)器場(chǎng)(主機(jī)群集)客戶機(jī):總是打開(kāi)或間歇打開(kāi)向服務(wù)器發(fā)出請(qǐng)求具有動(dòng)態(tài)的IP地址彼此之間不直接通信
如Web應(yīng)用程序:總是打開(kāi)的Web服務(wù)器為運(yùn)行在客戶機(jī)主機(jī)上的瀏覽器的請(qǐng)求提供服務(wù)(接收客戶機(jī)請(qǐng)求,并發(fā)送響應(yīng)結(jié)果)。
服務(wù)器響應(yīng)客戶請(qǐng)求82、純P2P體系結(jié)構(gòu)(peer-to-peer)
無(wú)(最少)打開(kāi)的服務(wù)器任意端系統(tǒng)(對(duì)等方)可以直接通信對(duì)等方間歇地連接,IP地址不固定例:文件分發(fā)、因特網(wǎng)電話等??蓴U(kuò)展度高、難以管理93、客戶機(jī)/服務(wù)器與P2P的混合Napster:MP3文件共享應(yīng)用程序。
P2P:對(duì)等方直接交換MP3文件服務(wù)器注冊(cè)/定位:對(duì)等方在中心服務(wù)器上注冊(cè)內(nèi)容對(duì)等方查詢相同的中心服務(wù)器以定位內(nèi)容即時(shí)訊息:P2P:兩個(gè)用戶直接聊天服務(wù)器檢測(cè)/定位:用戶在線時(shí),向中心服務(wù)器注冊(cè)其IP地址用戶聯(lián)系中心服務(wù)器以找到聊天伙伴的IP地址102.1.2進(jìn)程通信進(jìn)程(process):在主機(jī)上運(yùn)行的程序。進(jìn)程通信:同一主機(jī)中兩個(gè)進(jìn)程間的通信:由操作系統(tǒng)控制;不同主機(jī)中進(jìn)程間的通信:通過(guò)網(wǎng)絡(luò)交換報(bào)文進(jìn)行。
發(fā)送進(jìn)程:產(chǎn)生報(bào)文并向網(wǎng)絡(luò)發(fā)送;
接收進(jìn)程:接收?qǐng)?bào)文,并回送報(bào)文。如圖2-1。111、客戶機(jī)和服務(wù)器進(jìn)程網(wǎng)絡(luò)應(yīng)用程序由成對(duì)的進(jìn)程組成,并通過(guò)網(wǎng)絡(luò)相互發(fā)送報(bào)文。如圖2-1
根據(jù)功能分別標(biāo)示為客戶機(jī)和服務(wù)器客戶機(jī)進(jìn)程:發(fā)起通信的進(jìn)程。
服務(wù)器進(jìn)程:等待其他進(jìn)程聯(lián)系的進(jìn)程。如Web應(yīng)用程序中,一個(gè)客戶機(jī)瀏覽器進(jìn)程向某個(gè)Web服務(wù)器進(jìn)程發(fā)起聯(lián)系,交換報(bào)文。12說(shuō)明:
P2P結(jié)構(gòu)的應(yīng)用程序也可分別看成是客戶機(jī)進(jìn)程或服務(wù)器進(jìn)程。如,對(duì)等方A(客戶機(jī))請(qǐng)求對(duì)等方B(服務(wù)器)發(fā)送某個(gè)文件。132、套接字(socket)套接字:同一臺(tái)主機(jī)內(nèi)應(yīng)用層與運(yùn)輸層之間的接口。也叫應(yīng)用程序和網(wǎng)絡(luò)之間的應(yīng)用程序接口API
,是在網(wǎng)絡(luò)上建立網(wǎng)絡(luò)應(yīng)用程序的可編程接口。進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器因特網(wǎng)由操作系統(tǒng)控制由應(yīng)用研發(fā)者控制應(yīng)用層運(yùn)輸層14進(jìn)程與套接字關(guān)系進(jìn)程類似房子,套接字是進(jìn)程的門(mén)。進(jìn)程通過(guò)套接字在網(wǎng)絡(luò)上發(fā)送和接收?qǐng)?bào)文。進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器因特網(wǎng)由操作系統(tǒng)控制由應(yīng)用研發(fā)者控制發(fā)送進(jìn)程:把報(bào)文推出門(mén)(套接字)。傳送報(bào)文:通過(guò)下面網(wǎng)絡(luò)把報(bào)文傳送到目的進(jìn)程門(mén)口。接收進(jìn)程:通過(guò)其門(mén)(套接字)接收?qǐng)?bào)文15說(shuō)明應(yīng)用程序開(kāi)發(fā)者可以控制套接字應(yīng)用層端的全部;對(duì)套接字的運(yùn)輸層端幾乎不能控制(只能選擇運(yùn)輸層協(xié)議、設(shè)定幾個(gè)運(yùn)輸層參數(shù)等)。應(yīng)用程序開(kāi)發(fā)者選擇了一個(gè)運(yùn)輸層協(xié)議,則應(yīng)用程序就建立在由該協(xié)議提供的運(yùn)輸層服務(wù)之上。如TCP協(xié)議。進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器因特網(wǎng)由操作系統(tǒng)控制由應(yīng)用研發(fā)者控制163、進(jìn)程尋址主機(jī)上的進(jìn)程可以有多個(gè)。網(wǎng)絡(luò)中有多個(gè)主機(jī),每個(gè)主機(jī)上有多個(gè)進(jìn)程。進(jìn)程識(shí)別信息:表示哪臺(tái)主機(jī)上的哪一個(gè)進(jìn)程。源主機(jī)上的進(jìn)程向目的主機(jī)上的進(jìn)程發(fā)送報(bào)文時(shí),應(yīng)帶有接收進(jìn)程的識(shí)別信息(標(biāo)識(shí))。進(jìn)程尋址:根據(jù)進(jìn)程識(shí)別信息找到相應(yīng)進(jìn)程。如何識(shí)別進(jìn)程?確定主機(jī)確定進(jìn)程17進(jìn)程識(shí)別信息(兩部分)主機(jī)名稱或地址:網(wǎng)絡(luò)中的哪一個(gè)主機(jī)。因特網(wǎng)中,用IP地址標(biāo)識(shí)(32位,全球惟一)。進(jìn)程的標(biāo)識(shí):主機(jī)中的哪一個(gè)進(jìn)程。因特網(wǎng)中,采用端口號(hào)標(biāo)識(shí)(portnumber)。常用的應(yīng)用程序被指派固定的端口號(hào)(周知端口)。如,Web服務(wù)進(jìn)程(HTTP協(xié)議):80郵件服務(wù)進(jìn)程(SMTP協(xié)議):25創(chuàng)建一個(gè)新的網(wǎng)絡(luò)應(yīng)用程序時(shí),必須分配一個(gè)新的端口號(hào)。不重復(fù)。184、用戶代理(useragent)是用戶與網(wǎng)絡(luò)應(yīng)用程序之間的接口。如:Web應(yīng)用的用戶代理:是一些瀏覽器軟件。一個(gè)通過(guò)套接字收發(fā)報(bào)文,并提供用戶接口的進(jìn)程。電子郵件應(yīng)用程序用戶代理:是“郵件閱讀器”。允許用戶進(jìn)行郵件的撰寫(xiě)和閱讀。192.1.3應(yīng)用層協(xié)議定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程間傳遞報(bào)文的格式和方式。具體內(nèi)容:
交換的報(bào)文類型:如請(qǐng)求報(bào)文和響應(yīng)報(bào)文;各種報(bào)文類型的語(yǔ)法:報(bào)文中的各個(gè)字段及描述;字段的語(yǔ)義:字段包含信息的含義;進(jìn)程何時(shí)、如何發(fā)送報(bào)文及對(duì)報(bào)文進(jìn)行響應(yīng)的規(guī)則。20說(shuō)明公共領(lǐng)域協(xié)議:由標(biāo)準(zhǔn)文檔RFC定義,如HTTP。
專用層協(xié)議:如P2P使用的協(xié)議。應(yīng)用層協(xié)議是網(wǎng)絡(luò)應(yīng)用的一部分。如Web應(yīng)用,客戶機(jī)從Web服務(wù)器獲得“文檔”。組成:HTML、Web瀏覽器、Web服務(wù)器程序,以及一個(gè)應(yīng)用層協(xié)議HTTP(超文本傳輸協(xié)議)等。HTTP定義了在瀏覽器程序和Web服務(wù)器程序間傳輸?shù)膱?bào)文格式和序列。其他協(xié)議:電子郵件協(xié)議SMTP等等212.1.4應(yīng)用程序所需要的服務(wù)應(yīng)用程序間通信:由運(yùn)輸協(xié)議跨越網(wǎng)絡(luò)將發(fā)送進(jìn)程的報(bào)文傳輸?shù)浇邮者M(jìn)程的門(mén)戶
。需要使用運(yùn)輸協(xié)議所提供的服務(wù)。運(yùn)輸協(xié)議有多種,提供的服務(wù)不同。進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器進(jìn)程具有緩存、變量的TCP套接字主機(jī)或服務(wù)器因特網(wǎng)由操作系統(tǒng)控制由應(yīng)用研發(fā)者控制22應(yīng)用程序需要什么樣的運(yùn)輸服務(wù)?可靠的數(shù)據(jù)傳輸(無(wú)數(shù)據(jù)丟失)數(shù)據(jù)不能丟失的應(yīng)用:如文件傳輸、金融事務(wù)等。能容忍數(shù)據(jù)丟失的應(yīng)用:如多媒體應(yīng)用。帶寬(數(shù)據(jù)傳輸率)帶寬敏感的應(yīng)用:需要特定的帶寬才能正常工作。如,因特網(wǎng)電話、其他多媒體應(yīng)用。彈性應(yīng)用:使用的帶寬多或少影響不大。如電子郵件、文件傳輸以及Web傳輸。定時(shí)(數(shù)據(jù)傳輸?shù)臅r(shí)間限制)交互式實(shí)時(shí)應(yīng)用:對(duì)時(shí)間敏感,要求時(shí)延小。如,因特網(wǎng)電話、視頻會(huì)議以及多方游戲等。非實(shí)時(shí)應(yīng)用:時(shí)延無(wú)限制,低更好。23典型應(yīng)用的運(yùn)輸服務(wù)要求應(yīng)用程序文件傳輸電子郵件Web文檔實(shí)時(shí)音頻/視頻(因特網(wǎng)電話/視頻會(huì)議)存儲(chǔ)音頻/視頻交互式游戲即時(shí)訊息數(shù)據(jù)丟失不能丟失
不能丟失不能丟失容忍丟失容忍丟失容忍丟失不能丟失
帶寬彈性彈性彈性音頻:5kbps-1Mbps視頻:10kbps-5Mbps同上幾kbps以上彈性時(shí)間敏感不不不是,100ms是,幾秒是,100ms是和不是242.1.5因特網(wǎng)運(yùn)輸協(xié)議提供的服務(wù)兩個(gè)運(yùn)輸層協(xié)議:用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP每個(gè)協(xié)議為調(diào)用它們的應(yīng)用程序提供不同的服務(wù)模型。在創(chuàng)建一個(gè)新的因特網(wǎng)應(yīng)用時(shí),要選擇其中一個(gè)。251、TCP服務(wù)兩個(gè)方面:面向連接的服務(wù):可靠的傳輸服務(wù):26面向連接的服務(wù)劃分三階段建立連接(握手過(guò)程):客戶機(jī)程序和服務(wù)器程序之間互相交換控制信息,在兩個(gè)進(jìn)程的套接字之間建立一個(gè)TCP連接。傳輸報(bào)文:連接是全雙工的,即連接雙方的進(jìn)程可以在此連接上同時(shí)進(jìn)行報(bào)文收發(fā)。拆除連接:應(yīng)用程序報(bào)文發(fā)送結(jié)束。27可靠的傳輸服務(wù)通信進(jìn)程可以無(wú)差錯(cuò)、按適當(dāng)順序交付發(fā)送的數(shù)據(jù)。沒(méi)有數(shù)據(jù)丟失和重復(fù)。28擁塞控制當(dāng)發(fā)送方和接收方之間的網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),會(huì)抑制發(fā)送進(jìn)程速率。對(duì)整個(gè)網(wǎng)絡(luò)有益。29未提供的服務(wù)不確保最小傳輸速率:發(fā)送進(jìn)程受擁塞控制機(jī)制制約;不提供時(shí)延保證:數(shù)據(jù)傳輸?shù)臅r(shí)間不確定。
TCP協(xié)議能保證交付所有的數(shù)據(jù),但并不保證這些數(shù)據(jù)傳輸?shù)乃俾室约捌诖膫鬏敃r(shí)延。TCP協(xié)議不適合實(shí)時(shí)應(yīng)用。302、UDP服務(wù)提供最小服務(wù)模式運(yùn)行。無(wú)連接:兩個(gè)進(jìn)程通信前沒(méi)有握手過(guò)程;不可靠數(shù)據(jù)傳輸:不保證報(bào)文能夠被接收,或收到的報(bào)文是亂序到達(dá)。沒(méi)有擁塞控制機(jī)制:發(fā)送進(jìn)程可以任何速率發(fā)送數(shù)據(jù)不提供時(shí)延保證:適于實(shí)時(shí)應(yīng)用。31因特網(wǎng)應(yīng)用、應(yīng)用協(xié)議與運(yùn)輸協(xié)議
應(yīng)用 應(yīng)用層協(xié)議 傳輸協(xié)議電子郵件 SMTP TCP遠(yuǎn)程終端訪問(wèn)Telnet TCPWeb HTTP TCP文件傳輸 FTP TCP遠(yuǎn)程文件服務(wù)器NFS UDP或TCP流媒體 HTTP、RTPUDP或TCP因特網(wǎng)電話 SIP、RTP 典型用UDP322.2Web應(yīng)用和HTTP協(xié)議產(chǎn)生于20世紀(jì)90年代初期。改變了人們與工作環(huán)境內(nèi)外的交流方式;提升因特網(wǎng)地位;生活和工作發(fā)生變化;方便、快捷得到所需要的信息(按需操作);任何人在Web上發(fā)布信息;超鏈接和搜索引擎幫助人們?yōu)g覽Web站點(diǎn)。33本節(jié)內(nèi)容2.2.1HTTP概況2.2.2HTTP連接2.2.3HTTP報(bào)文格式2.2.4用戶與服務(wù)器交互:Cookie2.2.5HTTP內(nèi)容2.2.6Web緩存2.2.7條件GET方法342.2.1HTTP概況HTTP(超文本傳輸協(xié)議):應(yīng)用層協(xié)議,Web的核心。包括兩部分:客戶機(jī)程序服務(wù)器程序分別運(yùn)行在不同的端系統(tǒng)中,通過(guò)交換HTTP報(bào)文進(jìn)行會(huì)話。HTTP協(xié)議定義了報(bào)文的格式以及客戶機(jī)和服務(wù)器交換報(bào)文的方式。
35Web常用術(shù)語(yǔ)Web頁(yè)(文檔):由若干對(duì)象組成。
對(duì)象:是文件。通過(guò)一個(gè)URL地址來(lái)尋址。如HTML文件、JPEG圖形文件、Java小程序等。
Web頁(yè)含有一個(gè)基本的HTML文件及幾個(gè)引用對(duì)象。例如,一個(gè)Web頁(yè)包含HTML文本和5個(gè)JPEG圖形文件(即有6個(gè)對(duì)象)。在基本的HTML文件中,每個(gè)對(duì)象可由URL來(lái)尋址。
超文本標(biāo)記語(yǔ)言統(tǒng)一資源定位符36Web常用術(shù)語(yǔ)URL:UniformResourceLocator。統(tǒng)一資源定位符。標(biāo)識(shí)萬(wàn)維網(wǎng)WWW上的各種文檔,全網(wǎng)范圍唯一。URL地址組成:存放對(duì)象的服務(wù)器主機(jī)名和對(duì)象的路徑名。如
http://www.someS/somedepartment/picture.gif
主機(jī)名路徑名37Web常用術(shù)語(yǔ)瀏覽器(客戶機(jī)):是Web應(yīng)用的用戶代理,用于顯示所請(qǐng)求的Web頁(yè),提供導(dǎo)航功能和配置屬性。
實(shí)現(xiàn)了HTTP協(xié)議的客戶機(jī)端。Web服務(wù)器:用于存貯Web對(duì)象(由URL尋址)。實(shí)現(xiàn)HTTP協(xié)議的服務(wù)器端。
HTTP協(xié)議定義了Web客戶機(jī)(瀏覽器)如何向Web站點(diǎn)請(qǐng)求Web頁(yè),以及服務(wù)器如何將Web頁(yè)傳送給客戶機(jī)。38客戶機(jī)和服務(wù)器之間交互過(guò)程PC運(yùn)行Explorer服務(wù)器運(yùn)行ApacheWeb服務(wù)器Mac運(yùn)行NavigatorHTTP請(qǐng)求HTTP請(qǐng)求HTTP響應(yīng)HTTP響應(yīng)客戶機(jī):用戶請(qǐng)求一個(gè)Web頁(yè)(如點(diǎn)擊一個(gè)超鏈接),瀏覽器向服務(wù)器發(fā)出對(duì)該頁(yè)所含對(duì)象的“HTTP請(qǐng)求報(bào)文”。服務(wù)器:接受請(qǐng)求,回發(fā)包含請(qǐng)求對(duì)象的“HTTP響應(yīng)報(bào)文”39說(shuō)明HTTP協(xié)議使用的底層運(yùn)輸協(xié)議是TCP。工作過(guò)程:
創(chuàng)建TCP連接交換報(bào)文關(guān)閉TCP連接客戶機(jī)先與服務(wù)器建立TCP連接,然后,瀏覽器和服務(wù)器進(jìn)程通過(guò)套接字訪問(wèn)TCP:如圖2-3客戶機(jī):從其套接字接口發(fā)送“HTTP請(qǐng)求報(bào)文”和接收“響應(yīng)報(bào)文”;服務(wù)器:從其套接字口接收“HTTP請(qǐng)求報(bào)文”和發(fā)送“響應(yīng)報(bào)文”。40說(shuō)明TCP提供可靠的數(shù)據(jù)傳輸服務(wù):客戶機(jī)進(jìn)程和服務(wù)器進(jìn)程發(fā)出的每個(gè)HTTP報(bào)文能完整地到達(dá)對(duì)方。HTTP是無(wú)狀態(tài)協(xié)議:服務(wù)器不保存關(guān)于客戶機(jī)的任何信息。Web使用客戶機(jī)/服務(wù)器結(jié)構(gòu),Web服務(wù)器總是打開(kāi),有一個(gè)固定IP地址,為多個(gè)瀏覽器服務(wù)。412.2.2HTTP連接持久HTTP連接一個(gè)TCP連接上可以傳送多個(gè)Web對(duì)象傳送多個(gè)請(qǐng)求/相應(yīng)對(duì)非持久HTTP連接每個(gè)TCP連接上只傳送一個(gè)Web對(duì)象只傳送一個(gè)請(qǐng)求/相應(yīng)對(duì)默認(rèn)方式下使用持久連接421、非持久連接例,客戶機(jī)向服務(wù)器請(qǐng)求傳送一個(gè)Web頁(yè):含有一個(gè)基本HTML文件和10個(gè)JPEG圖形,11個(gè)對(duì)象位于同一個(gè)服務(wù)器上。HTML文件的URL為:http://www.someS/someDepartment/home.index43工作過(guò)程1a.
HTTP客戶初始化一個(gè)與服務(wù)器主機(jī)www.someS中HTTP服務(wù)器進(jìn)程的TCP連接
2.
HTTP客戶發(fā)送一個(gè)HTTP請(qǐng)求報(bào)文(包含URL)到TCP連接套接字,
報(bào)文指明客戶需要的Web對(duì)象-someDepartment/home.index1b.
www.someS服務(wù)器主機(jī)中的HTTP服務(wù)器在80端口監(jiān)聽(tīng)來(lái)自HTTP客戶的TCP連接請(qǐng)求,收到連接請(qǐng)求,接受,建立連接,通知客戶。3.
HTTP服務(wù)器接收請(qǐng)求報(bào)文,產(chǎn)生一個(gè)響應(yīng)報(bào)文(包含被請(qǐng)求對(duì)象),并發(fā)送到其TCP連接套接字timeTCP連接報(bào)文傳輸445.
HTTP客戶機(jī)接收包含HTML文件的響應(yīng)報(bào)文,顯示并解析HTML文件,發(fā)現(xiàn)10個(gè)引用的jpeg對(duì)象6.
對(duì)10個(gè)jpeg對(duì)象重復(fù)步驟1~54.
HTTP服務(wù)器關(guān)閉TCP連接time45說(shuō)明:每個(gè)TCP連接在服務(wù)器返回對(duì)象后關(guān)閉(非持久)。每個(gè)TCP連接只傳輸一個(gè)請(qǐng)求報(bào)文和一個(gè)響應(yīng)報(bào)文;上例中,要建立11個(gè)TCP連接。瀏覽器可同時(shí)打開(kāi)多個(gè)連接:并行的TCP連接:并行數(shù)大于1。默認(rèn)打開(kāi)5~10個(gè)。串行的TCP連接:最大并行數(shù)為1。46請(qǐng)求一個(gè)HTML文件所需時(shí)間即從客戶機(jī)請(qǐng)求基本HTML文件開(kāi)始,到用戶收到整個(gè)文件為止所花時(shí)間。往返時(shí)延RTT:一個(gè)小分組從客戶機(jī)到服務(wù)器,再回到客戶機(jī)所花時(shí)間。包括傳播時(shí)延、排隊(duì)時(shí)延以及處理時(shí)延。47TCP連接的“三次握手”過(guò)程客戶機(jī)發(fā)送一個(gè)TCP連接請(qǐng)求報(bào)文服務(wù)器回送一個(gè)TCP確認(rèn)響應(yīng)報(bào)文客戶機(jī)向服務(wù)器發(fā)送一個(gè)包含“
HTTP請(qǐng)求”與“TCP確認(rèn)”的報(bào)文總響應(yīng)時(shí)間:兩個(gè)RTT時(shí)延加上服務(wù)器發(fā)送文件的時(shí)間總計(jì)=2RTT+文件傳輸時(shí)間傳輸文件的時(shí)間發(fā)起TCP連接RTT請(qǐng)求文件RTT接收文件時(shí)間時(shí)間三次握手建立TCP連接交換報(bào)文48非持久連接缺點(diǎn)服務(wù)器負(fù)擔(dān)重:每一個(gè)請(qǐng)求對(duì)象建立和維護(hù)一個(gè)新的連接。每一個(gè)對(duì)象的傳輸時(shí)延長(zhǎng):包含兩個(gè)RTT時(shí)延,一個(gè)用于TCP建立,一個(gè)用于請(qǐng)求和接收對(duì)象。492、持久連接服務(wù)器在發(fā)送響應(yīng)后保持該TCP連接:相同客戶機(jī)與服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)報(bào)文通過(guò)相同的連接進(jìn)行傳送。如,一個(gè)Web頁(yè)的所有對(duì)象可以通過(guò)一個(gè)持久TCP連接傳送?;蛲环?wù)器上的多個(gè)Web頁(yè)也可以通過(guò)一個(gè)持久TCP連接傳送給同一個(gè)客戶機(jī)。連接經(jīng)一定時(shí)間間隔(超時(shí)間隔)未被使用,服務(wù)器就關(guān)閉該連接。50持久連接兩種方式非流水線方式:客戶機(jī)只能在前一個(gè)響應(yīng)接收到之后才能發(fā)出新的請(qǐng)求??蛻魴C(jī)為每一個(gè)引用對(duì)象的請(qǐng)求和接收都使用一個(gè)RTT時(shí)延。會(huì)浪費(fèi)一些服務(wù)器資源:服務(wù)器在發(fā)送完一個(gè)對(duì)象,等待下一個(gè)請(qǐng)求時(shí),會(huì)出現(xiàn)空閑狀態(tài)。51持久連接兩種方式流水線方式:客戶機(jī)可一個(gè)接一個(gè)連續(xù)產(chǎn)生請(qǐng)求(只要有引用就產(chǎn)生),即在前一個(gè)請(qǐng)求接收到響應(yīng)之前可以產(chǎn)生新的請(qǐng)求。服務(wù)器一個(gè)接一個(gè)連續(xù)發(fā)送相應(yīng)對(duì)象。特點(diǎn):節(jié)省RTT時(shí)延,可能所有引用對(duì)象只花費(fèi)一個(gè)。TCP連接空閑時(shí)間很短。
默認(rèn)方式:流水線方式的持久連接。521、HTTP請(qǐng)求報(bào)文客戶機(jī)向服務(wù)器發(fā)送。ASCII文本形式,易讀。
例:GET/somedir/page.htmlHTTP/1.1Host:User-agent:Mozilla/4.0Connection:closeAccept-language:fr(另外的回車,換行)
請(qǐng)求行(GET,POST,HEAD命令)首部行回車,換行指示報(bào)文的結(jié)束對(duì)象URL路徑名版本對(duì)象主機(jī)瀏覽器類型非持久方法(命令)——GET:請(qǐng)求一個(gè)對(duì)象。POST:提交表單(添加信息)。HEAD:請(qǐng)求返回對(duì)象響應(yīng)報(bào)文首部返回對(duì)象的語(yǔ)言53HTTP請(qǐng)求報(bào)文通用格式請(qǐng)求行首部行實(shí)體主體方法版本首部字段名首部字段名值值542、HTTP響應(yīng)報(bào)文HTTP/1.1200OKConnectioncloseDate:Thu,06Aug199812:00:15GMT服務(wù)器:Apache/1.3.0(Unix)Last-Modified:Mon,22Jun1998…...Content-Length:6821Content-Type:text/html
datadatadatadatadata...
狀態(tài)行(版本、狀態(tài)碼、狀態(tài)短語(yǔ))首部行實(shí)體:數(shù)據(jù),如請(qǐng)求的HTML文件請(qǐng)求成功關(guān)閉連接發(fā)送日期對(duì)象創(chuàng)建或修改日期對(duì)象長(zhǎng)度服務(wù)器到客戶機(jī)的回答55HTTP響應(yīng)狀態(tài)碼200OK請(qǐng)求成功,請(qǐng)求的對(duì)象在這個(gè)報(bào)文后面301MovedPermanently請(qǐng)求的對(duì)象已轉(zhuǎn)移,新的URL在響應(yīng)報(bào)文的Location:首部行中指定400BadRequest請(qǐng)求報(bào)文不為服務(wù)器理解404NotFound請(qǐng)求的文檔沒(méi)有在該服務(wù)器上發(fā)現(xiàn)505HTTPVersionNotSupported服務(wù)器不支持請(qǐng)求報(bào)文使用的HTTP版本在服務(wù)器到客戶機(jī)響應(yīng)報(bào)文中的首行。56自行試驗(yàn)HTTP(客戶機(jī)側(cè))1.Telnet到某個(gè)Web服務(wù)器上:打開(kāi)到位于的端口80(默認(rèn)的HTTP服務(wù)器端口).鍵入的任何東西將發(fā)送到位于的80端口telnet802.鍵入一個(gè)GETHTTP請(qǐng)求:GET/~ross/HTTP/1.1Host:向HTTP服務(wù)器發(fā)送最小的GET請(qǐng)求3.得到由HTTP服務(wù)器發(fā)送的響應(yīng)報(bào)文!572.2.4用戶與服務(wù)器交互:Cookie
HTTP服務(wù)器是無(wú)狀態(tài)的,不保存客戶信息。Cookie:允許Web站點(diǎn)跟蹤、識(shí)別用戶;服務(wù)器可以限制用戶訪問(wèn),或把內(nèi)容與用戶身份關(guān)聯(lián)。
許多重要的Web站點(diǎn)使用cookies。包括四個(gè)部分1)在HTTP響應(yīng)報(bào)文中有一個(gè)cookie首部行2)在HTTP請(qǐng)求報(bào)文中有一個(gè)cookie首部行3)用戶主機(jī)中保留有一個(gè)cookie文件并由瀏覽器管理4)Web站點(diǎn)的后端數(shù)據(jù)庫(kù)保存cookie58例Susan總是從相同的PC訪問(wèn)因特網(wǎng)她首次訪問(wèn)一個(gè)特定的電子商務(wù)站點(diǎn)當(dāng)起始HTTP請(qǐng)求到達(dá)站點(diǎn)時(shí),站點(diǎn)產(chǎn)生一個(gè)獨(dú)特的ID,并為ID在后端數(shù)據(jù)庫(kù)中生成一個(gè)表項(xiàng)59工作過(guò)程客戶機(jī)服務(wù)器普通HTTP請(qǐng)求報(bào)文普通HTTP響應(yīng)+Set-cookie:1678普通HTTP請(qǐng)求報(bào)文cookie:1678普通HTTP響應(yīng)報(bào)文普通HTTP請(qǐng)求報(bào)文cookie:1678普通HTTP響應(yīng)報(bào)文特定cookie動(dòng)作特定cookie動(dòng)作服務(wù)器為用戶生成ID1678后端數(shù)據(jù)庫(kù)中的表項(xiàng)訪問(wèn)訪問(wèn)Cookiefile識(shí)別碼1678Cookiefile保存1678Cookiefile識(shí)別碼1678一個(gè)星期以后:60Cookie用途身份認(rèn)證虛擬購(gòu)物車(跟蹤用戶購(gòu)買(mǎi)的物品)推薦廣告用戶會(huì)話狀態(tài)(Webe-mail)Cookie缺陷站點(diǎn)可以知道用戶許多信息不利用戶隱私保護(hù)612.2.5HTTP內(nèi)容傳輸Web頁(yè)面所含對(duì)象:如HTML文件、JPEG文件、Java小應(yīng)用程序等等。可以傳輸其他類型的文件:如傳輸XML(可擴(kuò)充的標(biāo)識(shí)語(yǔ)言)文件。P2P文件共享中:作為文件傳輸協(xié)議使用。用于流式存儲(chǔ)的音頻和視頻。622.2.6Web緩存Web緩存器(Webcache):也叫代理服務(wù)器。能夠代表起始服務(wù)器來(lái)滿足HTTP請(qǐng)求的網(wǎng)絡(luò)實(shí)體。保存最近請(qǐng)求過(guò)的對(duì)象的副本??稍诳蛻魴C(jī)或服務(wù)器工作,也可在中間系統(tǒng)工作。起始(原始)服務(wù)器(originserver):對(duì)象最初存放并始終保持其拷貝的服務(wù)器。目標(biāo):
代替原始服務(wù)器滿足HTTP請(qǐng)求。63使用Web緩存器用戶配置瀏覽器:
所有Web訪問(wèn)經(jīng)由緩存瀏覽器向緩存發(fā)送所有HTTP請(qǐng)求對(duì)象在緩存中:緩存器返回對(duì)象不在:緩存向原始服務(wù)器發(fā)出請(qǐng)求,接收對(duì)象后轉(zhuǎn)發(fā)給客戶機(jī)客戶機(jī)代理服務(wù)器客戶機(jī)HTTP請(qǐng)求HTTP請(qǐng)求HTTP響應(yīng)HTTP響應(yīng)HTTP請(qǐng)求HTTP響應(yīng)起始服務(wù)器起始服務(wù)器客戶機(jī)通過(guò)Web緩存器請(qǐng)求對(duì)象。64具體操作過(guò)程瀏覽器:建立一個(gè)到緩存的TCP連接,并向緩存發(fā)送一個(gè)對(duì)該對(duì)象HTTP請(qǐng)求Web緩存器:檢查本地是否有該對(duì)象的拷貝。有:就用HTTP響應(yīng)報(bào)文向?yàn)g覽器轉(zhuǎn)發(fā)該對(duì)象例:假設(shè)瀏覽器請(qǐng)求對(duì)象/campus.gif客戶機(jī)代理服務(wù)器客戶機(jī)HTTP請(qǐng)求HTTP請(qǐng)求HTTP響應(yīng)HTTP響應(yīng)HTTP請(qǐng)求HTTP響應(yīng)起始服務(wù)器起始服務(wù)器65緩存在TCP連接上發(fā)送獲取該對(duì)象的請(qǐng)求。起始服務(wù)器收到請(qǐng)求,向緩存發(fā)送該對(duì)象的HTTP響應(yīng)緩存接收該對(duì)象,存儲(chǔ)一份在本地中,并通過(guò)HTTP響應(yīng)報(bào)文向?yàn)g覽器轉(zhuǎn)發(fā)該對(duì)象(通過(guò)已經(jīng)建立的TCP連接)??蛻魴C(jī)代理服務(wù)器客戶機(jī)HTTP請(qǐng)求HTTP請(qǐng)求HTTP響應(yīng)HTTP響應(yīng)HTTP請(qǐng)求HTTP響應(yīng)起始服務(wù)器起始服務(wù)器沒(méi)有:與該對(duì)象的起始服務(wù)器打開(kāi)一個(gè)TCP連接。客戶機(jī)
Web緩存器起始服務(wù)器66說(shuō)明Web緩存器既可以是服務(wù)器也可以是客戶機(jī):當(dāng)它接收瀏覽器請(qǐng)求并發(fā)回響應(yīng)時(shí),是服務(wù)器;當(dāng)它向起始服務(wù)器發(fā)出請(qǐng)求并接收響應(yīng)時(shí),是客戶機(jī)67Web緩存優(yōu)點(diǎn)減少客戶機(jī)請(qǐng)求的響應(yīng)時(shí)間:客戶機(jī)
Web緩存器起始服務(wù)器
高速鏈路
減少機(jī)構(gòu)內(nèi)部網(wǎng)絡(luò)與因特網(wǎng)連接鏈路上的通信量:降低開(kāi)銷,改善各種應(yīng)用的性能。68例1,無(wú)Web緩存包括兩個(gè)網(wǎng)絡(luò):機(jī)構(gòu)的內(nèi)部網(wǎng)絡(luò)和因特網(wǎng)。
機(jī)構(gòu)內(nèi)部網(wǎng)絡(luò):是一個(gè)高速的局域網(wǎng)。其路由器與因特網(wǎng)上的路由器通過(guò)一條1.5Mbps的鏈路連接。起始服務(wù)器:與因特網(wǎng)相連,遍布全球。起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路69假設(shè)平均對(duì)象長(zhǎng)度為100kb機(jī)構(gòu)內(nèi)瀏覽器對(duì)原始服務(wù)器上對(duì)象的平均請(qǐng)求率=15/sec機(jī)構(gòu)內(nèi)的HTTP報(bào)文小,忽略從因特網(wǎng)路由器轉(zhuǎn)發(fā)HTTP請(qǐng)求報(bào)文,到收到其響應(yīng)報(bào)文的時(shí)間平均=2s(因特網(wǎng)時(shí)延)
起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路70總的響應(yīng)時(shí)間
瀏覽器從請(qǐng)求一個(gè)對(duì)象到接收到的時(shí)間:三部分和局域網(wǎng)時(shí)延接入鏈路時(shí)延(兩個(gè)路由器間)因特網(wǎng)時(shí)延起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路71局域網(wǎng)時(shí)延:與流量強(qiáng)度有關(guān)(比特到達(dá)率/推出率)
(15請(qǐng)求/s)×(100kb/請(qǐng)求)/(10Mbit/s)=0.15強(qiáng)度為0.15的通信量最多數(shù)十毫秒的時(shí)延,可忽略接入鏈路時(shí)延:與接入流量強(qiáng)度
(路由器之間)有關(guān)(15請(qǐng)求/s)×(100kb/請(qǐng)求)/(1.5Mbit/s)=1強(qiáng)度接近1,鏈路時(shí)延非常大或無(wú)限增長(zhǎng)??傢憫?yīng)時(shí)間=接入鏈路時(shí)延+因特網(wǎng)時(shí)延=(分鐘+2sec)請(qǐng)求時(shí)間長(zhǎng),用戶難接受。72改進(jìn)方法一增加接入鏈路的速率:如從1.5Mbps增加到10Mbps,使鏈路上的流量強(qiáng)度減少到0.15,鏈路時(shí)延也可以忽略了。
總響應(yīng)時(shí)間=因特網(wǎng)時(shí)延=2秒鐘投資較大,成本昂貴。73改進(jìn)方法二
在機(jī)構(gòu)網(wǎng)絡(luò)中安裝一個(gè)Web緩存器。起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路機(jī)構(gòu)緩存器Web緩存器的命中率:緩存器滿足請(qǐng)求的比率(0.2~0.7)。設(shè)命中率為0.4。74改進(jìn)方法二起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路機(jī)構(gòu)緩存器局域網(wǎng)時(shí)延:客戶機(jī)和緩存器位于同一局域網(wǎng),40%的請(qǐng)求幾乎會(huì)立即得到響應(yīng),時(shí)延約10ms。
剩下的60%請(qǐng)求需要通過(guò)訪問(wèn)起始服務(wù)器才能滿足。100kb/10Mbps75接入鏈路時(shí)延:
只有60%的請(qǐng)求對(duì)象通過(guò)接入鏈路傳送,流量強(qiáng)度從1.0減小到0.6。通常,在1.5Mbps鏈路上,當(dāng)流量強(qiáng)度小于0.8時(shí),時(shí)延很小,可忽略。起始服務(wù)器公共因特網(wǎng)機(jī)構(gòu)網(wǎng)絡(luò)10MbpsLAN1.5Mbps訪問(wèn)鏈路機(jī)構(gòu)緩存器Web緩存器減少響應(yīng)時(shí)延,成本低
平均時(shí)延為:
0.4×(0.01s)+0.6×(0.01s+2s)=1.21s0.01s2s762.2.7條件GET方法高速緩存:減少響應(yīng)時(shí)間;存放在緩存中的對(duì)象拷貝可能是舊的。即保存在起始Web服務(wù)器中的對(duì)象可能已經(jīng)被修改。條件GET方法:使緩存器能夠證實(shí)其保存的對(duì)象是否為最新。如果緩存中是最新對(duì)象版本,可繼續(xù)使用,起始Web服務(wù)器就不需重新發(fā)送該對(duì)象。77條件GET方法使用Web服務(wù)器回發(fā)響應(yīng)報(bào)文:包括對(duì)象的最后修改時(shí)間Last-modified:date1緩存檢查Web服務(wù)器中的該對(duì)象是否已被修改,發(fā)送一個(gè)條件GET請(qǐng)求報(bào)文:
If-modified-since:date1告訴服務(wù)器,僅當(dāng)自指定日期之后該對(duì)象被修改過(guò),才發(fā)送該對(duì)象。若Web服務(wù)器中的該對(duì)象未被修改,則響應(yīng)報(bào)文含有304NotModified,并且實(shí)體為空。78例緩存器服務(wù)器304NotModified實(shí)體為空對(duì)象未修改GET/fruit/kiwi.gifHTTP/l.1Host:
HTTP/1.0200OKLast-modified:date1<data>緩存器將對(duì)象轉(zhuǎn)發(fā)到瀏覽器,并保存對(duì)象到本地(包括對(duì)象的最后修改時(shí)間)。一周后,用戶再次請(qǐng)求該對(duì)象(仍保留在緩存中),緩存發(fā)送一個(gè)條件GET,檢查該對(duì)象是否已被修改GET/fruit/kiwi.gifHTTP/l.1Host:
If-modified-since:date1對(duì)象未修改,緩存可以繼續(xù)使用該對(duì)象的拷貝,并轉(zhuǎn)發(fā)給用戶瀏覽器。792.3文件傳輸協(xié)議:FTP
本地主機(jī)上的用戶,向遠(yuǎn)程主機(jī)上傳或者下載文件。用戶通過(guò)一個(gè)FTP用戶代理與FTP服務(wù)器交互。文件傳輸FTP服務(wù)器FTP用戶接口FTP客戶機(jī)本地文件系統(tǒng)遠(yuǎn)程文件系統(tǒng)主機(jī)上的用戶上傳下載80文件傳輸過(guò)程用戶提供遠(yuǎn)程主機(jī)的主機(jī)名:在本地主機(jī)的FTP客戶機(jī)進(jìn)程與遠(yuǎn)程主機(jī)FTP服務(wù)器進(jìn)程之間建立TCP連接;提供用戶標(biāo)識(shí)和口令:在該TCP連接上向服務(wù)器傳送。服務(wù)器驗(yàn)證通過(guò)后,進(jìn)行文件傳送(雙向):將本地文件系統(tǒng)中的文件傳送到遠(yuǎn)程文件系統(tǒng)(上傳)或從遠(yuǎn)程文件系統(tǒng)中得到文件(下載)文件傳輸FTP服務(wù)器FTP用戶接口FTP客戶機(jī)本地文件系統(tǒng)遠(yuǎn)程文件系統(tǒng)主機(jī)上的用戶81FTP與HTTP比較
都是文件傳輸協(xié)議,并運(yùn)行在TCP上。
FTP使用了兩個(gè)并行的TCP連接:控制連接:數(shù)據(jù)連接:FTP客戶機(jī)FTP服務(wù)器TCP控制連接端口21TCP數(shù)據(jù)連接端口2082控制連接用于在兩主機(jī)間傳輸控制信息(如用戶標(biāo)識(shí)、口令等)FTP會(huì)話開(kāi)始前,F(xiàn)TP的客戶機(jī)與服務(wù)器在21號(hào)端口上建立。FTP的客戶機(jī)通過(guò)該連接發(fā)送用戶標(biāo)識(shí)和口令,或改變遠(yuǎn)程目錄的命令。FTP客戶機(jī)FTP服務(wù)器TCP控制連接端口21TCP數(shù)據(jù)連接端口2083數(shù)據(jù)連接
用于準(zhǔn)確傳輸文件。當(dāng)服務(wù)器收到一個(gè)文件傳輸?shù)拿詈?從遠(yuǎn)程主機(jī)上讀或?qū)?,在20端口發(fā)起一個(gè)到客戶機(jī)的數(shù)據(jù)連接。在該數(shù)據(jù)連接上傳送一個(gè)文件并關(guān)閉連接??刂七B接是持久的:在整個(gè)用戶會(huì)話期間一直保持;數(shù)據(jù)連接是非持久的:會(huì)話中每進(jìn)行一次文件傳輸,都需要建立一個(gè)新的數(shù)據(jù)連接。FTP客戶機(jī)FTP服務(wù)器TCP控制連接端口21TCP數(shù)據(jù)連接端口2084
FTP的控制信息是帶外傳送(out-of-band):使用分離的控制連接;
HTTP的控制信息是帶內(nèi)傳輸(in-band):請(qǐng)求和響應(yīng)都是在傳輸文件的TCP連接中發(fā)送。FTP協(xié)議是有狀態(tài)的:FTP服務(wù)器對(duì)每個(gè)活動(dòng)用戶會(huì)話的狀態(tài)進(jìn)行追蹤,并保留;限制同時(shí)會(huì)話的總數(shù)。
HTTP協(xié)議是無(wú)狀態(tài)的:不對(duì)用戶狀態(tài)進(jìn)行追蹤。85FTP命令,響應(yīng)命令示例:經(jīng)控制信道以ASCII文本發(fā)送USERusernamePASSpasswordLIST返回當(dāng)前目錄中的文件列表RETRfilename獲取(get)文件STORfilename
存儲(chǔ)(puts)文件到遠(yuǎn)程主機(jī)返回碼示例:狀態(tài)碼和短語(yǔ)(如在HTTP中的那樣)331UsernameOK,passwordrequired125dataconnectionalreadyopen;transferstarting425Can’topendataconnection452Errorwritingfile862.4因特網(wǎng)中的電子郵件電子郵件快速、多方接收,包含附件、超鏈接、圖像、聲音、視頻等等。本節(jié)討論電子郵件的核心,即應(yīng)用層協(xié)議。87因特網(wǎng)電子郵件系統(tǒng)的總體結(jié)構(gòu)三部分:用戶代理郵件服務(wù)器簡(jiǎn)單郵件傳輸協(xié)議SMTP用戶郵箱輸出報(bào)文隊(duì)列郵件服務(wù)器用戶代理用戶代理用戶代理郵件服務(wù)器用戶代理用戶代理郵件服務(wù)器用戶代理SMTPSMTPSMTP電子郵件地址用戶郵箱名@主機(jī)名881、用戶代理(user
agent)當(dāng)用戶完成郵件撰寫(xiě)時(shí),郵件代理向其郵件服務(wù)器發(fā)送郵件,并存放在發(fā)送隊(duì)列中。當(dāng)用戶想讀取一條報(bào)文時(shí),郵件代理從其郵件服務(wù)器的郵箱中獲取該報(bào)文。用戶郵箱輸出報(bào)文隊(duì)列郵件服務(wù)器用戶代理用戶代理用戶代理郵件服務(wù)器用戶代理SMTP郵件閱讀器。允許用戶閱讀、回復(fù)、發(fā)送、保存和撰寫(xiě)報(bào)文。種類:GUI(圖形用戶接口):閱讀和編寫(xiě)多媒體郵件。如Outlook、Foxmail等。892、郵件服務(wù)器(mailserver)郵箱:發(fā)送給用戶的報(bào)文。報(bào)文隊(duì)列:用戶要發(fā)出的郵件報(bào)文。用戶郵箱輸出報(bào)文隊(duì)列郵件服務(wù)器用戶代理用戶代理用戶代理郵件服務(wù)器用戶代理SMTP郵件發(fā)送主要過(guò)程:郵件保存到發(fā)送方報(bào)文隊(duì)列通過(guò)SMTP協(xié)議轉(zhuǎn)發(fā)到接收方郵件服務(wù)器,保存到相應(yīng)郵箱中若投遞失敗,發(fā)送方將其保存在一個(gè)報(bào)文隊(duì)列中,以后每30分鐘發(fā)送一次,若幾天后仍未成功,將該報(bào)文刪除,并通知發(fā)送方。用戶訪問(wèn)自己郵箱時(shí),郵件服務(wù)器對(duì)其身份進(jìn)行驗(yàn)證(用戶名和口令)。903、簡(jiǎn)單郵件傳送協(xié)議SMTP
從發(fā)送方的郵件服務(wù)器向接收方的郵件服務(wù)器發(fā)送郵件。應(yīng)用層協(xié)議。使用TCP可靠數(shù)據(jù)傳輸服務(wù)。包括兩部分:客戶機(jī)端:在發(fā)送方郵件服務(wù)器上運(yùn)行;服務(wù)器端:在接收方郵件服務(wù)器上運(yùn)行。每個(gè)郵件服務(wù)器上都有SMTP的客戶機(jī)端和服務(wù)器端。91本節(jié)內(nèi)容2.4.1SMTP2.4.2SMTP與HTTP比較 2.4.3郵件報(bào)文格式和MIME2.4.4郵件訪問(wèn)協(xié)議922.4.1
SMTP1)Alice啟動(dòng)郵件代理,提供接收方的郵件地址,撰寫(xiě)郵件2)用戶代理把報(bào)文發(fā)給其郵件服務(wù)器,放在發(fā)送隊(duì)列中
3)SMTP的客戶機(jī)側(cè)創(chuàng)建與Bob的郵件服務(wù)器的TCP連接4)SMTP通過(guò)TCP連接發(fā)送報(bào)文5)Bob的郵件服務(wù)器接收并將該報(bào)文放入Bob的郵箱6)Bob調(diào)用其用戶代理來(lái)讀報(bào)文用戶代理郵件服務(wù)器郵件服務(wù)器用戶代理123456把一封郵件從發(fā)送郵件服務(wù)器傳送到接收郵件服務(wù)器的過(guò)程:如Alice向Bob發(fā)送報(bào)文SMTPBobAlice932.4.1
SMTP1)Alice啟動(dòng)郵件代理,提供接收方的郵件地址,撰寫(xiě)郵件2)用戶代理把報(bào)文發(fā)給其郵件服務(wù)器,放在發(fā)送隊(duì)列中
3)SMTP的客戶機(jī)側(cè)創(chuàng)建與Bob的郵件服務(wù)器的TCP連接4)SMTP通過(guò)TCP連接發(fā)送報(bào)文5)Bob的郵件服務(wù)器接收并將該報(bào)文放入Bob的郵箱6)Bob調(diào)用其用戶代理來(lái)讀報(bào)文用戶代理郵件服務(wù)器郵件服務(wù)器用戶代理123456把一封郵件從發(fā)送郵件服務(wù)器傳送到接收郵件服務(wù)器的過(guò)程:如Alice向Bob發(fā)送報(bào)文SMTPBobAlice94說(shuō)明客戶使用TCP來(lái)可靠傳輸郵件報(bào)文到服務(wù)器端口號(hào)25。建立TCP連接:握手:指明收發(fā)雙方的郵件地址郵件報(bào)文的傳輸結(jié)束:關(guān)閉TCP連接95SMTP不使用中間郵件服務(wù)器發(fā)送郵件,即TCP連接是從發(fā)送方到接收方的直接相連。如果接收方的郵件服務(wù)器沒(méi)有開(kāi)機(jī),該郵件仍保留在發(fā)送方郵件服務(wù)器上,并在以后進(jìn)行再次傳送。郵件不會(huì)在某個(gè)中間郵件服務(wù)器停留。96共同點(diǎn)都用于從一臺(tái)主機(jī)向另一臺(tái)主機(jī)傳送文件
?
HTTP用于從Web服務(wù)器向Web客戶機(jī)(瀏覽器)傳送文件(對(duì)象);
?
SMTP用于從一個(gè)郵件服務(wù)器向另一個(gè)郵件服務(wù)器傳送文件(電子郵件報(bào)文)。
持久HTTP和SMTP都使用持久連接。97區(qū)別HTTP是拉協(xié)議:用戶使用HTTP從服務(wù)器拉取信息。其TCP連接是由想獲取文件的機(jī)器發(fā)起。
SMTP是推協(xié)議:發(fā)送郵件服務(wù)器把文件推向接收郵件服務(wù)器,其TCP連接是由要發(fā)送文件的機(jī)器發(fā)起。
98區(qū)別
SMTP使用7位ASCII碼格式:對(duì)一些包含了非7位ASCII字符的報(bào)文或二進(jìn)制數(shù)據(jù)(如圖片、聲音),需要按照7位ASCII碼進(jìn)行編碼,再傳送。在接收方需要解碼還原為原有報(bào)文。
HTTP數(shù)據(jù)沒(méi)有該限制。對(duì)含有文本和圖形(或其他媒體類型)的文檔:HTTP把每個(gè)對(duì)象封裝在它各自的HTTP響應(yīng)報(bào)文中發(fā)送電子郵件則把所有報(bào)文對(duì)象放在一個(gè)報(bào)文中。99郵件報(bào)文格式首部行(收發(fā)人、主題)To:From:Subject:主體“報(bào)文”,
均為ASCII字符首部主體空行100
MIME(多用途因特網(wǎng)郵件擴(kuò)展)
SMTP只傳送7位的ASCII碼。SMTP不能傳送可執(zhí)行文件或其他的二進(jìn)制對(duì)象。
MIME:用于非ASCII數(shù)據(jù)傳輸。將非ASCII數(shù)據(jù)編碼后傳輸,接收方再解碼還原。增加新的MIME郵件首部采用某種編碼101
例:傳輸一個(gè)jpeg圖形
From:alice@crepes.frTo:bob@Subject:Pictureofyummycrepe.MIME-Version:1.0Content-Transfer-Encoding:base64Content-Type:image/jpegbase64encodeddata
base64encodeddata
多媒體數(shù)據(jù)類型,子類型,聲明參數(shù)使用數(shù)據(jù)編碼的方法MIME版本編碼數(shù)據(jù)base64編碼:用于二進(jìn)制文件jpeg格式的靜止圖像102
接收的報(bào)文
From:alice@crepes.frTo:bob@Subject:Pictureofyummycrepe.MIME-Version:1.0Content-Transfer-Encoding:base64Content-Type:image/jpegbase64encodeddata
base64encodeddata
Received:fromcress.frby;12oct9815:27:39GMT添加一個(gè)Received:首部行1032.4.4郵件訪問(wèn)協(xié)議發(fā)送方:用戶代理用SMTP將郵件推入其郵件服務(wù)器郵件服務(wù)器再用SMTP將郵件轉(zhuǎn)發(fā)到接收方的郵件服務(wù)器接收方:通過(guò)其用戶代理使用一個(gè)郵件訪問(wèn)協(xié)議(不是SMTP),從其郵件服務(wù)器上取回郵件。
取郵件是一個(gè)拉操作,而SMTP協(xié)議是一個(gè)推協(xié)議。
用戶代理發(fā)送方郵件服務(wù)器用戶代理SMTP訪問(wèn)協(xié)議接收方郵件服務(wù)器SMTP104郵件訪問(wèn)協(xié)議:從服務(wù)器獲取郵件。種類:POP3(第三版的郵局協(xié)議)IMAP(因特網(wǎng)郵件訪問(wèn)協(xié)議)HTTP1051、POP3簡(jiǎn)單、功能有限。在用戶代理打開(kāi)了一個(gè)到郵件服務(wù)器(服務(wù)器)端口110上的TCP連接后,開(kāi)始工作。106工作步驟(三階段):特許階段:用戶代理發(fā)送用戶名和口令獲得下載郵件的特許。(身份認(rèn)證)事務(wù)處理階段:用戶代理取回報(bào)文,可對(duì)郵件進(jìn)行某些操作。如做刪除標(biāo)記、取消刪除標(biāo)記、獲取統(tǒng)計(jì)信息等。更新階段:郵件服務(wù)器刪除帶有刪除標(biāo)記的報(bào)文,結(jié)束POP會(huì)話。1072、IMAPPOP3缺陷:用戶讀取郵件后,服務(wù)器不再保存。IMAP:功能強(qiáng)在用戶的PC機(jī)上運(yùn)行IMAP客戶程序,然后與ISP的郵件服務(wù)器上的IMAP服務(wù)器程序建立TCP連接。用戶在自己的PC機(jī)上就可以操縱郵件服務(wù)器的郵箱,就像在本地操縱一樣,是一個(gè)聯(lián)機(jī)協(xié)議。未發(fā)出刪除命令前,一直保存在郵件服務(wù)器實(shí)現(xiàn)起來(lái)復(fù)雜。1083、基于web的電子郵件
1995年12月Hotmail引入該技術(shù)。用戶使用瀏覽器收發(fā)電子郵件。用戶代理是普通的瀏覽器,用戶和其遠(yuǎn)程郵箱之間的通信通過(guò)HTTP進(jìn)行:發(fā)件人使用HTTP將電子郵件報(bào)文從其瀏覽器發(fā)送到其郵件服務(wù)器上;收件人使用HTTP從其郵箱中取一個(gè)報(bào)文到瀏覽器;郵件服務(wù)器之間發(fā)送和接收郵件時(shí),使用SMTP。用戶可以在遠(yuǎn)程服務(wù)器上以層次目錄方式組織報(bào)文。如,Hotmail、Yahoo、Mail等。1092.5DNS:因特網(wǎng)的目錄服務(wù)標(biāo)識(shí)主機(jī)的兩種方式:主機(jī)名:由不定長(zhǎng)的字母和數(shù)字組成。便于記憶。如
路由器處理困難。IP地址:由4個(gè)字節(jié)組成,有著嚴(yán)格的層次結(jié)構(gòu)。路由器容易處理。如IP地址(點(diǎn)分十進(jìn)制):3
網(wǎng)絡(luò)號(hào)主機(jī)號(hào)1102.5.1DNS提供的服務(wù)報(bào)文在網(wǎng)絡(luò)中傳輸,使用IP地址。域名系統(tǒng)DNS(DomainNameSystem):進(jìn)行主機(jī)名到IP地址的轉(zhuǎn)換。一個(gè)由分層的DNS服務(wù)器實(shí)現(xiàn)的分布式數(shù)據(jù)庫(kù)允許主機(jī)查詢分布式數(shù)據(jù)庫(kù)的應(yīng)用層協(xié)議;111說(shuō)明運(yùn)行BIND軟件的UNIX機(jī)器;DNS協(xié)議運(yùn)行在UDP之上,使用53號(hào)端口。DNS通常直接由其他的應(yīng)用層協(xié)議(包括HTTP、SMTP和FTP)使用,以將用戶提供的主機(jī)名解析為IP地址。用戶只是間接使用。112例,某個(gè)用戶主機(jī)上的一個(gè)瀏覽器訪問(wèn)某個(gè)Web頁(yè),/index.html用戶主機(jī)要將一個(gè)HTTP請(qǐng)求報(bào)文發(fā)送到Web服務(wù)器,需先得到相應(yīng)的IP地址。過(guò)程如下:用戶主機(jī)上運(yùn)行DNS應(yīng)用的客戶機(jī)端。瀏覽器從URL中解析出主機(jī)地址,傳給DNS客戶機(jī)端。DNS客戶機(jī)向DNS服務(wù)器發(fā)送一個(gè)包含主機(jī)名的請(qǐng)求;DNS客戶機(jī)收到含有對(duì)應(yīng)主機(jī)名的IP地址的回答報(bào)文;瀏覽器向該IP地址指定的HTTP服務(wù)器發(fā)起一個(gè)TCP連接。增加一定時(shí)延。113DNS服務(wù)主機(jī)名到IP地址的轉(zhuǎn)換主機(jī)別名規(guī)范名和別名:通過(guò)DNS可以得到主機(jī)別名對(duì)應(yīng)的規(guī)范主機(jī)名及IP地址。郵件服務(wù)器別名負(fù)載分配1142.6P2P文件共享
位于網(wǎng)絡(luò)邊緣的PC機(jī)(對(duì)等方peer)互相之間可以直接獲取對(duì)象。例,用戶Alice使用P2P文件共享應(yīng)用程序下載MP3。說(shuō)明:每個(gè)參與的對(duì)等方既是內(nèi)容的消費(fèi)者也是內(nèi)容的發(fā)布者(下載同時(shí)也向其他用戶上載)。115過(guò)程
在PC機(jī)上運(yùn)行一個(gè)P2P文件共享應(yīng)用軟件(對(duì)等方);通過(guò)ADSL間歇地與接入因特網(wǎng)(無(wú)固定IP地址)使用該應(yīng)用程序搜索一首MP3歌曲;顯示一張有該首歌曲的對(duì)等方列表:所有在線對(duì)等方,并愿意共享該首音樂(lè)的MP3拷貝對(duì)等方都是普通的PC,是因特網(wǎng)用戶。列表中提供一些附加信息,如接入帶寬和下載時(shí)間。選擇一個(gè)對(duì)等方(Bob)并向其請(qǐng)求該MP3文件;兩個(gè)用戶之間建立一個(gè)直接的TCP連接;
MP3文件從Bob的PC機(jī)向Alice的PC發(fā)送;下載期間若偶然斷開(kāi),可從其他對(duì)等方繼續(xù)下載。116P2P文件共享特點(diǎn)直接在對(duì)等方間傳輸:所有內(nèi)容不經(jīng)過(guò)第三方服務(wù)器高度的可擴(kuò)展能力:利用眾多對(duì)等方集合中的資源去分發(fā)內(nèi)容使用客戶機(jī)/服務(wù)器模式:請(qǐng)求的對(duì)等方是客戶機(jī),被選中的對(duì)等方是服務(wù)器。服務(wù)器對(duì)等方使用文件傳輸協(xié)議向客戶機(jī)對(duì)等方傳送。?通過(guò)傳送“HTTP請(qǐng)求”和“HTTP響應(yīng)”報(bào)文進(jìn)行。所有的對(duì)等方必須既能運(yùn)行文件傳輸協(xié)議的客戶機(jī)端程序,又能運(yùn)行服務(wù)器端程序。?對(duì)等方既是一個(gè)客戶機(jī),又是一個(gè)瞬時(shí)Web服務(wù)器。117內(nèi)容定位體系結(jié)構(gòu)
一個(gè)對(duì)等方如何確定哪個(gè)對(duì)等方有所需要的內(nèi)容。(1)集中式目錄(2)查詢洪泛(3)利用不均勻性(KaZaA)118(1)集中式目錄目錄服務(wù)器(大型服務(wù)器或服務(wù)器場(chǎng)):提供目錄服務(wù)。收集可共享的對(duì)象,建立集中式的動(dòng)態(tài)數(shù)據(jù)庫(kù)(對(duì)象名稱到IP地址的映射)。集中式目錄服務(wù)器對(duì)等方AliceBob111123源于Napster公司(第一家世界范圍內(nèi)從事MP3對(duì)等應(yīng)用程序)設(shè)計(jì)。119主要工作通知:對(duì)等方啟動(dòng)時(shí),將其IP地址及可共享內(nèi)容通知目錄服務(wù)器;查詢內(nèi)容:用戶查詢需要共享的對(duì)象。如,Alice查詢某首歌。獲取內(nèi)容:來(lái)自Bob。更新:當(dāng)對(duì)等方獲得新對(duì)象或刪除對(duì)象時(shí),通知目錄服務(wù)器更新。對(duì)等方AliceBob111123通知和更新集中式目錄服務(wù)器查詢文件傳輸屬于客戶機(jī)/服務(wù)器與P2P的混合結(jié)構(gòu)。120
集中式目錄存在的問(wèn)題單點(diǎn)故障性能瓶頸侵犯版權(quán)可靠性:文件傳輸是分散的,但定位內(nèi)容的過(guò)程是高度集中的。121(2)查詢洪泛:Gnutella是一個(gè)公共域文件共享應(yīng)用程序。全分布方式:無(wú)中心服務(wù)器許多Gnutella客戶機(jī)實(shí)現(xiàn)協(xié)議:運(yùn)行在對(duì)等方。實(shí)現(xiàn):對(duì)等方先形成一個(gè)抽象的邏輯網(wǎng)絡(luò)(覆蓋網(wǎng)絡(luò)):通過(guò)洪泛查詢,找到所需對(duì)象:如,某個(gè)對(duì)等方Alice想得到一個(gè)對(duì)象。122特點(diǎn)設(shè)計(jì)簡(jiǎn)單。擴(kuò)展性差?!安樵儓?bào)文”在網(wǎng)絡(luò)中產(chǎn)生很大的流量。限范圍的洪泛查詢:在“查詢報(bào)文”中設(shè)置一個(gè)計(jì)數(shù)字段,并給定一個(gè)特定值??赡軠p少對(duì)等方數(shù)量。123覆蓋網(wǎng)絡(luò)如果對(duì)等方X和Y間有一條TCP連接,則存在一條邊所有活動(dòng)對(duì)等方和邊形成覆蓋網(wǎng)絡(luò)邊不是物理鏈路一個(gè)對(duì)等方所連接的節(jié)點(diǎn)少于10個(gè)。124洪泛查詢查詢查詢命中查詢查詢查詢命中查詢查詢查詢命中文件傳輸:HTTP向覆蓋網(wǎng)絡(luò)中的每個(gè)鄰居發(fā)送“查詢報(bào)文”;每個(gè)鄰居再向鄰居轉(zhuǎn)發(fā),使覆蓋網(wǎng)絡(luò)上的每個(gè)對(duì)等方都能收到該查詢;如果收到查詢的對(duì)等方中有被請(qǐng)求對(duì)象,沿反向路徑回發(fā)“查詢命中”報(bào)文;可能收到多個(gè)對(duì)等方發(fā)回的“查詢命中”報(bào)文選擇一個(gè)對(duì)等方,雙方建立一條直接的TCP連接,并通過(guò)HTTP報(bào)文得到內(nèi)容。125
對(duì)等方X加入對(duì)等方X維持一張對(duì)等方列表(IP地址)X試圖與列表上的對(duì)等方建立TCP,直到與Y建立連接X(jué)向Y發(fā)送Ping報(bào)文;Y向鄰居轉(zhuǎn)發(fā)Ping報(bào)文所有收到Ping報(bào)文的對(duì)等方Z用Pong報(bào)文響應(yīng)(IP地址)X收到多個(gè)Pong報(bào)文,建立多個(gè)TCP連接,即多個(gè)邊126KaZaA
與Gnutella類似,無(wú)專用服務(wù)器,但對(duì)等方地位不平等。實(shí)現(xiàn):對(duì)等方先形成一個(gè)層次的覆蓋網(wǎng)絡(luò)通過(guò)查詢,找到所需對(duì)象。
127層次覆蓋網(wǎng)絡(luò)每組包括若干個(gè)組員,一個(gè)組長(zhǎng)組員與其組長(zhǎng)有一個(gè)TCP連接,將共享內(nèi)容告訴組長(zhǎng)。組長(zhǎng)維護(hù)一個(gè)數(shù)據(jù)庫(kù),該組的共享內(nèi)容及相關(guān)對(duì)等方的IP地址。相關(guān)組長(zhǎng)之間建立TCP連接組長(zhǎng)追蹤其所有子節(jié)點(diǎn)上的內(nèi)容普通對(duì)等方組長(zhǎng)對(duì)等方在覆蓋網(wǎng)絡(luò)中的鄰居關(guān)系對(duì)等方根據(jù)通信關(guān)系劃分若干組,組成層次結(jié)構(gòu)。128KaZaA:查詢對(duì)等方確定到某個(gè)特定對(duì)象的方法:向組長(zhǎng)發(fā)出查詢,組長(zhǎng)用本組中具有該對(duì)象的對(duì)等方列表響應(yīng);或與其他組長(zhǎng)聯(lián)系,請(qǐng)它們向該對(duì)等方發(fā)送具有該對(duì)象的對(duì)等方列表。129KaZaA特點(diǎn)層次覆蓋網(wǎng)絡(luò)查詢流量不大設(shè)計(jì)技巧請(qǐng)求排隊(duì):限制并行上載數(shù)量激勵(lì)優(yōu)先權(quán):上載文件比下載文件多的用戶優(yōu)先。并行下載:從多個(gè)對(duì)等方請(qǐng)求并下載同一個(gè)文件的不同部分。1302.7TCP套接字編程網(wǎng)絡(luò)應(yīng)用程序的核心:客戶機(jī)程序和服務(wù)器程序。運(yùn)行時(shí),分別創(chuàng)建一個(gè)客戶機(jī)進(jìn)程和一個(gè)服務(wù)器進(jìn)程,相互之間通過(guò)套接字讀寫(xiě)數(shù)據(jù)進(jìn)行通信。網(wǎng)絡(luò)應(yīng)用程序類型:通用應(yīng)用程序:通過(guò)RFC文檔所定義的標(biāo)準(zhǔn)協(xié)議來(lái)實(shí)現(xiàn)程序必須滿足該RFC所規(guī)定的規(guī)則;使用與協(xié)議相關(guān)的端口號(hào)。如Web應(yīng)用專用的應(yīng)用程序:程序不必符合RFC規(guī)則;開(kāi)發(fā)者根據(jù)實(shí)際應(yīng)用設(shè)計(jì);不能使用RFC中定義的周知端口號(hào)。131說(shuō)明
研發(fā)初期,先選擇運(yùn)輸層協(xié)議:TCP:面向連接的,為兩個(gè)端系統(tǒng)之間的數(shù)據(jù)流動(dòng)提供可靠的字節(jié)流通道。UDP:無(wú)連接的,從一個(gè)端系統(tǒng)向另一個(gè)端系統(tǒng)發(fā)送獨(dú)立的數(shù)據(jù)分組,不對(duì)交付提供任何保證。1322.7.1TCP套接字編程
運(yùn)行在不同機(jī)器上的進(jìn)程彼此通過(guò)套接字傳遞報(bào)文來(lái)進(jìn)行通信。進(jìn)程/套接字:房子/門(mén)戶,即套接字是應(yīng)用進(jìn)程和TCP之間的門(mén)戶。程序開(kāi)發(fā)者可以控制應(yīng)用層端所有東西;不能控制運(yùn)輸層端。
TCP服務(wù):
從一個(gè)進(jìn)程到另一個(gè)進(jìn)程的可靠字節(jié)傳輸由操作系統(tǒng)控制進(jìn)程具有緩存,變量的TCP套接字由應(yīng)用程序研發(fā)者控制主機(jī)或服務(wù)器進(jìn)程具有緩存,變量的TCP套接字由操作系統(tǒng)控制主機(jī)或服務(wù)器internet由應(yīng)用程序研發(fā)者控制133客戶機(jī)和服務(wù)器程序之間的交互
先建立TCP連接,再進(jìn)行數(shù)據(jù)傳輸??蛻魴C(jī)程序是連接的發(fā)起方;服務(wù)器必須先準(zhǔn)備好,對(duì)客戶機(jī)程序發(fā)起的連接做出響應(yīng):·服務(wù)器程序事先已經(jīng)在系統(tǒng)中運(yùn)行;·服務(wù)器程序的一個(gè)套接字(歡迎套接字)已經(jīng)打開(kāi),準(zhǔn)備接收客戶機(jī)程序發(fā)起的連接(敲門(mén))。具體過(guò)程:134建立TCP連接客戶機(jī)進(jìn)程向服務(wù)器發(fā)起一個(gè)TCP連接:
創(chuàng)建一個(gè)本地套接字,指定相應(yīng)服務(wù)器進(jìn)程的地址(IP地址和端口號(hào))。建立一個(gè)TCP連接:當(dāng)服務(wù)器聽(tīng)到客戶機(jī)的連接請(qǐng)求(敲門(mén))時(shí),創(chuàng)建一個(gè)新套接字,經(jīng)過(guò)“三次握手”,客戶機(jī)套接字和服務(wù)器套接字之間建立一個(gè)TCP連接(直接的虛擬管道)。135傳送數(shù)據(jù)TCP連接為客戶機(jī)和服務(wù)器了一個(gè)直接的傳輸管道。可靠的,順序的,字節(jié)流的傳輸136術(shù)語(yǔ)流:流入或流出某進(jìn)程的一串字符序列。輸入流:來(lái)自某個(gè)輸入源(如鍵盤(pán))、或某個(gè)套接字(因特網(wǎng)的數(shù)據(jù)流入套接字)。輸出流:到某個(gè)輸出源(如顯示器)、或某個(gè)套接字(數(shù)據(jù)通過(guò)套接字流向因特網(wǎng))。1372.7.2Java應(yīng)用程序示例
客戶機(jī)和服務(wù)器經(jīng)TCP連接進(jìn)行通信。客戶機(jī)從鍵盤(pán)讀一行字符,通過(guò)套接字向服務(wù)器發(fā)送服務(wù)器從套接字讀取數(shù)據(jù); 將該行字符轉(zhuǎn)換成大寫(xiě);將修改的行通過(guò)其連接套接字再回發(fā)給客戶機(jī)??蛻魴C(jī)從其套接字中讀取修改的行,并將該行在顯示器上顯示。138客戶機(jī)/服務(wù)器程序交互等待入連接請(qǐng)求connectionSocket=welcomeSocket.accept()生成歡迎套接字,port=xwelcomeSocket=ServerSocket()生成套接字,與hostid連接,port=xClientSocket=Socket()關(guān)閉connectionSocket讀回答ClientSocket關(guān)閉ClientSocket服務(wù)器
(運(yùn)行在hostid上)客戶機(jī)發(fā)送請(qǐng)求ClientSocket讀請(qǐng)求connectionSocket寫(xiě)回答connectionSocketTCPconnectionsetup139客戶機(jī)端創(chuàng)建了三個(gè)流和一個(gè)套接字,如圖所示。套接字:clientSocket;InFromUser輸入流:連接到鍵盤(pán);InFromServers輸入流:與套接字連接。從網(wǎng)絡(luò)來(lái)的字符outToServers輸出流:與套接字連接,客戶機(jī)發(fā)送到網(wǎng)絡(luò)的字符。客戶機(jī)processoutToServer到網(wǎng)絡(luò)來(lái)自網(wǎng)絡(luò)inFromServerinFromUser鍵盤(pán)顯示器進(jìn)程clientSocket輸入流輸入流輸出流TCP套接字套接字140客戶機(jī):(TCPClient.java)importjava.io.*;import.*;classTCPClient{publicstaticvoidmain(Stringargv[])throwsException{Stringsentence;StringmodifiedSentence;BufferedReaderinFromUser=newBufferedReader(newInputStreamReader(System.in));SocketClientSocket=newSocket("hostname",6789);DataOutputStreamoutToServer=newDataOutputStream(ClientSocket.getOutputStream());
產(chǎn)生輸入流產(chǎn)生客戶機(jī)套接字,與服務(wù)器連接生成輸出流與套接字聯(lián)系產(chǎn)生輸入流、輸出流、套接字輸入發(fā)送接收顯示141
BufferedReaderinFromServer=newBufferedReader(newInputStreamReader(ClientSocket.getInputStream()));sentence=inFromUser.readLine();
outToServer.writeBytes(sentence+'\n');modifiedSentence=inFromServer.readLine();System.out.println("FROMServer:"+modifiedSentence);
ClientSocket.close();
}}
產(chǎn)生與套接字聯(lián)系的輸入流向服務(wù)器發(fā)送行從服務(wù)器讀行顯示內(nèi)容鍵盤(pán)輸入142服務(wù)器:(TCPServer.java)importjava.io.*;import.*;classTCPServer{publicstaticvoidmain(Stringargv[])throwsException{StringClientSentence;StringcapitalizedSentence;ServerSocket
welcomeSocket=newServerSocket(6789);
while(true){
SocketconnectionSocket=welcomeSocket.accept();BufferedReaderinFromClient
=newBufferedReader(newInputStreamReader(connectionSocket.getInputStream()));在端口6789生成歡迎套接字,監(jiān)聽(tīng)創(chuàng)建一個(gè)連接套接字
生成輸入流,與套接字聯(lián)系產(chǎn)生輸入流、輸出流、套接字接收發(fā)送143
DataOutputStreamoutToClient
=newDataOutputStream(connectionSocket.getOutputStream());
ClientSentence=inFromClient.readLine();
capitalizedSentence=ClientSentence.toUpperCase()+'\n';
outToClient.writeBytes(capitalizedSentence);}}}
從套接字讀入客戶機(jī)來(lái)的數(shù)據(jù)
生成輸出流,與套接字聯(lián)系向套接字輸出數(shù)據(jù)到客戶機(jī)循環(huán)結(jié)束,返回并等待另一個(gè)客戶機(jī)連接1442.8UDP套接字編程UDP是一種無(wú)連接的服務(wù),即在兩個(gè)進(jìn)程之間沒(méi)有創(chuàng)建管道時(shí)所需的初始握手階段。進(jìn)程之間的數(shù)據(jù)傳遞以分組為單位進(jìn)行。分組中含目的進(jìn)程地址(主機(jī)IP地址和端口號(hào))。提供不可靠的傳輸服務(wù)。145編程說(shuō)明:通信進(jìn)程之間沒(méi)有初始握手,不需要?dú)g迎套接字;沒(méi)有流與套接字相聯(lián)系;發(fā)送主機(jī)將信息字節(jié)封裝生成分組,再發(fā)送;接收進(jìn)程解封收到的分組,獲得信息字節(jié)。146客戶機(jī)/服務(wù)器程序交互關(guān)閉ClientSocket服務(wù)器(運(yùn)行在hostid上)從ClientSocket讀應(yīng)答創(chuàng)建套接字Cli
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CMES 37005-2023滑道運(yùn)營(yíng)管理規(guī)范
- T/CIS 47001-2018中國(guó)儀器儀表學(xué)會(huì)標(biāo)準(zhǔn)
- T/CHTS 20019-2022公路橋梁跨縫模數(shù)式伸縮裝置
- T/CHTS 10120-2023雄安新區(qū)高摻量膠粉改性瀝青路面施工技術(shù)指南
- T/CHTS 10047-2021公路養(yǎng)護(hù)信息數(shù)據(jù)元與代碼
- T/CGCC 60-2021鹵蔬菜制品
- T/CEMIA 026-2021濕電子化學(xué)品技術(shù)成熟度等級(jí)劃分及定義
- T/CECS 10271-2023不銹鋼分水器
- T/CECS 10061-2019綠色建材評(píng)價(jià)新風(fēng)凈化系統(tǒng)
- T/CCOA 74-2023花生油感官評(píng)價(jià)
- 小學(xué)英語(yǔ)寫(xiě)作教學(xué)的思考與實(shí)踐 桂婷婷
- 患者發(fā)生過(guò)敏性休克應(yīng)急預(yù)案演練腳本模板
- 南京醫(yī)科大學(xué)招聘考試《綜合能力測(cè)試》真題及答案
- 封閉冷通道施工方案
- 2021年新高考全國(guó)1卷(含答案解析)
- 《觸不可及》影視鑒賞課件
- 認(rèn)知知覺(jué)障礙的作業(yè)治療概述(作業(yè)治療技術(shù)課件)
- 畢業(yè)論文與畢業(yè)設(shè)計(jì)指導(dǎo)課件
- 采購(gòu)合同一般采購(gòu)合同
- 形象管理(南開(kāi)大學(xué))【超星爾雅學(xué)習(xí)通】章節(jié)答案
- 《鮮衣怒馬少年時(shí) 唐宋詩(shī)詞篇 全集 》讀書(shū)筆記PPT模板思維導(dǎo)圖下載
評(píng)論
0/150
提交評(píng)論