網絡應用

計算機網絡應用體系結構

一、客戶/服務器(C/S)結構網絡應用

1. 客戶/服務器(C/S)結構網絡

客戶/服務器(C/S)結構的網絡應用的通信雙方分爲服務器程序和客戶程序,服務器程序需要先運行,做好接受通信的準備,客戶程序後運行,主動請求與服務器進行通信。服務器計算機通常也稱爲服務器,一般具有固定的網絡地址(比如IP地址),長期運行,以便服務器軟件能隨時被請求服務。客戶軟件通常運行在普通用戶的計算機或其他計算設備上,可能使用動態的網絡地址,是通信的主動發起方。

2. C/S網絡應用的特點

C/S網絡應用最主要的特徵是通信只在客戶與服務器之間進行,客戶與客戶之間不進行直接通信。在C/S通信過程中,主動發起通信的一方就是客戶,被動接受通信的一方就是服務器。

 

二、純P2P結構網絡應用

P2P網絡應用在文件分發、文件共享、視頻流服務等應用中表現出優越的性能。在純P2P網絡應用中,所有通信都是在對等的通信雙方之間直接進行,通信雙方沒有傳統意義上的客戶與服務器之分,“地位”對等。

對等端軟件通常運行在普通用戶的計算設備上,可以動態地直接與其他對等端進行通信。因此,P2P應用中的每個對等端都同時具備C/S應用的客戶與服務器的特徵,是一個服務器與客戶的結合體。

 

三、混合結構網絡應用

混合結構網絡應用將C/S應用與P2P應用相結合,既有中心服務器的存在,又有對等端(客戶)間的直接通信。

在混合結構網絡應用中,通常每個客戶通過C/S方式向服務器註冊自己的網絡地址,聲明可共享的資源或可提供的服務,並通過中心服務器發現其他在線的客戶,檢索其他客戶可以共享的資源等信息。當某客戶希望獲取另一個客戶擁有的資源或服務時,便直接與該客戶發起通信,請求其提供服務。

 

網絡應用通信基本原理

一、網絡應用的基本通信過程

網絡應用的本質是運行在不同主機上(也可運行在同一主機上)的應用進程之間的通信。

網絡應用的基本通信過程就是運行在不同主機上的應用進程間以C/S方式進行的通信,服務器端運行的是服務器進程,被動的等待客戶請求服務;客戶端運行的是客戶進程,主動發起通信,請求服務器進程提供服務。應用進程間遵循應用層協議交換應用層報文。

 

二、網絡應用與傳輸層服務

1. 網絡應用

網絡應用需要使用傳輸層提供端到端的傳輸服務,不同應用對傳輸層服務有不同的服務性能需求,有的應用期望傳輸層提供可靠的數據傳輸服務,有的應用期望傳輸層提供延時保障服務等。

 

2. TCP服務模型

TCP服務模型包括面向連接服務和可靠數據傳輸服務。當某個應用程序調用TCP作爲其傳輸協議時,該應用程序就能獲得來自TCP的這兩種服務。

面向連接的服務:在應用層報文開始傳送之前,TCP客戶和服務器互相交換傳輸層控制信息,完成握手,在客戶進程與服務器進程的套接字之間建立一條邏輯的TCP連接。這條連接是全雙工的。當應用程序結束報文發送時,必須拆除該連接。

可靠的數據傳送服務:應用進程能夠依靠TCP實現端到端的無差錯、按順序交付所有發送數據的服務。

 

3. UDP

UDP是一種不提供傳輸服務保障的輕量級傳輸層協議,僅提供最小的“盡力”服務。UDP是無連接的,因此在兩個進程通信前沒有握手過程。

 

三、應用層協議

應用層協議定義了應用進程間交換的報文類型、報文構成部分具體含義以及交換時序等內容,即語法、語義和時序等協議三要素內容。

無論是服務器進程還是客戶進程,當其遵循應用層協議組織好應用層報文後,需要通過層間接口將報文傳遞給相鄰的傳輸層,請求傳輸層協議提供的端到端傳輸服務。

 

四、套接字(Socket)

套接字(Socket)是每個應用進程與其他應用進程進行網絡通信時,真正收發報文的通道。一個應用進程可以創建多個套接字與同一個或不同的傳輸層協議進行接口。對於一個傳輸層協議,需要爲與其接口的每個套接字分配一個編號,標識該套接字,其編號稱爲端口號。

 

域名系統(DNS)

一、DNS域名解析與層次化域名空間

1. DNS域名解析

DNS是一個重要的基礎應用,任何一個需要使用域名進行通信的網絡應用,在應用通信之前首先需要請求DNS應用,將域名映射爲IP地址。實現將域名映射爲IP地址的過程,稱爲域名解析。

 

2. DNS層次化域名空間

DNS服務器按層次結構進行組織,並且該層次結構與域名的結構相對應。因特網採用了層次樹狀結構的命名方法。域名的結構由標號序列組成,各標號之間用點隔開,例如,“ *** . 三級域名 . 二級域名 . 頂級域名”,各標號分別代表不同級別的域名:

(1)國家頂級域名 nTLD:如cn表示中國,us表示美國。

(2)通用頂級域名 gTLD:最早的頂級域名是com(公司和企業)、net(網絡服務機構)、edu(專用的教育機構)。

(3)基礎結構域名:這種頂級域名只有一個,即 arpa,用於反向域名解析,因此又稱爲反向域名。

 

二、域名服務器

DNS服務器的管轄範圍不是以“域”爲單位,而是以“區”爲單位。域名服務器根據其主要保存的域名信息以及在域名解析過程中的作用等,可以分爲根域名服務器、頂級域名服務器、權威域名服務器和中間域名服務器。

1. 根域名服務器

每個根域名服務器都知道所有的頂級域名服務器的域名和IP地址。不管是哪一個本地域名服務器,若要對因特網上任何一個域名進行解析,只要自己無法解析,就首先求助於根域名服務器。若因特網上共有13個不同IP地址的根域名服務器,他們的名字是用一個英文字母命名,從a一直到m。

 

2. 頂級域名服務器

頂級域名服務器,即TLD服務器,負責管理在該頂級域名服務器註冊的所有二級域名。

 

3. 權威域名服務器

權威域名服務器,負責一個區的域名服務器,保存該區中的所有主機的域名到IP地址的映射。

 

三、DNS域名解析過程

1. 遞歸查詢

提供遞歸查詢服務的域名服務器,可以代替查詢主機或其他域名服務器,進行進一步的域名查詢,並將最終解析結果發送給查詢主機或服務器。

 

2. 迭代查詢

提供迭代查詢的服務器,不會代替查詢主機或其他域名服務器,進行進一步的查詢,只是將下一步要查詢的服務器告知查詢主機或服務器(若該服務器擁有最終解析結果,則直接響應解析結果)。

 

無論是遞歸解析還是迭代解析,在上述的查詢過程中,只要本地域名服務器不能直接響應解析結果,則都需要從根域名服務器開始查詢。

 

萬維網應用

一、HTTP

1. HTTP及其特點

HTTP是Web應用的應用層協議,定義瀏覽器如何向服務器發送請求以及服務器如何向瀏覽器進行響應。

 

2. HTTP連接

HTTP基於傳輸層的TCP傳輸報文。瀏覽器在向服務器發送請求之前,首先需要建立TCP連接,然後才能發送HTTP請求報文,並接受HTTP響應報文。根據HTTP在使用TCP連接的策略不同,可以分爲非持久連接的HTTP和持久連接的HTTP。

(1)非持久連接

非持久連接是指HTTP客戶與HTTP服務器建立TCP連接後,通過該連接發送HTTP請求報文,接收HTTP響應報文,然後斷開連接。爲了提高或改善HTTP的性能,可採用的優化技術包括以下兩種:

1. 並行連接,通過建立多條並行的TCP連接,並行發送HTTP請求和並行接收HTTP響應。

2. 持久連接,重用已經建立的TCP連接發送新的HTTP請求和接收HTTP響應,從而消除新建TCP連接的時間開銷。

 

(2)持久連接

持久連接又分爲兩種工作方式:非流水方式持久連接和流水方式持久連接。

1. 非流水方式持久連接:也稱爲非管道方式持久連接,客戶端在通過持久連接收到前一個響應報文後,才能發出對下一個對象的請求報文。與非持久連接相比,連續請求多個對象時,只需建立一次TCP連接,這樣,每獲取一個對象只需1個RTT時間。

2. 流水方式持久連接:也稱爲管道方式持久連接,客戶端在通過持久連接收到前一個對象的響應報文之前,連續依次發送對後續對象的請求報文,然後再通過該連接依次接收服務器發回的響應報文。使用流水方式持久連接時,獲取一個對象平均時間遠小於1個RTT時間,如果忽略對象傳輸時間,連續請求的多個對象只需1個RTT時間。

 

3. HTTP報文

(1)報文組成

HTTP報文由4部分組成:起始行、首部行、空白行和實體主體。起始行與首部是行分隔的ASCII文本,每行由CRLF(回車換行)終止,空白行中只有CRLF,主體(報文主體)可以是文本或二進制數據。HTTP報文起始行和空白行不可缺少,首部行可以是零行或多行,實體主體則根據報文類型、功能等可有可無。

 

(2)報文分類

HTTP報文可以分爲兩類:請求報文和響應報文,請求報文由瀏覽器(客戶端)發送給Web服務器,響應報文由Web服務器發送給瀏覽器。

請求報文與響應報文最主要的區別是起始行不同,請求報文起始行爲:

<方法><URL><協議版本>

響應報文起始行爲:

<協議版本><狀態碼><短語>

每部分之間由空格分隔,起始行最後是CRLF。

 

(3)HTTP典型的請求方法

HTTP典型的請求方法有:GET、HEAD、POST、OPTION、PUT。

1. GET:請求讀取由URL所標識的信息,是最常見的方法。

2. HEAD:請求讀取由URL所標識的信息的首部,即無須在響應報文中包含對象。

3. POST:給服務器添加信息。

4. OPTION:請求一些選項的信息。

5. PUT:在指明的URL下存儲一個文檔。

 

二、Cookie

Cookie中文名爲小型文本文件,指某些網站爲了辨別用戶身份、進行會話跟蹤而存儲在用戶本地終端上的數據。

Cookie技術主要包括4部分內容:

(1)HTTP響應報文中的Cookie頭行:Set-Cookie。

(2)用戶瀏覽器在本地存儲、維護和管理的Cookie文件。

(3)HTTP請求報文中的Cookie頭行:Cookie。

(4)網站在後臺數據庫中存儲、維護Cookie信息。

 

Internet電子郵件

SMTP電子郵件協議

1. 電子郵件

電子郵件是最早在Internet上流行起來的網絡應用之一,可實現用戶之間電子化郵件的異步傳輸。而電子郵件系統主要包括郵件服務器、簡單郵件傳輸協議(SMTP)、用戶代理和郵件讀取協議等。

 

2. 郵件服務器

郵件服務器的功能是發送和接收郵件,同時還要向發信人報告郵件傳送的情況(已交付、被拒絕、丟失等),是電子郵件體系結構的核心。

郵件服務器爲每個註冊用戶創建一個郵箱,存放該用戶接收到的郵件,管理一個外出郵件隊列,並從隊列中取出郵件進行發送。每個用戶的郵箱都有一個唯一的電子郵件地址,格式爲:收件人郵箱名@郵箱所在主機的域名(或IP地址),其中“@”表示“在”的意思。

 

3. SMTP及發送過程

SMTP是Internet電子郵件中核心應用層協議,實現郵件服務器之間或用戶代理到郵件服務器之間的郵件傳輸。

SMTP使用傳輸層TCP,在SMTP客戶與服務器(默認25號端口)之間建立TCP連接後,經歷握手階段、郵件發送階段和關閉階段,完成郵件傳送。SMTP只能傳輸7位ASCII碼文本內容,如果傳輸非7位ASCII碼文本內容,需要根據MIME將非7位ASCII碼文本內容編碼轉換爲7位ASCII碼文本內容,然後再通過SMTP進行傳輸。STMP是“推動”協議,發送郵件的服務器(或用戶代理)主動請求與接收郵件的郵件服務器建立連接,然後將郵件發送過去。

 

4. 郵件讀取協議

當用戶需要訪問自己的郵箱,讀取其中的郵件時,所使用的應用層協議是郵件讀取協議。郵件讀取服務器的主要作用是用戶身份鑑別(需要登陸用戶名和密碼)、訪問用戶郵箱、根據用戶請求對郵箱中的郵件進行操作等。目前,郵件讀取協議包括POP3、IMAP和HTTP,其中HTTP是Web郵件系統的郵件讀取協議。

 

FTP

FTP及其特點

文本傳送協議(FTP)是在互聯網的兩個主機間實現文件互傳的網絡應用。FTP使用傳輸層TCP。

FTP客戶與服務器(21號端口)建立一條TCP連接,稱爲控制連接,用於傳輸命令。控制連接是持久的。在傳輸文件等數據時,客戶與服務器的20號端口之間建立一條臨時的TCP連接,用於傳輸數據,數據傳輸結束便斷開連接,該連接稱爲數據連接。FTP這種使用兩條TCP連接分別傳輸控制命令與數據的方式,稱爲帶外控制。另外,FTP是有狀態的協議。

 

P2P應用

P2P應用的基礎知識

P2P體系結構對服務器的依賴很小,甚至對於純P2P來說,整個應用幾乎不依賴某個集中服務器,應用都是動態地在對等方之間進行。在P2P應用中,對等方隨時可能加入應用,也隨時可能離開應用,具有很強的應用規模伸縮性。

P2P應用在很多應用場景中也表現出了由於傳統客戶/服務器體系結構的網絡應用,近年來很多性能表現優異、深受用戶喜愛的P2P應用層出不窮,例如,BitTorrent、PPLive和PPPPstream。

 

Socket編程基礎

Socket的基本概念

1. Socket的基本類型

網絡應用進程可以創建3中類型的Socket:數據報類型套接字SOCK_DGRAM、流式套接字SOCK_STREAM和原始套接字SOCK_RAW。其中SOCK_DGRAM面向傳輸層UDP接口;SOCK_STREAM面向傳輸層TCP接口;SOCK_RAW面向網絡層協議(如IP、ICMP等)接口。

 

2. Socket API系統調用及其過程

(1)基於TCP客戶與服務器的典型Socket API函數調用過程

服務器程序運行後,調用socket()函數創建SOCK_STREAM類型的主套接字ms;調用bind()函數綁定本地端點地址;調用listen()函數置主套接字ms爲監聽模式;調用accept()函數通過主套接字ms接收客戶連接請求,並阻塞服務器進程,直到有客戶連接請求到達,accept()函數調用成功,返回(創建)連接套接字ss。

客戶程序在服務器程序運行後執行,創建了本地SOCK_STREAM類型的套接字cs後,調用connect()函數請求與服務器建立TCP連接,connect()函數調用成功,表明TCP連接建立成功。接下去,客戶程序與服務器程序通過調用send()函數和recv()函數,實現數據發送與接收。通信結束後,客戶程序通過調用close()函數,釋放套接字cs;服務器程序通過調用close()函數,釋放套接字ss,從而關閉TCP連接。服務器程序繼續調用accept()函數,通過主套接字ms接收下一個客戶連接請求。

服務器端在調用accept()函數時,通常阻塞服務器進程,等待客戶的連接請求,一旦有客戶連接請求到達,accept()函數會返回(創建)一個新的套接字ss,ss是真正與客戶建立TCP連接的。服務器與客戶的通信是通過與特定客戶連接ss進行的,當與該客戶通信結束後,即可調用close()函數關閉與客戶通信的ss。服務器通常通過無限循環機制,繼續調用accept()函數繼續等待新的客戶連接請求,周而復始。

 

(2)基於UDP客戶與服務器的典型Socket API函數調用過程

服務器程序運行後,調用socket()函數創建SOCK_DGRAM類型的套接字ums;調用bind()函數綁定本地端點地址。客戶程序運行後,創建本地SOCK_DGRAM類型的套接字ucs。接下去,客戶程序與服務器程序通過調用sendto()和recvfrom()函數,實現數據發送與接收。通信結束後,客戶程序通過調用close()函數,釋放套接字ucs;服務器程序繼續調用recvfrom()函數,通過套接字ums接收下一個客戶發送過來的數據報。

發佈了53 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章