計(jì)算機(jī)網(wǎng)絡(luò)之應(yīng)用層

1、域名系統(tǒng)

DNS(Domai Name System)是因特網(wǎng)使用的命名系統(tǒng),用于把便于人們使用的機(jī)器名字轉(zhuǎn)換為IP地址。
許多應(yīng)用層軟件經(jīng)常直接使用域名系統(tǒng),但計(jì)算機(jī)的用戶只是間接而不是直接使用域名系統(tǒng)。

1.1 域名結(jié)構(gòu)

因特網(wǎng)采用了層次樹狀結(jié)構(gòu)的命名方法。

1.png

任何一個(gè)連接在因特網(wǎng)上的主機(jī)或路由器,都有一個(gè)唯一的層次結(jié)構(gòu)的名字,即域名。

域名的結(jié)構(gòu)由標(biāo)號(hào)序列組成,各標(biāo)號(hào)之間用點(diǎn)隔開:

… . 三級(jí)域名 . 二級(jí)域名 . 頂級(jí)域名

DNS規(guī)定,域名中的標(biāo)號(hào)有英文字母和數(shù)字組成,不區(qū)分大小寫。標(biāo)號(hào)中除了連字符(-)外不能使用其它標(biāo)點(diǎn)符號(hào)。級(jí)別最低的域名寫在最左邊,而級(jí)別最高的的頂級(jí)域名則寫在最右邊。

各級(jí)域名由其上一級(jí)的域名管理機(jī)構(gòu)管理,而最高的頂級(jí)域名則由ICANN進(jìn)行管理,每一個(gè)域名在整個(gè)因特網(wǎng)范圍內(nèi)是唯一的。

頂級(jí)域名可分為以下三類:

  • (1)國家頂級(jí)域名,如:

    • “.cn”表示中國
    • “.us”表示美國
    • “.uk”表示英國
  • (2)通用頂級(jí)域名,如:

    • ? .com (公司和企業(yè))
    • ? .net (網(wǎng)絡(luò)服務(wù)機(jī)構(gòu))
    • ? .org (非贏利性組織)
    • ? .edu (教育機(jī)構(gòu))
    • ? .gov (政府部門)
    • ? .mil (軍事部門)
    • ? .int (國際組織)
  • (3)基礎(chǔ)結(jié)構(gòu)域名,這種頂級(jí)域名只有一個(gè),即 arpa,用于反向域名解析,因此又稱為反向域名。如:

    • .aero (航空運(yùn)輸企業(yè))
    • .biz (公司和企業(yè))
    • .coop (合作團(tuán)體)
    • .museum (博物館)
    • .pro (有證書的專業(yè)人員)

1.2 域名服務(wù)器

因特網(wǎng)采用層次結(jié)構(gòu)的命名樹作為主機(jī)的名字,并使用分布式的域名系統(tǒng) DNS。名字到 IP 地址的解析是由若干個(gè)域名服務(wù)器程序完成的。域名服務(wù)器程序在專設(shè)的結(jié)點(diǎn)上運(yùn)行,運(yùn)行該程序的機(jī)器稱為域名服務(wù)器。

一個(gè)服務(wù)器所負(fù)責(zé)管轄的(或有權(quán)限的)范圍叫做區(qū)(zone)。各單位根據(jù)具體情況來劃分自己管轄范圍的區(qū)。但在一個(gè)區(qū)中的所有節(jié)點(diǎn)必須是能夠連通的。每一個(gè)區(qū)設(shè)置相應(yīng)的權(quán)限域名服務(wù)器,用來保存該區(qū)中的所有主機(jī)的域名到IP地址的映射。

因特網(wǎng)上的DNS域名服務(wù)器也是按照層次安排的。每一個(gè)域名服務(wù)器都只對(duì)域名體系中的一部分進(jìn)行管轄。

2.png

域名服務(wù)器有以下四種類型:

  • 根域名服務(wù)器是最重要的域名服務(wù)器。所有的根域名服務(wù)器都知道所有的頂級(jí)域名服務(wù)器的域名和 IP 地址。不管是哪一個(gè)本地域名服務(wù)器,若要對(duì)因特網(wǎng)上任何一個(gè)域名進(jìn)行解析,只要自己無法解析,就首先求助于根域名服務(wù)器。
  • 頂級(jí)域名服務(wù)器(TLD服務(wù)器,Top Level Domain)負(fù)責(zé)管理在該頂級(jí)域名服務(wù)器注冊(cè)的所有二級(jí)域名。
  • 權(quán)限域名服務(wù)器不能給出最后的查詢回答時(shí),就會(huì)告訴發(fā)出查詢請(qǐng)求的 DNS 客戶,下一步應(yīng)當(dāng)找哪一個(gè)權(quán)限域名服務(wù)器。
  • 本地域名服務(wù)器對(duì)域名系統(tǒng)非常重要。當(dāng)一個(gè)主機(jī)發(fā)出 DNS 查詢請(qǐng)求時(shí),這個(gè)查詢請(qǐng)求報(bào)文就發(fā)送給本地域名服務(wù)器。每一個(gè)因特網(wǎng)服務(wù)提供者 ISP,或一個(gè)大學(xué),甚至一個(gè)大學(xué)里的系,都可以擁有一個(gè)本地域名服務(wù)器,這種域名服務(wù)器有時(shí)也稱為默認(rèn)域名服務(wù)器。

DNS 域名服務(wù)器都把數(shù)據(jù)復(fù)制到幾個(gè)域名服務(wù)器來保存,其中的一個(gè)是主域名服務(wù)器,其他的是輔助域名服務(wù)器。當(dāng)主域名服務(wù)器出故障時(shí),輔助域名服務(wù)器可以保證 DNS 的查詢工作不會(huì)中斷。主域名服務(wù)器定期把數(shù)據(jù)復(fù)制到輔助域名服務(wù)器中,而更改數(shù)據(jù)只能在主域名服務(wù)器中進(jìn)行。這樣就保證了數(shù)據(jù)的一致性。

每個(gè)域名服務(wù)器都維護(hù)一個(gè)高速緩存,存放最近用過的名字以及從何處獲得名字映射信息的記錄,可大大減輕根域名服務(wù)器的負(fù)荷,使因特網(wǎng)上的 DNS 查詢請(qǐng)求和回答報(bào)文的數(shù)量大為減少。為保持高速緩存中的內(nèi)容正確,域名服務(wù)器應(yīng)為每項(xiàng)內(nèi)容設(shè)置計(jì)時(shí)器,并處理超過合理時(shí)間的項(xiàng)(例如,每個(gè)項(xiàng)目只存放兩天)。

2、文件共享

2.1 FTP

文件傳送協(xié)議FTP(File Transfer Protocol)是因特網(wǎng)上使用最廣泛的文件傳送協(xié)議。

FTP 提供交互式的訪問,允許客戶指明文件的類型與格式,并允許文件具有存取權(quán)限。FTP 屏蔽了各計(jì)算機(jī)系統(tǒng)的細(xì)節(jié),因而適合于在異構(gòu)網(wǎng)絡(luò)中任意計(jì)算機(jī)之間傳送文件。

文件傳送協(xié)議 FTP 只提供文件傳送的一些基本的服務(wù),它使用 TCP 可靠的運(yùn)輸服務(wù)。FTP 的主要功能是減少或消除在不同操作系統(tǒng)下處理文件的不兼容性。

FTP 使用客戶服務(wù)器方式。一個(gè) FTP 服務(wù)器進(jìn)程可同時(shí)為多個(gè)客戶進(jìn)程提供服務(wù)。FTP 的服務(wù)器進(jìn)程由兩大部分組成:

  • 一個(gè)主進(jìn)程,負(fù)責(zé)接受新的請(qǐng)求
  • 另外有若干個(gè)從屬進(jìn)程,負(fù)責(zé)處理單個(gè)請(qǐng)求

主進(jìn)程的工作步驟如下:

  • 打開熟知端口(端口號(hào)為 21),使客戶進(jìn)程能夠連接上。
  • 等待客戶進(jìn)程發(fā)出連接請(qǐng)求。
  • 啟動(dòng)從屬進(jìn)程來處理客戶進(jìn)程發(fā)來的請(qǐng)求。從屬進(jìn)程對(duì)客戶進(jìn)程的請(qǐng)求處理完畢后即終止,但從屬進(jìn)程在運(yùn)行期間根據(jù)需要還可能創(chuàng)建其他一些子進(jìn)程。
  • 回到等待狀態(tài),繼續(xù)接受其他客戶進(jìn)程發(fā)來的請(qǐng)求。主進(jìn)程與從屬進(jìn)程的處理是并發(fā)地進(jìn)行。

FTP的工作進(jìn)程如下圖所示:

3.png

FTP的客戶和服務(wù)器之間要建立兩個(gè)并行的TCP連接:控制鏈接和數(shù)據(jù)連接。

控制連接在整個(gè)會(huì)話期間一直保持打開,F(xiàn)TP 客戶發(fā)出的傳送請(qǐng)求通過控制連接發(fā)送給服務(wù)器端的控制進(jìn)程,但控制連接不用來傳送文件。

實(shí)際用于傳輸文件的是“數(shù)據(jù)連接”。服務(wù)器端的控制進(jìn)程在接收到 FTP 客戶發(fā)送來的文件傳輸請(qǐng)求后就創(chuàng)建“數(shù)據(jù)傳送進(jìn)程”和“數(shù)據(jù)連接”,用來連接客戶端和服務(wù)器端的數(shù)據(jù)傳送進(jìn)程。

數(shù)據(jù)傳送進(jìn)程實(shí)際完成文件的傳送,在傳送完畢后關(guān)閉“數(shù)據(jù)傳送連接”并結(jié)束運(yùn)行。

當(dāng)客戶進(jìn)程向服務(wù)器進(jìn)程發(fā)出建立連接請(qǐng)求時(shí),要尋找連接服務(wù)器進(jìn)程的熟知端口(21),同時(shí)還要告訴服務(wù)器進(jìn)程自己的另一個(gè)端口號(hào)碼,用于建立數(shù)據(jù)傳送連接。

接著,服務(wù)器進(jìn)程用自己傳送數(shù)據(jù)的熟知端口(20)與客戶進(jìn)程所提供的端口號(hào)碼建立數(shù)據(jù)傳送連接。

由于 FTP 使用了兩個(gè)不同的端口號(hào),所以數(shù)據(jù)連接與控制連接不會(huì)發(fā)生混亂。

2.2 NFS

除了FTP,文件共享協(xié)議中的另一大類是聯(lián)機(jī)訪問(on-line access)。連擊訪問意味著允許多個(gè)程序同時(shí)對(duì)一個(gè)文件進(jìn)行存取,如網(wǎng)絡(luò)文件系統(tǒng)NFS(Network File System)。

NFS 允許應(yīng)用進(jìn)程打開一個(gè)遠(yuǎn)地文件,并能在該文件的某一個(gè)特定的位置上開始讀寫數(shù)據(jù)。NFS 可使用戶只復(fù)制一個(gè)大文件中的一個(gè)很小的片段,而不需要復(fù)制整個(gè)大文件。在網(wǎng)絡(luò)上傳送的只是少量的修改數(shù)據(jù)。

對(duì)于上述例子,計(jì)算機(jī) A 的 NFS 客戶軟件,把要添加的數(shù)據(jù)和在文件后面寫數(shù)據(jù)的請(qǐng)求一起發(fā)送到遠(yuǎn)地的計(jì)算機(jī) B 的 NFS 服務(wù)器。NFS 服務(wù)器更新文件后返回應(yīng)答信息。

2.3 TFTP

TCP/IP協(xié)議族中還有一個(gè)簡單文件傳送協(xié)議TFTP(Trivial File Transfer Protocol)。

TFTP 是一個(gè)很小且易于實(shí)現(xiàn)的文件傳送協(xié)議,使用客戶服務(wù)器方式和使用 UDP 數(shù)據(jù)報(bào),因此 TFTP 需要有自己的差錯(cuò)改正措施。TFTP 只支持文件傳輸而不支持交互。

TFTP 的工作很像停止等待協(xié)議,發(fā)送完一個(gè)文件塊后就等待對(duì)方的確認(rèn),確認(rèn)時(shí)應(yīng)指明所確認(rèn)的塊編號(hào)。發(fā)完數(shù)據(jù)后在規(guī)定時(shí)間內(nèi)收不到確認(rèn)就要重發(fā)數(shù)據(jù)。發(fā)送確認(rèn) PDU 的一方若在規(guī)定時(shí)間內(nèi)收不到下一個(gè)文件塊,也要重發(fā)確認(rèn)。這樣就可保證文件的傳送不致因某一個(gè)數(shù)據(jù)報(bào)的丟失而告失敗。

3、遠(yuǎn)程終端協(xié)議

TELNET 是一個(gè)簡單的遠(yuǎn)程終端協(xié)議。用戶用 TELNET 就可在其所在地通過 TCP 連接注冊(cè)(即登錄)到遠(yuǎn)地的另一個(gè)主機(jī)上(使用主機(jī)名或 IP 地址)。

TELNET 能將用戶的擊鍵傳到遠(yuǎn)地主機(jī),同時(shí)也能將遠(yuǎn)地主機(jī)的輸出通過 TCP 連接返回到用戶屏幕。這種服務(wù)是透明的,因?yàn)橛脩舾杏X到好像鍵盤和顯示器是直接連在遠(yuǎn)地主機(jī)上。

TELNET 也使用客戶服務(wù)器方式。在本地系統(tǒng)運(yùn)行 TELNET 客戶進(jìn)程,而在遠(yuǎn)地主機(jī)則運(yùn)行 TELNET 服務(wù)器進(jìn)程。
和 FTP 的情況相似,服務(wù)器中的主進(jìn)程等待新的請(qǐng)求,并產(chǎn)生從屬進(jìn)程來處理每一個(gè)連接。

TELNET定義了數(shù)據(jù)和命令應(yīng)怎樣通過因特網(wǎng),這些定義就是所謂的網(wǎng)絡(luò)虛擬終端NVT(Network Virtual Terminal)。

4.png

客戶軟件把用戶的擊鍵和命令轉(zhuǎn)換成 NVT 格式,并送交服務(wù)器。

服務(wù)器軟件把收到的數(shù)據(jù)和命令,從 NVT 格式轉(zhuǎn)換成遠(yuǎn)地系統(tǒng)所需的格式。

向用戶返回?cái)?shù)據(jù)時(shí),服務(wù)器把遠(yuǎn)地系統(tǒng)的格式轉(zhuǎn)換為 NVT 格式,本地客戶再從 NVT 格式轉(zhuǎn)換到本地系統(tǒng)所需的格式。

4、萬維網(wǎng)

萬維網(wǎng) WWW (World Wide Web)并非某種特殊的計(jì)算機(jī)網(wǎng)絡(luò),而是一個(gè)大規(guī)模的、聯(lián)機(jī)式的信息儲(chǔ)藏所。

5.png

萬維網(wǎng)用鏈接的方法能非常方便地從因特網(wǎng)上的一個(gè)站點(diǎn)訪問另一個(gè)站點(diǎn),從而主動(dòng)地按需獲取豐富的信息。這種訪問方式稱為鏈接。

萬維網(wǎng)以客戶服務(wù)器方式工作。瀏覽器就是在用戶計(jì)算機(jī)上的萬維網(wǎng)客戶程序。萬維網(wǎng)文檔所駐留的計(jì)算機(jī)則運(yùn)行服務(wù)器程序,因此這個(gè)計(jì)算機(jī)也稱為萬維網(wǎng)服務(wù)器。

客戶程序向服務(wù)器程序發(fā)出請(qǐng)求,服務(wù)器程序向客戶程序送回客戶所要的萬維網(wǎng)文檔。

4.1 統(tǒng)一資源定位符URL

統(tǒng)一資源定位符URL (Uniform Resource Locator)使每一個(gè)文檔在整個(gè)因特網(wǎng)的范圍內(nèi)具有唯一的標(biāo)識(shí)符。

由以冒號(hào)隔開的兩大部分組成,并且在 URL 中的字符對(duì)大寫或小寫沒有要求。

URL 的一般形式是:

<協(xié)議>://<主機(jī)>:<端口>/<路徑>

協(xié)議就是指是用什么協(xié)議來獲取萬維網(wǎng)文檔?,F(xiàn)在最常用的協(xié)議就是http,其次是ftp。

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

HTTP協(xié)議定義了瀏覽器怎樣向萬維網(wǎng)服務(wù)器請(qǐng)求萬維網(wǎng)文檔,以及服務(wù)器怎樣把文檔傳送給瀏覽器。

從層次的角度看,HTTP 是面向事務(wù)的(transaction-oriented)應(yīng)用層協(xié)議,它是萬維網(wǎng)上能夠可靠地交換文件(包括文本、聲音、圖像等各種多媒體文件)的重要基礎(chǔ)。

萬維網(wǎng)的大致工作過程如下:

6.png

每個(gè)萬維網(wǎng)網(wǎng)點(diǎn)都有一個(gè)服務(wù)器進(jìn)程,它不斷地監(jiān)聽TCP的端口80,以便發(fā)現(xiàn)是否有瀏覽器向它發(fā)出連接建立請(qǐng)求。一旦監(jiān)聽到連接建立的請(qǐng)求并建立了TCP連接之后,瀏覽器就向萬維網(wǎng)服務(wù)器發(fā)出某個(gè)頁面的請(qǐng)求,服務(wù)器接著就返回所請(qǐng)求的頁面作為響應(yīng)。最后,TCP連接被釋放。

假如我們點(diǎn)擊了一個(gè)指向www.tsinghua.edu.cn/chn/yxsz/index.htm的超鏈接,在HTTP/1.0標(biāo)準(zhǔn)下會(huì)發(fā)生下面幾個(gè)事件:

  • (1) 瀏覽器分析超鏈指向頁面的 URL。
  • (2) 瀏覽器向 DNS 請(qǐng)求解析 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)的。也就是說,同一個(gè)客戶第二次訪問同一個(gè)服務(wù)器上的頁面時(shí),服務(wù)器的響應(yīng)與第一次被訪問時(shí)的響應(yīng)相同。服務(wù)器不記得曾經(jīng)訪問過的這個(gè)用戶,更不記得訪問過多少次。

HTTP 協(xié)議本身也是無連接的,雖然它使用了面向連接的 TCP 向上提供的服務(wù)。雖然HTTP使用了TCP連接,但是通信的雙方在交換HTTP報(bào)文之前不需要先建立HTTP連接。

HTTP/1.0不同,HTTP/1.1使用了持續(xù)連接。即萬維網(wǎng)服務(wù)器在發(fā)送響應(yīng)后仍然在一段時(shí)間內(nèi)保持這條連接,使同一個(gè)客戶(瀏覽器)和該服務(wù)器可以繼續(xù)在這條連接上傳送后續(xù)的 HTTP 請(qǐng)求報(bào)文和響應(yīng)報(bào)文。

這并不局限于傳送同一個(gè)頁面上鏈接的文檔,而是只要這些文檔都在同一個(gè)服務(wù)器上就行。

HTTP有兩類報(bào)文:

  • 請(qǐng)求報(bào)文——從客戶向服務(wù)器發(fā)送請(qǐng)求報(bào)文。
  • 響應(yīng)報(bào)文——從服務(wù)器到客戶的回答。

請(qǐng)求報(bào)文的結(jié)構(gòu)如下:

7.png

報(bào)文由三個(gè)部分組成,即開始行、首部行和實(shí)體主體。在請(qǐng)求報(bào)文中,開始行就是請(qǐng)求行。

響應(yīng)報(bào)文的結(jié)構(gòu)如下:

8.png

響應(yīng)報(bào)文的開始行是狀態(tài)行。狀態(tài)行包括三項(xiàng)內(nèi)容,即 HTTP 的版本,狀態(tài)碼,以及解釋狀態(tài)碼的簡單短語。

狀態(tài)碼都是三位數(shù)字:

  • 1xx 表示通知信息的,如請(qǐng)求收到了或正在進(jìn)行處理。
  • 2xx 表示成功,如接受或知道了。
  • 3xx 表示重定向,表示要完成請(qǐng)求還必須采取進(jìn)一步的行動(dòng)。
  • 4xx 表示客戶的差錯(cuò),如請(qǐng)求中有錯(cuò)誤的語法或不能完成。
  • 5xx 表示服務(wù)器的差錯(cuò),如服務(wù)器失效無法完成請(qǐng)求。

4.3 代理服務(wù)器

代理服務(wù)器(proxy server)又稱為萬維網(wǎng)高速緩存(Web cache),它代表瀏覽器發(fā)出 HTTP 請(qǐng)求。

萬維網(wǎng)高速緩存把最近的一些請(qǐng)求和響應(yīng)暫存在本地磁盤中。當(dāng)與暫時(shí)存放的請(qǐng)求相同的新請(qǐng)求到達(dá)時(shí),萬維網(wǎng)高速緩存就把暫存的響應(yīng)發(fā)送出去,而不需要按 URL 的地址再去因特網(wǎng)訪問該資源。

使用高速緩存可減少訪問因特網(wǎng)服務(wù)器的時(shí)延,沒有使用高速緩存的示意圖如下:

9.png

使用高速緩存的情況如下:

  • (1)瀏覽器訪問因特網(wǎng)的服務(wù)器時(shí),要先與校園網(wǎng)的高速緩存建立 TCP 連接,并向高速緩存發(fā)出 HTTP 請(qǐng)求報(bào)文

  • (2)若高速緩存已經(jīng)存放了所請(qǐng)求的對(duì)象,則將此對(duì)象放入 HTTP 響應(yīng)報(bào)文中返回給瀏覽器。

10.png
  • (3)否則,高速緩存就代表發(fā)出請(qǐng)求的用戶瀏覽器,與因特網(wǎng)上的源點(diǎn)服務(wù)器建立 TCP 連接,并發(fā)送 HTTP 請(qǐng)求報(bào)文。
11.png
  • (4)源點(diǎn)服務(wù)器將所請(qǐng)求的對(duì)象放在 HTTP 響應(yīng)報(bào)文中返回給校園網(wǎng)的高速緩存。

  • (5)高速緩存收到此對(duì)象后,先復(fù)制在其本地存儲(chǔ)器中(為今后使用),然后再將該對(duì)象放在 HTTP 響應(yīng)報(bào)文中,通過已建立的 TCP 連接,返回給請(qǐng)求該對(duì)象的瀏覽器。

5、電子郵件

5.1 電子郵件系統(tǒng)

一個(gè)電子郵件系統(tǒng)應(yīng)具有三個(gè)主要組成部分:

  • 用戶代理
  • 郵件服務(wù)器
  • 郵件發(fā)送協(xié)議(如SMTP)與郵件讀取協(xié)議(如POP)
12.png

用戶代理(User Agent)就是用戶與電子郵件系統(tǒng)的接口,在大多數(shù)情況下它就是運(yùn)行在用戶PC機(jī)中的一個(gè)程序。一般具有撰寫、顯示、處理、通信等功能。

因特網(wǎng)上有許多郵件服務(wù)器可供用戶選擇,郵件服務(wù)器24小時(shí)不間斷地工作,并且具有大容量的郵件信箱。郵件服務(wù)器的功能是發(fā)送和接收郵件,同時(shí)還要向發(fā)信人報(bào)告郵件傳送的情況(已交付、被拒絕、丟失等)。郵件服務(wù)器按照客戶服務(wù)器方式工作。郵件服務(wù)器需要使用發(fā)送和讀取兩個(gè)不同的協(xié)議。

應(yīng)當(dāng)注意的是,一個(gè)郵件服務(wù)器既可以作為客戶,也可以作為服務(wù)器。

例如,當(dāng)郵件服務(wù)器 A 向另一個(gè)郵件服務(wù)器 B 發(fā)送郵件時(shí),郵件服務(wù)器 A 就作為 SMTP 客戶,而 B 是 SMTP 服務(wù)器。
當(dāng)郵件服務(wù)器 A 從另一個(gè)郵件服務(wù)器 B 接收郵件時(shí),郵件服務(wù)器 A 就作為 SMTP 服務(wù)器,而 B 是 SMTP 客戶。

發(fā)送和接收電子郵件的幾個(gè)重要步驟:

  • (1)發(fā)件人調(diào)用 PC 中的用戶代理撰寫和編輯要發(fā)送的郵件。
  • (2)發(fā)件人的用戶代理把郵件用 SMTP 協(xié)議發(fā)給發(fā)送方郵件服務(wù)器,
  • (3)SMTP 服務(wù)器把郵件臨時(shí)存放在郵件緩存隊(duì)列中,等待發(fā)送。
  • (4)發(fā)送方郵件服務(wù)器的 SMTP 客戶與接收方郵件服務(wù)器的 SMTP 服務(wù)器建立 TCP 連接,然后就把郵件緩存隊(duì)列中的郵件依次發(fā)送出去
  • (5)運(yùn)行在接收方郵件服務(wù)器中的SMTP服務(wù)器進(jìn) 程收到郵件后,把郵件放入收件人的用戶郵箱中,等待收件人進(jìn)行讀取。
  • (6)收件人在打算收信時(shí),就運(yùn)行 PC 機(jī)中的用戶代理,使用 POP3(或 IMAP)協(xié)議讀取發(fā)送給自己的郵件。請(qǐng)注意,POP3 服務(wù)器和 POP3 客戶之間的通信是由 POP3 客戶發(fā)起的。

5.2 簡單郵件傳送協(xié)議 SMTP

SMTP(Simple Mail Transfer Protocol)所規(guī)定的就是在兩個(gè)相互通信的 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é)議是一個(gè)非常簡單、但功能有限的郵件讀取協(xié)議?,F(xiàn)在使用的是它的第三個(gè)版本 POP3。

POP 也使用客戶服務(wù)器的工作方式。在接收郵件的用戶 PC 機(jī)中必須運(yùn)行 POP 客戶程序,而在用戶所連接的 ISP 的郵件服務(wù)器中則運(yùn)行 POP 服務(wù)器程序。

POP協(xié)議支持離線郵件處理,當(dāng)郵件發(fā)送到服務(wù)器后,電子郵件客戶端會(huì)調(diào)用郵件客戶端程序,下載所有未閱讀的電子郵件(這種離線訪問模式是一種存儲(chǔ)轉(zhuǎn)發(fā)服務(wù))。當(dāng)郵件從郵件服務(wù)器發(fā)送到個(gè)人計(jì)算機(jī)上,同時(shí)郵件服務(wù)器會(huì)刪除該郵件(但是目前很多POP3服務(wù)器都支持“下載郵件,服務(wù)器并不刪除郵件”,也就是說在POP3中改進(jìn)了POP協(xié)議)。

另一個(gè)讀取郵件的協(xié)議是IMAP(Internet Message Access Protocol),它比POP協(xié)議復(fù)雜很多。

IMAP 也是按客戶服務(wù)器方式工作,現(xiàn)在較新的是版本 4,即 IMAP4。

用戶在自己的 PC 機(jī)上就可以操縱郵件服務(wù)器的郵箱,就像在本地操縱一樣。IMAP最大的好處就是用戶可以在不同的地方使用不同的計(jì)算機(jī)隨時(shí)上網(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ā)電子郵件。這時(shí),郵件系統(tǒng)中的用戶代理就是普通的萬維網(wǎng)瀏覽器。

需要注意的是,瀏覽器從郵件服務(wù)器讀取郵件,或者向郵件服務(wù)器發(fā)送郵件使用的是HTTP協(xié)議,而不是IMAP(POP)或SMTP。

例如,一個(gè)網(wǎng)易郵箱用戶向新浪郵箱用戶通過瀏覽器發(fā)送郵件,各階段使用的協(xié)議如下:

13.png

5.5 多用途因特網(wǎng)郵件擴(kuò)充MIME

SMTP有以下不足:

  • SMTP 不能傳送可執(zhí)行文件或其他的二進(jìn)制對(duì)象。
  • SMTP 限于傳送 7 位的 ASCII 碼。許多其他非英語國家的文字(如中文、俄文,甚至帶重音符號(hào)的法文或德文)就無法傳送。
  • SMTP 服務(wù)器會(huì)拒絕超過一定長度的郵件。

于是在這種情況下就提出了MIME(Multipurpose Internet Mail Extensions)。MIME 并沒有改動(dòng) SMTP 或取代它。MIME 的意圖是繼續(xù)使用目前的格式,但增加了郵件主體的結(jié)構(gòu),并定義了傳送非 ASCII 碼的編碼規(guī)則。

MIME 和 SMTP 的關(guān)系如下:

14.png

MIME類型就是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時(shí)候,瀏覽器會(huì)自動(dòng)使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。

6、動(dòng)態(tài)主機(jī)配置協(xié)議

為了將軟件協(xié)議做成通用的和便于移植,協(xié)議軟件的編寫者不會(huì)把所有細(xì)節(jié)都固定在源代碼中,而是把協(xié)議軟件參數(shù)化,這就使得在很多臺(tái)計(jì)算機(jī)上使用同一個(gè)經(jīng)過編譯的二進(jìn)制代碼成為可能。

一臺(tái)計(jì)算機(jī)和另一臺(tái)計(jì)算機(jī)的區(qū)別,都可通過一些不同的參數(shù)來體現(xiàn)。在軟件協(xié)議運(yùn)行之前,必須給每一個(gè)參數(shù)賦值。
例如,連接到因特網(wǎng)的計(jì)算機(jī)的協(xié)議軟件需要配置的項(xiàng)目包括:

  • IP地址
  • 子網(wǎng)掩碼
  • 默認(rèn)路由器的IP地址
  • 域名服務(wù)器的IP地址

這些信息通常存儲(chǔ)在一個(gè)配置文件中,計(jì)算機(jī)可以對(duì)這個(gè)文件進(jìn)行存取。

使用人工配置既不方便,又容易出錯(cuò),現(xiàn)在廣泛使用的是動(dòng)態(tài)主機(jī)配置協(xié)議DHCP(Dynamic Host Configuration Protocol)。DHCP 提供了即插即用連網(wǎng)的機(jī)制。這種機(jī)制允許一臺(tái)計(jì)算機(jī)加入新的網(wǎng)絡(luò)和獲取IP地址而不用手工參與。

DHCP使用UDP協(xié)議工作。

需要 IP 地址的主機(jī)在啟動(dòng)時(shí)就向 DHCP 服務(wù)器廣播發(fā)送發(fā)現(xiàn)報(bào)文(DHCP DISCOVER),這時(shí)該主機(jī)就成為 DHCP 客戶。

本地網(wǎng)絡(luò)上所有主機(jī)都能收到此廣播報(bào)文,但只有 DHCP 服務(wù)器才回答此廣播報(bào)文。

DHCP 服務(wù)器先在其數(shù)據(jù)庫中查找該計(jì)算機(jī)的配置信息。若找到,則返回找到的信息。若找不到,則從服務(wù)器的 IP 地址池中取一個(gè)地址分配給該計(jì)算機(jī)。DHCP 服務(wù)器的回答報(bào)文叫做提供報(bào)文(DHCP OFFER)。

并不是每個(gè)網(wǎng)絡(luò)上都有 DHCP 服務(wù)器,這樣會(huì)使 DHCP 服務(wù)器的數(shù)量太多?,F(xiàn)在是每一個(gè)網(wǎng)絡(luò)至少有一個(gè) DHCP 中繼代理,它配置了 DHCP 服務(wù)器的 IP 地址信息。

15.png

當(dāng) DHCP 中繼代理收到主機(jī)發(fā)送的發(fā)現(xiàn)報(bào)文后,就以單播方式向 DHCP 服務(wù)器轉(zhuǎn)發(fā)此報(bào)文,并等待其回答。收到 DHCP 服務(wù)器回答的提供報(bào)文后,DHCP 中繼代理再將此提供報(bào)文發(fā)回給主機(jī)。

DHCP 服務(wù)器分配給 DHCP 客戶的 IP 地址的臨時(shí)的,因此 DHCP 客戶只能在一段有限的時(shí)間內(nèi)使用這個(gè)分配到的 IP 地址。DHCP 協(xié)議稱這段時(shí)間為租用期。

租用期的數(shù)值應(yīng)由 DHCP 服務(wù)器自己決定。DHCP 客戶也可在自己發(fā)送的報(bào)文中(例如,發(fā)現(xiàn)報(bào)文)提出對(duì)租用期的要求。

7、套接字SOCKET

當(dāng)某個(gè)應(yīng)用進(jìn)程啟動(dòng)系統(tǒng)調(diào)用時(shí),控制權(quán)就從應(yīng)用進(jìn)程傳遞給了系統(tǒng)調(diào)用接口。

此接口再將控制權(quán)傳遞給計(jì)算機(jī)的操作系統(tǒng)。操作系統(tǒng)將此調(diào)用轉(zhuǎn)給某個(gè)內(nèi)部過程,并執(zhí)行所請(qǐng)求的操作。

內(nèi)部過程一旦執(zhí)行完畢,控制權(quán)就又通過系統(tǒng)調(diào)用接口返回給應(yīng)用進(jìn)程。

系統(tǒng)調(diào)用接口實(shí)際上就是應(yīng)用進(jìn)程的控制權(quán)和操作系統(tǒng)的控制權(quán)進(jìn)行轉(zhuǎn)換的一個(gè)接口,即應(yīng)用編程接口 API(Application Programming Interface)。

關(guān)于TCP/IP協(xié)議最著名的API就是Berkeley UNIX 操作系統(tǒng)定義的套接字接口(socket interface)。微軟公司在其操作系統(tǒng)中采用了套接字接口 API,形成了一個(gè)稍有不同的 API,并稱之為 Windows Socket。

請(qǐng)注意,在套接字以上的進(jìn)程是受應(yīng)用程序控制的,而在套接字以下的運(yùn)輸層協(xié)議軟件則是受計(jì)算機(jī)操作系統(tǒng)的控制。因此,只要應(yīng)用程序使用TCP/IP協(xié)議進(jìn)行通信,它就必須通過套接字與操作系統(tǒng)交互并請(qǐng)求其服務(wù)。

16.png

當(dāng)應(yīng)用進(jìn)程需要使用網(wǎng)絡(luò)進(jìn)行通信時(shí)就發(fā)出系統(tǒng)調(diào)用,請(qǐng)求操作系統(tǒng)為其創(chuàng)建套接字,以便把網(wǎng)絡(luò)通信所需要的系統(tǒng)資源分配給該應(yīng)用進(jìn)程。

操作系統(tǒng)為這些資源的總和用一個(gè)叫做套接字描述符的號(hào)碼來表示,并把此號(hào)碼返回給應(yīng)用進(jìn)程。應(yīng)用進(jìn)程所進(jìn)行的網(wǎng)絡(luò)操作都必須使用這個(gè)號(hào)碼。

通信完畢后,應(yīng)用進(jìn)程通過一個(gè)關(guān)閉套接字的系統(tǒng)調(diào)用通知操作系統(tǒng)回收與該“號(hào)碼”相關(guān)的所有資源。

下圖描述了操作系統(tǒng)所創(chuàng)建的套接字描述符與套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的關(guān)系:

17.png

由于在一個(gè)機(jī)器中可能同時(shí)出現(xiàn)多個(gè)套接字,因此需要一個(gè)存放套接字描述符的表,而每一個(gè)套接字描述符有一個(gè)指針指向存放套接字的地址。

當(dāng)套接字被創(chuàng)建后,它的端口號(hào)和 IP 地址都是空的,因此應(yīng)用進(jìn)程要調(diào)用 bind(綁定)來指明套接字的本地地址。在服務(wù)器端調(diào)用 bind 時(shí)就是把熟知端口號(hào)和本地IP地址填寫到已創(chuàng)建的套接字中。這就叫做把本地地址綁定到套接字。

服務(wù)器在調(diào)用 bind 后,還必須調(diào)用 listen(收聽)把套接字設(shè)置為被動(dòng)方式,以便隨時(shí)接受客戶的服務(wù)請(qǐng)求。UDP服務(wù)器由于只提供無連接服務(wù),不使用 listen 系統(tǒng)調(diào)用。

服務(wù)器緊接著就調(diào)用 accept(接受),以便把遠(yuǎn)地客戶進(jìn)程發(fā)來的連接請(qǐng)求提取出來。系統(tǒng)調(diào)用 accept 的一個(gè)變量就是要指明從哪一個(gè)套接字發(fā)起的連接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容