1. 程式人生 > >TCP/IP協議簡介(五) 之 應用層

TCP/IP協議簡介(五) 之 應用層

應用層協議

在傳輸層之上,便是應用層。傳輸層的 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 伺服器。

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

01

host 命令

在 linux 系統中,可以用 host 命令 進行 DNS 查詢,檢視一個指定域名的 IP,比如要查詢實驗樓 GIT 服務的 IP 地址:

host mirrors.aliyuncs.com

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

04

DNS 報文

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

03

DNS 問答報文的內容,都是 IP 和域名的對應資訊,關於 DNS 首部和內容 各欄位這裡不做詳細介紹。深入瞭解,可以先 host 一個域名,再使用 tcpdump 抓取報文並解讀。

DNS 快取和 hosts 檔案

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

通過 DNS 快取,其實很多查詢都只需要本地 DNS 伺服器便可完成。

有“翻牆”愛好的同學應該知道 hosts 檔案,其實 hosts 檔案可以看作是一個小型的 DNS 伺服器。

使用命令開啟 hosts 檔案:

sudo gedit /etc/hosts

檢視檔案內容,可以發現裡面全是類似下圖中的 IP 和域名對應記錄:

02

在實際上網過程中,域名解析的的優先順序是:先在 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 報文的結構:

05

可見報文分為 3 部分:

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

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

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

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

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

  • 2xx 表示成功接收。

  • 3xx 表示重定向。

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

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