計算機網路應用層
應用層所討論的物件可以簡單理解為端系統上的網路應用程式,
因特網網路體系結構分為5層:應用層、傳輸層、網路層、鏈路層、物理層,應用程式體系結構由應用程式研發者設計,規定了如何在端系統上組織該應用程式,主流的體系結構有兩種:客戶-服務器體系結構和對等P2P體系結構,
客戶-服務器體系結構:
在此體系結構里,有一個總是打開的主機稱為服務器,它服務于其他稱為客戶的主機的請求,而一臺單獨的服務器可能沒法承受來自太多客戶的請求,所以采用配備了大量主機的資料中心(data center)提供虛擬服務器,
對等P2P體系結構:
對位于資料中心的專用服務器有幾乎沒有依賴,應用程式在間斷連接的主機之間直接通信,這些主機對稱為對等方,該體系結構的特性之一是自擴展性(self-scalability),例如檔案共享:BitTorrent,
行程通信:
在端系統中的每一個應用程式可以抽象為一個行程,不同端系統上的行程,通過跨越計算機網路交換報文(message),
套接字:
每一個行程通過套接字(socket)與計算機網路互動,套接字是行程與計算機網路之間的介面,行程通過套接字軟體介面向計算機網路發送報文,也就是同一臺主機中應用層和傳輸層的介面,由于套接字是建立網路應用程式的可編程介面,因此套接字也稱為應用程式和網路之間的應用程式編程介面(Application Programming Interface, API),
行程尋址:
1.主機地址(IP);2.行程標識(port)
可供應用程式使用的傳輸服務分類:可靠資料傳輸、吞吐量、定時和安全性,也即是應用層程式對下一層服務的希望,而因特網能提供的傳輸層服務協議有兩類:TCP和UDP,
TCP提供面向連接和可靠資料傳輸服務:
- 面向連接服務是指在應用層資料報文開始傳輸之前,TCP讓客戶和服務器互相交換傳輸層控制資訊,即是所謂的握手程序,握手之后,一個TCP連接就在兩個行程的套接字之間建立了,該連接是全雙工的,即連接雙方都可以在此連接上同時收發報文,當結束報文發送時,需要拆除連接,
- 可靠的資料傳輸服務:行程能夠依賴TCP,無差錯、按適當的順序交付所有發送的資料,沒有位元組的丟失和冗余,
除此以外TCP協議還提供擁塞控制機制,當發送方和接收方之間的網路出現擁塞時,TCP的擁塞控制機制會抑制發送行程(擁塞視窗),
TCP和UDP都沒有提供任何加密機制,所以當前一般采用升級版TCP,稱為安全套接字層(Secure Socket Layer,SSL),升級后的TCP額外提供關鍵的行程到行程的安全性服務,包括加密、資料完整性和端點鑒別,SSL不是獨立于TCP和UDP的第三個協議,而是TCP的改進版,是在應用層上實作的,如果一個應用程式想要使用SSL服務,需要在程式的客戶端和服務器段包含SSL的代碼,
UDP服務:
UDP服務時不提供不必要服務的輕量型傳輸層服務,UDP提供無連接和不可靠的資料傳輸服務,更加沒有擁塞控制機制,
應用層協議:
應用層協議(application-layer protocol)定義了在不同端系統上的應用程式行程如何相互傳遞報文:
- 交換的報文型別
- 各種報文型別的語法
- 欄位的語意
- 確定一個行程何時以及如何發送報文,對報文回應的規則
Web的應用層協議是HTTP(HyperText Transfer Protocol,超文本傳輸協議),定義了瀏覽器和Web服務器之間傳輸報文的格式和序列;電子郵件的注意應用層協議時SMTP(簡單郵件傳輸協議),
HTTP協議:
HTTP由兩個程式實作,一個客戶程式一個服務器程式,HTTP使用TCP作為它的傳輸層協議,HTTP客戶首先發起一個與服務器的TCP連接,一旦連接建立,瀏覽器和服務器行程就可以通過套接字介面訪問TCP了,在HTTP協議下,服務器向客戶發送被請求檔案,卻不存盤任何關于客戶的狀態資訊,所以說HTTP時一個無狀態協議(stateless protocol),
當每個請求/回應對是經一個單獨的TCP連接發送時,該應用程式被稱為使用非持續連接(non-persistent connection);當所有的請求和回應經由相同的TCP連接發送時,稱為使用持續連接(persistent connection),默認使用持續連接,
- 非持續連接的缺點:必須為每一個請求物件建立和維護一個全新的TCP連接,需要分配TCP緩沖區和保持TCP變數,降低服務器性能;增加物件交付時延,
- 持續連接:同一臺服務器的多個物件發送給客戶時,可以在單個連接上處理,物件可以接連發送,不必等待未完成的請求的回答,如果一個連接經過一定時間未被使用,HTTP服務器將關閉連接,HTTP的默認模式是時延帶流水線的持續連接,
HTTP報文:
請求報文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
第一行稱為請求行,后面稱為首部行,請求行有三個欄位:方法欄位、URL欄位和HTTP版本欄位;首部行有多個取值,
請求報文的通用格式:

在首部行后面是物體體(entity body),使用GET請求,物體體為空,使用POST請求時才使用該物體體,例如提交表單,
回應報文:
HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
第一行稱為狀態行(status line),后面是首部行(header line),最后是物體體,物體體是報文的主要內容,即是請求物件本身,狀態行有三個欄位:協議版本欄位、狀態碼和相應狀態資訊,首部行中的Last-Modified欄位在使用快取服務器(代理服務器)時會用到,
回應報文的通用格式:

狀態碼和相應的狀態短語:
- 200 OK:請求成功,并在回應中回傳資訊,
- 301 Moved Permanently:請求的物件已被永久移動; 新 URL 在 Location: 回應訊息的標頭中指定, 客戶端軟體將自動檢索新 URL,
- 400 Bad Request:這是一個通用錯誤代碼,表示服務器無法理解該請求,
- 404 Not Found:請求的檔案在此服務器上不存在,
- 505 HTTP Version Not Supported:服務器不支持請求的 HTTP 協議版本,
cookie
用戶與服務器互動:cookie
HTTP服務器是無狀態的,所以HTTP服務器使用cookie來識別來訪用戶,如圖cookie技術有4個組件:
- 在HTTP回應報文中的一個cookie首部行
- 在HTTP請求報文中的一個cookie首部行
- 在用戶端系統中的一個cookie檔案,由用戶瀏覽器管理
- 位于Web站點的后端資料庫
cookie的使用程序如圖所示,因此cookie可以在無狀態的HTTP之上建立一個用戶會話層,

Web快取:
也叫代理服務器,能夠代表初始Web服務器來服務HTTP請求的網路物體,Web快取有自己的磁盤存盤空間,并在存盤空間中存盤最近請求過的物件的副本,具體說來,步驟如下:
- 瀏覽器創建一個到Web快取的TCP連接,并向Web快取中的物件發送一個HTTP請求;
- Web快取檢查是否有該物件副本,如果有,就直接向客戶瀏覽器用HTTP回應報文回傳該物件;
- 如果Web快取中沒有物件副本,Web快取就打開一個與該物件的初始服務器的TCP連接,Web快取在當前的快取服務器和服務器的TCP連接上發送一個對該物件的HTTP請求,收到該請求后,初始服務器向Web快取發送具有該物件的HTTP回應;
- Web快取收到該物件時,在本地存盤空間存盤一份副本,并向用戶的瀏覽器用HTTP回應報文發送該副本;
條件GET方法
Web快取的物件可能是舊的,HTTP協議的條件GET(conditional GET)方法,允許快取更新自己的物件副本,使用方法是:
- 請求報文使用GET方法;
- 請求報文包含一個“If-Modified-Since:”首部行;
該HTTP請求報文就是一個條件GET請求報文,
舉例:
GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com
If-modified-since: Wed, 9 Sep 2015 09:23:24
如果初始服務器中的物件在日期后修改過,才會發送該物件,
電子郵件:
電子郵件系統的主要組成部分:用戶代理(user agent)、郵件服務器(mail server)、簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP),
郵件服務器形成了電子郵件系統結構的核心,每個接收方在一個郵件服務器上有一個郵箱(mailbox),郵箱管理和維護者發送給接收方的報文,一個典型的郵件發送程序是:從發送方的用戶代理開始,用戶代理傳輸郵件到發送方的郵件服務器,發送方的郵件服務器再傳輸到接收方的郵件服務器,然后在這里被分發給接收方的郵箱中,如果發送方的郵件服務器不能將郵件交付給接收方的郵件服務器,發送方在一個報文佇列(message queue)中保持該報文并在以后再發送,
SMTP
SMTP程序如圖:

SMTP一般不使用中間郵件服務器,而是直接連接接收方的郵件服務器,使用TCP提供的可靠資料傳輸將郵件無差錯的投遞到接收方郵件服務器,
舉例一個SMTP客戶和服務器之間交換報文的例子:
S: 220 hamburger.edu C: HELO crepes.fr S: 250 Hello crepes.fr, pleased to meet you C: MAIL FROM: <alice@crepes.fr> S: 250 [email protected] ... Sender ok C: RCPT TO: <bob@hamburger.edu> S: 250 [email protected] ... Recipient ok C: DATA S: 354 Enter mail, end with ”.” on a line by itself C: Do you like ketchup? C: How about pickles? C: . S: 250 Message accepted for delivery C: QUIT S: 221 hamburger.edu closing connection
SMTP與HTTP對比:
檔案傳送時,兩者都使用持續連接,
區別:
- HTTP是一個拉協議(pull protocol),用戶使用HTTP從服務器拉取資訊,TCP連接是由接收檔案的主機發起的;
- SMTP基本上是一個推協議(push protocol),即發送郵件服務器將檔案推向接收郵件服務器,TCP連接是由要發送該檔案的主機發起的;
- SMTP要求每個報文,包括體,采用7位元ASCII碼格式;
- 處理既包含文本又包含影像的檔案,HTTP把每個物件封裝到各自的HTTP回應報文里,SMTP將所有報文物件封裝到一個報文中,
郵件報文格式:
上面交換報文的例子中的命令是SMTP握手協議的一部分,這里的則是郵件報文自身的一部分,
From: [email protected]
To: [email protected]
Subject: Searching for the meaning of life.
報文首部之后,接著一個空白行,然后是以ACSII格式表示的報文文體,
郵件訪問協議:
接收方的用戶代理不能使用SMTP獲取報文,因為取報文是一個拉操作,而SMTP是一個推協議,引入特殊的郵件訪問協議:第三版的郵局協議(Post Office Protocol-Version 3,POP3)、因特網郵件訪問協議(Internet Mail Access Protocol,IMAP)以及HTTP,
POP3
POP3是一個極為簡單的郵件訪問協議,隨著TCP連接建立,POP3分階段作業:特許(authorization)、事務處理和更新,
- 在特許階段,用戶代理發送用戶名和口令鑒別用戶;
- 事務處理階段,用戶代理取回報文,同時可以對報文做洗掉操作、獲取郵件的統計資訊;
- 更新階段,出現在用戶發送quit命令之后,目的是結束該POP3會話,此時,郵件服務器洗掉那些標記為洗掉的郵件,
在事務處理階段,使用POP3的用戶代理可以被配置為“下載并洗掉”或“下載并保留”方式,區別是郵件服務器是否洗掉原始郵件報文,
IMAP
POP3沒有給用戶提供任何創建遠程檔案夾并為報文指派檔案夾的方法,IMAP服務器把每個報文與一個檔案夾聯系起來:當報文第一次到達郵件服務器時,與接收方的INBOX檔案夾相連,用戶可以隨意移動該報文到其他檔案夾,與POP3不同,IMAP服務器維護了IMAP會話的用戶狀態資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529961.html
標籤:其他
下一篇:匯編語言
