1抹恳、域名系統(tǒng)
DNS(Domai Name System)是因特網(wǎng)使用的命名系統(tǒng)雄家,用于把便于人們使用的機(jī)器名字轉(zhuǎn)換為IP地址朽基。
許多應(yīng)用層軟件經(jīng)常直接使用域名系統(tǒng)昭伸,但計算機(jī)的用戶只是間接而不是直接使用域名系統(tǒng)梧乘。
1.1 域名結(jié)構(gòu)
因特網(wǎng)采用了層次樹狀結(jié)構(gòu)的命名方法。
任何一個連接在因特網(wǎng)上的主機(jī)或路由器庐杨,都有一個唯一的層次結(jié)構(gòu)的名字选调,即域名。
域名的結(jié)構(gòu)由標(biāo)號序列組成灵份,各標(biāo)號之間用點隔開:
… . 三級域名 . 二級域名 . 頂級域名
DNS規(guī)定仁堪,域名中的標(biāo)號有英文字母和數(shù)字組成,不區(qū)分大小寫填渠。標(biāo)號中除了連字符(-)外不能使用其它標(biāo)點符號弦聂。級別最低的域名寫在最左邊,而級別最高的的頂級域名則寫在最右邊氛什。
各級域名由其上一級的域名管理機(jī)構(gòu)管理莺葫,而最高的頂級域名則由ICANN進(jìn)行管理,每一個域名在整個因特網(wǎng)范圍內(nèi)是唯一的枪眉。
頂級域名可分為以下三類:
-
(1)國家頂級域名捺檬,如:
- “.cn”表示中國
- “.us”表示美國
- “.uk”表示英國
-
(2)通用頂級域名,如:
- ? .com (公司和企業(yè))
- ? .net (網(wǎng)絡(luò)服務(wù)機(jī)構(gòu))
- ? .org (非贏利性組織)
- ? .edu (教育機(jī)構(gòu))
- ? .gov (政府部門)
- ? .mil (軍事部門)
- ? .int (國際組織)
-
(3)基礎(chǔ)結(jié)構(gòu)域名贸铜,這種頂級域名只有一個堡纬,即 arpa聂受,用于反向域名解析,因此又稱為反向域名烤镐。如:
- .aero (航空運輸企業(yè))
- .biz (公司和企業(yè))
- .coop (合作團(tuán)體)
- .museum (博物館)
- .pro (有證書的專業(yè)人員)
1.2 域名服務(wù)器
因特網(wǎng)采用層次結(jié)構(gòu)的命名樹作為主機(jī)的名字蛋济,并使用分布式的域名系統(tǒng) DNS。名字到 IP 地址的解析是由若干個域名服務(wù)器程序完成的炮叶。域名服務(wù)器程序在專設(shè)的結(jié)點上運行碗旅,運行該程序的機(jī)器稱為域名服務(wù)器。
一個服務(wù)器所負(fù)責(zé)管轄的(或有權(quán)限的)范圍叫做區(qū)(zone)悴灵。各單位根據(jù)具體情況來劃分自己管轄范圍的區(qū)扛芽。但在一個區(qū)中的所有節(jié)點必須是能夠連通的。每一個區(qū)設(shè)置相應(yīng)的權(quán)限域名服務(wù)器积瞒,用來保存該區(qū)中的所有主機(jī)的域名到IP地址的映射川尖。
因特網(wǎng)上的DNS域名服務(wù)器也是按照層次安排的。每一個域名服務(wù)器都只對域名體系中的一部分進(jìn)行管轄茫孔。
域名服務(wù)器有以下四種類型:
- 根域名服務(wù)器是最重要的域名服務(wù)器叮喳。所有的根域名服務(wù)器都知道所有的頂級域名服務(wù)器的域名和 IP 地址。不管是哪一個本地域名服務(wù)器缰贝,若要對因特網(wǎng)上任何一個域名進(jìn)行解析馍悟,只要自己無法解析,就首先求助于根域名服務(wù)器剩晴。
- 頂級域名服務(wù)器(TLD服務(wù)器锣咒,Top Level Domain)負(fù)責(zé)管理在該頂級域名服務(wù)器注冊的所有二級域名。
- 權(quán)限域名服務(wù)器不能給出最后的查詢回答時赞弥,就會告訴發(fā)出查詢請求的 DNS 客戶毅整,下一步應(yīng)當(dāng)找哪一個權(quán)限域名服務(wù)器。
- 本地域名服務(wù)器對域名系統(tǒng)非常重要绽左。當(dāng)一個主機(jī)發(fā)出 DNS 查詢請求時悼嫉,這個查詢請求報文就發(fā)送給本地域名服務(wù)器。每一個因特網(wǎng)服務(wù)提供者 ISP拼窥,或一個大學(xué)戏蔑,甚至一個大學(xué)里的系,都可以擁有一個本地域名服務(wù)器鲁纠,這種域名服務(wù)器有時也稱為默認(rèn)域名服務(wù)器总棵。
DNS 域名服務(wù)器都把數(shù)據(jù)復(fù)制到幾個域名服務(wù)器來保存,其中的一個是主域名服務(wù)器改含,其他的是輔助域名服務(wù)器彻舰。當(dāng)主域名服務(wù)器出故障時,輔助域名服務(wù)器可以保證 DNS 的查詢工作不會中斷候味。主域名服務(wù)器定期把數(shù)據(jù)復(fù)制到輔助域名服務(wù)器中刃唤,而更改數(shù)據(jù)只能在主域名服務(wù)器中進(jìn)行。這樣就保證了數(shù)據(jù)的一致性白群。
每個域名服務(wù)器都維護(hù)一個高速緩存尚胞,存放最近用過的名字以及從何處獲得名字映射信息的記錄,可大大減輕根域名服務(wù)器的負(fù)荷帜慢,使因特網(wǎng)上的 DNS 查詢請求和回答報文的數(shù)量大為減少笼裳。為保持高速緩存中的內(nèi)容正確,域名服務(wù)器應(yīng)為每項內(nèi)容設(shè)置計時器粱玲,并處理超過合理時間的項(例如躬柬,每個項目只存放兩天)。
2抽减、文件共享
2.1 FTP
文件傳送協(xié)議FTP(File Transfer Protocol)是因特網(wǎng)上使用最廣泛的文件傳送協(xié)議允青。
FTP 提供交互式的訪問,允許客戶指明文件的類型與格式卵沉,并允許文件具有存取權(quán)限颠锉。FTP 屏蔽了各計算機(jī)系統(tǒng)的細(xì)節(jié),因而適合于在異構(gòu)網(wǎng)絡(luò)中任意計算機(jī)之間傳送文件史汗。
文件傳送協(xié)議 FTP 只提供文件傳送的一些基本的服務(wù)琼掠,它使用 TCP 可靠的運輸服務(wù)。FTP 的主要功能是減少或消除在不同操作系統(tǒng)下處理文件的不兼容性停撞。
FTP 使用客戶服務(wù)器方式瓷蛙。一個 FTP 服務(wù)器進(jìn)程可同時為多個客戶進(jìn)程提供服務(wù)。FTP 的服務(wù)器進(jìn)程由兩大部分組成:
- 一個主進(jìn)程戈毒,負(fù)責(zé)接受新的請求
- 另外有若干個從屬進(jìn)程艰猬,負(fù)責(zé)處理單個請求
主進(jìn)程的工作步驟如下:
- 打開熟知端口(端口號為 21),使客戶進(jìn)程能夠連接上副硅。
- 等待客戶進(jìn)程發(fā)出連接請求姥宝。
- 啟動從屬進(jìn)程來處理客戶進(jìn)程發(fā)來的請求。從屬進(jìn)程對客戶進(jìn)程的請求處理完畢后即終止恐疲,但從屬進(jìn)程在運行期間根據(jù)需要還可能創(chuàng)建其他一些子進(jìn)程腊满。
- 回到等待狀態(tài),繼續(xù)接受其他客戶進(jìn)程發(fā)來的請求培己。主進(jìn)程與從屬進(jìn)程的處理是并發(fā)地進(jìn)行碳蛋。
FTP的工作進(jìn)程如下圖所示:
FTP的客戶和服務(wù)器之間要建立兩個并行的TCP連接:控制鏈接和數(shù)據(jù)連接。
控制連接在整個會話期間一直保持打開省咨,F(xiàn)TP 客戶發(fā)出的傳送請求通過控制連接發(fā)送給服務(wù)器端的控制進(jìn)程肃弟,但控制連接不用來傳送文件。
實際用于傳輸文件的是“數(shù)據(jù)連接”。服務(wù)器端的控制進(jìn)程在接收到 FTP 客戶發(fā)送來的文件傳輸請求后就創(chuàng)建“數(shù)據(jù)傳送進(jìn)程”和“數(shù)據(jù)連接”笤受,用來連接客戶端和服務(wù)器端的數(shù)據(jù)傳送進(jìn)程穷缤。
數(shù)據(jù)傳送進(jìn)程實際完成文件的傳送,在傳送完畢后關(guān)閉“數(shù)據(jù)傳送連接”并結(jié)束運行箩兽。
當(dāng)客戶進(jìn)程向服務(wù)器進(jìn)程發(fā)出建立連接請求時津肛,要尋找連接服務(wù)器進(jìn)程的熟知端口(21),同時還要告訴服務(wù)器進(jìn)程自己的另一個端口號碼汗贫,用于建立數(shù)據(jù)傳送連接身坐。
接著,服務(wù)器進(jìn)程用自己傳送數(shù)據(jù)的熟知端口(20)與客戶進(jìn)程所提供的端口號碼建立數(shù)據(jù)傳送連接落包。
由于 FTP 使用了兩個不同的端口號部蛇,所以數(shù)據(jù)連接與控制連接不會發(fā)生混亂。
2.2 NFS
除了FTP咐蝇,文件共享協(xié)議中的另一大類是聯(lián)機(jī)訪問(on-line access)涯鲁。連擊訪問意味著允許多個程序同時對一個文件進(jìn)行存取,如網(wǎng)絡(luò)文件系統(tǒng)NFS(Network File System)嘹害。
NFS 允許應(yīng)用進(jìn)程打開一個遠(yuǎn)地文件撮竿,并能在該文件的某一個特定的位置上開始讀寫數(shù)據(jù)。NFS 可使用戶只復(fù)制一個大文件中的一個很小的片段笔呀,而不需要復(fù)制整個大文件幢踏。在網(wǎng)絡(luò)上傳送的只是少量的修改數(shù)據(jù)。
對于上述例子许师,計算機(jī) A 的 NFS 客戶軟件房蝉,把要添加的數(shù)據(jù)和在文件后面寫數(shù)據(jù)的請求一起發(fā)送到遠(yuǎn)地的計算機(jī) B 的 NFS 服務(wù)器。NFS 服務(wù)器更新文件后返回應(yīng)答信息微渠。
2.3 TFTP
TCP/IP協(xié)議族中還有一個簡單文件傳送協(xié)議TFTP(Trivial File Transfer Protocol)搭幻。
TFTP 是一個很小且易于實現(xiàn)的文件傳送協(xié)議,使用客戶服務(wù)器方式和使用 UDP 數(shù)據(jù)報逞盆,因此 TFTP 需要有自己的差錯改正措施檀蹋。TFTP 只支持文件傳輸而不支持交互。
TFTP 的工作很像停止等待協(xié)議云芦,發(fā)送完一個文件塊后就等待對方的確認(rèn)俯逾,確認(rèn)時應(yīng)指明所確認(rèn)的塊編號。發(fā)完數(shù)據(jù)后在規(guī)定時間內(nèi)收不到確認(rèn)就要重發(fā)數(shù)據(jù)舅逸。發(fā)送確認(rèn) PDU 的一方若在規(guī)定時間內(nèi)收不到下一個文件塊桌肴,也要重發(fā)確認(rèn)。這樣就可保證文件的傳送不致因某一個數(shù)據(jù)報的丟失而告失敗琉历。
3坠七、遠(yuǎn)程終端協(xié)議
TELNET 是一個簡單的遠(yuǎn)程終端協(xié)議水醋。用戶用 TELNET 就可在其所在地通過 TCP 連接注冊(即登錄)到遠(yuǎn)地的另一個主機(jī)上(使用主機(jī)名或 IP 地址)。
TELNET 能將用戶的擊鍵傳到遠(yuǎn)地主機(jī)彪置,同時也能將遠(yuǎn)地主機(jī)的輸出通過 TCP 連接返回到用戶屏幕拄踪。這種服務(wù)是透明的,因為用戶感覺到好像鍵盤和顯示器是直接連在遠(yuǎn)地主機(jī)上悉稠。
TELNET 也使用客戶服務(wù)器方式宫蛆。在本地系統(tǒng)運行 TELNET 客戶進(jìn)程,而在遠(yuǎn)地主機(jī)則運行 TELNET 服務(wù)器進(jìn)程的猛。
和 FTP 的情況相似,服務(wù)器中的主進(jìn)程等待新的請求想虎,并產(chǎn)生從屬進(jìn)程來處理每一個連接卦尊。
TELNET定義了數(shù)據(jù)和命令應(yīng)怎樣通過因特網(wǎng),這些定義就是所謂的網(wǎng)絡(luò)虛擬終端NVT(Network Virtual Terminal)舌厨。
客戶軟件把用戶的擊鍵和命令轉(zhuǎn)換成 NVT 格式岂却,并送交服務(wù)器。
服務(wù)器軟件把收到的數(shù)據(jù)和命令裙椭,從 NVT 格式轉(zhuǎn)換成遠(yuǎn)地系統(tǒng)所需的格式躏哩。
向用戶返回數(shù)據(jù)時,服務(wù)器把遠(yuǎn)地系統(tǒng)的格式轉(zhuǎn)換為 NVT 格式揉燃,本地客戶再從 NVT 格式轉(zhuǎn)換到本地系統(tǒng)所需的格式扫尺。
4、萬維網(wǎng)
萬維網(wǎng) WWW (World Wide Web)并非某種特殊的計算機(jī)網(wǎng)絡(luò)炊汤,而是一個大規(guī)模的正驻、聯(lián)機(jī)式的信息儲藏所。
萬維網(wǎng)用鏈接的方法能非常方便地從因特網(wǎng)上的一個站點訪問另一個站點抢腐,從而主動地按需獲取豐富的信息姑曙。這種訪問方式稱為鏈接。
萬維網(wǎng)以客戶服務(wù)器方式工作迈倍。瀏覽器就是在用戶計算機(jī)上的萬維網(wǎng)客戶程序伤靠。萬維網(wǎng)文檔所駐留的計算機(jī)則運行服務(wù)器程序,因此這個計算機(jī)也稱為萬維網(wǎng)服務(wù)器啼染。
客戶程序向服務(wù)器程序發(fā)出請求宴合,服務(wù)器程序向客戶程序送回客戶所要的萬維網(wǎng)文檔。
4.1 統(tǒng)一資源定位符URL
統(tǒng)一資源定位符URL (Uniform Resource Locator)使每一個文檔在整個因特網(wǎng)的范圍內(nèi)具有唯一的標(biāo)識符提完。
由以冒號隔開的兩大部分組成形纺,并且在 URL 中的字符對大寫或小寫沒有要求。
URL 的一般形式是:
<協(xié)議>://<主機(jī)>:<端口>/<路徑>
協(xié)議就是指是用什么協(xié)議來獲取萬維網(wǎng)文檔⊥叫溃現(xiàn)在最常用的協(xié)議就是http
逐样,其次是ftp
。
4.2 超文本傳送協(xié)議HTTP
HTTP協(xié)議定義了瀏覽器怎樣向萬維網(wǎng)服務(wù)器請求萬維網(wǎng)文檔,以及服務(wù)器怎樣把文檔傳送給瀏覽器脂新。
從層次的角度看挪捕,HTTP 是面向事務(wù)的(transaction-oriented)應(yīng)用層協(xié)議,它是萬維網(wǎng)上能夠可靠地交換文件(包括文本争便、聲音级零、圖像等各種多媒體文件)的重要基礎(chǔ)。
萬維網(wǎng)的大致工作過程如下:
每個萬維網(wǎng)網(wǎng)點都有一個服務(wù)器進(jìn)程滞乙,它不斷地監(jiān)聽TCP的端口80奏纪,以便發(fā)現(xiàn)是否有瀏覽器向它發(fā)出連接建立請求。一旦監(jiān)聽到連接建立的請求并建立了TCP連接之后斩启,瀏覽器就向萬維網(wǎng)服務(wù)器發(fā)出某個頁面的請求序调,服務(wù)器接著就返回所請求的頁面作為響應(yīng)。最后兔簇,TCP連接被釋放发绢。
假如我們點擊了一個指向www.tsinghua.edu.cn/chn/yxsz/index.htm
的超鏈接,在HTTP/1.0
標(biāo)準(zhǔn)下會發(fā)生下面幾個事件:
- (1) 瀏覽器分析超鏈指向頁面的 URL垄琐。
- (2) 瀏覽器向 DNS 請求解析 www.tsinghua.edu.cn 的 IP 地址边酒。
- (3) 域名系統(tǒng) DNS 解析出清華大學(xué)服務(wù)器的 IP 地址。
- (4) 瀏覽器與服務(wù)器建立 TCP 連接
- (5) 瀏覽器發(fā)出取文件命令:
GET /chn/yxsz/index.htm
狸窘。 - (6) 服務(wù)器給出響應(yīng)墩朦,把文件 index.htm發(fā)給瀏覽器。
- (7) TCP 連接釋放朦前。
- (8) 瀏覽器顯示“清華大學(xué)院系設(shè)置”文件 index.htm 中的所有文本介杆。
HTTP 1.0
協(xié)議是無狀態(tài)的。也就是說韭寸,同一個客戶第二次訪問同一個服務(wù)器上的頁面時春哨,服務(wù)器的響應(yīng)與第一次被訪問時的響應(yīng)相同。服務(wù)器不記得曾經(jīng)訪問過的這個用戶恩伺,更不記得訪問過多少次赴背。
HTTP 協(xié)議本身也是無連接的,雖然它使用了面向連接的 TCP 向上提供的服務(wù)晶渠。雖然HTTP使用了TCP連接凰荚,但是通信的雙方在交換HTTP報文之前不需要先建立HTTP連接。
與HTTP/1.0
不同褒脯,HTTP/1.1
使用了持續(xù)連接便瑟。即萬維網(wǎng)服務(wù)器在發(fā)送響應(yīng)后仍然在一段時間內(nèi)保持這條連接,使同一個客戶(瀏覽器)和該服務(wù)器可以繼續(xù)在這條連接上傳送后續(xù)的 HTTP 請求報文和響應(yīng)報文番川。
這并不局限于傳送同一個頁面上鏈接的文檔到涂,而是只要這些文檔都在同一個服務(wù)器上就行脊框。
HTTP有兩類報文:
- 請求報文——從客戶向服務(wù)器發(fā)送請求報文。
- 響應(yīng)報文——從服務(wù)器到客戶的回答践啄。
請求報文的結(jié)構(gòu)如下:
報文由三個部分組成浇雹,即開始行、首部行和實體主體屿讽。在請求報文中昭灵,開始行就是請求行。
響應(yīng)報文的結(jié)構(gòu)如下:
響應(yīng)報文的開始行是狀態(tài)行伐谈。狀態(tài)行包括三項內(nèi)容烂完,即 HTTP 的版本,狀態(tài)碼衩婚,以及解釋狀態(tài)碼的簡單短語窜护。
狀態(tài)碼都是三位數(shù)字:
- 1xx 表示通知信息的,如請求收到了或正在進(jìn)行處理非春。
- 2xx 表示成功,如接受或知道了缓屠。
- 3xx 表示重定向奇昙,表示要完成請求還必須采取進(jìn)一步的行動。
- 4xx 表示客戶的差錯敌完,如請求中有錯誤的語法或不能完成储耐。
- 5xx 表示服務(wù)器的差錯,如服務(wù)器失效無法完成請求滨溉。
4.3 代理服務(wù)器
代理服務(wù)器(proxy server)又稱為萬維網(wǎng)高速緩存(Web cache)什湘,它代表瀏覽器發(fā)出 HTTP 請求。
萬維網(wǎng)高速緩存把最近的一些請求和響應(yīng)暫存在本地磁盤中晦攒。當(dāng)與暫時存放的請求相同的新請求到達(dá)時闽撤,萬維網(wǎng)高速緩存就把暫存的響應(yīng)發(fā)送出去蛋铆,而不需要按 URL 的地址再去因特網(wǎng)訪問該資源踢械。
使用高速緩存可減少訪問因特網(wǎng)服務(wù)器的時延毒姨,沒有使用高速緩存的示意圖如下:
使用高速緩存的情況如下:
(1)瀏覽器訪問因特網(wǎng)的服務(wù)器時枝缔,要先與校園網(wǎng)的高速緩存建立 TCP 連接右核,并向高速緩存發(fā)出 HTTP 請求報文
(2)若高速緩存已經(jīng)存放了所請求的對象僵腺,則將此對象放入 HTTP 響應(yīng)報文中返回給瀏覽器茬高。
- (3)否則个盆,高速緩存就代表發(fā)出請求的用戶瀏覽器矾芙,與因特網(wǎng)上的源點服務(wù)器建立 TCP 連接舍沙,并發(fā)送 HTTP 請求報文。
(4)源點服務(wù)器將所請求的對象放在 HTTP 響應(yīng)報文中返回給校園網(wǎng)的高速緩存剔宪。
(5)高速緩存收到此對象后拂铡,先復(fù)制在其本地存儲器中(為今后使用)壹无,然后再將該對象放在 HTTP 響應(yīng)報文中,通過已建立的 TCP 連接和媳,返回給請求該對象的瀏覽器格遭。
5、電子郵件
5.1 電子郵件系統(tǒng)
一個電子郵件系統(tǒng)應(yīng)具有三個主要組成部分:
- 用戶代理
- 郵件服務(wù)器
- 郵件發(fā)送協(xié)議(如SMTP)與郵件讀取協(xié)議(如POP)
用戶代理(User Agent)就是用戶與電子郵件系統(tǒng)的接口留瞳,在大多數(shù)情況下它就是運行在用戶PC機(jī)中的一個程序拒迅。一般具有撰寫、顯示她倘、處理璧微、通信等功能。
因特網(wǎng)上有許多郵件服務(wù)器可供用戶選擇硬梁,郵件服務(wù)器24小時不間斷地工作前硫,并且具有大容量的郵件信箱。郵件服務(wù)器的功能是發(fā)送和接收郵件荧止,同時還要向發(fā)信人報告郵件傳送的情況(已交付屹电、被拒絕、丟失等)跃巡。郵件服務(wù)器按照客戶服務(wù)器方式工作危号。郵件服務(wù)器需要使用發(fā)送和讀取兩個不同的協(xié)議。
應(yīng)當(dāng)注意的是素邪,一個郵件服務(wù)器既可以作為客戶外莲,也可以作為服務(wù)器。
例如兔朦,當(dāng)郵件服務(wù)器 A 向另一個郵件服務(wù)器 B 發(fā)送郵件時偷线,郵件服務(wù)器 A 就作為 SMTP 客戶,而 B 是 SMTP 服務(wù)器沽甥。
當(dāng)郵件服務(wù)器 A 從另一個郵件服務(wù)器 B 接收郵件時声邦,郵件服務(wù)器 A 就作為 SMTP 服務(wù)器,而 B 是 SMTP 客戶安接。
發(fā)送和接收電子郵件的幾個重要步驟:
- (1)發(fā)件人調(diào)用 PC 中的用戶代理撰寫和編輯要發(fā)送的郵件翔忽。
- (2)發(fā)件人的用戶代理把郵件用 SMTP 協(xié)議發(fā)給發(fā)送方郵件服務(wù)器,
- (3)SMTP 服務(wù)器把郵件臨時存放在郵件緩存隊列中盏檐,等待發(fā)送歇式。
- (4)發(fā)送方郵件服務(wù)器的 SMTP 客戶與接收方郵件服務(wù)器的 SMTP 服務(wù)器建立 TCP 連接,然后就把郵件緩存隊列中的郵件依次發(fā)送出去
- (5)運行在接收方郵件服務(wù)器中的SMTP服務(wù)器進(jìn) 程收到郵件后胡野,把郵件放入收件人的用戶郵箱中材失,等待收件人進(jìn)行讀取。
- (6)收件人在打算收信時硫豆,就運行 PC 機(jī)中的用戶代理龙巨,使用 POP3(或 IMAP)協(xié)議讀取發(fā)送給自己的郵件笼呆。請注意,POP3 服務(wù)器和 POP3 客戶之間的通信是由 POP3 客戶發(fā)起的旨别。
5.2 簡單郵件傳送協(xié)議 SMTP
SMTP(Simple Mail Transfer Protocol)所規(guī)定的就是在兩個相互通信的 SMTP 進(jìn)程之間應(yīng)如何交換信息诗赌。
由于 SMTP 使用客戶服務(wù)器方式,因此負(fù)責(zé)發(fā)送郵件的 SMTP 進(jìn)程就是 SMTP 客戶秸弛,而負(fù)責(zé)接收郵件的 SMTP 進(jìn)程就是 SMTP 服務(wù)器铭若。
5.3 郵件讀取協(xié)議POP和IMAP
POP(Post Office Protocol)郵局協(xié)議是一個非常簡單、但功能有限的郵件讀取協(xié)議〉堇溃現(xiàn)在使用的是它的第三個版本 POP3叼屠。
POP 也使用客戶服務(wù)器的工作方式。在接收郵件的用戶 PC 機(jī)中必須運行 POP 客戶程序绞铃,而在用戶所連接的 ISP 的郵件服務(wù)器中則運行 POP 服務(wù)器程序镜雨。
POP協(xié)議支持離線郵件處理,當(dāng)郵件發(fā)送到服務(wù)器后儿捧,電子郵件客戶端會調(diào)用郵件客戶端程序荚坞,下載所有未閱讀的電子郵件(這種離線訪問模式是一種存儲轉(zhuǎn)發(fā)服務(wù))。當(dāng)郵件從郵件服務(wù)器發(fā)送到個人計算機(jī)上菲盾,同時郵件服務(wù)器會刪除該郵件(但是目前很多POP3服務(wù)器都支持“下載郵件西剥,服務(wù)器并不刪除郵件”,也就是說在POP3中改進(jìn)了POP協(xié)議)亿汞。
另一個讀取郵件的協(xié)議是IMAP(Internet Message Access Protocol),它比POP協(xié)議復(fù)雜很多揪阿。
IMAP 也是按客戶服務(wù)器方式工作疗我,現(xiàn)在較新的是版本 4,即 IMAP4南捂。
用戶在自己的 PC 機(jī)上就可以操縱郵件服務(wù)器的郵箱吴裤,就像在本地操縱一樣。IMAP最大的好處就是用戶可以在不同的地方使用不同的計算機(jī)隨時上網(wǎng)閱讀和處理自己的郵件溺健。
注意麦牺,不要將郵件讀取協(xié)議 POP 或 IMAP 與郵件傳送協(xié)議 SMTP 弄混。
發(fā)信人的用戶代理向源郵件服務(wù)器發(fā)送郵件鞭缭,以及源郵件服務(wù)器向目的郵件服務(wù)器發(fā)送郵件剖膳,都是使用 SMTP 協(xié)議。
而 POP 協(xié)議或 IMAP 協(xié)議則是用戶從目的郵件服務(wù)器上讀取郵件所使用的協(xié)議岭辣。
5.4 基于萬維網(wǎng)的電子郵件
現(xiàn)在我們大多數(shù)情況下都是使用基于萬維網(wǎng)的電子郵件吱晒,outlook之類的用戶代理客戶端已經(jīng)漸漸退出了市場。
不管在什么地方沦童,只要能夠上網(wǎng)仑濒,就可以借助瀏覽器收發(fā)電子郵件叹话。這時,郵件系統(tǒng)中的用戶代理就是普通的萬維網(wǎng)瀏覽器墩瞳。
需要注意的是驼壶,瀏覽器從郵件服務(wù)器讀取郵件,或者向郵件服務(wù)器發(fā)送郵件使用的是HTTP協(xié)議喉酌,而不是IMAP(POP)或SMTP热凹。
例如,一個網(wǎng)易郵箱用戶向新浪郵箱用戶通過瀏覽器發(fā)送郵件瞭吃,各階段使用的協(xié)議如下:
5.5 多用途因特網(wǎng)郵件擴(kuò)充MIME
SMTP有以下不足:
- SMTP 不能傳送可執(zhí)行文件或其他的二進(jìn)制對象碌嘀。
- SMTP 限于傳送 7 位的 ASCII 碼。許多其他非英語國家的文字(如中文歪架、俄文股冗,甚至帶重音符號的法文或德文)就無法傳送。
- SMTP 服務(wù)器會拒絕超過一定長度的郵件和蚪。
于是在這種情況下就提出了MIME(Multipurpose Internet Mail Extensions)止状。MIME 并沒有改動 SMTP 或取代它。MIME 的意圖是繼續(xù)使用目前的格式攒霹,但增加了郵件主體的結(jié)構(gòu)怯疤,并定義了傳送非 ASCII 碼的編碼規(guī)則。
MIME 和 SMTP 的關(guān)系如下:
MIME類型就是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型催束,當(dāng)該擴(kuò)展名文件被訪問的時候集峦,瀏覽器會自動使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名抠刺,以及一些媒體文件打開方式塔淤。
6、動態(tài)主機(jī)配置協(xié)議
為了將軟件協(xié)議做成通用的和便于移植速妖,協(xié)議軟件的編寫者不會把所有細(xì)節(jié)都固定在源代碼中高蜂,而是把協(xié)議軟件參數(shù)化,這就使得在很多臺計算機(jī)上使用同一個經(jīng)過編譯的二進(jìn)制代碼成為可能罕容。
一臺計算機(jī)和另一臺計算機(jī)的區(qū)別备恤,都可通過一些不同的參數(shù)來體現(xiàn)。在軟件協(xié)議運行之前锦秒,必須給每一個參數(shù)賦值露泊。
例如,連接到因特網(wǎng)的計算機(jī)的協(xié)議軟件需要配置的項目包括:
- IP地址
- 子網(wǎng)掩碼
- 默認(rèn)路由器的IP地址
- 域名服務(wù)器的IP地址
這些信息通常存儲在一個配置文件中脂崔,計算機(jī)可以對這個文件進(jìn)行存取滤淳。
使用人工配置既不方便,又容易出錯砌左,現(xiàn)在廣泛使用的是動態(tài)主機(jī)配置協(xié)議DHCP(Dynamic Host Configuration Protocol)脖咐。DHCP 提供了即插即用連網(wǎng)的機(jī)制铺敌。這種機(jī)制允許一臺計算機(jī)加入新的網(wǎng)絡(luò)和獲取IP地址而不用手工參與。
DHCP使用UDP協(xié)議工作屁擅。
需要 IP 地址的主機(jī)在啟動時就向 DHCP 服務(wù)器廣播發(fā)送發(fā)現(xiàn)報文(DHCP DISCOVER)偿凭,這時該主機(jī)就成為 DHCP 客戶。
本地網(wǎng)絡(luò)上所有主機(jī)都能收到此廣播報文派歌,但只有 DHCP 服務(wù)器才回答此廣播報文弯囊。
DHCP 服務(wù)器先在其數(shù)據(jù)庫中查找該計算機(jī)的配置信息。若找到胶果,則返回找到的信息匾嘱。若找不到,則從服務(wù)器的 IP 地址池中取一個地址分配給該計算機(jī)早抠。DHCP 服務(wù)器的回答報文叫做提供報文(DHCP OFFER)霎烙。
并不是每個網(wǎng)絡(luò)上都有 DHCP 服務(wù)器,這樣會使 DHCP 服務(wù)器的數(shù)量太多∪锪現(xiàn)在是每一個網(wǎng)絡(luò)至少有一個 DHCP 中繼代理悬垃,它配置了 DHCP 服務(wù)器的 IP 地址信息。
當(dāng) DHCP 中繼代理收到主機(jī)發(fā)送的發(fā)現(xiàn)報文后甘苍,就以單播方式向 DHCP 服務(wù)器轉(zhuǎn)發(fā)此報文尝蠕,并等待其回答。收到 DHCP 服務(wù)器回答的提供報文后载庭,DHCP 中繼代理再將此提供報文發(fā)回給主機(jī)看彼。
DHCP 服務(wù)器分配給 DHCP 客戶的 IP 地址的臨時的,因此 DHCP 客戶只能在一段有限的時間內(nèi)使用這個分配到的 IP 地址囚聚。DHCP 協(xié)議稱這段時間為租用期闲昭。
租用期的數(shù)值應(yīng)由 DHCP 服務(wù)器自己決定。DHCP 客戶也可在自己發(fā)送的報文中(例如靡挥,發(fā)現(xiàn)報文)提出對租用期的要求。
7鸯绿、套接字SOCKET
當(dāng)某個應(yīng)用進(jìn)程啟動系統(tǒng)調(diào)用時跋破,控制權(quán)就從應(yīng)用進(jìn)程傳遞給了系統(tǒng)調(diào)用接口。
此接口再將控制權(quán)傳遞給計算機(jī)的操作系統(tǒng)瓶蝴。操作系統(tǒng)將此調(diào)用轉(zhuǎn)給某個內(nèi)部過程毒返,并執(zhí)行所請求的操作。
內(nèi)部過程一旦執(zhí)行完畢舷手,控制權(quán)就又通過系統(tǒng)調(diào)用接口返回給應(yīng)用進(jìn)程拧簸。
系統(tǒng)調(diào)用接口實際上就是應(yīng)用進(jìn)程的控制權(quán)和操作系統(tǒng)的控制權(quán)進(jìn)行轉(zhuǎn)換的一個接口,即應(yīng)用編程接口 API(Application Programming Interface)男窟。
關(guān)于TCP/IP協(xié)議最著名的API就是Berkeley UNIX 操作系統(tǒng)定義的套接字接口(socket interface)盆赤。微軟公司在其操作系統(tǒng)中采用了套接字接口 API贾富,形成了一個稍有不同的 API,并稱之為 Windows Socket牺六。
請注意颤枪,在套接字以上的進(jìn)程是受應(yīng)用程序控制的,而在套接字以下的運輸層協(xié)議軟件則是受計算機(jī)操作系統(tǒng)的控制淑际。因此畏纲,只要應(yīng)用程序使用TCP/IP協(xié)議進(jìn)行通信,它就必須通過套接字與操作系統(tǒng)交互并請求其服務(wù)春缕。
當(dāng)應(yīng)用進(jìn)程需要使用網(wǎng)絡(luò)進(jìn)行通信時就發(fā)出系統(tǒng)調(diào)用盗胀,請求操作系統(tǒng)為其創(chuàng)建套接字,以便把網(wǎng)絡(luò)通信所需要的系統(tǒng)資源分配給該應(yīng)用進(jìn)程锄贼。
操作系統(tǒng)為這些資源的總和用一個叫做套接字描述符的號碼來表示票灰,并把此號碼返回給應(yīng)用進(jìn)程。應(yīng)用進(jìn)程所進(jìn)行的網(wǎng)絡(luò)操作都必須使用這個號碼咱娶。
通信完畢后米间,應(yīng)用進(jìn)程通過一個關(guān)閉套接字的系統(tǒng)調(diào)用通知操作系統(tǒng)回收與該“號碼”相關(guān)的所有資源。
下圖描述了操作系統(tǒng)所創(chuàng)建的套接字描述符與套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的關(guān)系:
由于在一個機(jī)器中可能同時出現(xiàn)多個套接字膘侮,因此需要一個存放套接字描述符的表屈糊,而每一個套接字描述符有一個指針指向存放套接字的地址。
當(dāng)套接字被創(chuàng)建后琼了,它的端口號和 IP 地址都是空的逻锐,因此應(yīng)用進(jìn)程要調(diào)用 bind(綁定)來指明套接字的本地地址。在服務(wù)器端調(diào)用 bind 時就是把熟知端口號和本地IP地址填寫到已創(chuàng)建的套接字中雕薪。這就叫做把本地地址綁定到套接字昧诱。
服務(wù)器在調(diào)用 bind 后,還必須調(diào)用 listen(收聽)把套接字設(shè)置為被動方式所袁,以便隨時接受客戶的服務(wù)請求盏档。UDP服務(wù)器由于只提供無連接服務(wù),不使用 listen 系統(tǒng)調(diào)用燥爷。
服務(wù)器緊接著就調(diào)用 accept(接受)蜈亩,以便把遠(yuǎn)地客戶進(jìn)程發(fā)來的連接請求提取出來。系統(tǒng)調(diào)用 accept 的一個變量就是要指明從哪一個套接字發(fā)起的連接前翎。