應用層

  • 6025
  • 0

網路概論第二章

第二章 應用層

2.1網路應用的原理

應用程式架構(application architecture)由程式開發者設計,規範應用程式如何建構在各種終端系統上,而現代網路應用最常使用的範本為:用戶端 – 伺服端架構(client-server architecture),或點對點(P2P)架構。在用戶端 ­– 伺服端的架構中,永遠開啟的主機叫伺服器,有一個固定且公開的IP位址。而請求的主機叫用戶端。資料中心(data center)內含大量的主機,被使用來建立一個強大的虛擬伺服器。在P2P架構中,應用程式直接在稱作對等點(peer)的主機上通訊,P2P擁有自我擴充性(self-scalability),擁有三項挑戰:對ISP友善、安全性、誘因。

行程(process)是在終端系統內執行的程式,經由計算機網路交換訊息(message)以彼此通訊。在一對行程間的通訊會談中,開啟通訊的行程會被標記為用戶端,等待被聯繫以開始會談的行程為伺服端。行程透過稱作socket的軟體介面從網路傳送及接受訊息,其作為應用程式與網路之間的應用程式設計介面(Application Programming Interface,API)。在網際網路中,主機以IP位址(IP address)來識別,埠號(port number)指示初接收端行程。傳輸層能提供的服務分成四類:

可靠的資料傳輸(reliable data transfer) 保證資料正確無誤抵達接收端行程,對可容忍遺失的應用(loss-tolerant application)影響不大。產出率 可以維持在某個指定速率以上,有產出率需求的應用稱頻寬敏感性應用(bandwidth-sensitive application),相較不特別需求的為彈性應用(elastic application)。時程 提供時程的保障。安全性 加以編碼而提供安全性服務。

TCP提供連線導向服務(Connection-oriented service):握手程序提醒用戶端和伺服端將要處理大量封包,在握手階段後TCP連線(TCP connection)已經存在於兩個行程的socket之間,以及可靠的資料傳輸服務。

UDP提供不可靠的資料傳輸服務,且UDP不包含壅塞控制機制,傳送端可以使用任意速度及資料送給網路層。

安全Socket層級(Secure Sockets Layer,SSL)為TCP的補強,提供行程到行程安全性服務。SSL並非傳送協定,是在應用層實作的,擁有自己的socket API。使用時,會先交給SSL socket透過SSL加密,在將加密後的資料交給TCP socket。

應用層協定(application-layer protocol)定義了:所交換的訊息類型,各種訊息類型的語法,欄位的語意,決定行程要在和時傳送及回應訊息。

 

2.2資訊網和HTTP

資訊網能依需求來操作,吸引大多數使用者。超文件傳輸協定(HyperText Transfer Protocol,HTTP)是資訊網的應用層協定。網頁(Web page)也稱作文件,是由許多物件構成。物件(object)可以用單一URL來定址的檔案,如HTML檔、JPEG或視訊片段等。多數網頁由基礎的HTML檔案(base HTML file)加上數個參考物件所構成。例如:在URL

http://www.someSchool.edu/someDepartment/picture.gif之中,www.someSchool.edu為主機名稱,/someDepartment/picture.gif為路徑名稱。網頁瀏覽器為HTTP的用戶端,HTTP伺服端的網頁伺服器會存放網頁的物件,每個物件都有一則URL定址。HTTP為無狀態協定(stateless protocol),不會儲存用戶端的狀態資訊。

非永久性連線(non-persistent connection)對於每一對請求/回應都透過個別的TCP連線來傳送,而永久性連線(persisternt connection)則是每一對請求/回應都透過相同的TCP連線來傳送。

使用非永久性連線時,伺服端傳輸網頁給用戶端的過程如下:

  1. HTTP用戶端開啟一筆TCP連線到伺服器的埠號,用戶端與伺服端各開啟一個socket。
  2. HTTP用戶端行程透過其socket送出一筆HTTP請求訊息,請求訊息包含路徑名稱。
  3. HTTP伺服端行程會從其socket收到開訊息,從其儲存裝置取得物件,將物件封裝在HTTP回應訊息後送出。
  4. HTTP伺服端行程告知TCP關閉連線。
  5. HTTP用戶端收到回應訊息,TCP連線終止。

來回時間(round-trip time,RTT)等於某封包從用戶端到伺服器,再回到用戶端所花費的時間。

非永久性連線針對每份請求的物件,都必須建立並維護一筆全新的連線,造成網頁伺服器很大的負擔。若使用永久性連線,伺服端在傳送回應後會保持該筆TCP連線繼續開啟,在相同用戶端與伺服端之間的請求和回應,都可以透過同筆連線來傳送,在閒置一段時間後才關閉該連線。管線化乃不需等待尚未處理完的請求得到回應就將物件請求接連送出,HTTP的預設模式使用的是管線化的永久連線。

HTTP的請求訊息第一行稱作請求行(request line),後續的行稱作標頭行(header line)。

HTTP的回應訊息包含三個區塊:開頭的狀態行(status line)、六行標頭行(header line)和資料主體(entity body)。

Cookie技術包含四項元件:(1)HTTP回應訊息中的cookie標頭行(2)HTTP請求訊息中的cookie標頭行(3)保存於使用者終端系統上,由使用者瀏覽器管理的cookie檔(4)網站上的後端資料庫。Cookie能讓網站追蹤使用者,根據使用者身分提供不同的內容,所以Cookie可以用來識別使用者與儲存使用者相關資料。

網頁快取(web cache)又稱代理伺服器(proxy server),為一種能代替原始的網頁伺服器來滿足HTTP請求的網路實體。

  1. 瀏覽器建立一筆TCP連線到網頁快取,並送出該物件的HTTP請求給網頁快取。
  2. 網頁快取檢查本機上是否有該物件的副本,若有,則將該物件放在HTTP回應訊息傳回用戶端瀏覽器。
  3. 若無,則網頁快取開啟一筆TCP連線到原本伺服器並請求。
  4. 收到物件時儲存一份副本在本機的儲存空間,再傳送給用戶端瀏覽器。

而網頁快取是由ISP所購買並安裝的,能顯著降低請求的回應時間,並減少網際網路連線連結上的資料流。透過內容散布網路(Content Distribution Networks,CDNs)的使用,網頁快取逐漸在網際網路中扮演重要的角色。有條件的GET(conditional GET)能讓快取確認其物件的版本為最新。

 

2.3檔案傳輸:FTP

同時使用兩筆TCP連線來傳輸檔案,一筆控制連線(control connection)一筆資料連線(data connection)。因為FTP使用的是獨立的控制連線,所以FTP是在頻帶外(out-of-band)傳送其控制訊息。HTTP則是在頻帶內(in-band)傳送其控制訊息。FTP用戶端透過該控制連線送出使用者代號與密碼,也透過該筆連線來傳送變更指令。當伺服端由控制連線收到檔案傳輸命令,將會開啟一筆TCP連線到用戶端。控制連線在會談期間都會保持開啟,但每筆檔案傳輸都會建立新的資料連線(所以資料連線是非永久性連線)。會談期間,FTP伺服器必須維護使用者的狀態(state),持續追蹤使用者目前的目錄位置。

 

2.4網際網路電子郵件

有三個主要元件:使用者代理程式(user agent)、郵件伺服器(mail server)和簡單郵件傳輸協定(Simple Mail Transger Protocol,SMTP)。使用者代理程式讓使用者能夠讀取、回覆、轉送、儲存和編寫訊息。訊息由使用者代理程式傳送給對方郵件伺服器,並放置在輸出訊息佇列(message queue),想閱讀時再透過對方的使用者代理程式取出訊息。SMTP能將訊息從寄件者的郵件伺服器傳送到送件者的郵件伺服器,相對於HTTP為取得式協定(pull protocol),TCP連線是由想要接收檔案的主機所開啟;SMTP為送出式協定(push protocol),TCP連線是由想要傳送檔案的主機所開啟。

郵件存取協定能幫助郵件伺服器將訊息傳送到其本地PC,今日有些常用的郵件存取協定,包括郵局協定—第3版(Post Office Protocol-Version 3 ,POP3)、網際網路郵件存取協定(Internet Mail Access Protocol,IMAP)以及HTTP。

POP3的運作經歷三個階段:認證、交易處理以及更新。認證:使用者代理程式送出使用者名稱和密碼,以認證使用者。交易處理:使用者代理程式會取回訊息,也能將訊息標記為刪除、取消刪除記號以及取得郵件統計資訊。

IMAP協定不同於POP3的點在於:伺服器會在不同的IMAP會談間維護使用者的狀態資訊,如資料夾名稱以及哪筆資訊屬於哪個資料夾等。另一重要功能為他提供了讓使用者代理程式能夠取得訊息部分元件的命令。

而當今有越來越多使用者透過他們的網頁瀏覽器來傳送或存取電子郵件。

 

2.5 DNS­—網際網路目錄服務

一種識別主機的方法為主機名稱(hostname),也可利用IP位址(IP address)來加以識別。DNS(Domain Name System,DNS)是(1)實作成DNS伺服器階層架構的分散式資料庫,也是(2)一種讓主機可以查詢此一分散式資料庫的應用層協定,能將使用者所提供的主機名稱轉譯為IP位址。主機別名(Host aliasing)可以擁有一或多個別名,也有正規主機名稱(canonical hostname)。DNS伺服器有三類 —

根(root)DNS伺服器:網際網路中共有13台根DNS伺服器,而實際上他們都是重複的伺服器所構成的群集。

高階網域(top-level domain,TLD)DNS伺服器:負責高階網域如com、org、edu和gov等,同時也負責所有國家級的高階網域。

官方(authoritative)DNS伺服器:所有機構,只要在網際網路上有可供大眾使用的主機(如網頁伺服器以及郵件伺服器),就必須提供可供大眾存取的DNS紀錄。

區域DNS伺服器(local DNS server)也稱預設域名伺服器(default name server)。當主機連線到ISP時,ISP會提供一或多台區域DNS伺服器的IP位址。查詢方式有遞迴式查詢(recursive query)以及循環式查詢(iterative queries)兩種。

DNS快取(DNS caching):當DNS伺服器收到DNS回覆時,便可將這份位址對映快取在自己的本機記憶體中,並每隔一段時間丟棄他所快取的資訊。DNS伺服器儲存著資源紀錄(resource record,RR),資源記錄包含四項數值:

(Name, Value, Type, TTL),而Name與Value的涵義取決於Type。以下忽略TTL(資源記錄存活的時間)。

(主機名稱, IP位址, A) (網域, 網域官方DNS伺服器主機名稱, NS) (主機別名, 正規主機名稱, CNAME)

(郵件伺服器的主機別名, 郵件伺服器的正規名稱, MX)。網域名稱註冊商(registrar)提供驗證網域獨一性服務。

 

2.6 點對點應用

分散式雜湊表(Distributed Hash Table,DHT)。P2P架構的傳布時間(distribution time)永遠小於用戶端—伺服端架構的傳布時間,P2P的自我擴充性直接受惠於對等點,對等點既是轉手傳布者,也是位元消費者。

BitTorrent為檔案傳布P2P協定。在其術語中,所有參與傳布特定檔案的對等點,統稱為奔流(torrent)。奔流中的對等點會下載固定大小的檔案片段(chunk)。在下載片段的同時,某對等點也將片段上傳給其他對等點。每組奔流都有一個基礎節點,稱作追蹤者(tracker)。當對等點加入奔流時,會向追蹤者註冊自己,且週期性告知追蹤者自己仍在奔流中。

對等點使用稱作最稀有者優先(rarest first)的技巧來請求片段,並判斷出四個用最高速率位送位元給他的對等點,傳送片段作為報答。每隔10秒重新計算,可能更動對等點成員。術語中稱這四個對等點為無阻的(unchoked)。每隔30秒隨機選擇一個額外的相鄰點,將片段重送給他,稱此對等點為樂觀無阻的(optimistically unchoked),其他以外的所有相鄰對等點都是受阻的,無法獲得任何片段。

在P2P版本的資料庫中,每個對等點都只會持有整體(鍵值, 數值)配對中的一小部分,稱此種分散式資料庫為分散式雜湊表(distributed hash table,DHT)。設計DHT時須將各個對等點指定一份識別代碼,為[0, 2^n-1]之間的整數,n

為某個固定數值,再將每對(鍵值, 數值)配對都指派給其識別代碼最接近於鍵值的對等點。而後,循環式DHT中間入捷徑相鄰對等點能大幅減少處理查詢的訊息數量。在BitTorrent中,鍵值為奔流的識別代碼,數值則是目前所有參與該 奔流對等點的IP位址。

 

補充

TCP協定中,用戶端與伺服端在握手階段後會存在一筆TCP連線,此專用的伺服端socket稱作伺服端的連線socket(connection socket)。TCP提供用戶端行程與伺服端行程之間的可靠位元組串流服務(reliable byte-stream service),確保伺服端行程會依用戶端送出的順序收到每個位元組。串流(stream)是一連串流入或流出行程的字元,每筆串流必然為行程的輸入串流(input stream)或輸出串流(output stream),輸入來源如鍵盤,輸出來源如螢幕。

UDP為其通訊行程提供不可靠的傳輸服務,每批送出的位元組上頭都須加上目的端IP位址與埠號以建立封包。