HTTP概況:
// 超文本傳輸協議(HyperText Transfer Protocol,HTTP):是Web的應用層協議,它是Web的核心.
// 客戶端和服務器運行在不同的端系統中,通過交換HTTP報文進行會話
// HTTP定義了這些報文的結構以及客戶和服務器進行報文交換的方式
// HTTP定義了Web客戶向Web服務器請求Web頁面的方式,以及服務器向客戶傳送Web頁面的方式
Web術語:
// Web頁面(Web page)(也叫文檔)是由對象組成.
// 一個對象只是一個文件,諸如:一個HTML文件、一個JPEG圖形、一個Java小程序,這些對象可以通過一個URL地址尋找
// 多數Web頁面含有一個HTML基本文件以及多個引用對象
// URL的組成:存放對象的主機名和對象的路徑名
用戶請求一個Web頁面:
// 當用戶請求一個Web頁面時(如:輸入url,回車)
// 瀏覽器向服務器發出對該頁面中所包含對象的HTTP請求,服務器收到請求并用包含這些對象的HTTP相應報文進行相應
// HTTP使用TCP作為它的支撐運輸協議
// HTTP客戶首先發起一個與服務器的TCP連接
// 一旦建立連接,該瀏覽器和服務器進程就可以通過套接字接口訪問TCP
// 客戶端的套接字接口是客戶進程與TCP連接之間的門
// 客戶向它的套接字接口發送HTTP請求并從它的套接字接口接收HTTP響應報文
整體來說:就是當客戶鍵入url時:
- DNS根據輸入的URL得到對應的ip地址,并獲得端口號
- 建立TCP連接(3次握手)
- 建立成功后,http生成請求報文通過套接字將請求報文托付給TCP
- 服務器端處理請求,并發送響應
- 瀏覽器接收到響應后展示對應的資源
TCP的三次握手:
// TCP被稱為面向連接的,這是因為在一個應用進程可以開始向另一個應用進程發送數據之前,這兩個進程必須先相互"握手"
// syn(synchronize sequence numbers):同步序列號,ack確認號(需要確認的下一個syn),
// 第一次:請求方發出一個syn = i,
// 第二次:服務方收到syn=i, 返回一個ack = i+1, syn =j 的分組
// 第三次:請求方收到ack = i+1, syn =j的分組,發送一個ack=j+1 ,完成握手
參考《計算機網絡-自頂向下方法》(原書第6版)P65~P66