1. 程式人生 > 程式設計 >詳細講解計算機網路——應用層

詳細講解計算機網路——應用層

目錄
  • 應用層協議
  • 一、DNS
    • 1、DNS 是什麼
    • 2、域名結構
    • 3、域名伺服器
    • 4、DNS 解析流程
    • 5、DNS 伺服器查詢方式
      • (1)迭代查詢
      • (2)遞迴查詢
    • 6、DNS 快取機制
      • 7、DNS 使用 UDP 還是 TCP
        • 區域傳送(主、輔 DNS 伺服器通訊)時使用 TCP
        • 域名解析時使用 UDP
    • 二、全球資訊網
      • 1、全球資訊網概述
        • (1)超媒體與超文字
        • (2)全球資訊網的工作方式
        • (3)全球資訊網必須解決的問題
      • 2、超文字傳送協議 HTTP
        • (1)HTTP 的操作過程
        • (2)請求一個全球資訊網文件所需的時間
      • 3、全球資訊網的文件
        • (1)超文字標記語言 HTML
        • (2)動態全球資訊網文件
        • (3)活動全球資訊網文件
    • 三、HTTP 與 HTTPs 協議
      • 1、HTTP 特點
        • (1)簡單快速:
        • (2)靈活:
        • (3)無連線:
        • (4)無狀態儲存:
        • (5)支援 B/S 及 C/S 模式。
      • 2、HTTP 各版本比較
        • 3、HTTP 的請求與響應報文
          • (1)HTTP 請求(Request)
          • (2)HTTP 響應(Response)
        • 4、HTTP 請求響應步驟
          • (1)客戶端連線到 Web 伺服器
          • (2)傳送 HTTP 請求
          • (3)伺服器接受請求並返回 HTTP 響應
          • (4)釋放 TCP 連線
          • (5)客戶端瀏覽器解析 HTML 內容
        • 5、HTTPS 協議
          • (1)TLS/SSL協議的三個特性
          • (2)SSL 握手過程
          • (3)非對稱加密和對稱加密
        • 6、HTTP 和 HTTPs 區別
          • 7、Web 快取
            • (1)WEB快取的作用
            • (2)工作過程
          • 8、Web 頁面請求過程
            • (1)DHCP 配置主機資訊
            • (2)ARP 解析 MAC 地址
            • (3)DNS 解析域名
            • (4)HTTP 請求頁面
          • 四、遠端終端協議 TELNET
            • TELNET 是一個簡單的遠端終端協議,也是網際網路的正式標準。
            • 客戶/伺服器方式
            • 網路虛擬終端 NVT 格式
        • 五、FTP
          • FTP的工作過程
            • 流程
              • (1)啟動FTP伺服器:
              • (2)啟動FTP客戶機程式並建立控制連線:
              • (3)建立資料連線並進行檔案傳輸:
              • (4)關閉FTP:
          • 六、電子郵件傳輸協議
            • 1、SMTP(Simple Mail Transfer Protocol)
              • 2、POP3
                • 3、IMAP
                • 七、Socket
                  • TCP下的socket
                    • TCP 下 socket 流程:

                    應用層協議

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

                    在這裡插入圖片描述

                    應用層直接為使用者提供服務,應用層有很多協議,每一個協議對應著計算機上的一個服務。

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

                    在這裡插入圖片描述

                    應用層協議(application-layer protocol)定義了執行在不同端系統上的應用程式如何相互傳遞報文。

                    應用層協議定義了:

                    在這裡插入圖片描述

                    一、DNS

                    1、DNS 是什麼

                    DNS 全名叫 Domain Name Server,中文俗稱“域名伺服器”

                    在 Internet 上域名與 IP 地址之間是一一對應的,域名雖然便於人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析伺服器來完成,DNS 就是進行域名解析的伺服器,將域名(機器名) 轉換為 IP地址。

                    DNS 是一個分散式,提供了主機名和 IP 地址之間相互轉換的服務。

                    這裡的分散式資料庫是指,每個站點只保留它自己的那部分資料。

                    如果整個因特網都使用一個域名伺服器,負荷太大, 所以 DNS 設計成一個分散式的資料庫,即使單個主機出故障也不會妨礙整個 DNS 系統。

                    另外 DNS 使得大多數域名都能在本地解析,僅少量解析需要在因特網上通訊,因此 DNS 效率很高。

                    域名和 IP 是一對一關係嗎?

                    • 實際上域名和 IP 是多對多關係。
                    • 一個 IP 可以被多個域名指向(購買的虛擬主機)
                    • 一個域名下也可以有多個 IP(負載均衡)

                    2、域名結構

                    • 域名指的是用點符號分割的計算機名字。
                    • IP地址對應著網路上的各個機器,但由於IP地址沒有具體字面含義,難以記憶,有時IP地址還會經常更換。
                    • 引入域名來標識某臺機器。域名是全球唯一的,每次申請域名,都會在域名伺服器上查詢是否存在。
                    • 所有域名都是以“ . ”開始的。

                    在這裡插入圖片描述

                    域名結構是樹狀結構,樹的最頂端代表根域名

                    • 下一層是 .com、.cn 等頂級域名。
                    • 再下層就是二級、三級、四級域名。

                    在這裡插入圖片描述

                    • 頂級域名代表伺服器或的性質常見有com(商用)、cn(中國)、net(提供資訊)、edu(教育)、gov(政府)等等。

                      在這裡插入圖片描述

                    • 二級域名:每個人都可以申請的,可以在頂級域名下申請,比如 www.esyc.com中esyc就是一個二級域名。在二級域名下你就可以註冊其他域名了。
                    • 三級域名:www.mail.esyc.com中mail就是三級域名。在www.esyc.com這個域名註冊這個三級域名的時候無需在徵得com域名的同意。即一個域建立子域的時候不需要徵求上級同意。

                    當然域名可以3級可以4級可以5級等等,級別是沒有限制的,只需要滿足,一個域名的各個組成部分不超過63個字元長,總長不超過255個字元長。

                    3、域名伺服器

                    在這裡插入圖片描述

                    ● 根域名伺服器:最高層次的域名伺服器,根域名伺服器知道所有頂級域名伺服器的域名和IP地址。任何一個本地域名伺服器要對網際網路上的任何域名進行解析,只要自己無法解析,就會首先求助於根域名伺服器。

                    ● 頂級域名伺服器:管理在該頂級域名伺服器下注冊的所有二級域名。當收到DNS查詢請求時,就給出相應的回答(可能是最後的結果,也可能是下一步需要去找的域名伺服器的IP地址)。

                    ● 許可權域名伺服器(權威域名伺服器):負責一個區的域名伺服器。當一個權威域名伺服器不能給出最終的查詢結果時,就會告訴發出請求方,下一步應該去找哪一個權威域名伺服器。

                    ● 本地域名伺服器(遞迴伺服器):主機發出 DNS 查詢請求時,該請www.cppcns.com求首先會發給本地域名伺服器。

                    理論上講,任何標準域名的解析都需要經過層級式的域名解析。

                    即首先要通過第一層的根域名伺服器的指引,才能去下面的頂級域名伺服器尋找。

                    但是實際應用,提供接入服務的服務商的快取域名BTtufRuNsC伺服器上可能已經有了域名與 IP 對映的快取。

                    4、DNS 解析流程

                    ● 在瀏覽器中輸入 www.qq.com 域名,瀏覽器先檢查自身快取中有沒有被解析過的這個域名對應的 IP 地址,如果有,就呼叫這個 IP 對映,完成域名解析。

                    ● 如果瀏覽器快取中未命中,會檢查本地的 hosts 檔案是否有該域名和 IP 的對映,如果有,就呼叫這個IP地址對映,完成域名解析。

                    ● 如果 hosts 裡也沒有這個域名的對映,則向本地域名伺服器(LDNS)傳送請求,看是否有這個域名的對映關係,如果有,直接返回,完成域名解析。(LDNS 一般在城市的某個角落,距離你不會很遠,一般都會快取域名解析結果,大約 80% 的域名解析到這裡就完成了)

                    ● 如果 LDNS 仍然未命中,LDNS 就向根伺服器傳送查詢請求,根伺服器裡面記錄的都是各個頂級域所在的伺服器 IP,根伺服器會根據域名字尾返回對應的頂級域名伺服器位置。當向根請求 www.qq.com 的時候,根伺服器就會返回 .com 伺服器的位置資訊。

                    ● LDNS 拿到 .com 的權威伺服器地址以後,就會詢問 .com 的權威伺服器,知不知道 www.qq.com 的位置。這個時候 .com 權威伺服器查詢並返回 www.qq.com 伺服器的地址。LDNS 繼續向 www.qq.com 的權威伺服器去查詢這個地址,由 www.qq.com 的伺服器給出了 IP 地址:202.173.11.10

                    ● LDNS 伺服器得到了 www.qq.com 對應的 IP 地址後以 DNS 應答包的方式傳遞給客戶機,並把域名和對應的 IP 地址在本地快取下來。

                    ● 客戶機根據 IP 地址建立連線,並在客戶端快取域名/IP對映。

                    在這裡插入圖片描述

                    簡單來說,其實只有四步:

                    在這裡插入圖片描述

                    5、DNS 伺服器查詢方式

                    在這裡插入圖片描述

                    (1)迭代查詢

                    DNS 伺服器會向客戶機提供其他能夠解析查詢請求的 DNS 伺服器地址。

                    • 當客戶機發送查詢請求時,DNS 伺服器並不直接回複查詢結果,而是告訴客戶機另一臺 DNS 伺服器地址,
                    • 客戶機再向這臺 DNS 伺服器提交請求,依次迴圈直到返回查詢的結果為止。
                    • 迭代查詢返回的是最佳的查詢點或者主機地址。本地域名伺服器向根域名伺服器的查詢通常是採用迭代查詢。

                    在這裡插入圖片描述

                    (2)遞迴查詢

                    DNS 伺服器必須使用一個準確的查詢結果回覆客戶機。

                    • 如果DNS 伺服器本地沒有儲存查詢目標的 DNS 資訊,那麼該伺服器會去詢問其他伺服器(即代替客戶機去查詢,而不是讓客戶機自己進行下一步查詢),並將返回的查詢結果提交給客戶機。
                    • 因此,遞迴查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯(表示無法查詢到所需的 IP 地址)。主機向本地域名伺服器的查詢一般都是採用遞迴查詢。

                    在這裡插入圖片描述

                    6、DNS 快取機制

                    DNS 快取不僅產生於作業系統,瀏覽器、應用程式以及 ISP(網路服務提供商)都會對 DNS 進行快取。

                    一條域名的 DNS 記錄會在本地有兩種快取:瀏覽器快取和作業系統快取。

                    • 在瀏覽器中訪問的時候,會優先訪問瀏覽器快取,如果未命中再訪問OS快取,
                    • 最後再訪問 DNS 伺服器(一般是ISP提供),然後 DNS 伺服器會遞迴式的查詢域名記錄並返回結果。

                    DNS 記錄會有一個 TTL 值(Time To Live,存活時間),單位是秒,代表這條記錄最長有效期是多少。

                    瀏覽器 DNS 快取的時間跟 DNS 伺服器返回的 TTL 值無關。

                    應用程式的 DNS 快取是由應用程式控制的,比如 網路應用程式的 DNS 快取是由 JVM 的快取策略控制的。

                    OS 快取會參考 DNS 伺服器響應的 TTL 值,但是不完全等於 TTL 值。

                    ● 瀏覽器 DNS 快取:瀏覽器在獲取網站域名的實際 IP 地址後會對其 IP 進行快取,減少網路請求的損耗。每種瀏覽器都有一個固定的 DNS 快取時間,其中 Chrome 的過期時間是 1 分鐘,在這個期限內不會重新請求 DNS。Chrome 瀏覽器看本身的 DNS 快取時間比較方便,在位址列輸入:chrome://net-internals/#dns,就能看到看瀏覽器的快取。

                    ● Java DNS 快取:Java 網路應用程式的 DNS 快取是由 JVM 的快取策略控制的,可以直接設定快取過期時間:java.security.Security.setProperty(“networkaddress.cache.ttl”,10);

                    ● ISP DNS 快取:一般 ISP 伺服器上快取時間(15 min)比 OS 快取時間長,就算重新整理了本機作業系統的快取,ISP 上仍然保留。

                    ● Windows DNS 快取:Windows 訪問 DNS 後會把記錄儲存一段短暫的時間,可通過 ipconfig /displaydns 檢視 windows 的 DNS 快取、通過 ipconfig /flushdns 來清除快取。

                    ● IOS DNS 快取:按照官方文件說法,IOS 裝置上每 24 小時重新整理一次 DNS 快取。

                    7、DNS 使用 UDP 還是 TCP

                    DNS 佔用 53 號埠,同時使用 TCP 和 UDP 協議。

                    DNS 在進行區域傳輸的時候使用 TCP 協議,其它時候則使用 UDP 協議;

                    DNS 有兩種型別的 DNS 伺服器:主 DNS 伺服器和輔助 DNS 伺服器

                    • 在一個區中主 DNS 伺服器從自己本機的資料檔案中讀取該區的 DNS 資料資訊而輔助 DNS 伺服器則從區的主 DNS 伺服器中讀取該區的 DNS 資料資訊。
                    • 當一個輔助 DNS 伺服器啟動時,它需要與主 DNS 伺服器通訊,並載入資料資訊,即區域傳輸(zone transfer)。

                    區域傳送(主、輔 DNS 伺服器通訊)時使用 TCP

                    輔 DNS 伺服器會定時(一般時3小時)向主域名伺服器進行查詢以便了解資料是否有變動。

                    如有變動,則會執行一次區域傳送,進行資料同步。

                    區域傳送將使用 TCP而不是 UDP,因為資料同步傳送的資料量比較大。

                    TCP是一種可靠的連線,保證了資料的準確性。

                    域名解析時使用 UDP

                    客戶端向 DNS 伺服器查詢域名,一般返回的內容都不超過 512 位元組,用 UDP 傳輸即可。不用經過 TCP 三次握手,這樣 DNS 伺服器負載更低,響應更快。雖然從理論上說,客戶端也可以指定向 DNS 伺服器查詢的時候使用 TCP,但事實上,很多 DNS 伺服器進行配置的時候,僅支援 UDP 查詢包。

                    二、全球資訊網

                    1、全球資訊網概述

                    • 全球資訊網 WWW (World WideBTtufRuNsC Web) 並非某種特殊的計算機網路。
                    • 全球資訊網是一個大規模的、聯機式的資訊儲藏所。
                    • 全球資訊網用連結的方法能非常方便地從網際網路上的一個站點訪問另一個站點,從而主動地按需獲取豐富的資訊。

                    這種訪問方式稱為“連結”。

                    在這裡插入圖片描述

                    通俗的來說全球資訊網的使用就是我們通過遊覽器進行網路的通訊,得到的是及其其他的資料。

                    (1)超媒體與超文字

                    • 全球資訊網是分散式超媒體 (hypermedia) 系統,它是超文字 (hypertext) 系統的擴充。
                    • 一個超文字由多個資訊源連結而成。
                    • 利用一個連結可使使用者找到另一個文件。
                    • 這些文件可以位於世界上任何一個接在網際網路上的超文本系統中。
                    • 超文字是全球資訊網的基礎。
                    • 超媒體與超文字的區別是文件內容不同。超文字文件僅包含文字資訊,而超媒體文件還包含其他表示方式的資訊,如圖形、影象、聲音、動畫,甚至活動視訊影象。

                    (2)全球資訊網的工作方式

                    • 全球資訊網以客戶/伺服器方式工作。
                    • 瀏覽器就是在使用者計算機上的全球資訊網客戶程式。
                    • 全球資訊網文件所駐留的計算機則執行伺服器程式,因此這個計算機也稱為全球資訊網伺服器。
                    • 客戶程式向伺服器程式發出請求,伺服器程式向客戶程式送回客戶所要的全球資訊網文件。
                    • 在一個客戶程式主視窗上顯示出的全球資訊網文件稱為頁面(page)。

                    (3)全球資訊網必須解決的問題

                    1)怎樣標誌分佈在整個網際網路上的全球資訊網文件?

                    使用統一資源定位符 URL (Uniform Resource Locator) 來標誌全球資訊網上的各種文件。使每一個文件在整個網際網路的範圍內具有唯一的識別符號 URL。

                    2)用何協議實現全球資訊網上各種超鏈的連結?

                    在全球資訊網客戶程式與全球資訊網伺服器程式之間進行互動所使用的協議,是超文字傳送協議 HTTP (HyperText Transfer Protocol)。HTTP 是一個應用層協議,它使用 TCP 連線進行可靠的傳送。

                    3)怎樣使各種全球資訊網文件都能在網際網路上的各種計算機上顯示出來,同時使使用者清楚地知道在什麼地方存在著超鏈?

                    超文字標記語言 HTML (HyperText Markup Language) 使得全球資訊網頁面的設計者可以很方便地用一個超鏈從本頁面的某處連結到網際網路上的任何一個全球資訊網頁面,並且能夠在自己的計算機螢幕上將這些頁面顯示出來。

                    4)怎樣使使用者能夠很方便地找到所需的資訊?

                    為了在全球資訊網上方便地查詢資訊,使用者可使用各種的搜尋工具(即搜尋引擎)。

                    2、超文字傳送協議 HTTP

                    (1)HTTP 的操作過程

                    為了使超文字的連結能夠高效率地完成,需要用 HTTP 協議來傳送一切必須的資訊。

                    從層次的角度看,HTTP 是面向事務的(transaction-oriented)應用層協議,它是全球資訊網上能夠可靠地交換檔案(包括文字、聲音、影象等各種多媒體檔案)的重要基礎。

                    在這裡插入圖片描述

                    (2)請求一個全球資訊網文件所需的時間

                    在這裡插入圖片描述

                    每次的資料傳輸度需要進行建立連線與釋放連線的過程,為了提高傳輸的效率,提出了以下幾種方案:

                    不釋放連線、流水操作、代理伺服器。

                    1)不釋放連線

                    • HTTP/1.0 協議每次傳完一個全球資訊網文件後會釋放連線,故每請求一個文件需要2RTT的開銷。
                    • 全球資訊網伺服器在傳送響應後仍然在一段時間內保持這條連線,使同一個客戶(瀏覽器)和該伺服器可以繼續在這條連線上傳送後續的 HTTP 請求報文和響應報文。
                    • 這並不侷限於傳送同一個頁面上鍊接的文件,而是隻要這些文件都在同一個伺服器上就行。
                    • 目前一些流行的瀏覽器(例如,IE 6.0)的預設設定就是使用 HTTP/1.1。

                    2)流水與非流水

                    • 非流水線方式:客戶在收到前一個響應後才能發出下一個請求。這使得客戶每訪問一次物件都只需要一個 RTT 時間。但伺服器在傳送完一個物件後,其 TCP 連線就處於空閒狀態,浪費了伺服器資源。
                    • 流水線方式:客戶在收到 HTTP 的響應報文之前就能夠接著傳送新的請求報文。一個接一個的請求報文到達伺服器後,伺服器就可連續發回響應報文。使用流水線方式時,客戶訪問所有物件只需要花費一個 RTT時間,使 TCP 連線中的空閒時間減少,提高了下載文件效率。

                    3)代理伺服器

                    • 代理伺服器 (proxy server) 又稱為全球資訊網快取記憶體 (Web cache),它代表瀏覽器發出 HTTP 請求。
                    • 全球資訊網快取記憶體把最近的一些請求和響應暫存在本地磁碟中。
                    • 當與暫時存放的請求相同的新請求到達時,全球資訊網快取記憶體就把暫存的響應傳送出去,而不需要按 URL 的地址再去網際網路訪問該資源。
                    • 代理伺服器既是一個伺服器,有時也是一個客戶。

                    3、全球資訊網的文件

                    (1)超文字標記語言 HTML

                    HTML

                    (HyperText Markup Language) 中的 Markup 的意思就是“設定標記”。

                    在這裡插入圖片描述

                    當瀏覽器從伺服器讀取 HTML 文件後,就按照 HTML 文件中的各種標籤,根據瀏覽器所使用的顯示器尺寸和解析度大小,重新排版並恢復出所讀取的頁面。

                    兩種不同的連結:

                    在這裡插入圖片描述

                    HTML還規定了連結的設定方法。每個連結都有一個起點和終點。

                    XML
                    • XML (Extensible Markup Language)是可擴充套件標記語言,它和HTML很相似。
                    • 但XML的設計宗旨是傳輸資料,而不是顯示資料(HTML是為了在瀏覽器上顯示資料)。
                    • XML 不是要替換 HTML,而是對 HTML 的補充。
                    XHTML
                    • XHTML (Extensible HTML) 是可擴充套件超文字標記語言,它與 HTML 4.01 幾乎是相同的。
                    • 但 XHTML 是更嚴格的 HTML 版本,也是一個 W3C 標準(2000年1月),是作為一種 XML 應用被重新定義的 HTML,並將逐漸取代 HTML。
                    • 新的瀏覽器都支援 XHTML。
                    • CSS (Cascading Style Sheets) 是層疊樣式表,它是一種樣式表語言,用於為 HTML 文件定義佈局。
                    • CSS 與 HTML 的區別就是:HTML 用於結構化內容,而 CSS 則用於格式化結構化的內容。

                    (2)動態全球資訊網文件

                    靜態文件是指該文件創作完畢後就存放在全球資訊網伺服器中,在被使用者瀏覽的過程中,內容不會改變。

                    動態文件是指文件的內容是在瀏覽器訪問全球資訊網伺服器時才由應用程式動態建立。

                    動態文件和靜態文件之間的主要差別體現在伺服器一端。

                    這主要是文件內容的生成方法不同。而從瀏覽器的角度看,這兩種文件並沒有區別。

                    在這裡插入圖片描述

                    CGI (Common Gateway Interface) 是一種標準,它定義了動態文件應如何建立,輸入資料應如何提供給應用程式,以及輸出結果應如何使用。全球資訊網伺服器與 CGI 的通訊遵循 CGI 標準。

                    在這裡插入圖片描述

                    (3)活動全球資訊網文件

                    瀏覽器螢幕的連續重新整理

                    在這裡插入圖片描述

                    每當瀏覽器請求一個活動文件時,伺服器就返回一段程式副本在瀏覽器端執行。

                    活動文件程式可與使用者直接互動,並可連續地改變螢幕顯示。

                    由於活動文件技術不需要伺服器的連續更新傳送,對網路頻寬的要求也不會太高。

                    在這裡插入圖片描述

                    三、HTTP 與 HTTPs 協議

                    • HTTP 是用於從全球資訊網(WWW)伺服器傳輸超文字到本地瀏覽器的傳送協議,是基於 TCP/IP 協議之上的應用層協議。
                    • HTTP 定義了客戶端如何從伺服器請求 Web 頁面,以及伺服器如何把 Web 頁面傳送給客戶端。
                    • HTTP 採用了請求 / 響應模型,客戶端向伺服器傳送一個請求報文,伺服器以一個狀態行作為響應。

                    1、HTTP 特點

                    (1)簡單快速:

                    客戶向伺服器請求服務時,只需傳送請求方法和路徑。

                    請求方法常用的有 GET、HEAD、POST。

                    每種方法規定了客戶與伺服器聯絡的型別不同。

                    由於 HTTP 協議簡單,使得 HTTP 伺服器的程式規模小,因而通訊速度很快。

                    (2)靈活:

                    HTTP 允許傳輸任意型別的資料物件。 正在傳輸的型別由 Content-Type 加以標記。

                    (3)無連線:

                    無連線的含義是限制每次連線只處理一個請求。

                    伺服器處理完客戶的請求,並收到客戶的應答後立即斷開連線。

                    採用這種方式可以節省傳輸時間。

                    HTTP使用TCP協議作為它的支撐運輸協。

                    HTTP客戶首先發起一個與伺服器的TCP連線,一旦建立連線,該瀏覽器和伺服器就可以通過套接字介面訪問TCP。

                    (4)無狀態儲存:

                    HTTP 協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。

                    • 缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大(缺點)。
                    • 另一方面,在伺服器不需要先前資訊時它的應答就較快,可以更快地處理大量事務(優點)。

                    補充:對於無狀態儲存,如果使用者登入一家購物網站,希望即使使用者跳轉到該站的其他頁面也能繼續保持登入狀態。HTTP/1.1 雖然是無狀態協議,但為了實現儲存狀態的功能,引入了 Cookie 技術。

                    對於無連線,早期的 HTTP 是請求響應之後直接斷開,但現在的 HTTP/1.1 不直接斷開,而是等幾秒鐘,如果使用者在這幾秒鐘之內有新的請求,那麼還是通過之前的連線通道來收發訊息,如果過了這幾秒鐘使用者沒有傳送新的請求,那麼就會斷開連線,這樣可以提高效率,減少短時間內建立連線的次數,因為建立連線也是耗時的。

                    (5)支援 B/S 及 C/S 模式。

                    2、HTTP 各版本比較

                    在這裡插入圖片描述

                    3、HTTP 的請求與響應報文

                    (1)HTTP 請求(Request)

                    客戶端傳送一個 HTTP 請求到伺服器的請求訊息包括:請求行(request line)、請求頭部(header)、空行和請求資料四個部分。

                    在這裡插入圖片描述

                    HTTP 請求行

                    在這裡插入圖片描述

                    HTTP 請求頭

                    請求頭資訊為 “名:值” 對,之間用冒號分隔。

                    請求頭引數包括:

                    在這裡插入圖片描述在這裡插入圖片描述 在這裡插入圖片描述

                    空行

                    HTTP 請求頭的最後會有一個空行,表示請求頭部結束,接下來為請求資料,空行一定要有。

                    請求資料

                    請求資料不一定有,比如 get 請求就沒有請求資料。

                    (2)HTTP 響應(Response)

                    伺服器接收並處理客戶端發過來的請求後會返回一個 HTTP 的響應訊息,響應包括:狀態行、響應頭部、空行和響應正文四個部分。

                    在這裡插入圖片描述

                    狀態行:

                    包括協議版本、狀態碼和狀態碼描述。協議版本和請求報文一致,狀態碼是一個 3 位數字。

                    在這裡插入圖片描述

                    比較常見的狀態碼有:

                    • 200 表示響應成功;
                    • 302 表示跳轉,跳轉地址通過響應頭中的 Location 屬性指定;
                    • 400 表示客戶端請求有語法錯誤,不能被伺服器識別;
                    • 403 表示伺服器接收到請求,但拒絕提供服務(認證失敗);
                    響應頭部

                    這裡是引用

                    4、HTTP 請求響應步驟

                    (1)客戶端連線到 Web 伺服器

                    使用者確定要訪問網頁的URL,並將其輸入到瀏覽器的位址列中,瀏覽器向DNS伺服器發出請求,獲取Web伺服器域名所對應的IP地址。

                    HTTP 客戶端通常就是瀏覽器,與 Web 伺服器的 HTTP 埠(預設為 80)建立一個 TCP 套接字連線,比如http://www.abc.com;

                    (2)傳送 HTTP 請求

                    通過 TCP 套接字,客戶端向 Web 伺服器傳送一個請求傳輸網頁的 HTTP 請求報文。

                    一個請求報文由請求行、請求頭部、空行和請求資料 4 部分組成;

                    (3)伺服器接受請求並返回 HTTP 響應

                    Web 伺服器解析請求,定位請求資源並將資源複本寫到 TCP 套接字,由客戶端讀取。

                    一個響應由 狀態行、響應頭部、空行和響應資料 4 部分組成;

                    (4)釋放 TCP 連線

                    若 connection 模式為 close,則伺服器主動關閉 TCP 連線,客戶端被動關閉連線,TCP 連線釋放;

                    若 connection 模式為 keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;

                    (5)客戶端瀏覽器解析 HTML 內容

                    客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。

                    然後解析每一個響應頭,響應頭告知以下為若干位元組的 HTML 文件和文件的字符集。

                    客戶端瀏覽器讀取響應資料 HTML,根據 HTML 的語法對其進行格式化,並在瀏覽器視窗中顯示;

                    在這裡插入圖片描述

                    5、HTTPS 協議

                    HTTPS(Secure Hypertext Transfer Protocol)安全超文字傳輸協議,使用安全套接字層(SSL)進行資訊交換

                    即 HTTPS 是使用了 TLS/SSL 加密的 HTTP 協議,基於非對稱加密演算法和對稱加密演算法的協作使用。

                    TLS/SSL 指加密的規範,介於 TCP 和 HTTP 之間的安全協議,不影響原有的 TCP 和 HTTP 協議。

                    在這裡插入圖片描述 在這裡插入圖片描述

                    (1)TLS/SSL協議的三個特性

                    TLS/SSL 協議就是客戶端和伺服器之間實現安全交換資訊的協議。

                    在這裡插入圖片描述

                    TLS/SSL 的功能實現主要依賴於三類基本演算法:雜湊函式 Hash、非對稱加密和對稱加密。

                    • 先利用非對稱加密實現身份認證和金鑰協商
                    • 再通過對稱加密演算法用協商好的金鑰對資料加密
                    • 最後基於雜湊函式驗證資訊的完整性

                    在這裡插入圖片描述

                    (2)SSL 握手過程

                    ● ClientHello:客戶端請求建立 SSL 連線,向伺服器提供以下資訊:

                    1)支援的 SSL 協議版本,比如 TLS1.0;

                    2)客戶端生成的隨機數,用於後續對稱加密階段生成對話金鑰;

                    3)支援的加密方法,比如RSA公鑰加密。

                    ● SeverHello:伺服器對客戶端的請求發出迴應,包括以下資訊:

                    1)確認使用的 SSL 協議版本,如果伺服器與客戶端支援的版本不一致,伺服器關閉通訊;

                    2)伺服器生成的隨機數,用於後續對稱加密階段生成對話金鑰;

                    3)確認使用的加密方法,比如 RSA 公鑰加密;

                    4)伺服器證書。(如果伺服器也需要確認客戶端的身份,就會再包含一項資訊,即要求客戶端提供客戶端證書,比如金融機構只允許認證客戶連入自己的網路)

                    ● 客戶端收到伺服器迴應後,驗證伺服器證書的合法性,如果證書非可信機構頒佈、證書已過期等,會提出警告,選擇是否還要繼續通訊。如果證書沒有問題,客戶端就從證書中取出伺服器的公鑰。然後向伺服器傳送三個資訊:

                    1)用公鑰加密的隨機數(pre-master key);

                    2)編碼改變通知,表示隨後的資訊將用雙方商量好的加密方法和金鑰傳送;

                    3)客戶端握手結束通知,這一項同時也是前面傳送的所有內容的 hash 值,用於供伺服器校驗。

                    ● 伺服器的最後迴應,伺服器收到客戶端的 pre-master key 之後,計算生成本次會話所用的會話金鑰,然後向客戶端傳送以下資訊:

                    1)編碼改變通知,表示隨後的資訊將用雙方商量好的加密方法和金鑰傳送;

                    2)伺服器握手結束通知,這一項同時也是前面傳送的所有內容的 hash 值,用於供客戶端校驗。

                    握手階段結束,客戶端和伺服器進入加密通訊階段,就是使用 HTTP 協議,只不過通訊內容都用上面商定的會話金鑰進行了加密。

                    在這裡插入圖片描述

                    (3)非對稱加密和對稱加密

                    1)非對稱加密:用於在 SSL 握手過程中加密生成的密碼。一對多通訊,分為公鑰和私鑰,公鑰加密的資訊只有私鑰能解開(甚至公鑰都不能解密出自己加密的資訊),因此掌握公鑰的不同客戶端之間不能互相解密資訊。常見非對稱加密演算法有 RSA、ECC、DH 等。

                    2)對稱加密:用於加密真正要傳輸的資料。一對一通訊,使用相同的金鑰對資訊進行加密和解密,只有掌握金鑰才能獲取資訊,能夠防止資訊竊聽。常見的對稱加密演算法有 AES-CBC、DES、3DES、AES-GCM 等。不同節點採用的對稱金鑰不同,從而保證了資訊只能由通訊雙方獲取。

                    3)Hash 演算法:用於驗證資料的完整性。雜湊函式特性是單向不可逆,對輸入非常敏感,輸出長度固定,對原始資料的任何修改都會改變雜湊函式的結果,在這裡用於防止資訊篡改並驗證資料的完整性。常見的演算法有 MD5、SHA1、SHA256(Secure Hash Algorithm,安全雜湊演算法)。雜湊函式不能脫離加密進行資訊防篡改,因為明文傳輸時中間人可以修改資訊後重新計算資訊摘要,因此需要對傳輸的資訊及資訊摘要進行加密。

                    6、HTTP 和 HTTPs 區別

                    在這裡插入圖片描述

                    HTTPS 優點:

                    在這裡插入圖片描述

                    HTTPS 缺點:

                    在這裡插入圖片描述

                    7、Web 快取

                    Web快取(Web cache)也叫代理伺服器(proxy server)。

                    在這裡插入圖片描述

                    (1)WEB快取的作用

                    在這裡插入圖片描述

                    (2)工作過程

                    1) 瀏覽器和代理伺服器建立TCP連線,並將HTTP請求傳送到代理伺服器

                    2)代理伺服器見檢查本地已儲存物件複本。如果儲存物件在其中,代理伺服器向瀏覽器傳送HTTP響應報文返回該物件

                    3)如果代理伺服器中沒有該請求物件,代理伺服器和源伺服器建立TCP連線,然後代理伺服器向源伺服器傳送一個目標物件的HTTP請求。源伺服器接到請求後,將請求物件通過HTTP響應傳送給代理伺服器

                    4)代理伺服器收到請求的物件時,在本地建立該物件的副本,然後通HTTP響應將物件傳送給瀏覽器。

                    8、Web 頁面請求過程

                    (1)DHCP 配置主機資訊

                    假設主機最開始沒有 IP 地址以及其它資訊,那麼就需要先使用 DHCP 來獲取。

                    ① 主機生成一個 BTtufRuNsCDHCP 請求報文,並將這個報文放入具有目的埠 67 和源埠 68 的 UDP 報文段中。

                    ② 該報文段則被放入在一個具有廣播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 資料報中。

                    ③ 該資料報則被放置在MAC 幀中,該幀具有目的地址 FF:FF:FF:FF:FF:FF,將廣播到與交換機連線的所有裝置。

                    ④ 連線在交換機的 DHCP 伺服器收到廣播幀之後,不斷地向上分解得到 IP 資料報、UDP 報文段、DHCP 請求報文,之後生成 DHCP ACK 報文,該報文包含以下資訊:IP 地址、DNS 伺服器的 IP 地址、預設閘道器路由器的 IP 地址和子網掩碼。該報文被放入 UDP 報文段中,UDP 報文段有被放入 IP 資料報中,最後放入 MAC 幀中。

                    ⑤ 該幀的目的地址是請求主機的 MAC 地址,因為交換機具有自學習能力,之前主機發送了廣播幀之後就記錄了 MAC 地址到其轉發介面的交換表項,因此現在交換機就可以直接知道應該向哪個介面傳送該幀。

                    ⑥ 主機收到該幀後,不斷分解得到 DHCP 報文。之後就配置它的 IP 地址、子網掩碼和 DNS 伺服器的 IP 地址,並在其 IP 轉發表中安裝預設閘道器。

                    (2)ARP 解析 MAC 地址

                    ①: 主機通過瀏覽器生成一個 TCP 套接字,套接字向 HTTP 伺服器傳送 HTTP 請求。為了生成該套接字,主機需要知道網站的域名對應的 IP 地址。

                    ②: 主機生成一個 DNS 查詢報文,該報文具有 53 號埠,因為 DNS 伺服器的埠號是 53。

                    ③: 該 DNS 查詢報文被放入目的地址為 DNS 伺服器 IP 地址的 IP 資料報中

                    ④: 該 IP 資料報被放入一個乙太網幀中,該幀將傳送到閘道器路由器。

                    ⑤: DHCP 過程只知道閘道器路由器的 IP 地址,為了獲取閘道器路由器的 MAC 地址,需要使用 ARP 協議。

                    ⑥: 主機生成一個包含目的地址為閘道器路由器 IP 地址的 ARP 查詢報文,將該 ARP 查詢報文放入一個具有廣播目的地址(FF:FF:FF:FF:FF:FF)的乙太網幀中,並向交換機發送該乙太網幀,交換機將該幀轉發給所有的連線裝置,包括閘道器路由器。

                    ⑦: 閘道器路由器接收到該幀後,不斷向上分解得到 ARP 報文,發現其中的 IP 地址與其介面的 IP 地址匹配,因此就傳送一個 ARP 回答報文,包含了它的 MAC 地址,發回給主機。

                    (3)DNS 解析域名

                    ①: 知道了閘道器路由器的 MAC 地址之後,就可以繼續 DNS 的解析過程了。

                    ②: 閘道器路由器接收到包含 DNS 查詢報文的乙太網幀後,抽取出 IP 資料報,並根據轉發表決定該 IP 資料報應該轉發的路由器。

                    ③:因為路由器具有內部閘道器協議(RIP、OSPF)和外部閘道器協議(BGP)這兩種路由選擇協議,因此路由表中已經配置了閘道器路由器到達 DNS 伺服器的路由表項。

                    ④: 到達 DNS 伺服器之後,DNS 伺服器抽取出 DNS 查詢報文,並在 DNS 資料庫中查詢待解析的域名。

                    ⑤: 找到 DNS 記錄之後,傳送 DNS 回答報文,將該回答報文放入 UDP 報文段中,然後放入 IP 資料報中,通過路由器反向轉發回閘道器路由器,並經過乙太網交換機到達主機。

                    (4)HTTP 請求頁面

                    ①: 有了 HTTP 伺服器的 IP 地址之後,主機就能夠生成 TCP 套接字,該套接字將用於向 Web 伺服器傳送 HTTP GET 報文。

                    ②: 在生成 TCP 套接字之前,必須先與 HTTP 伺服器進行三次握手來建立連線。生成一個具有目的埠 80 的 TCP SYN 報文段,並向 HTTP 伺服器傳送該報文段。

                    ③: HTTP 伺服器收到該報文段之後,生成 TCP SYN ACK 報文段,發回給主機。

                    ④: 連線建立之後,瀏覽器生成 HTTP GET 報文,並交付給 HTTP 伺服器。

                    ⑤: HTTP 伺服器從 TCP 套接字讀取 HTTP GET 報文,生成一個 HTTP 響應報文,將 Web 頁面內容放入報文主體中,發回給主機。

                    ⑥: 瀏覽器收到 HTTP 響應報文後,抽取出 Web 頁面內容,之後進行渲染,顯示 Web 頁面。

                    四、遠端終端協議 TELNET

                    TELNET 是一個簡單的遠端終端協議,也是網際網路的正式標準。

                    使用者用 TELNET 就可在其所在地通過 TCP 連線註冊(即登入)到遠地的另一個主機上(使用主機名或 IP 地址)。

                    TELNET 能將使用者的擊鍵傳到遠地主機,同時也能將遠地主機的輸出通過 TCP 連線返回到使用者螢幕。

                    這種服務是透明的,因為使用者感覺到好像鍵盤和顯示器是直接連在遠地主機上。

                    客戶/伺服器方式

                    現在由於 PC 的功能越來越強,使用者已較少使用 TELNET 了。TELNET 也使用客戶/伺服器方式。

                    在本地系統執行 TELNET 客戶程序,而在遠地主機則執行 TELNET 伺服器程序。

                    和 FTP 的情況相似,伺服器中的主程序等待新的請求,併產生從屬程序來處理每一個連線。

                    TELNET 使用網路虛擬終端 NVT 格式 。

                    在這裡插入圖片描述

                    網路虛擬終端 NVT 格式

                    客戶軟體把使用者的擊鍵和命令轉換成 NVT 格式,並送交伺服器。

                    伺服器軟體把收到的資料和命令,從 NVT 格式轉換成遠地系統所需的格式。

                    向用戶返資料時,伺服器把遠地系統的格式轉換為 NVT 格式,本地客戶再從 NVT 格式轉換到本地系統所需的格式。

                    五、FTP

                    檔案傳輸協議(FileTransfer Protocol,FTP)屬於 TCP/IP 協議族的應用層協議,其傳輸層使用的是 TCP,基於客戶機/伺服器模式工作,為資料傳輸提供了可靠保證。

                    在這裡插入圖片描述

                    FTP的工作過程

                    其實就是客戶機程式根據使用者需要傳送命令,伺服器程式響應命令的過程。

                    需要建立兩種型別的連線:控制連線和資料連線。

                    • 控制連線傳送客戶機程式發出的命令和伺服器返回的響應資訊
                    • 而資料連線則負責傳輸檔案的內容。

                    在這裡插入圖片描述

                    流程

                    (1)啟動FTP伺服器:

                    由於FTP採用了客戶機/伺服器工作模式,因此在建立FTP會話之前,首先必須啟動FTP伺服器,並使其處於等待客戶機程式的FTP請求狀態。

                    (2)啟動FTP客戶機程式並建立控制連線:

                    啟動FTP客戶機程式,並向FTP伺服器的21埠(控制連線埠)發出主動連線的請求,以期獲得FTP伺服器的相應許可權。伺服器響應請求後便在使用者協議直譯器和伺服器協議直譯器之間建立了一條TCP連線。

                    (3)建立資料連線並進行檔案傳輸:

                    使用者通過客戶機程式輸入FTP命令,伺服器接收命令。如果命令正確且需要進行檔案傳輸,伺服器使用TCP20埠在雙方之間建立另一條TCP連線,即資料連線,並通過該連線進行檔案傳輸。當本次命令的檔案傳輸完畢,關閉該資料連線。

                    (4)關閉FTP:

                    使用者執行完其所需的FTP命令後,發出退出FTP命令,控制連線關閉,本次FTP服務結束。

                    常見的命令下:

                    在這裡插入圖片描述

                    六、電子郵件傳輸協議

                    一個電子郵件系統由三部分組成:

                    使用者代理、郵件伺服器以及郵件協議。

                    在這裡插入圖片描述

                    需要傳送者郵件代理、傳送者郵件伺服器、接收者郵件伺服器,接收者代理4個程式的參與。

                    ● 郵件服務代理(郵件伺服器)MTA:郵件服務代理通常是計算機系統中的一個程序,負責把郵件從源端傳輸到目的端。

                    ● 使用者代理:使用者代理就是我們平時見到的Gmail,QQ郵箱之類的,其中有檢視郵件等功能。

                    ● 郵件傳輸過程:使用者編寫郵件後會存放在郵件伺服器,傳送時根據目的郵箱地址從DNS查詢對方的郵件伺服器地址併發送,目的郵件伺服器將郵件儲存 。

                    郵件協議包含傳送協議和讀取協議,傳送協議常用 SMTP,讀取協議常用 POP3 和 IMAP。

                    電子郵件格式:

                    在這裡插入圖片描述

                    1、SMTP(Simple Mail Transfer Protocol)

                    簡單郵件傳輸協議SMTP(下層協議TCP,埠25):一般用於傳送郵件即由使用者代理髮送到郵件伺服器,或郵件伺服器到達目的郵件伺服器。 SMTP 是建立在傳輸層協議 TCP 上的可靠高效的郵件傳輸協議,採用請求/應答方式來實現。整個工作過程包括連線建立、郵件傳送和連線釋放3個階段。

                    (1)連線建立:SMTP是基於客戶機/伺服器模式工作的,郵件伺服器在TCP的25埠守候客戶機的請求。當需要傳送郵件時,傳送主機的SMTP客戶機向連線主機的SMTP伺服器的TCP埠25發出建立連線請求,得到伺服器確認後連線建立。此後,SMTP客戶機再次向SMTP伺服器傳送HELO命令,並附上傳送方主機名以確認SMTP伺服器是否已經準備好接收郵件。如果SMTP伺服器應答“250 XXXX”表示已準備好接收郵件。(2)郵件傳送:SMTP客戶機得到SMTP伺服器的肯定回答後,隨即可利用MAIL命令告訴SMTP伺服器新的郵件傳送操作已經開始。如果SMTP伺服器已經準備好接收郵件,則以250應答程式碼應答。其後SMTP客戶機可以用RCPT命令傳送郵件接收者的目的地址,以便SMTP伺服器把郵件內容最終傳送到收件人的郵箱中。如果命令被接收,則返回250應答碼。然後SMTP客戶機可利用DATA命令告訴SMTP伺服器下面將要傳送郵件內容。如果命令被接收,則SMTP伺服器以354應答碼應答,並認定以下的各行都是郵件內容。傳送完畢後,再發送

                    2、POP3

                    郵局協議版本3POP3協議(下層協議TCP,埠110)用於由郵件伺服器接收郵件到使用者代理端。

                    (1)只要使用者從伺服器上讀取了郵件,就把該郵件刪除,但是目前改進的 POP3 已經全面支援下載而不刪除原郵件。

                    (2)無論你在客戶端做了任何操作(如移動、標記),都不會反映到伺服器上,也就是隻能單方面地從伺服器“讀取”。POP3協議所用的是110埠。

                    3、IMAP

                    互動郵件訪問協議IMAP協議(下層協議TCP,埠143)用於由郵件伺服器接收郵件到使用者代理端。

                    IMAP 協議中客戶端和伺服器上的郵件保持同步,如果不手動刪除郵件,那麼伺服器上的郵件也不會被自動刪除。

                    IMAP 這種做法可以讓使用者隨時隨地去訪問伺服器上的郵件。

                    同時它與 POP3 的本質區別在於,在客戶端的操作(包括刪除)都會反映到伺服器上,是一個雙向的通訊。

                    七、Socket

                    TCP下的socket

                    處於應用層和運輸層之間,給出了一個介面,可以使用TCP協議進行通訊。

                    在這裡插入圖片描述

                    TCP 下 socket 流程:

                    在這裡插入圖片描述

                    到此這篇關於詳細講解計算機網路——應用層的文章就介紹到這了,更多相關計算機網路應用層內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!