Android需要知道的TCP IP和Http知識

2021-08-19 15:41:52 字數 2522 閱讀 2363

相信大家在出去面試的時候,經常會被問到一些基礎問題,這些問題,平時開發過程中我們並不會太注意,但是一些大公司在面試時會經常問,今天給大家總結下在android/ios開發中會被問到的關於tcp\ip和http相關的知識。

左邊是標準的osi參考模型,共7層;右邊是tcp/ip參考模型,分為4層。而tcp/ip作為實際的指導協議,在實際的開發中使用得最多。對於tcp/ip的4層模型可以簡單地理解為:

網路接入層:將需要相互連線的節點接入網路中,從而為資料傳輸提供條件。

網路互聯層:找到要傳輸資料的目標節點。(ip協議)

傳輸層:實際傳輸資料。(tcp 、udp協議)

應用層:使用接收到的資料。(http、https、dns協議)

tcp/ip協議通常放在一起來說,不過它們是兩個不同的協議,所起的作用也不一樣。ip協議是用來查詢位址的,對應著網際互聯層,tcp協議是用來規範傳輸規則的,對應著傳輸層。ip只負責找到位址,具體傳輸工作交給tcp來完成。

tcp在傳輸之前會進行三次溝通,一般稱為「三次握手」,傳完資料斷開的時候,要進行四次溝通,一般稱為「四次揮手」。要理解這個過程首先需要理解tcp中的兩個序號和三個標誌位的含義:

seq:sequence number的縮寫,表示所傳資料的序號。tcp傳輸時每乙個位元組都有乙個序號,傳送資料時會將資料的第乙個序號傳送給對方,接收方會按序號檢查是否接收完整了,如果沒有接收完整就需要重新傳送,這樣就可以保證資料的完整性。

ack:asknoledgement number的縮寫,表示確認號。接收端用它來給傳送端反饋已經成功接收到的資料資訊,它的值為希望接收的下乙個資料報起始序號,也就是ack值所代表的序號前面資料已經成功接收到了。

ack:確認位,只有ack=1的時候ack才起作用。正常通訊時ack為1,第一次發起請求時因為沒有需要確認接收的資料所以ack為0。

syn:同步位,用於在建立連線時同時序號。剛開始建立連線時並沒有歷史接收資料,所以ack也就沒辦法設定,這時按照正常的就無法執行了,syn的作用就是來解決這個問題的,當接收端接收到syn=1的報文時就會直接將ack設定為接收到的seq+1的值,注意這裡面的值並不是校驗後設定的,而是根據syn直接設定的,這樣正常的機制就可以執行了,所以syn叫同步位。需要注意的是,syn會在前面再次握手時都為1,這是因為通訊的雙方的ack都需要設定乙個初始值。

fin:終止位,用來在資料傳輸完畢後釋放連線。

整個傳輸過程可以用下圖來表示:

圖中上部分為三次握手,下部分為四次揮手。tcp的傳輸是雙全工模式,也就是說傳輸的雙方是對等的,可以同時傳輸資料,所以無論連線還是關閉都需要對雙方同時進行。

三次握手和四次揮手保證了連線的可靠性,不過凡事有利就有弊,這種模式也有它的缺點,首先是在傳輸效率上會比較低,另外三次握手的過程中客戶端需要傳送兩次資料才可以建立連線,容易被ddos攻擊(syn flood攻擊)。

udp也是用於傳輸層的協議,和tcp的主要區別是,tcp是有連線的,udp是沒有連線的。udp協議拿到位址後就傳了,因此tcp協議傳輸的資料更可靠,而udp協議傳輸的速度更快。

http協議的底層傳輸預設使用的是可靠的tcp協議,不過它對網際網路的高速發展帶來了很大的制約,google制定了一套基於udp和quic(quick udp intent connection)協議,這種協議基於tcp和udp之間的,但未廣泛使用。

tcp/ip協議只是一套規則,並不能具體工作,而socket是tcp/ip協議的乙個具體的實現。

http是應用層的協議,在tcp/ip協議接收到資料之後需要通過http協議來解析才可以使用。

http協議中的報文結構很重要。http中報文分為請求報文(request messaget)和響應報文(response message)兩種型別,這兩種型別都包括三部分:首行、頭部和主體。模型如下圖所示:

請求報文的首行是請求行,包括方法(請求型別)、url和http版本三項內容,響應請求的首行是狀態行,包括http版本、狀態碼和簡短原因三項內容,其中原因可有可無。

頭部儲存一些鍵值對的屬性,用冒號「:」分割。

主體儲存具體內容,請求報文中主要儲存post型別的資料,響應報文中儲存頁面要顯示的結果。首行、頭部和主體以及頭部的各項內容用回車換行(\r\n)分割,另外頭部和主體之間多乙個空行,也就是有兩個連續的回車換行。

請求報文中的方法指get、head、post、put、delete等型別。

響應報文中的狀態碼是reponse中的status,一共可以分為5類:

Sybase IQ,你需要知道的基礎

sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...

Sybase IQ,你需要知道的基礎

sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...

關於快取你需要知道的

作後端開發的同學,快取是必備技能。這是你不需要花費太多的精力就能顯著提公升服務效能的靈丹妙藥。前提是你得知道如何使用它,這樣才能夠最大限度發揮它的功效,並抑制其 本文將介紹最如何正確的新增和更新快取。這部分將介紹在開始加快取之前我們必須要做的事情。這步非常重要,如果沒弄好,很有可能加了快取反而不如不...