天天看點

iOS秋招複習——網絡網絡篇複習

文章目錄

  • 網絡篇複習
    • 1.浏覽器輸入url到網頁顯示經曆了什麼過程?
    • 2.TCP三向交握:具體是怎麼握手?為什麼要三次握手?兩次行不行?為什麼不行?三次握手,第二次和第三次分别因為什麼?
    • 3.HTTPS的過程

網絡篇複習

1.浏覽器輸入url到網頁顯示經曆了什麼過程?

答:1.輸入網址

2.發送到DNS伺服器,解析域名,程式設計ip位址

3.浏覽器與web伺服器建立TCP連結 三次握手

4.浏覽器向web伺服器發送http請求

5.web響應請求并傳回url資料

6.浏覽器下載下傳web伺服器傳回的資料及解析html源檔案

7.生成DOM樹,解析css和js,渲染頁面,直至顯示完成

2.TCP三向交握:具體是怎麼握手?為什麼要三次握手?兩次行不行?為什麼不行?三次握手,第二次和第三次分别因為什麼?

答:

iOS秋招複習——網絡網絡篇複習

1.用戶端主動打開,發送連接配接請求封包段,将SYN辨別位置為1(SYN:同步序列編号(Synchronize Sequence Numbers)),Sequence Number置為x(TCP規定SYN=1時不能攜帶資料,x為随機産生的一個值),然後進入SYN_SEND狀态

2.伺服器收到SYN封包段進行确認,将SYN辨別位置為1,ACK置為1,Sequence Number置為y,Acknowledgment Number置為x+1,然後進入SYN_RCVD狀态,這個狀态被稱為半連接配接狀态

3.用戶端再進行一次确認,将ACK置為1(此時不用SYN),Sequence Number置為x+1,Acknowledgment Number置為y+1發向伺服器,最後用戶端與伺服器都進入ESTABLISHED狀态

不可以兩次握手,第三次握手主要為了防止已失效的連接配接請求封包段突然又傳到了B,因而産生錯誤。

所謂“已失效的連接配接請求封包段”的意思就是,A傳給B一個封包段,但因為某種原因沒有傳過去,于是需要逾時重傳,結果第二次傳過去了,于是TCP三向交握建立,等資料傳輸完成之後,釋放連接配接。但這時第一次的封包傳到了B,誤以為A又請求連接配接,是以B就會發出确認建立連接配接,但A并沒有送出請求,是以不會理睬B,不會發送任何資料,但B一直等A發送,就導緻B的許多資源就這樣白白浪費了。

拓展:TCP釋放連接配接(即四次揮手)

1.用戶端發送一個封包給服務端(沒有資料),其中FIN設定為1,Sequence Number置為u,用戶端進入FIN_WAIT_1狀态

2.服務端收到來自用戶端的請求,發送一個ACK給用戶端,Acknowledge置為u+1,同時發送Sequence Number為v,服務端年進入CLOSE_WAIT狀态

3.服務端發送一個FIN給用戶端,ACK置為1,Sequence置為w,Acknowledge置為u+1,用來關閉服務端到用戶端的資料傳送,服務端進入LAST_ACK狀态

4.用戶端收到FIN後,進入TIME_WAIT狀态,接着發送一個ACK給服務端,Acknowledge置為w+1,Sequence Number置為u+1,最後用戶端和服務端都進入CLOSED狀态

3.HTTPS的過程

首先HTTP是明文傳輸,如果HTTP請求被黑客攔截,并且裡面含有銀行卡密碼等敏感資料的話,會非常危險。而HTTPS可以将資料加密傳輸,也就是傳輸的是密文,即便黑客在傳輸過程中攔截到資料也無法破譯,這就保證了網絡通信的安全。

HTTPS協定 = HTTP協定 + SSL/TLS協定,在HTTPS資料傳輸的過程中,需要用SSL/TLS對資料進行加密和解密,需要用HTTP對加密後的資料進行傳輸,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。

HTTPS為了兼顧安全與效率,同時使用了對稱加密和非對稱加密。總的來說,對資料進行對稱加密,對稱加密所要使用的密鑰通過非對稱加密傳輸。是以HTTPS一共需要三個秘鑰:1.用戶端生成的随機密鑰,用來進行對稱加密 2.伺服器端的公鑰和私鑰,用來進行非對稱加密

一個HTTPS請求實際上包含了兩次HTTP傳輸,可以細分為8步。

1.用戶端向伺服器發起HTTPS請求,連接配接到伺服器的443端口

2.伺服器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,伺服器端儲存着私鑰,不能将其洩露,公鑰可以發送給任何人。

3.伺服器将自己的公鑰發送給用戶端。

4.用戶端收到伺服器端的公鑰之後,會對公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那麼HTTPS傳輸就無法繼續。嚴格的說,這裡應該是驗證伺服器發送的數字證書的合法性。如果公鑰合格,那麼用戶端會生成一個随機值,這個随機值就是用于進行對稱加密的密鑰,我們将該密鑰稱之為client key,即用戶端密鑰。然後用伺服器的公鑰對用戶端密鑰進行非對稱加密,這樣用戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結束。

5.用戶端會發起HTTPS中的第二個HTTP請求,将加密之後的用戶端密鑰發送給伺服器。

6.伺服器接收到用戶端發來的密文之後,會用自己的私鑰對其進行非對稱解密,解密之後的明文就是用戶端密鑰,然後用用戶端密鑰對資料進行對稱加密,這樣資料就變成了密文。

7.然後伺服器将加密後的密文發送給用戶端。

8.用戶端收到伺服器發送來的密文,用用戶端密鑰對其進行對稱解密,得到伺服器發送的資料。這樣HTTPS中的第二個HTTP請求結束,整個HTTPS傳輸完成。

下圖源自limboy的部落格

iOS秋招複習——網絡網絡篇複習

補充: SSL的全稱是Secure Sockets Layer,即安全套接層協定,是為網絡通信提供安全及資料完整性的一種安全協定。其最新的版本是3.0,TLS的全稱是Transport Layer Security,即安全傳輸層協定,它建立在SSL 3.0協定規範之上,是SSL 3.0的後續版本。在TLS與SSL3.0之間存在着顯著的差别,主要是它們所支援的加密算法不同,是以TLS與SSL3.0不能互操作。雖然TLS與SSL3.0在加密算法上不同,但是在我們了解HTTPS的過程中,我們可以把SSL和TLS看做是同一個協定。

未完待續…luhh