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

HTTP

超文本傳輸協(xié)議
請求報文格式


請求報文

響應報文格式


響應報文

常用的請求方式

POST GET HEAD PUT DELETE OPTIONS

POST 與 GET的區(qū)別

POST:非安全、非冪等、不可緩存
GET:安全的、冪等的、可緩存

  1. 安全的:不引起服務端任何狀態(tài)變化。有:GET、HEAD、OPTIONS
  2. 冪等的:一次請求與多次執(zhí)行結(jié)果相同。有:GET、PUT、DELETE
  3. 可緩存:請求可以在網(wǎng)絡路徑上去緩存。有:GETHEAD

狀態(tài)碼

常見狀態(tài)碼

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

完整的HTTP過程

HTTP請求

HTTP請求會先三次握手建立TCP連接,然后發(fā)送HTTP請求,與接收響應,最后四次揮手斷開連接。

HTTP特點

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

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

Charles抓包原理

中間人攻擊:
中間設備截獲客戶端的HTTP請求,假裝客戶端像服務端請求,獲取到服務端的響應,再返回給客戶端。中間人可以對請求與響應進行修改再進行發(fā)送。


HTTPS

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

HTTPS連接建立流程

HTTPS連接建立流程
  1. 客戶端將TLS版本號,支持的加密算法列表,隨機數(shù)C傳給服務端。
  2. 服務端從支持的算法列表中確定加密算法,帶上隨機數(shù)S與證書返給客戶端。
  3. 客戶端驗證證書。
  4. 客戶端將隨機數(shù)C,隨機數(shù)S,預主秘鑰等組裝會話秘鑰。
  5. 客戶端通過公鑰對預主秘鑰加密,傳輸給服務端。
  6. 服務端通過私鑰解密預主秘鑰。
  7. 服務端組裝會話秘鑰。
  8. 客戶端與服務端發(fā)送加密的握手消息,驗證通道連接。
    會話秘鑰:對稱加密中使用。

HTTPS使用的加密手段

  1. 對稱加密: 后續(xù)通訊過程中使用。
    服務端與客戶端使用相同的公鑰進行加密解密。
  2. 非對稱加密: 連接建立過程中使用。
    客戶端通過公鑰加密與解密。
    服務端通過私鑰加密與解密。

TCP與UDP

TCP與UDP區(qū)別

UDP
特點:無連接,盡最大努力交付,面向報文。
功能:復用、分用、差錯檢測
TCP
特點:面向連接、可靠傳輸、面向字節(jié)流、流量控制、擁塞控制

  1. 面向連接:傳輸前需要建立連接,三次握手;傳輸結(jié)束,斷開連接,四次握手。
    三次握手
  • 客戶端發(fā)送握手信號SYN
  • 服務端接收到握手信號SYN,發(fā)送SYN與確認信號ACK
  • 客戶端發(fā)送確認信號ACK
    四次揮手
  • 客戶端發(fā)送結(jié)束信號FIN
  • 服務端發(fā)送確認信號ACK
  • 客戶端接收到確認信號ACK,斷開客戶端到服務端的連接
  • 服務端發(fā)送結(jié)束信號FIN與確認信號ACK
  • 客戶端發(fā)送確認信號ACK
  • 服務端接收到確認信號斷開服務端到客戶端的連接
  1. 可靠傳輸:信號無差錯、不丟失、不重復、按序到達
  2. 流量控制:對傳輸?shù)淖止?jié)流大小進行控制。
  3. 擁塞控制: 慢開始、擁塞避免;快恢復、快重傳

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

  • 三次握手



    如果第一次SYN超時,客戶端會觸發(fā)超時重傳,發(fā)送新的SYN,如果這是連接成功,超時的SYN這時到達服務端,服務端會認為客戶端又想建立一個新的連接,如果只有兩次握手,就會建立兩個連接。而三次握手,客戶端就可以忽略第二次的握手信號,避免重復建立連接。-

  • 四次握手
    TCP的連接通道是全雙工的,需要分別斷開兩個端點的連接。

如何保障可靠傳輸

  • 超時重傳


    超時重傳

    客戶端在一定時間范圍內(nèi),未收到確認信號,就會重傳報文。

  • 確認丟失、確認遲到


    確認丟失、確認遲到

    確認信號因為網(wǎng)絡原因未到達客戶端,客戶端再次發(fā)送相同報文,服務端會對重復報文進行丟棄,并重新發(fā)送確認信號。當舊的確認信號又到達后,客戶端繼續(xù)現(xiàn)有操作,忽略這個確認信號。

流量控制實現(xiàn)

滑動窗口協(xié)議

擁塞控制實現(xiàn)

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


    快恢復

    當超時后,將閾值設為一半,開始線性增長

DNS

DNS查詢方式

遞歸查詢


遞歸查詢

逐級向上查找
迭代查找


迭代查找

去可能有的服務器查找

DNS劫持

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


DNS劫持

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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