網絡協議就是網絡中(包括網際網路)傳遞、管理信息的一些規範。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為網絡協議。
沒有網絡協議的網際網路是混亂的,就和人類社會一樣。人不能想怎麼樣就怎麼樣,你的行為約束是受到法律的約束的;那麼網際網路中的端系統也不能自己想發什麼發什麼,也是需要受到通信協議約束的。
到底什麼是 HTTP?
百度百科的名詞解釋如下:HTTP是網際網路上應用最為廣泛的一種網絡協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文本到本地瀏覽器的傳輸協議。
一句話概括,就是一個在計算機裡專門在兩點之間傳輸各種文字、圖片、視頻、音頻等超文本數據的規範。
在網際網路中,任何協議都不會單獨的完成信息交換,HTTP 也一樣。雖然HTTP屬於應用層的協議,但是它仍然需要其他層次協議的配合完成信息的交換,那麼在完成一次HTTP請求和響應的過程中,需要哪些協議的配合呢?
TCP/IP
TCP/IP 協議你一定聽過,TCP/IP 我們一般稱之為協議簇,什麼意思呢?就是 TCP/IP 協議簇中不僅僅只有 TCP 協議和 IP 協議,它是一系列網絡通信協議的統稱。而其中最核心的兩個協議就是 TCP / IP 協議,其他的還有 UDP、ICMP、ARP 等等,共同構成了一個複雜但有層次的協議棧。
TCP 協議的全稱是Transmission Control Protocol的縮寫,意思是傳輸控制協議,HTTP使用 TCP 作為通信協議,這是因為 TCP 是一種可靠的協議,而可靠能保證數據不丟失。
IP 協議的全稱是 Internet Protocol 的縮寫,它主要解決的是通信雙方尋址的問題。IP協議使用 IP 地址 來標識網際網路上的每一臺計算機,可以把 IP 地址想像成為你手機的電話號碼,你要與他人通話必須先要知道他人的手機號碼,計算機網絡中信息交換必須先要知道對方的 IP 地址。(關於 TCP 和 IP 更多的討論我們會在後面詳解)
URI / URL
你可以通過輸入www.baidu.com來訪問網盾的官網,那麼這個地址有什麼規定嗎?我怎麼輸都可以?qqq.baidu.com 是不是也行?
答案是:當然不行,你輸入的地址格式必須要滿足URI的規範。
URI(Uniform Resource Identifier)全稱為統一資源標識符,使用它就能夠把網站綁定的IP標記成網際網路上能夠通過這個域名訪問的唯一頁面。
URL(Uniform Resource Locator)翻譯過來是統一資源定位符,也就是我們俗稱的網址,它實際上是URI的一個子集。
URI 不僅包括URL,還包括URN(統一資源名稱)。
DNS
你有沒有想過為什麼你可以通過鍵入https://www.baidu.com/就能夠獲取百度官網界面?我們上面說到,計算機網絡中的每個端系統都有一個IP位址存在,而把IP位址轉換為便於人類記憶的協議就是DNS協議。
DNS 的全稱是域名系統(Domain Name System,縮寫:DNS),它作為將域名和IP位址相互映射的一個分布式資料庫,能夠使人更方便地訪問網際網路。
網絡模型
網絡由各種各樣的協議組成,這些協議以分層的方式組織協議,每個協議屬於一層模型,每一層中的協議稱為協議棧(protocol stack)。網際網路的協議棧由五個部分組成:應用層、網絡層、鏈路層、物理層和傳輸層。
應用層
應用層是網絡應用程式和網絡協議存放的分層,網際網路的應用層包括許多協議,例如電子郵件傳送協議SMTP、域名解析DNS協議、端系統文件上傳協議FTP以及本文關鍵詞HTTP。應用層協議分布在多個端系統上,一個端系統應用程式與另一個端系統應用程式交換信息分組,我們把位於應用層的信息分組稱為報文。
網際網路的運輸層在應用程式斷點之間傳送應用程式報文,在這一層主要有兩種傳輸協議UDP與TCP,利用二者中的任何一個都能夠傳輸報文,但這兩種協議有著顯而易見的不同。
UDP協議一般發送數據包之後,不會像一位可靠的客服那樣耐心等待並確認報文是否到達。它不具有可靠性,也缺乏流量控制,當然也不會有擁塞控制。
TCP協議在發送數據包之後,能夠控制並確認報文是否到達,會提供擁塞機制來控制網絡傳輸。因此,當網絡擁塞時,TCP會放緩其傳輸速度。
網絡層
網絡層主要負責將數據報從一臺主機轉移至另一臺主機。網絡層一個非常重要的協議叫作IP協議,所有具備網絡層的網際網路組件都必須執行IP協議。IP協議是一種網際協議,除了IP協議之外,網絡層還包括一些其他路由選擇協議跟網際協議,一般把網絡層就喊作IP層。
數據鏈路層
現在我們有應用程式通信的協議,有了給應用程式提供運輸的協議,還有了用於約定發送位置的IP協議,如何才能真正的發送數據呢?為了將分組從一個節點(主機或路由器)運輸到另一個節點,網絡層必須依靠數據鏈路層提供服務。數據鏈路層包括電纜接入的DOCSIS協議、WIFI以及乙太網,因為數據從源目的傳送通常需要經過幾條鏈路,一個數據包可能被沿途不同的數據鏈路層協議處理,數據鏈路層的分組就是我們現在口中的幀(frame)。
物理層
物理層是將幀中的一個個bite從一個節點運輸到另一個節點,物理層的協議仍然使用鏈路層協議,實際的物理傳輸介質和這些協議有關,例如乙太網有很多物理層協議:同軸電纜、雙絞銅線與光纖等等。
傳輸層
傳輸層在應用程式斷點之間傳送應用程式報文,在這一層主要有兩種傳輸協議UDP與TCP,利用二者中的任何一個都能夠傳輸報文,但這兩種協議有著顯而易見的不同。
OSI模型
上述協議模型並不是唯一的協議棧。
ISO提出,應該在模型基礎上增加會話層和表示層,按照七層建立模型。會話層提供數據交換的定界跟同步功能,包括恢復方案跟建立檢查點;表示層是壓縮數據與加密數據,數據描述似的應用程式不用擔心計算機內部存儲格式的問題。
HTTP請求響應過程
假設我們訪問的URL地址為http://www.baidu.com/s?wd=%E7%BD%91%E7%9B%BE%E7%A7%91%E6%8A%80&rsv_spt=1&rsv_iqid=0xe2cf087a0000f8c7&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=,輸入網址回車後,瀏覽器會進行如下操作:
一、DNS伺服器映射域名後找到訪問百度所在的地址,然後HTTP客戶端進程在80埠發起一個到伺服器百度的TCP連接(80埠是HTTP的默認埠)。在伺服器進程中有一個套接字與其相連。
二、HTTP伺服器通過它的套接字接受該報文,進行請求解析工作,並從磁碟或RAM中檢索出對象http://www.baidu.com/s?wd=%E7%BD%91%E7%9B%BE%E7%A7%91%E6%8A%80&rsv_spt=1&rsv_iqid=0xe2cf087a0000f8c7&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=,然後把檢索出來的對象進行封裝,封裝到HTTP響應報文,並通過套接字向客戶進行發送。
三、在客戶接受並響應報文後斷開TCP連接。
四、TCP連接關閉後,客戶端從響應中提取報文中一個叫HTML的響應文件,並檢查該HTML文件,最後循環檢查報文中其他內部對象。
五、HTTP客戶端用頁面形式反應給用戶。
上述過程描述的是一種簡單的請求-響應全過程,真實的請求-響應情況可能要比上面描述的過程複雜很多。