6表示層》 資料傳輸格式及加密,解決不同系統字符集不一致的問題,如ascii傳輸,傳送方把資料以ascii方式加密再傳輸,接收方把接收的標準ascii資料轉換成接收方計算機的字符集
5會話層》 定義開始、控制和結束乙個回會話,提供校驗點,在通訊失效是通過檢驗點恢復到原來的狀態
4傳輸層》 包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的資料流進行復用,還包括對收到的順序不對的資料報的重新排序功能,提供流量控制,如tcp、udp、spx
3網路層》 定義端對端的包傳輸,能夠標識所有節點的邏輯位址,路由實現和學習方式,為適應最大傳輸單元長度小於包長度的傳輸介質,還定義了如何將乙個包分解成更小的包的分段方式,解決1對多,和多對多傳輸,定址的問題,如ip、ipx
2資料鏈路層》定義在單個鏈路上如何傳輸資料,解決鏈結不穩定和資料丟失的問題,如atm、fddi
1物理層》 有關傳輸介質特性的規範,如rj45、802.3
sequence number:用來標識從tcp發端向tcp收端傳送的資料字節流,它表示在這個報文段中的的第乙個資料位元組在資料流中的序號;主要用來解決網路報亂序的問題;
acknowledgment number:32位確認序列號包含傳送確認的一端所期望收到的下乙個序號,因此,確認序號應當是上次已成功收到資料位元組序號加1。不過,只有當標誌位中的ack標誌(下面介紹)為1時該確認序列號的字段才有效。主要用來解決不丟包的問題;
offset:給出首部中32 bit字的數目,需要這個值是因為任選欄位的長度是可變的。這個欄位佔4bit(最多能表示15個32bit的的字,即4*15=60個位元組的首部長度),因此tcp最多有60位元組的首部。然而,沒有任選字段,正常的長度是20位元組;
tcp flags:tcp首部中有6個標誌位元,它們中的多個可同時被設定為1,主要是用於操控tcp的狀態機的,依次為urg
,ack
,psh
,rst
,syn
,fin
。每個標誌位的意思如下:
window:視窗大小,也就是有名的滑動視窗,用來進行流量控制。
三次握手:
客戶端傳送syn(synchronize sequence numbers 同步標識)包到服務端,syn=j,並進入syn_sent狀態,等待服務端響應
服務端接收到syn包,確認客戶端的syn,ack = j +1,並傳送syn(syn = k)+ack(acknowledgement number 確認序號標識位)包給客戶端,進入syn_recv狀態
客戶端接收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack = k+1)包,傳送完成後,客戶端和服務端都進入esrablished(tcp連線成功)狀態,完成握手。
關閉tcp連線,四次分手:
當客戶端程式通知客戶端關閉tcp連線時,客戶端傳送帶有fin附加標記的報文段給服務端
服務端接收到客戶端的關閉tcp請求,通知服務端程式該tcp將被關閉,並傳送乙個ack包給客戶端,為的時防止服務端程式關閉時客戶端重傳fin報文段
服務端程式通知tcp關閉連線,服務端向客戶端傳送乙個fin報文段
客戶端接收到fin報文段後,向服務端傳送ack包表示連線已關閉,四次握手關閉tcp完成
簡單快速;
靈活,允許傳輸任意型別的資料物件,由content-type標記決定
無連線,完成一次應答後就斷開連線
無狀態,不會儲存其它請求的資訊,即每次要把需要的引數都上次一次,對不需要先前資訊的應答更快速
除了作為結尾的crlf外,不允許出現單獨的cr或lf字元
method request-uri http-version crlf請求方法有8種:
get、post、delete、put、head、trace、connect 、options,常用的是get和post
get:請求獲取request-uri所標識的資源
post:在request-uri所標識的資源後附加新的資料
head:請求獲取由request-uri所標識的資源的響應訊息報頭
put: 請求伺服器儲存乙個資源,並用request-uri作為其標識
delete :請求伺服器刪除request-uri所標識的資源
trace : 請求伺服器回送收到的請求資訊,主要用於測試或診斷
connect: http/1.1協議中預留給能夠將連線改為管道方式的**伺服器。
請求報頭:0到n個,每乙個包含乙個名稱和值,用:分割
空行請求資料:只使用在post請求,get請求引數直接在url中。(url請求長度在2048字元內,所以get能發生的資料有限,在http1.1後取消了url的長度限制)
http相應報文:
訊息報頭
空行響應正文
可以出現在請求報頭,也可以出現在響應報頭中
請求報頭
響應報頭
實體報頭:
可以出現在請求報頭,也可以出現在響應報頭中
httpclient和httpurlconnection
android sdk中包含httpclient,但在android6.0及更新版本刪除了httpclient類庫,新增支援在對於module的build檔案android標籤下新增uselibrary 'org.apache.http.legacy'
在realcall類中asynccall方法通過新增5個預設***,完成乙個請求,獲取資料
realinterceptorchain類中proceed方法
通過一步步次序的呼叫***,每個***都會呼叫該proceed方法,並且index+1繼續呼叫下乙個***,直到callserverinterceptor類
封裝並返回最後的資料。每個***的功能都不一樣,新增了預設值並執行了一些操作。根據名稱可以大概判斷***的功能,具體實現檢視原始碼。
okhttpclient類通過dispatcher任務排程來控制併發請求,設定了很多預設變數,建立okhttpclient時我們可以自定義這些值
Android學習筆記 網路請求
通過httpurlconnection可以進行http請求 httpurlconnection的用法 以下是 實列 關閉輸入流 reader.close return result.tostring 2.json資料解析 使用jsonobject和jsonarray解析 api jsonobject...
iOS 讀書筆記 網路請求
知道 3次握手 嗎?突然想起這個詞 什麼是3次握手?tcp三次握手 四次揮手詳解 這裡是3次握手的詳細解釋 3次握手就是為了可靠的傳送資料,tcp 什麼是tcp呢?tcp就是一種可靠傳輸的協議 在傳送資料之前,兩台主機之間進行3次握手。3次握手完成後才傳送資料。預備知識 位碼即tcp標誌位,有6種標...
iOS 讀書筆記 網路請求
知道 3次握手 嗎?突然想起這個詞 什麼是3次握手?tcp三次握手 四次揮手詳解 這裡是3次握手的詳解 3次握手就是為了可靠的傳送資料,tcp 什麼是tcp呢?tcp就是一種可靠傳輸的協議 在傳送資料之前。兩台主機之間進行3次握手。3次握手完畢後才傳送資料。預備知識 位碼即tcp標誌位,有6種標示 ...