天天看點

一次http的過程 以及https與http差別 DNS解析 以及相關問題

osi的七層模型及相關協定

1、實體層協定:EIA/TIA-232, EIA/TIA-499,V.35, V.24,RJ45, Ethernet, 802.3

2、資料鍊路層協定:Frame Relay,HDLC,PPP, IEEE 802.3/802.2

3、網絡層協定:IP,IPX,AppleTalk DDP

4、傳輸層協定:TCP,UDP,SPX

5、會話層協定:RPC,SQL,NFS,NetBIOS,names,AppleTalk

6、表示層協定:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption

7、應用層協定:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP

一次http的過程

1.對www.baidu.com這個網址進行DNS域名解析,得到對應的IP位址

2.根據這個IP,找到對應的伺服器,發起TCP的三次握手

3.建立TCP連接配接後發起HTTP請求

4.伺服器響應HTTP請求,浏覽器得到html代碼

5.浏覽器解析html代碼,并請求html代碼中的資源(如js、css圖檔等)(先得到html代碼,才能去找這些資源)

6.浏覽器對頁面進行渲染呈現給使用者

DNS域名解析

是域名到IP位址的映射,DNS解析請求采用UDP資料報且明文

DNS的工作原理

  1) 浏覽器緩存

  當使用者通過浏覽器通路某域名時,浏覽器首先會在自己的緩存中查找是否有該域名對應的IP位址(若曾經通路過該域名且沒有清空緩存便存在);

  2) 系統緩存

  當浏覽器緩存中無域名對應IP則會自動檢查使用者計算機系統Hosts檔案DNS緩存是否有該域名對應IP;

  3) 路由器緩存

  當浏覽器及系統緩存中均無域名對應IP則進入路由器緩存中檢查,以上三步均為客服端的DNS緩存;

  4) ISP(網際網路服務提供商)DNS緩存

  當在使用者客服端查找不到域名對應IP位址,則将進入ISP DNS緩存中進行查詢。比如你用的是電信的網絡,則會進入電信的DNS緩存伺服器中進行查找;

  5) 根域名伺服器

  當以上均未完成,則進入根伺服器進行查詢。全球僅有13台根域名伺服器,1個主根域名伺服器,其餘12為輔根域名伺服器。根域名收到請求後會檢視區域檔案記錄,若無則将其管轄範圍内頂級域名(如.com)伺服器IP告訴本地DNS伺服器;

  6) 頂級域名伺服器

  頂級域名伺服器收到請求後檢視區域檔案記錄,若無則将其管轄範圍内主域名伺服器的IP位址告訴本地DNS伺服器;

  7) 主域名伺服器

  主域名伺服器接受到請求後查詢自己的緩存,如果沒有則進入下一級域名伺服器進行查找,并重複該步驟直至找到正确紀錄;

  8)儲存結果至緩存

  本地域名伺服器把傳回的結果儲存到緩存,以備下一次使用,同時将該結果回報給用戶端,用戶端通過這個IP位址與web伺服器建立連結

  

DNS解析查詢方式?

遞歸查詢,疊代查詢

客戶機向本地域名伺服器查詢是遞歸查詢,本地域名伺服器向其他域名伺服器是疊代查詢,

DNS解析存在哪些常見問題?

DNS劫持問題(DNS解析是udp資料報且明文,可能會有釣魚伺服器,會劫持到對應DNS請求,釣魚伺服器可能傳回一個錯誤IP位址),DNS劫持轉發問題(發送DNS請求時可能會把請求轉發給其他伺服器進行解析)

DNS劫持與HTTP的關系是怎麼樣的?

沒有關系,DNS解析發生在HTTP建立連接配接之前,DNS解析請求使用UDP資料報

怎麼解決DNS劫持?

1.httpDNS(使用HTTP協定向DNS伺服器的80端口進行請求)

2.長連接配接(用戶端和API Server中間建立長連Server,用戶端和長連Server建立長連通道,長連Server和API Server通過内網專線進行http請求和響應)

三次握手四次揮手

三次揮手(建立連接配接)

第一次:建立連接配接時,用戶端發送SYN包(syn=j)到伺服器,并進入SYN_SEND狀态,等待伺服器确認;

第二次:伺服器收到SYN包,向用戶端傳回ACK(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RCVD狀态;

第三次:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀态,完成三次握手。

完成三次握手,用戶端與伺服器開始傳送資料,也就是ESTABLISHED狀态。

三次握手保證了不會建立無效的連接配接,進而浪費資源。

四次揮手(斷開連接配接)

第一次: TCP用戶端發送一個FIN,用來關閉客戶到伺服器的資料傳送。

第二次:伺服器收到這個FIN,它發回一個ACK,确認序号為收到的序号加1。和SYN一樣,一個FIN将占用一個序号。

第三次:伺服器關閉用戶端的連接配接,發送一個FIN給用戶端。

第四次:用戶端發回ACK封包确認,并将确認序号設定為收到序号加1。

TCP流量控制

如果發送端發送資料太快,接收端來不及接收,可能會丢失資料。是以流量控制是讓發送端不要發送太快,要讓接收端來得及接收

流量控制是通過大小可變的滑動視窗實作的。

發送端視窗大小不能超過接收端視窗大小的值。TCP視窗機關是位元組

HTTP請求封包

一個HTTP請求封包由請求行(request line)、請求頭部(header)、空行和請求資料4個部分組成,

請求行分為三個部分:請求方法、請求位址和協定版本

請求頭部為請求封包添加了一些附加資訊,由“名/值”對組成,每行一對,名和值之間使用冒号分隔。

請求頭部的最後會有一個空行,表示請求頭部結束,接下來為請求資料,這一行非常重要,必不可少。

請求資料

下面是一個POST方法的請求封包:

POST  /index.php HTTP/1.1    請求行

Host: localhost

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2請求頭

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip, deflate

Connection: keep-alive

Referer: http://localhost/Content-Length:25

Content-Type:application/x-www-form-urlencoded  空行username=aa&password=1234  請求資料

HTTP響應封包

由三部分組成:狀态行、消息報頭、響應正文。

狀态行

由3部分組成,分别為:協定版本,狀态碼,狀态碼描述。

其中協定版本與請求封包一緻,狀态碼描述是對狀态碼的簡單描述,是以這裡就隻介紹狀态碼。

狀态碼

狀态代碼為3位數字。

1xx:訓示資訊–表示請求已接收,繼續處理。

2xx:成功–表示請求已被成功接收、了解、接受。

3xx:重定向–要完成請求必須進行更進一步的操作。

4xx:用戶端錯誤–請求有文法錯誤或請求無法實作。

5xx:伺服器端錯誤–伺服器未能實作合法的請求。

響應頭部

與請求頭部類似,為響應封包添加了一些附加資訊

響應資料

用于存放需要傳回給用戶端的資料資訊。

TTP/1.1 200 OK  狀态行

Date: Sun, 17 Mar 2013 08:12:54 GMT  響應頭部

Server: Apache/2.2.8 (Win32) PHP/5.2.5

X-Powered-By: PHP/5.2.5

Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-reval()發起主動關閉的一方,在發送最後一個ACK之後會進入time_wait的狀态,也就說該發送方會保持2MSL時間之後才會回到初始狀态。MSL值得是資料包在網絡中的最大生存時間。産生這種結果使得這個TCP連接配接在2MSL連接配接等待期間,定義這個連接配接的四元組(用戶端IP位址和端口,服務端IP位址和端口号)不能被使用。

TCP和UDP的差別

TCP為傳輸控制層協定,為面向連接配接、可靠的、點到點的通信;

UDP為使用者資料報協定,非連接配接的不可靠的點到多點的通信;

TCP側重可靠傳輸,UDP側重快速傳輸。

https

HTTPS是在HTTP的基礎上和SSL/TLS證書結合起來的一種協定,保證了傳輸過程中的安全性,減少了被惡意劫持的可能.很好的解決了解決了http的三個缺點(被監聽、被篡改、被僞裝)

https的過程

TLS與SSL在傳輸層對網絡連接配接進行加密

在使用HTTPS是需要保證服務端配置正确了對應的安全證書

用戶端發送請求到服務端

服務端傳回公鑰和證書到用戶端

用戶端接收後會驗證證書的安全性,如果通過則會随機生成一個随機數,用公鑰對其加密,發送到服務端

服務端接受到這個加密後的随機數後會用私鑰對其解密得到真正的随機數,随後用這個随機數當做私鑰對需要發送的資料進行對稱加密

用戶端在接收到加密後的資料使用私鑰(即生成的随機值)對資料進行解密并且解析資料呈現結果給客戶

SSL加密建立

繼續閱讀