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

應用層協議

截圖 瀏覽器 crlf rip 之間 selector 數據報 .com 不兼容

在傳輸層之上,便是應用層。傳輸層的 UDP 報文和 TCP 報文段的數據部分就是應用層交付的數據。

不同類型的網絡應用有不同的通信規則,因此應用層協議是多種多樣的,比如 DNS、FTP、Telnet、SMTP、HTTP、RIP、NFS 等協議都是用於解決其各自的一類問題。

本節實驗,介紹 DNS、FTP、HTTP 三個常用的應用層協議。

一、DNS

DNS (Domain Name Service 域名服務) 協議基於 UDP,使用端口號 53。

由數字組成的 IP 地址很難記憶,所以我們上網使用網站 IP 地址的別名——域名。實際使用中,域名與 IP 地址是對應的,這種對應關系保存在DNS 服務器

之中。

在瀏覽器中輸入一個域名後,會有 DNS 服務器將域名解析為對應的 IP 地址。註意這和網絡層的 ARP 協議的不同之處:DNS 提供的是域名與 IP 地址的對應關系,而 ARP 提供的是 IP 地址和 MAC 地址的對應關系。

DNS 服務器

DNS 服務器是個分層次的系統:

  • (1)根 DNS 服務器 :全世界共有 13 臺根域名服務器,編號 A 到 M,其中大部分位於美國。

  • (2)頂級(TLD)DNS 服務器 :負責如 com 、org 、edu 等頂級域名和所有國家的頂級域名(如 cn 、uk 、jp )。

  • (3)權威 DNS 服務器 :大型組織、大學、企業的域名解析服務。

  • (4)本地 DNS 服務器 :通常與我們主機最近的 DNS 服務器。

而域名解析的過程,有叠代查詢和遞歸查詢兩種方式:

技術分享圖片

host 命令

在 linux 系統中,可以用 host 命令 進行 DNS 查詢,查看一個指定域名的 IP,比如要查詢 mirrors.aliyuncs.com 的 IP 地址:

host mirrors.aliyuncs.com

下圖示例查詢www.shiyanlou.com的操作,由於實驗樓網絡限制,只有mirrors.aliyuncs.com域名可以查詢。

技術分享圖片

DNS 報文

主機向 DNS 服務器發出的查詢叫做DNS 報文,大致結構:

技術分享圖片

DNS 問答報文的內容,都是 IP 和域名的對應信息,關於 DNS 首部和內容 各字段這裏不做詳細介紹。深入了解,可以先 host 一個域名,再使用 tcpdump 抓取報文並解讀。

DNS 緩存和 hosts 文件

剛才 DNS 解析查詢過程的圖中,共發出了 8 份 DNS 報文,這是非常消耗時間的,所以實際應用上使用 DNS 緩存 :當一個 DNS 服務器接收到一個 DNS 回答後,會將其信息緩存一段時間,當再有一個對相同域名的查詢時,便可直接回復。

通過 DNS 緩存,其實很多查詢都只需要本地 DNS 服務器便可完成。

有“FQ”愛好的同學應該知道 hosts 文件,其實 hosts 文件可以看作是一個小型的 DNS 服務器。

使用命令打開 hosts 文件:

sudo gedit /etc/hosts

查看文件內容,可以發現裏面全是類似下圖中的 IP 和域名對應記錄:

技術分享圖片

在實際上網過程中,域名解析的的優先順序是:先在 DNS 緩存查詢,若沒有找到記錄,再查詢 hosts 文件,若還是沒找到記錄,再向 DNS 服務器發出 DNS 查詢報文。

二、FTP

FTP (File Transfer Protocol 文件傳輸協議) 基於 TCP,使用端口號 20(數據)和 21(控制)。

它的主要功能是減少或消除在不同操作系統下處理文件的不兼容性,以達到便捷高效的文件傳輸效果。

  • FTP 只提供文件傳輸的基本服務,它采用 客戶端—服務器 的方式,一個 FTP 服務器可同時為多個客戶端提供服務。

  • 在進行文件傳輸時,FTP 的客戶端和服務器之間會建立兩個 TCP 連接:21 號端口建立控制連接,20 號端口建立數據連接

  • FTP 的傳輸有兩種方式:ASCII 傳輸模式和二進制數據傳輸模式。

三、HTTP

HTTP (HyperText Transfer Protocol 超文本傳輸協議) 基於 TCP,使用端口號 80 或 8080。

每當你在瀏覽器裏輸入一個網址或點擊一個鏈接時,瀏覽器就通過 HTTP 協議將網頁信息從服務器提取再顯示出來,這是現在使用頻率最大的應用層協議。

這個原理很簡單:

  • 點擊一個鏈接後,瀏覽器向服務器發起 TCP 連接;

  • 連接建立後瀏覽器發送 HTTP 請求報文,然後服務器回復響應報文;

  • 瀏覽器將收到的響應報文內容顯示在網頁上;

  • 報文收發結束,關閉 TCP 連接。

HTTP 報文會被傳輸層封裝為 TCP 報文段,然後再被 IP 層封裝為 IP 數據報。HTTP 報文的結構:

技術分享圖片

可見報文分為 3 部分:

  • (1)開始行:用於區分是請求報文還是響應報文,請求報文中開始行叫做請求行,而響應報文中,開始行叫做狀態行。在開始行的三個字段之間都用空格分開,結尾處 CRLF 表示回車和換行。

  • (2)首部行:用於說明瀏覽器、服務器或報文主體的一些信息。

  • (3)實體主體:請求報文中通常不用實體主體。

請求報文的方法字段是對所請求對象進行的操作,而響應報文的狀態碼是一個 3 位數字,分為 5 類 33 種:

  • 1xx 表示通知信息,如收到或正在處理。

  • 2xx 表示成功接收。

  • 3xx 表示重定向。

  • 4xx 表示客戶的差錯,如 404 表示網頁未找到。

  • 5xx表示服務器的差錯,如常見的 502 Bad Gateway。

1、使用 host 命令查看常見網站的 IP 地址,用 tcpdump 抓取 DNS 報文做解讀,並截圖。

參考:tcpdump 抓取命令:sudo tcpdump -vvv -X udp port 53

2、查看 linux 的 hosts 文件,並截圖。

3、使用 tcpdump 抓取 HTTP 報文做解讀,並截圖。

參考:瀏覽器輸入一個不存在的網址,抓取狀態碼為 404 報文。

應用層協議