1. 程式人生 > >常見的應用層協議

常見的應用層協議

一、DHCP

DHCP概念

動態主機配置協議,是一個應用層協議,使用UDP協議工作。當我們將客戶主機ip地址設定為動態獲取方式時,DHCP伺服器就會根據DHCP協議給客戶端分配IP,使得客戶機能夠利用這個IP上網。

DHCP操作

1.尋找DHCP Server

當DHCP客戶機第一次登入網路的時候(也就是客戶機上沒有任何IP地址資料時),它會通過UDP 67埠向網路上發出一個DHCPDISCOVER資料包(包中包含客戶機的MAC地址和計算機名等資訊)。因為客戶機還不知道自己屬於哪一個網路,所以封包的源地址為0.0.0.0,目標地址為255.255.255.255,然後再附上DHCP discover的資訊,向網路進行廣播。 

2. 提供IP地址租用

當DHCP Server監聽到客戶機發出的DHCP discover廣播後,它會從那些還沒有租出去的地址中,選擇最前面的空置IP,連同其它TCP/IP設定,通過UDP 68埠響應給客戶機一個DHCP OFFER資料包(包中包含IP地址、子網掩碼、地址租期等資訊)。此時還是使用廣播進行通訊,源IP地址為DHCP Server的IP地址,目標地址為255.255.255.255。同時,DHCP Server為此客戶保留它提供的IP地址,從而不會為其他DHCP客戶分配此IP地址。

由於客戶機在開始的時候還沒有IP地址,所以在其DHCP discover封包內會帶有其MAC地址資訊,並且有一個XID編號來辨別該封包,DHCP Server響應的DHCP OFFER封包則會根據這些資料傳遞給要求租約的客戶。

3. 接受IP租約

如果客戶機收到網路上多臺DHCP伺服器的響應,只會挑選其中一個DHCP OFFER(一般是最先到達的那個),並且會向網路傳送一個DHCPREQUEST廣播資料包(包中包含客戶端的MAC地址、接受的租約中的IP地址、提供此租約的DHCP伺服器地址等),告訴所有DHCP Server它將接受哪一臺伺服器提供的IP地址,所有其他的DHCP伺服器撤銷它們的提供以便將IP地址提供給下一次IP租用請求。此時,由於還沒有得到DHCP Server的最後確認,客戶端仍然使用0.0.0.0為源IP地址,255.255.255.255為目標地址進行廣播。

4. 租約確認

當DHCP Server接收到客戶機的DHCP REQUEST之後,會廣播返回給客戶機一個DHCP ACK訊息包,表明已經接受客戶機的選擇,並將這一IP地址的合法租用以及其他的配置資訊都放入該廣播包發給客戶機。

客戶機在接收到DHCP ACK廣播後,會向網路傳送三個針對此IP地址的ARP解析請求以執行衝突檢測,查詢網路上有沒有其它機器使用該IP地址;如果發現該IP地址已經被使用,客戶機會發出一個DHCP DECLINE資料包給DHCP Server,拒絕此IP地址租約,並重新發送DHCP discover資訊。此時,在DHCP伺服器管理控制檯中,會顯示此IP地址為BAD_ADDRESS。

如果網路上沒有其它主機使用此IP地址,則客戶機的TCP/IP使用租約中提供的IP地址完成初始化,從而可以和其他網路中的主機進行通訊。

不同的網路

像其他應用層程序一樣,客戶可以在某個網路上,而伺服器可以在相隔好幾個網路之外的另一個網路上。這就帶來一個問題。DHCP請求是廣播發送的,因為客戶不知道伺服器的IP地址。而廣播的IP資料報不能通過任何路由器。路由器收到這樣的分組就會丟棄它。全1的IP地址是一個受限廣播地址。

要解決這個問題,就需要一箇中介物。某臺主機(或是一臺能夠配置為在應用層工作的路由器)可用來充當中繼。在這種情況下,該主機就稱為中級代理。中級代理直到DHCP伺服器的單播地址,並在埠67監聽廣播報文。當它收到這種型別的分組後,就把它封裝成一個單播資料報,並且把此請求傳送給DHCP伺服器。攜帶了單播目的地址的分組可以被任何一個路由器轉發,最終到達DHCP伺服器。DHCP伺服器知道這個報文來自中繼代理,因為在請求報文中有一個欄位定義了中繼代理的IP地址。中繼代理在收到回答之後,再把它傳送給DHCP客戶。

二、DNS

DNS概念

全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議執行在UDP協議之上,使用埠號53。

域名系統

在因特網規模還還很小的時候,對映是通過主機檔案來實現的。在這個主機檔案中僅包含名字和地址這兩列。每臺主機都可以把主機檔案儲存在自己的磁碟上,並根據一個總主機檔案進行定期更新。當程式或使用者需要把名字對映為地址時,主機就可以查詢主機檔案並找出相應的對映。

但是時至今日,已經不可能用一個單獨的主機檔案把所有的地址和名字關聯起來。主機檔案會因為太大而無法儲存在每臺主機上。另外,每當對映關係發生變化時,也不可能對全世界所有的主機檔案都進行更新。

目前採用的解決辦法是將這個巨大的資訊量劃分為若干個較小的組成部分,並把每一部分儲存在不同的主機上。使用這種方法時,需要對映的計算機可以尋找持有所需資訊的最近的計算機。這種方法就是域名系統。

域名空間

名字被定義在根置於頂部的倒置樹的結構中。這個樹最多隻能有128級:從第0級(跟)到第127級。

DNS域名伺服器

DNS是能夠在不同平臺上使用的協議。在因特網中,域名空間(樹)被劃分為三個不同的部分:類屬域、國家域和反向域。

因為完整的域名體系結構不能儲存在一個單獨的伺服器上,所以它們分散地儲存在若干個伺服器上。一個伺服器負責的範圍,或者說有管理權想的範圍,就稱為區。

DNS伺服器的管轄範圍是以“區”為單位。區可能等於或小於域,但一定不可能大於域。

解析

把名字對映為地址,或者把地址對映為名字,都稱為地址解析。

解析程式

DNS被設計為客戶-伺服器應用程式。需要把地址對映為名字或把名字對映為地址的主機要呼叫稱為解析程式的DNS客戶程式。解析程式訪問靠得最近的DNS伺服器併發出對映請求。若DNS伺服器有這個資訊,就滿足解析程式的要求,否則,讓解析程式再去找其他的伺服器,或者直接請其他伺服器提供這個資訊。

當解析程式收到對映後,就解釋這個響應,看它是真正的解析還是差錯,最後把結果交給請求對映的程序。

遞迴解析

客戶(解析程式)可以向名字伺服器請求遞歸回答。這就表示解析程式期望伺服器提供最終的解答。若伺服器就是這個域名的許可權伺服器,就檢查它的資料庫並響應。若伺服器不是它的許可權伺服器,就將請求傳送給另一個伺服器(通常是父伺服器)並等待響應。若伺服器是許可權伺服器,則響應,否則,就將查詢再發送給另一個伺服器。當查詢最終被解析後,響應就原路返回,直至最後到達發出請求的客戶。

迭代解析

迭代解析

若客戶沒有要求遞歸回答,則對映可以按迭代方式進行。若伺服器是這個域名的許可權伺服器,它就傳送解答。若不是,就返回(到客戶)它認為可以解析這個查詢的伺服器的IP地址。客戶再次向第二個伺服器傳送查詢。若新找到的伺服器能夠解決這個問題,就i用IP地址回答,否則,就向客戶返回一個新的伺服器的IP地址。現在客戶必須向第三個伺服器再次查詢。這個過程稱為迭代的,因為客戶向多個伺服器重複同樣的查詢。

三、TELNET與SSH

TELNET概念

Telnet協議是TCP/IP協議族中的一員,是Internet遠端登入服務的標準協議和主要方式。它為使用者提供了在本地計算機上完成遠端主機工作的能力。在終端使用者的電腦上使用telnet程式,用它連線到伺服器。終端使用者可以在telnet程式中輸入命令,這些命令會在伺服器上執行,就像直接在伺服器的控制檯上輸入一樣。可以在本地就能控制伺服器。要開始一個telnet會話,必須輸入使用者名稱和密碼來登入伺服器。

網路虛擬終端(NVT)

接入到遠端計算機的過程很複雜,這是因為每一個計算機及其作業系統都會接受一些特殊的字元組合作為記號。例如:在執行DOS作業系統的計算機中,檔案結束標記是Ctrl+z,但在UNIX作業系統中則是Ctrl+d。

我們現在是和異構系統打交道。如果我們想接入世界上的任何一臺遠端計算機,那麼我們必須首先知道將要連線的計算機的型別是什麼,我們還必須安裝那臺計算機所使用的特定的終端模擬程式。TELNET解決這個問題的方法是定義一個通用的介面,稱為網路虛擬終端字符集(NVT)。通過這個介面,TELNET客戶把來自本地終端的字元(資料或命令)轉換為NVT形式,然後交付給網路。另一方面,TELNET伺服器把NVT形式的資料和命令轉換成遠端計算機可接受的形式。

遠端的作業系統沒有被設計成能夠從TELNET伺服器接收字元,它的設計使得它必須從終端驅動程式接收字元。解決這個問題的方法是增加一個稱為偽終端驅動程式的軟體,它將這些字元偽裝成好像是從另一個終端發來的。然後作業系統就可以把這些字元傳遞給適當的應用程式。

四、TFTP

概念

TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協議)是TCP/IP協議族中的一個用來在客戶端與伺服器之間進行簡單檔案傳輸的協議。和使用TCP的檔案傳輸協議(FTP)不同,為了保持簡單短小,TFTP使用了UDP。TFTP的實現(和它所需要的UDP、IP、和裝置驅動程式)可以放入只讀儲存器中

TFTP是一個簡單的協議,適合於只讀儲存器,僅用於無盤系統進行系統引導,它只使用幾種報文格式,是一種停止等待協議

特點

1、簡單
2、佔用資源小
3、適合傳遞小檔案
4、適合在區域網進行傳遞
5、埠號為69
6、基於UDP實現

UDP埠

在TFTP客戶和TFTP伺服器之間的通訊可能持續很長的時間(幾秒鐘或幾分鐘)。若TFTP伺服器使用熟知埠69和客戶進行長時間的通訊,那麼在這段時間內就沒有其他的客戶能夠使用這樣的服務。解決這問題的方法是使用熟知埠進行初始連線,但對剩下的通訊則採用臨時埠。

步驟:

1.伺服器使用熟知埠69被動開啟連線。

2.客戶主動開啟連線,它使用臨時埠作為源埠而熟知埠69作為目的埠。它使用RRQ報文或WRQ報文做到這點。

3.伺服器主動開啟連線,它使用新的臨時埠作為源埠,而使用收到的來自客戶的臨時埠作為目的埠。它使用這些埠傳送DATA或ACK或ERROR報文。伺服器騰出熟知埠(69)使其他客戶能夠使用。當客戶收到來自伺服器的第一個報文時,它就使用自己的臨時埠和伺服器傳送的臨時埠進行今後的通訊。

缺陷

TFTP分組中並不提供使用者名稱和口令。這是TFTP的一個特性(即"安全漏洞")。由於TFTP是設計用於系統引導程序,它不可能提供使用者名稱和口令。
目前大多數TFTP伺服器提供了一個選項來限制只能訪問特定目錄下的檔案,這個目錄中只包含無盤系統進行系統引導時所需的檔案

TFTP舉例

操作碼 功能
1 讀請求,即下載
2 寫請求,即上傳
3 表示資料包,即DATA
4 確認碼,即ACK
5 錯誤

 

因為udp的資料包不安全,即傳送方傳送是否成功不能確定,所以TFTP協議中規定,為了讓伺服器知道客戶端已經接收到了剛剛傳送的那個資料包,所以當客戶端接收到一個數據包的時候需要向伺服器進行傳送確認資訊,即傳送收到了,這樣的包成為ACK(應答包)

為了標記資料已經發送完畢,所以規定,當客戶端接收到的資料小於516(2位元組操作碼+2個位元組的序號+512位元組資料)時,就意味著伺服器傳送完畢了

 TFTP資料包格式