HTTP相關知識回顧

1、網絡模型

1.1 OSI七層網絡模型

  • 物理層、數據鏈路層(MAC定位)、網絡層(IP地址定義子網)、傳輸層(TCP/UDP)、會話層、表示層、應用層

1.2 TCP/IP四層網絡模型

  • 鏈路層、網絡層、傳輸層、應用層

鏈路層:將網絡層的數據封裝成以太網幀,包含源MAC地址與目標MAC地址,以太網採取廣播的方式,將數據包發給子網內的所有主機,覈對MAC地址,如果成功則接受數據,否則丟棄。
網絡層:劃分子網(IP協議),尋找目的主機(ARP協議),不同子網數據傳輸(路由協議)。

  • IP協議:IPV4劃分子網,網絡地址與子網掩碼與運算得到網絡地址,網絡地址判斷是否在同一個子網內。
  • ARP協議:源主機廣播一個數據包,子網內的所有主機判斷IP地址是否匹配,如果匹配,返回自己的MAC地址,並放入ARP緩存。
  • 路由協議:若在一個子網內通過ARP協議未找到主機,則通過路由協議,在與之相鄰的子網內尋找。

傳輸層:定義端口,標識應用程序身份,實現端口到端口的通信,TCP協議可以保證數據傳輸的可靠性。
TCP(面向連接、可靠)、UDP(速度快,效率高)

  • Tcp引入三次握手與四次揮手,做連接的建立與斷開。
  • 三次握手:client發送seq = x(序列號)與SYN(請求建立連接包),之後客戶端進入SYN-SENT狀態,server收到客戶端的連接建立請求後,返回SYN=1,ack= x+1,同時返回seq = y,ACK=1,服務端進入SYN-RCVD。(其中SYN = 1表示建立連接,ACK=1的條件下才表示ack = x+1有效),客戶端收到服務端返回的數據後,返回ACK=1,ack=y+1,seq=x+1。客戶端進入ESTAB-LISHED,服務端收到客戶端的響應包後,也進入ESTAB-LISHED狀態。第一二次握手:客戶端確認建立連接,第二三次握手:服務端確認建立連接。
  • 四次揮手:第一次揮手:客戶端發送FIN=1,seq=u,表示客戶端沒有數據再傳給服務端,客戶端進入FIN-WAIT-1狀態,服務端收到數據後,由於可能還有數據要傳給客戶端,不能結束連接,所以只返回一個應答包給客戶端,表示收到客戶端的斷開連接請求。第二次揮手:server返回ACK=1,ack=u+1,seq=m,表示收到請求包,服務端進入:CLOSE-WAIT狀態,當客戶端收到響應包後進入:FIN-WAIT-2狀態,之後,服務端繼續將未傳完的數據傳給客戶端。傳完之後。第三次揮手:server返回FIN=1,ACK=1,seq=w,ack=u+1,服務端進入:LAST_ACK狀態,客戶端接受響應。第四次揮手:客戶端發送ACK=1,ack=w+1,seq=u+1。客戶端進入TIME-WAIT狀態,服務端接收到數據後斷開連接,客戶端經過2MSL後斷開(客戶端防止最後一個應答包響應失敗)。由於TCP全雙工模式,所以斷開連接時:第一二次揮手客戶端確認沒有數據傳送給服務端。但是要讓服務端把數據響應完,第三四次揮手,服務端確保沒有數據響應,並確保服務端斷開連接成功。
  • TCP協議通過滑動窗口和擁塞控制來控制傳輸速率。
    滑動窗口:接收方告訴發送發自己的窗口大小,從而控制發送方的發送速度。發送方發送1-8這些字節給接收方,接收方響應ACK表示要傳第幾個字節,同時返回接收方窗口大小n,表示,發送方下次傳數據不能超過的範圍。ACK序號之前的字節表示都已經響應過,則滑動窗口右移。
    擁塞控制:慢開始、擁塞避免、快重傳、快恢復。慢開始:從1開始,每次擴大兩倍。擁塞避免:超過慢開始門限後每次+1,發生超時響應,門限減半,傳輸速度從1開始。
    快重傳:接收到失序的報文段後立即發出重複確認,當連續收到三個重複確認時,慢開始門限減半,傳輸速度=慢開始門限進行傳輸。

應用層:定義各種各樣的協議來規範數據格式,常見HTTP(超文本)、FTP(文件)、SMTP(簡單郵件)

2、HTTP協議

2.1 HTTP協議簡介

  • HTTP協議(超文本傳輸協議),基於TCP/IP通信協議來傳遞數據,在這之上可以封裝HTTPS,HTTP協議目前包含1.0、1.1、2.0版本。

2.2 HTTP協議特點

  • 快速簡單,通過請求方法(get、post、head)+路徑即可與服務器通信。
  • 靈活:允許傳輸任意對象,Content-Type用來標記當前傳輸的對象,Accept表示能接收的對象。
  • 無狀態:沒有事物處理記憶能力,後序請求需要前面的信息,則必須重傳。

2.3 HTTP報文結構

請求報文:

  • 請求行:請求方法+請求URI+空格+HTTP版本+回車
  • 請求頭:如accept:xx,cache-control:xx,content-type:xx。
  • 請求體:可不傳

響應報文:

  • 響應行:報文版本,狀態碼和描述
  • 響應頭:多個屬性組成
  • 響應體:可不傳

2.4 HTTP各個版本區別

HTTP1.0
1、Content-Type:聲明自己傳遞數據的類型。
2、Accept:聲明自己接受數據的類型。
3、Content-Encoding:數據壓縮算法。
4、Accept-Encoding:自己接受那些壓縮算法。
HTTP1.1
1、Connection:keep-alive:持久連接
2、管道機制:一個TCP連接裏,可以發多個請求,按請求順序返回。
3、Content-Length:指定回傳的數據包大小,不同請求做區分。
4、新增:PUT、OPTIONS、DELETE、PATCH、HEAD方法。
5、HOST:將請求發往同一臺服務器的不同網站,虛擬主機。
HTTP2.0
1、多工:在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或迴應,而且不用按照順序一一對應,這樣就避免了"隊頭堵塞"。
2、數據流:標記數據流ID,區分屬於哪一個數據流。
3、頭信息壓縮:頭信息使用gzip或compress壓縮後再發送,客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,以後就不發送同樣字段了,只發送索引號。
4、 服務器推送:server可以向client推送數據,比如訪問HTML,推回對應的CSS與JS。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章