《計算機網絡自頂向下方法》學習筆記——1、應用層

目錄

1、進程與計算機網絡之間的接口

2、何爲應用層協議

3、SSL

4、HTTP

5、FTP

6、電子郵件

7、DNS

8、BitTorrent


1、進程與計算機網絡之間的接口

       進程通過一個稱爲套接字的軟件接口向網絡發送報文和從網絡接收報文。這裏,進程可以類比於一個房子,而它的套接字相當於它的門,當一個進程想向位於另一臺主機上的另一個進程發送報文時,就把報文推出該門(套接字)。一旦該報文抵達目的主機,它通過接受進程的門(套接字)傳遞,然後接收進程對該報文進行處理。

       由於該套接字是建立網絡應用程序的可編程接口,因此套接字也稱爲應用程序與網絡之間的應用程序編程接口。

 

2、何爲應用層協議

應用層協議定義了在運行在不同端系統上的應用程序如何相互傳遞報文,具體:

  1. 交換的報文類型,例如請求報文和響應報文。
  2. 各種報文類型的語法。
  3. 字段的語義,即字段中包含信息的含義。
  4. 一個進程何時以及如何發送報文,對報文響應的規則。

 

3、SSL

       因爲隱私和其它安全問題對許多應用而言已經成爲至關重要的問題,所以安全套接字層(Secure Sockets Layer,SSL)應運而生。SSL提供了關鍵的進程到進程的安全性服務,包括加密,數據完整性和端點鑑別。需要強調的是,SSL不是與TCP和UDP在相同層次的運輸協議,而是一種對TCP的加強,這種加強實在應用層實現的。

 

4、HTTP

       HTTP定義了Web客戶向Web服務器請求Web頁面的方式,以及服務器向客戶傳送Web頁面的方式。HTTP服務器並不保存關於客戶的任何信息,所以我們說HTTP是一個無狀態協議。

       HTTP可以使用非持續連接或持續連接。非持續連接中每個TCP連接在服務器發送一個對象後關閉,即該連接不爲其它的對象而持續下來,只傳輸一個請求報文和一個響應報文。而持續連接中,如果一條連接經過一定時間間隔仍未被使用,HTTP服務器才關閉該連接。HTTP的默認模式是使用帶流水線的持續連接。

 

(1)HTTP請求報文格式

下面提供了一個典型的HTTP 請求報文:

GET /somedir/page.html HTTP/l.l

Host: www.someschool.edu

Connection: close

User-agent: Mozilla/5.0

Accept-language: fr

       HTTP 請求報文的第一行叫做請求行 (request line) ,其後繼的行叫做首部行( header line)。請求行有個字段:方法字段、URL字段和HTTP 版本字段。你也許認爲該首部行是不必要的,因爲在該主機中已經有一條 TCP連接存在了,但是,該首部行提供的信息是 Web 代理高速緩存所要求的。通過包含Connection: close 首部行,該瀏覽器告訴服務器不希望麻煩地使用持續連接,它要求服務器在發送完被請求的對象後就關閉這條連接。User- agent: 首部行用來指明用戶代理,即向服務器發送請求的瀏覽器的類型。

通用格式如下:

 

       值得注意的是,這裏的請求包體不需要編碼爲ASCII碼。

 

(2)HTTP響應報文格式

       下面我們提供了一條典型的 HTTP 響應報文:

HTTP/ 1. 1 200 OK

Connection: close 應用層

Date: Tue , 09 Aug 2011 15:44:04 GMT

Server: Apache/2.2.3 (CentOS)

Last-Modified: Tue , 09 Aug 2011 15:11:03 GMT

Content-Length: 6821

Content-Type: text/html

(data data data data data ...)

       它有三個部分:初始狀態行 (sLatus line) ,首部行 (header 1ine) ,實體體 (enLity body)。

       通用格式如下:

 

        一些常見的狀態碼和相關短語包括:

200 OK:表示客戶端請求成功;

400 Bad Request:表示客戶端請求有語法錯誤,不能被服務器所理解;

401 Unauthonzed:表示請求未經授權,該狀態代碼必須與 WWW-Authenticate 報頭域一起使用;

403 Forbidden:表示服務器收到請求,但是拒絕提供服務,通常會在響應正文中給出不提供服務的原因;

404 Not Found:請求的資源不存在,例如,輸入了錯誤的URL;

500 Internal Server Error:表示服務器發生不可預期的錯誤,導致無法完成客戶端的請求;

503 Service Unavailable:表示服務器當前不能夠處理客戶端的請求,在一段時間之後,服務器可能會恢復正常;

 

(3)cookie

        HTTP協議作爲無狀態協議,對於HTTP協議而言,無狀態同樣指每次request請求之前是相互獨立的,當前請求並不會記錄它的上一次請求信息。那麼問題來了,既然無狀態,那完成一套完整的業務邏輯,發送多次請求的情況數不勝數,使用http如何將上下文請求進行關聯呢?機智的人類通過優化,找到了一種簡單的方式記錄http協議的請求信息。

       瀏覽器發送request請求到服務器,服務器除了返回請求的response之外,還給請求分配一個唯一標識ID,協同response一併返回給瀏覽器。

       同時服務器在本地創建一個MAP結構,專門以key-value(請求ID-會話內容)形式將每個request進行存儲。

       此時瀏覽器的request已經被賦予了一個ID,第二次訪問時,服務器先從request中查找該ID,根據ID查找維護會話的content內容,該內容中記錄了上一次request的信息狀態。

       根據查找出的request信息生成基於這些信息的response內容,再次返回給瀏覽器。如果有需要會再次更新會話內容,爲下一次請求提供準備。

       所以當我們有cookie時,往往能在一個網站直接顯示登錄賬號和登錄密碼,這兩個信息是存在服務器的而不是本機的(以前一直都有的疑惑),通過cookie生成的響應報文包含了賬號密碼信息。以前還有一個疑惑,就是當本地刪除了cookie文件後,下次訪問該網站又會生產新的cookie,那難道服務器的賬號密碼信息一直存着不就佔位子嗎,實際上,服務器上的cookie信息都是有過期時間的,這在報文中其實也會有記錄(expire time)的並存在cookie文件中。

       一般cookie所具有的屬性,包括:

Domain:域,表示當前cookie所屬於哪個域或子域下面。

       對於服務器返回的Set-Cookie中,如果沒有指定Domain的值,那麼其Domain的值是默認爲當前所提交的http的請求所對應的主域名的。比如訪問 http://www.example.com,返回一個cookie,沒有指名domain值,那麼其爲值爲默認的www.example.com。

Path:表示cookie的所屬路徑。

Expire time/Max-age:表示了cookie的有效期。expire的值,是一個時間,過了這個時間,該cookie就失效了。或者是用max-age指定當前cookie是在多長時間之後而失效。如果服務器返回的一個cookie,沒有指定其expire time,那麼表明此cookie有效期只是當前的session,即是session cookie,當前session會話結束後,就過期了。對應的,當關閉(瀏覽器中)該頁面的時候,此cookie就應該被瀏覽器所刪除了。

secure:表示該cookie只能用https傳輸。一般用於包含認證信息的cookie,要求傳輸此cookie的時候,必須用https傳輸。

httponly:表示此cookie必須用於http或https傳輸。這意味着,瀏覽器腳本,比如javascript中,是不允許訪問操作此cookie的。

 

(4)web緩存

       Web緩存器也叫代理服務器,它能夠緩存最近請求過的對象的副本,若Web緩存器中有請求的資源,則立刻返回之,而不需要再向目標服務器請求該資源。

       但是如何確保緩存服務器中自身副本是最新的呢?使用的是條件GET方法:

       如果請求報文使用GET方法,且包含一個”If-Modified-Since”首部行,那麼這個報文就是一個條件GET請求報文。

       每次有新的請求,Web服務器就會發送一個條件GET請求報文(上次緩存該資源會記錄該資源最後修改的時間),來判斷該資源從自己緩存後是否有修改過,這樣就確保了自身副本的有效性。

 

5、FTP

       HTTP FTP 都是文件傳輸協議,並且有很多共同的特點,例如,它們都運行在 TCP,然而,這兩個應用層協議也有一些重要的區別 其中最顯著的就是 FTP 使用了兩個並行的 TCP 連接來傳輸文件, 個是控制連接 (control connection) ,一個是數據連接( data connection) 控制連接用於在兩主機之間傳輸控制信息,如用戶標識、口令、改變遠程目錄的命令以及"存放”(put)” 和”獲取(get) “文件的命令。數據連接用於實際發送一個文件。而對FTP傳輸而言,控制連接貫穿了整個用戶會話期間,但是對會話巾的每一次文件傳輸都需要建立一個新的數據連接(即數據連接是非持續的)。FTP 服務器必須在整個會話期間保留用戶的狀態( state) 。

       一些較爲常見的命令如下:

• USER usemame: 用於向服務器傳送用戶標識

• PASS password: 用於向服務器發送用戶口令

• LIST: 用於請求服務器回送當前遠程目錄中的所有文件列表 該文件列表是經一個(新建且非持續連接)數據連接傳送的,而不是在控制 TCP 連接上傳送。

• RETR filename: 用於從遠程主機當前目錄檢索(即get) 文件 該命令引起遠程主機發起一個數據連接,並經該數據連接發送所請求的文件。 

• STOR filename: 用於在遠程主機的當前目錄上存放(即 put) 文件 。

一些典型的回答連同它們可能的報文如下所示:

• 331 Usemame OK , Password required (用戶名 OK ,需要口令)

• 125 Data connection already open; transfer starting (數據連接已經打開,開始傳送)

• 425 Can' L open data connection (無法打開數據連接)

• 452 Error writing file (寫文件差錯)

 

6、電子郵件

       電子郵件系統有三個主要的組成部分:

       用戶代理,郵件服務器和簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)。其中用戶代理允許用戶閱讀、回覆、轉發、保存和撰寫報文。

 

 

 

(1)STMP

       STMP使用TCP可靠數據傳輸服務,用的是持續連接:如果發送郵件服務器有幾個報文同時發往同一個接受郵件服務器,它可以通過同一個TCP連接發送這些報文。

       一個典型的報文首部如下:

From: [email protected]

To: [email protected]

Subject: Searching for the meaning of life.

       每個首部必須含有一個From:首部行和一個To:首部行;一個首部也許包含一個Subject:首部行以及其它可選的首部行。在報文首部之後,緊接着是一個空白行,然後是以ASCII格式表示的報文主體。

 

       多用途因特網郵件擴展(MIME)是對RFC 822的擴展。

       支持多媒體的兩個關鍵MIME首部是Content-Type:和Content-Transfer-Encoding:。

 

 

       簡單比較一下STMP和HTTP,他們都是傳送文件的協議,並且持續的HTTP和SMTP都使用的是持續連接。但是他們也有一些區別:

  1. HTTP主要是一個拉協議,用戶使用HTTP從服務器拉去一些信息,特別是TCP連接是由想接受文件的機器發起的。而STMP基本是一個推協議,TCP連接是由要發送該文件的機器發起的。
  2. STMP要求每個報文使用7比特的ASCII碼格式,HTTP不受這種限制。
  3. HTTP將每個對象封裝到自己的HTTP響應報文中,而SMTP則把所有報文對象放在一個報文之中。

 

(2)郵件訪問協議

       在Alice向Bob發送郵件的過程中,Bob是如何通過運行在他本地PC上的用戶代理,獲得位於某ISP的郵件服務器上的他的郵件呢?注意到Bob的用戶代理不能使用SMTP來取回郵件,因爲取郵件時一個拉操作,而SMTP是一個推協議。因此我們要引入郵件訪問協議。

       郵件訪問協議有:

·POP3:第三版郵局協議 [RFC 1939]
·IMAP:互聯網郵件訪問協議 [RFC 1730]
·HTTP:Hotmail , Yahoo! Mail等
       POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,是TCP/IP協議族中的一員(默認端口是110)。本協議主要用於支持使用客戶端遠程管理在服務器上的電子郵件。POP3協議允許電子郵件客戶端下載服務器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到服務器上,比如通過客戶端收取了郵箱中的3封郵件並移動到其他文件夾,郵箱服務器上的這些郵件是沒有同時被移動的 。

       IMAP全稱是Internet Mail Access Protocol,即互聯網郵件訪問協議,是一個應用層協議(端口是143)。IMAP服務器把每一個把每個報文與一個文件夾聯繫起來;當報文第一次到達服務器時,它與收件人的INBOX文件夾相關聯。收件人則能夠把郵件移動到一個新的、用戶創建的文件夾中,閱讀和刪除郵件。IMAP另一個重要特性是它具有允許用戶代理獲取報文組件的命令,比如比讀取一個報文的首部或多部份MIME報文的一部分。

       IMAP和POP3的區別:
(1)IMAP提供Webmail與電子郵件客戶端之間的雙向通信,客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上。而POP3在客戶端的操作不會反饋到服務器上。
(2)IMAP提供的摘要瀏覽功能可以讓你在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。
(3)POP3需要下載未閱讀的郵件,IMAP可以不用把所有的郵件全部下載,而是通過客戶端直接對服務器上的郵件進行操作。所有通過IMAP傳輸的數據都會被加密,從而保證通信的安全性。

 

7、DNS

       能進行主機名到地址轉換的目錄服務,就是域名系統(Domain Name System , DNS) 的主要任務。DNS 是:

①一個由分層的 DNS 服務器( DNS server) 實現的分佈式數據庫

②一個使得主機能夠查詢分佈式數據庫的應用層協議

       DNS 服務器通常是運行 BIND (Berkeley Internet Name Domain) 軟件[ BIND 2012 UNJX 機器。DNS協議運行在UDP之上,使用 53 號端口。

        爲了使用戶的主機能夠將一個 HTTP請求報文發送到Web服務器 www someschool. edu,該用戶主機必須獲得www. someschool. edu的IP地址,其做法如下:

  1. 同一臺用戶主機上運行着 DNS 應用的客戶端。
  2. 瀏覽器從上述 URL中抽取出主機名 www. someschool. edu ,並將這臺主機名傳給DNS 應用的客戶端。 
  3. DNS 客戶向 DNS 服務器發送一個包含主機名的請求。這裏客戶首先與根服務器之一聯繫,它將返回頂級域名edu的TLD(Top-Level Domain,頂級域)服務器的IP地址。該客戶則與這些TLD服務器之一聯繫,它將爲 someschool. edu返回權威服務器的 IP 地址。最後,該客戶與someschool. edu權威服務器之一聯繫,它爲主機名www. someschool. edu返回其IP地址。
  4. DNS 客戶最終會收到一份回答報文,其中含有對應於該主機名的 IP 地址。
  5. 一旦瀏覽器接收到來自 DNS 的該IP地址,它能夠向位於該 lP 地址80端口的HTTP服務器進程發起一個 TCP 連接。

       除了主機名到IP地址的轉換外,DNS還提供一些重要的服務:

  1. 主機別名。有着複雜主機名的主機能擁有一個或多個別名。應用程序可以調用DNS來獲得主機別名對應的規範主機名以及主機的IP地址。
  2. 郵件服務器別名。
  3. 負載分配。一個IP地址集合可以與同一個規範主機名相聯繫。DNS數據庫中存儲着這些IP地址的集合。當客戶對映射到某地址集合的名字發出一個DNS請求時,該服務器用IP地址的整個集合進行響應,但在每個回答中循環這些地址的次序。所以就循環分配了負載。 這裏DNS服務器的分配算法採用的最簡單的輪詢算法。

       使用DNS進行負載分配的缺點:

  • 目前的DNS是多級解析的,每一級DNS都可能緩存A記錄,當某臺服務器下線之後,即使修改了A記錄,要使其生效也需要較長的時間,這段時間,DNS任然會將域名解析到已下線的服務器上,最終導致用戶訪問失敗。
  • 不能夠按服務器的處理能力來分配負載。DNS負載均衡採用的是簡單的輪詢算法,不能區分服務器之間的差異,不能反映服務器當前運行狀態,所以其的負載均衡效果並不是太好。
  • 可能會造成額外的網絡問題。爲了使本DNS服務器和其他DNS服務器及時交互,保證DNS數據及時更新,使地址能隨機分配,一般都要將DNS的刷新時間設置的較小,但太小將會使DNS流量大增造成額外的網絡問題。

 

       DNS系統還有一個非常重要的特色:DNS緩存。DNS緩存的原理非常簡單。在一個請求鏈中,當某DNS服務器接收一個DNS回答時,它能將該回答中的信息緩存在本地存儲器中,一段時間後(通常設置爲兩天)再丟棄緩存的信息。

每個DNS回答報文包含了一條或多條資源記錄。資源記錄是一個包含了下列字段的4元組:

(Name,Value,Type,TTL)

       TTL是該記錄的生存時間,它決定了資源記錄應當從緩存中刪除的時間。Name和Value的值取決於Type:

如果Type=A,則Name是主機名,Value是該主機名對應的IP地址。

如果Type=NS,則Name是個域(如foo.com),而Value是個知道如何獲得該域中主機IP地址的權威DNS服務器的主機名。

如果Type=CNAME,則Value是別名爲Name的主機對應的規範主機名。

如果Type=MX,則Value是個別名爲Name的郵件服務器的規範主機名。

 

8、BitTorrent

       先來一個總結:該協議簡單來說就是客戶分擔了服務器的上載。

       參與一個特定文件分發的所有對等方的集合被稱爲一個洪流。在一個洪流中的對等方彼此下載等長度的文件塊,典型的塊長度爲256KB。當一個對等方加入某洪流時,它向追蹤器註冊自己,並週期性地通知追蹤器它仍在該洪流中。

       在該洪流中的Alice週期性地(經TCP連接)詢問每個鄰近對等方它們所具有的塊列表。因此在任何給定的時刻,Alice將具有塊的子集並知道它的鄰居具有哪些塊。這裏就會有幾個問題:

第一,她應當從她的鄰居請求那些塊呢?

       這裏使用的是一種稱爲最稀缺優先的技術:針對她沒有的塊在她的鄰居中決定最稀缺的塊(最稀缺的塊就是那些在她的鄰居中副本數量最少的塊),並首先請求那些最稀缺的塊。這樣,最稀缺塊得到更爲迅速的重新分發,其目標是均衡每個塊在洪流中的副本數量。

第二,她應當向哪些向她請求塊的鄰居發送?

       這裏使用了一種對換算法:對於當前能夠以最高速率向她提供數據的鄰居,給出其優先權。

 

參考文章:《計算機網絡自頂向下方法》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章