iOS 網(wǎng)絡(luò)協(xié)議相關(guān)

1. HTTP

超文本傳輸協(xié)議; 是基于TCP的;
常見方式有GET, POST, HEAD, PUT, DELETE, OPTIONS;
特點:

  • 1.無鏈接, 有建立鏈接和釋放鏈接的過程;
  • 2.無狀態(tài); 如果沒有session或者cookie即使是多次請求服務(wù)端也沒法確認客戶端的身份;

知識點:GET和POST的區(qū)別有哪些?

GET POST
GET請求參數(shù)以?分隔拼接到URL后面; POST放在Body中;
GET參數(shù)長度限制2048字節(jié); POST無限制;
GET是獲取資源; POST是處理資源;
安全性, 冪等, 可緩存; 非安全性, 非冪等, 不可緩存;

安全性: 不引起服務(wù)端的任何狀態(tài)變化;
冪等性: 同一個請求執(zhí)行多次效果是否一樣;
緩存性: 一個請求是否可以被緩存;

日常開發(fā)中常見的狀態(tài)碼:
200:正常相應(yīng);
404:請求錯誤;
500:服務(wù)器內(nèi)部錯誤;

持久連接


持久連接有點:提升網(wǎng)絡(luò)請求銷量, 在一段時間內(nèi)即使多次請求也只執(zhí)行一次鏈接和斷開操作;
持久連接頭部字段設(shè)置

#允許客戶端持久連接
Connection:keep-alive
#100s內(nèi)有效, 不設(shè)置表示永久有效
Keep-Alive: timeout=100

知識點: 持久連接如何判斷數(shù)據(jù)是否已經(jīng)已經(jīng)傳輸完畢?
1: 判斷數(shù)據(jù)是否已經(jīng)達到Content-Length所設(shè)置的大小;
2: 如果分塊傳輸數(shù)據(jù), 根據(jù)chunked編碼數(shù)據(jù)判斷, 如果chunked編碼的數(shù)據(jù)最后有chunked的塊, 則表示完成;


2.HTTPS

簡單理解為安全的HTTP; HTTPS = HTTP + SSL/TLS;

HTTPS使用了哪些加密方式?
建立鏈接的過程使用非對稱加密(耗時);(非對稱加密:公鑰加密, 私鑰解密)
后續(xù)通信采用對稱加密;(對稱加密: 只有一個密鑰)
加密方式


3. TCP/UDP

TCP:傳輸控制協(xié)議, 提供面向鏈接可靠的字流服務(wù), 提供超時重發(fā), 丟棄重復(fù)數(shù)據(jù), 檢測數(shù)據(jù)控制流量等功能, 正式收發(fā)數(shù)據(jù)之前需要建立三次握手;

建立鏈接三次握手:

  • 1.客戶端發(fā)送syn包,并進入syn_send(請求鏈接)狀態(tài), 并等待服務(wù)器確認;
  • 2.服務(wù)器收到客戶端的syn(序列編號)包后,也發(fā)送一個syn(syn=k, 即syn+ack)包,并進入syn_reveive狀態(tài);
  • 3.客戶端收到服務(wù)器的syn+ack包,向服務(wù)器發(fā)送確認包ack(ack = k+1),此包發(fā)送完畢則和服務(wù)器進入建立鏈接(ESTABLISHED)狀態(tài),完成三次握手;

為什么要三次握手?
假設(shè)只有兩次握手, 那么加入客戶端發(fā)發(fā)送的syn包超時了, 客戶端會啟用重試策略再次發(fā)送syn包, 后邊的的syn包先被接受, 然后鏈接成功, 接著最先發(fā)送的syn被接受到了, 就會再次鏈接; 然而初衷只是建立一次鏈接; 三次握手有效解決這個問題;

斷開連接的四次握手:

  • 1.客戶端發(fā)送fin包到服務(wù)器, 請求是否可以斷開;
  • 2.服務(wù)器收到收發(fā)送fin包,確認可以斷開;
  • 3.服務(wù)器發(fā)送ack包,并斷開連接;
  • 4.客戶端收到服務(wù)器的包并斷開鏈接,同時發(fā)送ack包確認斷開;

UDP:用戶數(shù)據(jù)報協(xié)議, 面向非鏈接, 不保證可靠性的數(shù)據(jù)傳輸服務(wù), 沒有超時重發(fā)等一系列等機制, 故而傳輸速度很快;
不與對方建立鏈接, 而是直接把數(shù)據(jù)包發(fā)送過去, UDP適用于一次只傳送少量數(shù)據(jù)對可靠性要求不高的應(yīng)用環(huán)境;

對比.png


4. Socket

socket是針對TCP/IP協(xié)議的封裝, socket本身并不是協(xié)議, 而是一個API,通過socket我們才能使用TCP/IP協(xié)議;
基于TCPsocket如何保證數(shù)據(jù)的完整性, 讀到包頭開始,直到讀到相應(yīng)的包尾,取出中間的buffr,認為是一個完整的數(shù)據(jù)包;
客戶端的使用流程:

  • 1.引入頭文件;
  • 2.創(chuàng)建socket;
  • 3.建立鏈接(基于TCP, 三次握手流程);
  • 4.發(fā)送數(shù)據(jù)到服務(wù)器;
  • 5.從服務(wù)器接受數(shù)據(jù);
  • 6.關(guān)閉鏈接;

5. DNS

域名到IP地址的映射,DNS解析請求采用UDP明文數(shù)據(jù)報;
常見的查詢方式有遞歸查詢和迭代查詢

DNS劫持問題:由于采用UDP明文數(shù)據(jù)報, 這樣就容易被釣魚DNS劫持
返回錯誤的IP地址; 注意:DNS劫持HTTP是沒有關(guān)系的, 因為劫持是發(fā)生在HTTP建立之前的;
可以通過HTTPDNS長連接方案解決DNS劫持問題;


6. Session&Cookies

Cookies是保存在客戶端用來記錄區(qū)分用戶狀態(tài)的數(shù)據(jù);
Session是保存在服務(wù)器端用來記錄區(qū)分用戶狀態(tài)的數(shù)據(jù);
Session依賴于Cookies的機制;


名詞解釋及鏈接

ack 即確認字符, 在TCP/IP協(xié)議中如果接收方成功收到數(shù)據(jù)那么會回復(fù)一個ack數(shù)據(jù)(通常ack有自己固定的格式和長度大小, 由接收方回復(fù)給發(fā)送方);
syn即同步序列編號, TCP/IP建立鏈接使用的握手信號,TCP鏈接的第一個包; (syn攻擊, 大量發(fā)送此類的包, 服務(wù)器);
fin帶有標志位的數(shù)據(jù)包用來結(jié)束一個TCP回話,但對應(yīng)的端口仍處于開放狀態(tài), 準備接收后續(xù)的數(shù)據(jù);


參考文章
iOS HTTP chunked
HTTP的長連接和短連接
HTTP Keep-Alive模式
HttpDNS功能說明及實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仪糖,一起剝皮案震驚了整個濱河市钟沛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耻卡,老刑警劉巖吉执,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯淫,死亡現(xiàn)場離奇詭異,居然都是意外死亡戳玫,警方通過查閱死者的電腦和手機熙掺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量九,“玉大人适掰,你說我怎么就攤上這事颂碧。” “怎么了类浪?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵载城,是天一觀的道長。 經(jīng)常有香客問我费就,道長诉瓦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任力细,我火速辦了婚禮睬澡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眠蚂。我一直安慰自己煞聪,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布逝慧。 她就那樣靜靜地躺著昔脯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笛臣。 梳的紋絲不亂的頭發(fā)上云稚,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音沈堡,去河邊找鬼静陈。 笑死,一個胖子當著我的面吹牛诞丽,可吹牛的內(nèi)容都是我干的鲸拥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼率拒,長吁一口氣:“原來是場噩夢啊……” “哼崩泡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猬膨,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤角撞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勃痴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谒所,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年沛申,在試婚紗的時候發(fā)現(xiàn)自己被綠了劣领。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铁材,死狀恐怖尖淘,靈堂內(nèi)的尸體忽然破棺而出奕锌,到底是詐尸還是另有隱情,我是刑警寧澤村生,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布惊暴,位于F島的核電站,受9級特大地震影響趁桃,放射性物質(zhì)發(fā)生泄漏辽话。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一卫病、第九天 我趴在偏房一處隱蔽的房頂上張望油啤。 院中可真熱鬧,春花似錦蟀苛、人聲如沸益咬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础废。三九已至,卻和暖如春罕模,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帘瞭。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工淑掌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝶念。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓抛腕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媒殉。 傳聞我的和親對象是個殘疾皇子担敌,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容