1. 程式人生 > >HTTP與HTTPS要點詳解

HTTP與HTTPS要點詳解

http qa

OSI(Open System Interconnect)開放式系統互聯模型

OSI參考模型:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層

  • 應用層:應用層為應用程序提供訪問網絡服務的接口,為用戶直接提供各種網絡服務。常見應用層的網絡服務協議有:HTTP,HTTPS,FTP,POP3、SMTP等。
  • 表示層:提供各種用於應用層數據的編碼和轉換功能,確保一個系統的應用層發送的數據能被另一個系統的應用層識別
  • 會話層:負責建立、管理和終止表示層實體之間的通信會話。
  • 傳輸層:為上層協議提供端到端的可靠或者不可靠的數據傳輸服務。傳輸單位為數據段segment;協議有:TCP、UDP
  • 網絡層:通過IP尋址來建立兩個節點之間的連接(解決網絡路由和尋址問題)。協議有: IP、ARP、ICMP,傳輸單位是數據包packet
  • 數據鏈路層:接受來自物理層的位流形式的數據,並封裝成幀,傳送到上一層;同樣,也將來自上一層的數據幀,拆裝為位流形式的數據轉發到物理層;並且還負責處理接受端發回的確認幀的信息,以便提供可靠的數據傳輸。(傳輸單位為幀frame)MAC屬於本層
  • 物理層:利用傳輸介質為數據鏈路層提供物理連接,實現相鄰計算機節點之間比特流的透明傳輸,盡可能屏蔽掉具體傳輸介質與物理設備的差異。網卡、集線器在物理層(數據傳輸單位bit)

協議棧

協議棧(Protocol Stack)是指網絡中各層協議的總和

路由器

是連接因特網中各局域網、廣域網的設備,它會根據信道的情況自動選擇和設定路由,以最佳路徑,按前後順序發送信號。

路由器有兩個部分組成,WAN和LAN,WAN是用來撥號的,是讓路由自身能上網的一個部分,LAN是用來局域網內交換數據的,跟交換機的作用一樣,我們的電腦插在LAN口才能上網
路由內置DHCP服務器,可以為使用路由的電腦自動分配IP

路由器在網絡層

交換機

是一種用於電(光)信號轉發的網絡設備。作用可以簡單的理解為將一些機器連接起來組成一個局域網。它可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。

他只有LAN,沒有WAN

把網線插進交換機的任意接口,把電腦1插進交換機的任意接口,把電腦2插進交換機的任意接口,這樣兩臺電腦都需要撥號才能上網,以此看來交換機是用來數據交換的

交換機在數據鏈路層(也有多層交換機:數據鏈路層+ 部分網絡層)

把光纖轉換成直接能插在電腦上的網線

TCP/IP模型

應用層(OSI模型的會話層和表示層合並到應用層中)

傳輸層

網際互聯層(對應於OSI參考模型的網絡層)也經常成為IP層

網絡接入層或者主機到網絡層(OSI參考模型中的物理層和數據鏈路層相對應)

  • IP層中包含網際控制報文協議(ICMP:Internet Control Message Protocol)和地址解析協議ARP,實際上他們並不是IP層的一部分,但直接同IP層一起工作。ICMP用於傳遞差錯信息、時間、回顯、網絡信息等報文控制數據 。ARP處於IP和數據鏈路層之間,它是在32位IP地址和48位局域網地址之間執行翻譯的協議

  • 以太網數據格式:

    以太網用48bit(6字節)來表示原地址和目的地址。這裏的源地址和目的地址指的是硬件地址,例如網卡的MAC地址。

    在地址後面是兩個字節的表示類型的字段,例如0800表示幀的數據為IP數據,0806表示此幀為ARP請求

    類型字段之後的數據,對於以太網,規定數據段的大小範圍是46個字節到1500個字節,不足的數據要用空字符填滿。例如ARP協議的數據格式為28個字節,為了符合規範,其後有18個字節的占位符用於滿足最少46字符的要求

    數據段的長度有一個最大值,以太網為1500,這個特性為MTU,即最大傳輸單元。如果IP層有一個要傳送的數據長度比MTU大,在IP層數據要進行分片,使得每個片都小於MTU

    CRC字段用於對幀內數據進行校驗,保證數據傳輸的正確性,通常由硬件實現,例如網卡設備中實現網絡數據的CRC校驗

    以太網的頭部14字節的特點在某些平臺的實現上會造成效率上的問題,例如4字節對齊的平臺,在取得IP數據的時候通常會重新復制一次

ARP地址解析協議

ARP(Address Resolution Protocol,地址解析協議)是一個位於TCP/IP協議棧中的網絡層,負責將某個IP地址解析成對應的MAC物理地址。

在以太網為基礎的局域網中,每個網絡接口都有一個硬件地址,這是一個48bit的值,標識不同的以太網設備,在局域網中的必須知道網絡設備硬件地址才能向目的主機發送數據,而在網際網中數據傳輸的目的地址是IP地址,數據要能夠正常地傳輸,必須建立IP地址和硬件地址的映射記錄,

32位IP地址到48位硬件地址映射的ARP協議

IP(網際協議)

IP層的主要目的是提供子網的互聯,形成較大的網絡,使不同的子網之間能傳輸數據。

IP層的主要作用:

  • 數據傳送:將數據從一個主機傳輸到另一個主機
  • 尋址:根據子網劃分和IP地址,發現正確的目的主機地址
  • 路由選擇:選擇數據在互聯網上的傳輸路徑
  • 數據報文的分段:當傳輸的數據大於MTU時候,將數據進行分段發送和接收並組裝。

IPV4的IP地址32位,由四組十進制數組成,每組數值範圍0-255,中間.分隔,
一個IP地址由IP地址類型、網絡ID、主機ID組成
網絡類型標識符標識本IP地址所屬的類型
網絡ID標識IP標識設備或主機所在的網絡
主機ID標識網絡上的工作站、服務器或者路由選擇器。

主機ID全為0的地址表示某個網絡的網絡地址
主機ID全為1的地址表示廣播地址
IP全為0的地址表示主機本身,發往此IP地址的數據分組由本機接收
IP全為1的地址表示有限廣播地址
IP地址127.0.0.1是特殊的回環地址,一般用於本地測試使用

IP協議是用於將多個包交換網絡連接起來的,它在源地址和目的地址之間傳送一種稱之為數據包的東西,它還提供對數據大小的重新組裝功能,以適應不同網絡對包大小的要求。

網絡層IP提供的是一種不可靠的服務。它只是盡可能快地把分組從源節點送到目的節點,但不提供任何可靠性的保證。

網絡控制報文協議(ICMP)

用於傳送差錯信息、時間、回顯、網絡信息等報文控制數據,常用來檢測網絡通不通,主機是否可達,路由器是否可用。

ICMP協議可分為兩大類,一是查詢報文,一是差錯報文。

UDP協議

UDP:user data protocol 用戶數據報文協議---一個不可靠的、無連接協議;適用於不怕數據丟失、不需要對報文進行排序、流量控制的場景

UDP協議不保證數據報文傳輸的順序、不保證數據準確到達
UDP協議相比較於TCP協議執行速度比TCP快得多,因為UDP協議簡單得多,對系統造成的負載低

應用場景:流媒體的傳輸、域名服務器、嵌入式機頂盒系統

TCP協議

TCP:transmission control protocol 傳輸控制協議---在不可靠的ip層上,提供了一個可靠的、面向連接的、流控的傳輸層協議,為了提供這種可靠的服務,TCP采用了超時重傳、滑動窗口、發送和接收端到端的確認分組等機制,保證接收端能接收到發送端的所有包,並順序與發出順序一致。

滑動窗口:接收方通過通告發送方自己的窗口大小,從而控制發送方的發送速度,從而達到防止發送方發送速度過快而導致自己被淹沒的目的。

TCP特點:

  • 面向連接的服務:在數據進行傳輸之前,需要先建立連接,之後TCP報文在此連接的基礎上進行傳輸
  • 可靠傳輸服務:基於校驗和應答重發機制保證傳輸的可靠性
  • 緩沖傳輸:可以延遲傳送應用層的數據,允許將應用程序需要傳送的數據積攢到一定數量才進行集中發送
  • 全雙工傳輸:以全雙工的方式進行數據流交換
  • 流控傳輸:通過滑動窗口機制,支持主機間的端到端的流量控制
  • 字節流的服務:基於字節流的服務沒有字節序問題的困擾
三次握手

技術分享圖片

  • 起始狀態客戶端A和服務端B都處於CLOSED狀態
  • 服務端B創建TCB,處於LISTEN狀態,等待客戶端A的請求
  • 客戶端A創建TCB,發送連接請求(SYN = 1,seq = x)報文,進入SYN-SENT狀態
  • 服務端B收到連接請求,向客戶端A發送確認(SYN=ACK=1,確認號ack=x+1,初始序列號seq=y)回復ACK報文,進入SYN-RCVD狀態
  • 客戶端A收到服務端B的確認後,給服務端B發出確認(ACK=1,ack=y+1,seq=x+1),A進入ESTABLISHED狀態
  • 服務端B收到客戶端A的確認後,進入ESTABLISHED狀態
四次揮手

技術分享圖片

  • 初始狀態客戶端A和服務端B都處於ESTABLISHED狀態
  • 客戶端A的向服務器端發送連接釋放報文(FIN=1,序列號seq=u),並停止再發送數據,主動關閉TCP連接,進入FIN-WAIT-1(終止等待1)狀態,等待服務器端B的確認
  • 服務器端B收到連接釋放報文段後即發出確認報文段,(ACK=1,確認號ack=u+1,序號seq=v),服務器端進入CLOSE-WAIT(等待關閉狀態),此時TCP處於半關閉狀態,客戶端A到服務器端B的連接釋放
  • 客戶端A收到服務器端B的確認後,進入FIN_WAIT-2(終止等待2)狀態,等待服務器端B發出連接釋放報文段
  • 服務端B沒有要向客戶端A發出的數據,服務器端B發出連接釋放報文段(FIN=1,ACK=1,序列號seq=w,確認號ack=u+1),服務器端進入LAST-ACK(最後確認)狀態,等待客戶端A的確認
  • 客戶端A收到服務端B的連接釋放報文後,對此發出確認報文段(ACK=1,seq=u+1,ack=w+1),客戶端A進入TIME-WAIT(時間等待)狀態。此時TCP未釋放,需要經過時間等待計時器設置的時間2MSL後,A才進入CLOSED狀態。

https://www.cnblogs.com/Andya/p/7272462.html

為什麽TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?

答:雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網絡是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。

Server端易受到SYN攻擊

服務器端的資源分配是在二次握手時分配的,而客戶端的資源是在完成三次握手時分配的,所以服務器容易受到SYN洪泛攻擊,SYN攻擊就是Client在短時間內偽造大量不存在的IP地址,並向Server不斷地發送SYN包,Server則回復確認包,並等待Client確認,由於源地址不存在,因此Server需要不斷重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,導致正常的SYN請求因為隊列滿而被丟棄,從而引起網絡擁塞甚至系統癱瘓。

防範SYN攻擊措施:降低主機的等待時間使主機盡快的釋放半連接的占用,短時間受到某IP的重復SYN則丟棄後續請求。

TCB傳輸控制塊Transmission Control Block,存儲每一個連接中的重要信息,如TCP連接表,到發送和接收緩存的指針,到重傳隊列的指針,當前的發送和接收序號。

SYN=1的報文段不能攜帶數據

什麽是HTTP

HTTP協議是Hyper Text Transger Protocal(超文本傳輸協議)的縮寫
用於從萬維網(www:World Wide Web)服務器傳輸超文本到客戶端的傳輸協議
HTTP是一個 基於TCP/IP通信協議來傳遞數據,默認HTTP的端口號為80
HTTP是一個屬於應用層協議
由請求和響應構成,是一個標準的客戶端服務器模型
HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記
HTTP是一個無狀態的協議,無狀態是指協議對於事務處理沒有記憶能力

HTTP傳輸面臨的風險

竊聽風險:黑客可以獲取通信內容。
篡改風險:黑客可以修改通信內容。
冒充風險:黑客可以冒充他人身份參與通信

什麽是SSL/TLS

SSL是Secure Sockets Layer的縮寫,中文叫做“安全套接層”
TLS是Transport Layer Security”的縮寫,中文叫做“傳輸層安全協議”
SSL是指安全套接層協議(以及傳輸層協議TLS),位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。

什麽是HTTPS

HTTPS 協議(HyperText Transfer Protocol over Secure Socket Layer) 還是要基於 TCP 來傳輸(所謂的“HTTP over SSL”,實際上是在原有的 HTTP 數據外面加了一層 SSL 的封裝。HTTP 協議原有的 GET、POST 之類的機制,基本上原封不動)
HTTPS協議承載於TLS或SSL協議層之上,HTTPS的端口號為443

技術分享圖片

HTTPS特點

保密性(防泄密-有信息都是加密傳播,黑客無法竊聽)、完整性(防篡改-具有校驗機制,一旦被篡改,通信雙方會立刻發現)、真實性(防假冒-配備×××書,防止身份被冒充)
技術分享圖片

  1. 防流量劫持
    全站Https是根治運營商、中間人流量劫持的解決方案,不僅可以杜絕網頁中被插入的小廣告,更可以保護用戶隱私安全。
  2. 提升搜索排名
    采用Https可以幫忙搜索排名的提升,提高站點的可信度和品牌形象。
  3. 杜絕釣魚網站
    Https地址欄綠×××標可以幫助用戶識別出釣魚網站,保障用戶和企業的利益不受損害,增強用戶信任。

HTTP與TCP之間的關系

HTTP協議通常承載於TCP協議之上; HTTP的長連接和短連接本質上是TCP長連接和短連接。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網絡層使用IP協議。 IP協議主要解決網絡路由和尋址問題,TCP協議主要解決如何在IP層之上可靠地傳遞數據包,使得網絡上接收端收到發送端所發出的所有包,並且順序與發送順序一致。TCP協議是可靠的、面向連接的。

網絡層: IP協議/ARP協議
傳輸層:TCP/UDP協議
應用層:HTTP協議

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。

主機 A 的應用程序要能和主機 B 的應用程序通信,必須通過 Socket 建立連接,而建立 Socket 連接必須需要底層 TCP/IP 協議來建立 TCP 連接。建立 TCP 連接需要底層 IP 協議來尋址網絡中的主機。我們知道網絡層使用的 IP 協議可以幫助我們根據 IP 地址來找到目標主機,但是一臺主機上可能運行著多個應用程序,如何才能與指定的應用程序通信就要通過 TCP 或 UPD 的地址也就是端口號來指定。

技術分享圖片

長連接和短連接

HTTP 對 TCP 連接的使用,分為兩種方式:俗稱“短連接”和“長連接”(“Keep-Alive”或“Persistent Connection”)
長連接:當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。
使用長連接的HTTP協議,會在響應頭加入這行代碼:Connection:keep-alive
如果HTTP1.1版本的HTTP請求報文不希望使用長連接,則要在HTTP請求報文首部加上Connection: close。
TCP的保活功能主要為服務器應用提供,試圖在服務端器端檢測到半開放的連接,並根據響應決定是否關閉連接

短連接:客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。雙方任意都可以發起close操作,不過一般都是client先發起close操作。

短連接的優點是:管理起來比較簡單,存在的連接都是有用的連接,不需要額外的控制手段。

短連接的操作步驟

建立連接——數據傳輸——關閉連接...建立連接——數據傳輸——關閉連接
長連接的操作步驟是:
建立連接——數據傳輸...(保持連接)...數據傳輸——關閉連接

長連接和短連接優缺點

長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。對於頻繁請求資源的客戶來說,較適用長連接。不過這裏存在一個問題,存活功能的探測周期太長,還有就是它只是探測TCP連接的存活,屬於比較斯文的做法,遇到惡意的連接時,保活功能就不夠使了。在長連接的應用場景下,client端一般不會主動關閉它們之間的連接,Client與server之間的連接如果一直不關閉的話,會存在一個問題,隨著客戶端連接越來越多,server早晚有扛不住的時候,這時候server端需要采取一些策略,如關閉一些長時間沒有讀寫事件發生的連接,這樣可 以避免一些惡意連接導致server端服務受損;如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連接數,這樣可以完全避免某個蛋疼的客戶端連累後端服務。

短連接對於服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬。

長連接和短連接的產生在於client和server采取的關閉策略,具體的應用場景采用具體的策略,沒有十全十美的選擇,只有合適的選擇。

長連接的數據傳輸完成識別

判斷傳輸數據是否達到了Content-Length指示的大小;
動態生成的文件沒有Content-Length,它是分塊傳輸(chunked),這時候就要根據chunked編碼來判斷,chunked編碼的數據在最後有一個空chunked塊,表明本次傳輸數據結束。

長連接的過期時間

  keepalive_timeout 20; --長連接timeout
keepalive_requests 8192; --每個連接最大請求數

什麽時候用長連接,短連接  

長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況,。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那麽處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。例如:數據庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。

  而像WEB網站的http服務一般都用短鏈接,因為長連接對於服務端來說會耗費一定的資源,而像WEB網站這麽頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都占用一個連接的話,那可想而知吧。所以並發量大,但每個用戶無需頻繁操作情況下需用短連好。

如何理解HTTP協議是無狀態的

HTTP協議是無狀態的,指的是協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麽狀態。也就是說,打開一個服務器上的網頁和上一次打開這個服務器上的網頁之間沒有任何聯系。

CA 證書

CA,Catificate Authority,通俗的理解就是一種認證機制。它的作用就是提供證書(也就是服務端證書,公鑰+申請者與頒發者信息+簽名 )來加強客戶端與服務器端訪問信息的安全性,同時提供證書的發放等相關工作。國內的大部分互聯網公司都在國際CA機構申請了CA證書,並且在用戶進行訪問的時候,對用戶的信息加密,保障了用戶的信息安全。
客戶端解析證書,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麽就生成一個隨機值。然後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容

1.服務器向CA機構獲取證書,當瀏覽器首次請求服務器的時候,服務器返回證書給瀏覽器。
2.瀏覽器得到證書後,開始驗證證書的所有者、有效期等信息;瀏覽器開始查找操作系統中已內置的受信任的證書發布機構CA,與服務器發來的證書中的頒發者CA比對,用於校驗證書是否為合法機構頒發;如果找不到,瀏覽器就會報錯,說明服務器發來的證書是不可信任的。
3.驗證完證書後,如果證書有效,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。發送給服務器,服務器用私鑰進行解密,得到隨機數。之後雙方便開始用該隨機數作為鑰匙,對要傳遞的數據進行加密、解密。

加密算法

對稱加密

加密和解密都是使用的同一個密鑰。
例如:AES,RC4,3DES 、DES、AES-GCM、ChaCha20-Poly1305等

弊端:不同的客戶端、服務器數量龐大,所以雙方都需要維護大量的密鑰,維護成本很高
因每個客戶端、服務器的安全級別不同,密鑰極易泄露

非對稱加密

加密使用的密鑰和解密使用的密鑰是不相同的,分別稱為:公鑰、私鑰,公鑰和算法都是公開的,私鑰是保密的。非對稱加密算法性能較低,但是安全性超強,由於其加密特性,非對稱加密算法能加密的數據長度也是有限的。
例如:RSA,DSA/DSS、ECDSA、 DH、ECDHE

弊端:公鑰是公開的(也就是黑客也會有公鑰),私鑰加密的信息,如果被黑客截獲,其可以使用公鑰進行解密,獲取其中的內容

哈希算法

將任意長度的信息轉換為較短的固定長度的值,通常其長度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等

數字簽名

簽名就是在信息的後面再加上一段內容(信息經過hash後的值),可以證明信息沒有被修改過。hash值一般都會加密後(也就是簽名)再和信息一起發送,以保證這個hash值不被修改。

最優加密方法

將對稱加密,非對稱加密兩者結合起來,取其精華、去其糟粕,發揮兩者的各自的優勢
技術分享圖片

MTU相關問題

HTTP與HTTPS要點詳解