iOS開發(fā)需掌握的網(wǎng)絡(luò)基礎(chǔ)

HTTP

超文本傳輸協(xié)議
請(qǐng)求報(bào)文格式


請(qǐng)求報(bào)文

響應(yīng)報(bào)文格式


響應(yīng)報(bào)文

常用的請(qǐng)求方式

POST GET HEAD PUT DELETE OPTIONS

POST 與 GET的區(qū)別

POST:非安全僧界、非冪等、不可緩存
GET:安全的、冪等的猜揪、可緩存

  1. 安全的:不引起服務(wù)端任何狀態(tài)變化而姐。有:GET拴念、HEAD褐缠、OPTIONS
  2. 冪等的:一次請(qǐng)求與多次執(zhí)行結(jié)果相同队魏。有:GETPUT瞬雹、DELETE
  3. 可緩存:請(qǐng)求可以在網(wǎng)絡(luò)路徑上去緩存挖炬。有:GET状婶、HEAD

狀態(tài)碼

常見狀態(tài)碼

  1. 1XX
  2. 2XX: 200 請(qǐng)求成功
  3. 3XX: 301,302 網(wǎng)絡(luò)重定向
  4. 4XX: 401,404 一般表示請(qǐng)求可能存在問題
  5. 5XX:502,501 一般表示服務(wù)端存在異常

完整的HTTP過程

HTTP請(qǐng)求

HTTP請(qǐng)求會(huì)先三次握手建立TCP連接,然后發(fā)送HTTP請(qǐng)求,與接收響應(yīng),最后四次揮手?jǐn)嚅_連接草姻。

HTTP特點(diǎn)

無連接,無狀態(tài)
1.無連接:每次連接只處理一個(gè)請(qǐng)求,一次應(yīng)答完畢后斷開連接撩独。
解決方案:HTTP持久連接综膀。
頭部字段
Connection:keep-alive 是否采用持久連接
time:10 連接持續(xù)時(shí)間
max:10 做多發(fā)生多少次HTTP請(qǐng)求
判斷持久連接結(jié)束
Content-Length長(zhǎng)度
chunked是否為空,為空結(jié)束

  1. 無狀態(tài):對(duì)于交互場(chǎng)景沒有記憶能力剧劝。
    解決方案:cookie/session

Charles抓包原理

中間人攻擊:
中間設(shè)備截獲客戶端的HTTP請(qǐng)求,假裝客戶端像服務(wù)端請(qǐng)求,獲取到服務(wù)端的響應(yīng),再返回給客戶端讥此。中間人可以對(duì)請(qǐng)求與響應(yīng)進(jìn)行修改再進(jìn)行發(fā)送谣妻。


HTTPS

HTTPS = HTTP+SSL/TLS
HTTPS是安全的HTTP,安全是由SSL/TLS(應(yīng)用層之下,傳輸層之上)的協(xié)議保證的他巨。

HTTPS連接建立流程

HTTPS連接建立流程
  1. 客戶端將TLS版本號(hào),支持的加密算法列表,隨機(jī)數(shù)C傳給服務(wù)端闻蛀。
  2. 服務(wù)端從支持的算法列表中確定加密算法,帶上隨機(jī)數(shù)S與證書返給客戶端。
  3. 客戶端驗(yàn)證證書役衡。
  4. 客戶端將隨機(jī)數(shù)C,隨機(jī)數(shù)S,預(yù)主秘鑰等組裝會(huì)話秘鑰。
  5. 客戶端通過公鑰對(duì)預(yù)主秘鑰加密,傳輸給服務(wù)端俐芯。
  6. 服務(wù)端通過私鑰解密預(yù)主秘鑰。
  7. 服務(wù)端組裝會(huì)話秘鑰吧史。
  8. 客戶端與服務(wù)端發(fā)送加密的握手消息,驗(yàn)證通道連接贸营。
    會(huì)話秘鑰:對(duì)稱加密中使用岩睁。

HTTPS使用的加密手段

  1. 對(duì)稱加密: 后續(xù)通訊過程中使用捕儒。
    服務(wù)端與客戶端使用相同的公鑰進(jìn)行加密解密刘莹。
  2. 非對(duì)稱加密: 連接建立過程中使用。
    客戶端通過公鑰加密與解密扇调。
    服務(wù)端通過私鑰加密與解密肃拜。

TCP與UDP

TCP與UDP區(qū)別

UDP
特點(diǎn):無連接,盡最大努力交付,面向報(bào)文雌团。
功能:復(fù)用、分用猛蔽、差錯(cuò)檢測(cè)
TCP
特點(diǎn):面向連接曼库、可靠傳輸略板、面向字節(jié)流叮称、流量控制、擁塞控制

  1. 面向連接:傳輸前需要建立連接,三次握手;傳輸結(jié)束,斷開連接,四次握手娱节。
    三次握手
  • 客戶端發(fā)送握手信號(hào)SYN
  • 服務(wù)端接收到握手信號(hào)SYN,發(fā)送SYN與確認(rèn)信號(hào)ACK
  • 客戶端發(fā)送確認(rèn)信號(hào)ACK
    四次揮手
  • 客戶端發(fā)送結(jié)束信號(hào)FIN
  • 服務(wù)端發(fā)送確認(rèn)信號(hào)ACK
  • 客戶端接收到確認(rèn)信號(hào)ACK,斷開客戶端到服務(wù)端的連接
  • 服務(wù)端發(fā)送結(jié)束信號(hào)FIN與確認(rèn)信號(hào)ACK
  • 客戶端發(fā)送確認(rèn)信號(hào)ACK
  • 服務(wù)端接收到確認(rèn)信號(hào)斷開服務(wù)端到客戶端的連接
  1. 可靠傳輸:信號(hào)無差錯(cuò)祭示、不丟失质涛、不重復(fù)蹂窖、按序到達(dá)
  2. 流量控制:對(duì)傳輸?shù)淖止?jié)流大小進(jìn)行控制。
  3. 擁塞控制: 慢開始横媚、擁塞避免;快恢復(fù)灯蝴、快重傳

為什么要三次握手穷躁、四次揮手

  • 三次握手



    如果第一次SYN超時(shí),客戶端會(huì)觸發(fā)超時(shí)重傳,發(fā)送新的SYN,如果這是連接成功,超時(shí)的SYN這時(shí)到達(dá)服務(wù)端,服務(wù)端會(huì)認(rèn)為客戶端又想建立一個(gè)新的連接,如果只有兩次握手,就會(huì)建立兩個(gè)連接问潭。而三次握手,客戶端就可以忽略第二次的握手信號(hào),避免重復(fù)建立連接狡忙。-

  • 四次握手
    TCP的連接通道是全雙工的,需要分別斷開兩個(gè)端點(diǎn)的連接灾茁。

如何保障可靠傳輸

  • 超時(shí)重傳


    超時(shí)重傳

    客戶端在一定時(shí)間范圍內(nèi),未收到確認(rèn)信號(hào),就會(huì)重傳報(bào)文北专。

  • 確認(rèn)丟失拓颓、確認(rèn)遲到


    確認(rèn)丟失描孟、確認(rèn)遲到

    確認(rèn)信號(hào)因?yàn)榫W(wǎng)絡(luò)原因未到達(dá)客戶端,客戶端再次發(fā)送相同報(bào)文,服務(wù)端會(huì)對(duì)重復(fù)報(bào)文進(jìn)行丟棄,并重新發(fā)送確認(rèn)信號(hào)画拾。當(dāng)舊的確認(rèn)信號(hào)又到達(dá)后,客戶端繼續(xù)現(xiàn)有操作,忽略這個(gè)確認(rèn)信號(hào)青抛。

流量控制實(shí)現(xiàn)

滑動(dòng)窗口協(xié)議

擁塞控制實(shí)現(xiàn)

慢開始
  1. 從發(fā)送1個(gè)數(shù)據(jù)包開始,指數(shù)增長(zhǎng)
  2. 達(dá)到設(shè)定閾值后,線性增長(zhǎng)傳送包的大小
  3. 當(dāng)數(shù)據(jù)超時(shí)后,將閾值設(shè)為該值的一半重新開始


    快恢復(fù)

    當(dāng)超時(shí)后,將閾值設(shè)為一半,開始線性增長(zhǎng)

DNS

DNS查詢方式

遞歸查詢


遞歸查詢

逐級(jí)向上查找
迭代查找


迭代查找

去可能有的服務(wù)器查找

DNS劫持

DNS劫持與HTTP無關(guān)适室。
DNS解析發(fā)生在HTTP之前举瑰。
DNS解析使用UDP數(shù)據(jù)報(bào),端口號(hào)53


DNS劫持

發(fā)送錯(cuò)誤的ip,訪問錯(cuò)誤的網(wǎng)站
解決DNS劫持
httpDNS:使用HTTP協(xié)議向DNS服務(wù)器請(qǐng)求,80端口,不使用53端口汽畴。
長(zhǎng)連接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忍些,一起剝皮案震驚了整個(gè)濱河市罢坝,隨后出現(xiàn)的幾起案子嘁酿,更是在濱河造成了極大的恐慌男应,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異众弓,居然都是意外死亡隔箍,警方通過查閱死者的電腦和手機(jī)蜒滩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锌订,“玉大人辆飘,你說我怎么就攤上這事谓传⌒” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贬媒。 經(jīng)常有香客問我,道長(zhǎng)际乘,這世上最難降的妖魔是什么脖含? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮养葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佃蚜。我一直安慰自己谐算,他們只是感情好洲脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剧包,像睡著了一般恐锦。 火紅的嫁衣襯著肌膚如雪往果。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天一铅,我揣著相機(jī)與錄音陕贮,去河邊找鬼。 笑死馅闽,一個(gè)胖子當(dāng)著我的面吹牛飘蚯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播福也,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼攀圈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗦篱,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤浴栽,失蹤者是張志新(化名)和其女友劉穎坏晦,沒想到半個(gè)月后球碉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年拾积,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻唾。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扁誓,靈堂內(nèi)的尸體忽然破棺而出恬总,到底是詐尸還是另有隱情,我是刑警寧澤峻厚,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布辜王,位于F島的核電站,受9級(jí)特大地震影響续膳,放射性物質(zhì)發(fā)生泄漏闺阱。R本人自食惡果不足惜纪隙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一艾恼、第九天 我趴在偏房一處隱蔽的房頂上張望花沉。 院中可真熱鬧磷脯,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽团南。三九已至局义,卻和暖如春另萤,著一層夾襖步出監(jiān)牢的瞬間目养,已是汗流浹背努释。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雷客,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓部逮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親穆桂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子享完,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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