Android 面試準(zhǔn)備進(jìn)行曲(網(wǎng)絡(luò)基礎(chǔ)篇) v1.1

- [前言](#前言)

update time 2019年11月28日 15:27:20 / 添加 假目錄。哪位大佬有比較好的可以供他人查看的好目錄

CSDN地址 (尷尬 簡(jiǎn)書暫時(shí)還沒有學(xué)會(huì)整目錄 -,-)

前言

在總結(jié)完 前兩章的Android 基礎(chǔ)知識(shí)后,我發(fā)現(xiàn)自己的Java 基礎(chǔ)方面相當(dāng)?shù)谋∪酰ó?dāng)然這個(gè)是我一直都有的軟肋,這次暴漏的更加明顯)所以臨時(shí)總結(jié) 添加一篇基礎(chǔ)知識(shí),包含的內(nèi)容:常問的基礎(chǔ)面試題+重點(diǎn)知識(shí)點(diǎn)。寫完這一篇文章后,后續(xù)會(huì)主要總結(jié)和閱讀 我經(jīng)常使用的第三方工具 的源碼解析 例如:Okhttp ,rxjava 等的簡(jiǎn)單源碼理解和剖析。本人三年小白,還在不斷摸索中成長(zhǎng),文章有不對(duì)的地方勞煩指出,本人將改正學(xué)習(xí),加油

重點(diǎn)順序 參考博客 厘米大佬 nb

網(wǎng)絡(luò)基礎(chǔ)

網(wǎng)絡(luò)協(xié)議的體系結(jié)構(gòu)

物理層
數(shù)據(jù)鏈路層:邏輯鏈路控制LLC、媒體接入控制MAC
網(wǎng)絡(luò)層:IP協(xié)議、地址解析協(xié)議ARP、逆地址解析協(xié)議RARP、因特網(wǎng)控制報(bào)文協(xié)議ICMP
傳輸層:傳輸控制協(xié)議TCP、用戶數(shù)據(jù)報(bào)協(xié)議UDP
應(yīng)用層:文件傳輸協(xié)議FTP、遠(yuǎn)程登錄協(xié)議TELNET、超文本傳輸協(xié)議HTTP、域名系統(tǒng)DNS、簡(jiǎn)單郵件協(xié)議SMTP、簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP

在這里插入圖片描述

TCP和UDP

  • TCP傳輸控制協(xié)議:面向連接;使用全雙工的可靠信道;提供可靠的服務(wù),即無差錯(cuò)、不丟失、不重復(fù)且按序到達(dá);擁塞控制、流量控制、超時(shí)重發(fā)、丟棄重復(fù)數(shù)據(jù)等等可靠性檢測(cè)手段;面向字節(jié)流;每條TCP連接只能是點(diǎn)到點(diǎn)的;用于傳輸可靠性要求高的數(shù)據(jù),協(xié)議上來說沒有長(zhǎng)度限制(但是使用中還是不建議過長(zhǎng)數(shù)據(jù)傳輸)

  • UDP用戶數(shù)據(jù)報(bào)協(xié)議:UDP 本身不提供確認(rèn),序列號(hào),超時(shí)重傳等機(jī)制,有長(zhǎng)度限制,無連接;使用不可靠信道;盡最大努力交付,即不保證可靠交付;無擁塞控制等;面向報(bào)文;支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信;用于傳輸可靠性要求不高的數(shù)據(jù)(舉例場(chǎng)景:包總量較少的通信(DNS、SNMP),即時(shí)通信,廣播、多播)

TCP特性

  1. TCP 提供一種面向連接的、可靠的字節(jié)流服務(wù)
  2. 僅有兩方進(jìn)行彼此通信。不能廣播和多播
  3. TCP 使用校驗(yàn)和,確認(rèn)和重傳機(jī)制來保證可靠傳輸
  4. TCP 給數(shù)據(jù)分節(jié)進(jìn)行排序,并使用累積確認(rèn)保證數(shù)據(jù)的順序不變和非重復(fù)
  5. TCP 使用滑動(dòng)窗口機(jī)制來實(shí)現(xiàn)流量控制,通過動(dòng)態(tài)改變窗口的大小進(jìn)行擁塞控制

注意:TCP 并不能保證數(shù)據(jù)一定會(huì)被對(duì)方接收到。TCP 能夠做到的是,如果有可能,就把數(shù)據(jù)遞送到接收方,否則就(通過放棄重傳并且中斷連接這一手段)通知用戶。因此它所能提供的是數(shù)據(jù)的可靠遞送或故障的可靠通知。

擁塞控制和流量控制

  • 擁塞控制:對(duì)網(wǎng)絡(luò)中的路由和鏈路傳輸進(jìn)行速度限制,避免網(wǎng)絡(luò)過載;包含四個(gè)過程:慢啟動(dòng)、擁塞避免、快重傳和快恢復(fù)
  • 流量控制 :對(duì)點(diǎn)和點(diǎn)/發(fā)送方和接收方之間進(jìn)行速度匹配,由于接收方的應(yīng)用程序讀取速度不一定很迅速,加上緩存有限,因此需要避免發(fā)送速度過快;相關(guān)技術(shù):TCP滑動(dòng)窗口、回退N針協(xié)議

TCP 握手

參考GitBook
建立一個(gè) TCP 連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。三次握手的目的是連接服務(wù)器指定端口,建立 TCP 連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào),交換 TCP 窗口大小信息。

第一次握手(SYN=1, seq=x):

客戶端發(fā)送一個(gè) TCP 的 SYN 標(biāo)志位置1的包,指明客戶端打算連接的服務(wù)器的端口,以及初始序號(hào) X,保存在包頭的序列號(hào)(Sequence Number)字段里。

發(fā)送完畢后,客戶端進(jìn)入 SYN_SEND 狀態(tài)。

第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即 SYN 標(biāo)志位和 ACK 標(biāo)志位均為1。服務(wù)器端選擇自己 ISN 序列號(hào),放到 Seq 域里,同時(shí)將確認(rèn)序號(hào)(Acknowledgement Number)設(shè)置為客戶的 ISN 加1,即X+1。 發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。

第三次握手(ACK=1,ACKnum=y+1)

客戶端再次發(fā)送確認(rèn)包(ACK),SYN 標(biāo)志位為0,ACK 標(biāo)志位為1,并且把服務(wù)器發(fā)來 ACK 的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方,并且在數(shù)據(jù)段放寫ISN的+1

發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個(gè)包時(shí),也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。

在這里插入圖片描述

TCP 揮手

第一次揮手(FIN=1,seq=x)

假設(shè)客戶端想要關(guān)閉連接,客戶端發(fā)送一個(gè) FIN 標(biāo)志位置為1的包,表示自己已經(jīng)沒有數(shù)據(jù)可以發(fā)送了,但是仍然可以接受數(shù)據(jù)。

發(fā)送完畢后,客戶端進(jìn)入 FIN_WAIT_1 狀態(tài)。

第二次揮手(ACK=1,ACKnum=x+1)

服務(wù)器端確認(rèn)客戶端的 FIN 包,發(fā)送一個(gè)確認(rèn)包,表明自己接受到了客戶端關(guān)閉連接的請(qǐng)求,但還沒有準(zhǔn)備好關(guān)閉連接。

發(fā)送完畢后,服務(wù)器端進(jìn)入 CLOSE_WAIT 狀態(tài),客戶端接收到這個(gè)確認(rèn)包之后,進(jìn)入 FIN_WAIT_2 狀態(tài),等待服務(wù)器端關(guān)閉連接。

第三次揮手(FIN=1,seq=y)

服務(wù)器端準(zhǔn)備好關(guān)閉連接時(shí),向客戶端發(fā)送結(jié)束連接請(qǐng)求,F(xiàn)IN 置為1。

發(fā)送完畢后,服務(wù)器端進(jìn)入 LAST_ACK 狀態(tài),等待來自客戶端的最后一個(gè)ACK。

第四次揮手(ACK=1,ACKnum=y+1)

客戶端接收到來自服務(wù)器端的關(guān)閉請(qǐng)求,發(fā)送一個(gè)確認(rèn)包,并進(jìn)入 TIME_WAIT狀態(tài),等待可能出現(xiàn)的要求重傳的 ACK 包。

服務(wù)器端接收到這個(gè)確認(rèn)包之后,關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

客戶端等待了某個(gè)固定時(shí)間(兩個(gè)最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒有收到服務(wù)器端的 ACK ,認(rèn)為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

在這里插入圖片描述

HTTP

HTTP 協(xié)議構(gòu)建于 TCP/IP 協(xié)議之上,是一個(gè)應(yīng)用層協(xié)議,默認(rèn)端口號(hào)是 80,HTTP 是無連接無狀態(tài)的。

HTTP 定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,對(duì)應(yīng)著對(duì)這個(gè)資源的查,增,改,刪4個(gè)操作。

重點(diǎn)說下 GET/POST :

  • GET:當(dāng)客戶端要從服務(wù)器中讀取某個(gè)資源時(shí)使用GET;一般用于獲取/查詢資源信息;GET參數(shù)通過URL傳遞,傳遞的參數(shù)是有長(zhǎng)度限制,不能用來傳遞敏感信息

  • POST:當(dāng)客戶端給服務(wù)器提供信息較多時(shí)可以使用POST;POST會(huì)附帶用戶數(shù)據(jù),一般用于更新資源信息;POST將請(qǐng)求參數(shù)封裝在HTTP 請(qǐng)求數(shù)據(jù)中,可以傳輸大量數(shù)據(jù),傳參方式比GET更安全

狀態(tài)碼:
HTTP 響應(yīng)與 HTTP 請(qǐng)求相似,HTTP響應(yīng)也由3個(gè)部分構(gòu)成,分別是:

  • 狀態(tài)行
    響應(yīng)頭(Response Header)
    響應(yīng)正文
    狀態(tài)行由協(xié)議版本、數(shù)字形式的狀態(tài)代碼、及相應(yīng)的狀態(tài)描述,各元素之間以空格分隔。

  • 常見的狀態(tài)碼有如下幾種:
    1xx:表示服務(wù)器已接收了客戶端請(qǐng)求,客戶端可繼續(xù)發(fā)送請(qǐng)求
    2xx:表示服務(wù)器已成功接收到請(qǐng)求并進(jìn)行處理
    3xx:表示服務(wù)器要求客戶端重定向
    4xx:表示客戶端的請(qǐng)求有非法內(nèi)容
    400 Bad Request:表示客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解
    401 Unauthonzed:表示請(qǐng)求未經(jīng)授權(quán),該狀態(tài)代碼必須與 WWW-Authenticate 報(bào)頭域一起使用
    403 Forbidden:表示服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù),通常會(huì)在響應(yīng)正文中給出不提供服務(wù)的原因
    404 Not Found:請(qǐng)求的資源不存在,例如,輸入了錯(cuò)誤的URL
    5xx:表示服務(wù)器未能正常處理客戶端的請(qǐng)求而出現(xiàn)意外錯(cuò)誤
    500 Internal Server Error:表示服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤,導(dǎo)致無法完成客戶端的請(qǐng)求
    503 Service Unavailable:表示服務(wù)器當(dāng)前不能夠處理客戶端的請(qǐng)求,在一段時(shí)間之后,服務(wù)器可能會(huì)恢復(fù)正常

HTTP 發(fā)展之路

  • HTTP1.0默認(rèn)使用短連接,HTTP1.1開始默認(rèn)使用長(zhǎng)連接
    HTTP1.1增加更多的請(qǐng)求頭和響應(yīng)頭來改進(jìn)和擴(kuò)充HTTP1.0的功能,比如身份認(rèn)證、狀態(tài)管理和Cache緩存等
  • HTTP2.0的協(xié)議解析決定采用二進(jìn)制格式,實(shí)現(xiàn)方便且健壯,不同于HTTP1.x的解析是基于文本,HTTP2.0 可以主動(dòng)服務(wù)端推送:

HTTP 和 HTTPS區(qū)別

  • HTTP(超文本傳輸協(xié)議):運(yùn)行在TCP之上;傳輸?shù)膬?nèi)容是明文;端口是80

  • HTTPS(安全為目標(biāo)的HTTP):運(yùn)行在SSL/TLS之上,SSL/TLS運(yùn)行在TCP之上;傳輸?shù)膬?nèi)容經(jīng)過加密;端口是443

訪問URL 過程

在瀏覽器地址欄鍵入U(xiǎn)RL后:

  1. 瀏覽器向DNS服務(wù)器請(qǐng)求解析該URL中的域名所對(duì)應(yīng)的IP地址
  2. 解析出IP地址后,根據(jù)該IP地址和默認(rèn)端口80,和服務(wù)器建立TCP連接
  3. 瀏覽器發(fā)出讀取文件的HTTP請(qǐng)求,該請(qǐng)求報(bào)文作為TCP三次握手的第三個(gè)報(bào)文的數(shù)據(jù)發(fā)送給服務(wù)器
  4. 服務(wù)器對(duì)瀏覽器請(qǐng)求作出響應(yīng),并把對(duì)應(yīng)的html文本發(fā)送給瀏覽器
  5. 釋放TCP連接,若connection模式為close,則服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端被動(dòng)關(guān)閉連接,釋放TCP連接;若connection模式為keepalive,則該連接會(huì)保持一段時(shí)間,在該時(shí)間內(nèi)可以繼續(xù)接收請(qǐng)求
  6. 客戶端將服務(wù)器響應(yīng)的html文本解析并顯示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容