OC總結(jié)篇 - 網(wǎng)絡(luò)基礎(chǔ)

相關(guān)文章: http://www.reibang.com/p/dc5b91f826f0

HTTP的發(fā)展

HTTP誕生:1990年纽帖,www全球信息剛起步時(shí)就得到了應(yīng)用
HTTP0.9版本:1991年,只有一個(gè)命令GET
HTTP1.0版本:1996年,不僅可以傳輸文字,還可以傳輸圖像昧捷,視頻秉馏,二進(jìn)制文件
HTTP1.1版本:1999年,進(jìn)一步完善了HTTP協(xié)議朋蔫,直到現(xiàn)在一直是很流行的版本
HTTPS: 2000年,是以安全為目標(biāo)的HTTP通道

什么是HTTP,HTTP協(xié)議具體包含哪些內(nèi)容,HTTP連接是怎么建立的

超文本傳輸協(xié)議

HTTP報(bào)文格式
請(qǐng)求報(bào)文
響應(yīng)報(bào)文
HTTP的請(qǐng)求方式有

GET
POST
HEAD
PUT
DELETE
OPTIONS

GET和POST的區(qū)別

初級(jí)回答

  1. 請(qǐng)求參數(shù)位置: GET以問好拼接放在URL中,POST放在Body中
  2. 請(qǐng)求參數(shù)長度限制: GET限制2048個(gè)字符,POST無限制
  3. 安全性: GET不安全,POST相對(duì)安全

高級(jí)回答

  1. GET: 用來獲取資源的,需要遵從得是:安全性,冪等性,可緩存性
  2. POST: 是用來處理資源的,需要遵從的是非安全,非冪等,不可緩存

安全性:
指的是不應(yīng)該引起Server端相關(guān)數(shù)據(jù)的任何狀態(tài)變化
GET HEAD OPTIONS遵從安全性

冪等性:
同一個(gè)請(qǐng)求方法執(zhí)行多次和執(zhí)行一次的效果完全相同
PUT DELETE遵從

可緩存性:
請(qǐng)求是否可以被緩存
GET HEAD遵從

常見狀態(tài)碼及含義

1xx
2xx: 200響應(yīng)成功
3xx: 301和302可能是網(wǎng)絡(luò)重定向
4xx: 401和404可能是客戶端發(fā)起的請(qǐng)求本身存在問題
5xx: 501和502可能代表server端本身異常

HTTP的連接建立流程,涉及到TCP的三次握手和四次揮手
  1. 第一步先發(fā)起一個(gè)HTTP請(qǐng)求前,需要通過TCP的三次握手來建立連接,其實(shí)是客戶端和server端的三次交互
  2. 第二步是,在這條TCP通道上進(jìn)行HTTP的請(qǐng)求與相應(yīng)的數(shù)據(jù)傳遞
  3. 第三次是TCP的四次揮手,也就是客戶端和Server的四次交互
1.客戶端發(fā)送SYN同步報(bào)文給服務(wù)端
2.服務(wù)端收到后梭域,會(huì)給客戶端回復(fù)報(bào)文SYN,ACK
3.客戶端收到后會(huì)給服務(wù)端回復(fù)報(bào)文信息ACK報(bào)文
三次握手成功后證明TCP的通道建立成功了斑举,下面就可以發(fā)送數(shù)據(jù)了

4.當(dāng)我們點(diǎn)擊登錄按鈕,客戶端會(huì)發(fā)送HTTP的請(qǐng)求報(bào)文到服務(wù)端
5.當(dāng)服務(wù)端收到4時(shí)病涨,處理后返回給客戶端信息富玷,就是相應(yīng)報(bào)文

結(jié)束后通道需要關(guān)閉,假設(shè)這次關(guān)閉是由客戶端發(fā)起的
6,客戶端發(fā)送FIN報(bào)文既穆,即終止報(bào)文
7.  服務(wù)端收到終止報(bào)文后赎懦,會(huì)返回給客戶端一個(gè)ACK確認(rèn)終止
此時(shí)客戶端向服務(wù)端方向的連接已經(jīng)斷開了

8。過一段時(shí)間幻工,服務(wù)端又會(huì)發(fā)送給客戶端第8條FIN  ACK終止報(bào)文
9励两。當(dāng)客戶端收到終止報(bào)文之后,回復(fù)給服務(wù)端一條ACK確認(rèn)報(bào)文
此時(shí)由服務(wù)端向客戶端方向的TCP連接通道已經(jīng)斷開了

TCP連接通道是雙向的一條通道囊颅,客戶端可以通過這條通道向服務(wù)器端發(fā)送數(shù)據(jù)当悔,服務(wù)器端也可以通過這個(gè)通道向客戶端發(fā)送數(shù)據(jù)傅瞻??盲憎?

疑問:
??為什么TCP是三次握手,而不是兩次?
??四次揮手為什么要進(jìn)行兩方面的斷開?

HTTP的特點(diǎn)
  1. 無連接: 它的連接是有一個(gè)建立連接和釋放連接的過程
    解決方案是:HTTP的持久連接

  2. 無狀態(tài): 在多次發(fā)送HTTP請(qǐng)求的時(shí)候,如果是同一個(gè)用戶的話,對(duì)于server端,它是不知道這是同一個(gè)用戶的
    當(dāng)我們打開一個(gè)網(wǎng)頁去購買商品的時(shí)候,會(huì)添加到購物車中,會(huì)發(fā)送多次請(qǐng)求,那么server端應(yīng)該如何去規(guī)避這種無狀態(tài)的弊端呢
    解決方案是HTTP的Cookie和Session相關(guān)技術(shù)

持久連接

非持久連接是指,當(dāng)客戶端和server端進(jìn)行交互時(shí),會(huì)打開一個(gè)TCP連接,然后關(guān)閉,再請(qǐng)求時(shí),又打開一個(gè)TCP連接,再關(guān)閉,也就是每次網(wǎng)絡(luò)請(qǐng)求,都要新創(chuàng)建TCP連接
,每次都要經(jīng)歷三次握手和四次揮手

持久連接是指,當(dāng)我們打開一條TCP通道,在一定時(shí)間內(nèi),多個(gè)HTTP請(qǐng)求,是在同一條TCP通道中進(jìn)行數(shù)據(jù)傳遞,過一段時(shí)間后才會(huì)關(guān)閉這條通道

HTTP為了提升請(qǐng)求響應(yīng)的效率,所以才有了持久連接這個(gè)方案

????持久連接的頭部字段有:

  1. Connection : keep-alive 客戶端期許采用持久連接
  2. time: 20 持久連接需要持續(xù)多長時(shí)間,20S內(nèi)如果再次發(fā)起同一個(gè)域名或者IP的請(qǐng)求,可以 復(fù)用TCP通道
  3. max: 10 最多可以支持多少個(gè)HTTP請(qǐng)求和響應(yīng)對(duì)

??同一條TCP通道上,產(chǎn)生了多次HTTP請(qǐng)求,那么怎樣判斷一個(gè)請(qǐng)求是否結(jié)束和后一個(gè)請(qǐng)求的開始呢?

  1. 請(qǐng)求和響應(yīng)報(bào)文都有頭部字段,在響應(yīng)報(bào)文的頭部字段中會(huì)涉及到
    Content-length: 1024
    在我們發(fā)送請(qǐng)求,server回復(fù)時(shí),會(huì)攜帶響應(yīng)數(shù)據(jù)的大小,就是Content-length,當(dāng)客戶端所接收的字節(jié)數(shù)到達(dá)這個(gè)值時(shí),說明這個(gè)HTTP請(qǐng)求響應(yīng)已經(jīng)全部接收了,意味著結(jié)束

  2. POST請(qǐng)求時(shí),Server端返回往往是多次響應(yīng)返回給這些數(shù)據(jù)的,可以通過頭部字段
    chuked: 最后一個(gè)塊是空chuked
    來判斷一個(gè)請(qǐng)求是否結(jié)束
    當(dāng)有多個(gè)塊通過HTTP的TCP連接傳輸給客戶端時(shí),每個(gè)報(bào)文都會(huì)帶有一個(gè)chuked字段,而最后一個(gè)塊,它是一個(gè)空的chuked,可以根據(jù)chuked是否為空來判斷上一個(gè)請(qǐng)求是否結(jié)束

HTTPS與網(wǎng)絡(luò)安全

2016年年底嗅骄,蘋果公司向開發(fā)者提出要求:全面適配https網(wǎng)絡(luò)請(qǐng)求,此要求是為了提高iOS客戶端的安全性

HTTP和HTTPS的區(qū)別:HTTPS = HTTP + SSL/TLS,多出的 SSL/TLS,就是安全模塊

總結(jié): HTTPS是安全的HTTP,他的安全,是由SSL/TLS協(xié)議來保障的
IP層: 網(wǎng)絡(luò)層
TCP層:傳輸層
HTTP:應(yīng)用層
SSL/TLS: 協(xié)議中間層


HTTPS的連接建立流程(有安全保證)
  1. 客戶端發(fā)報(bào)文,包含客戶端支持的TLS版本,客戶端支持的加密算法,還有一個(gè)隨機(jī)C
  2. Server返回給客戶端一個(gè)握手消息,也包括最終決定的加密算法(客戶端提供N中,Server選擇一個(gè)),隨機(jī)數(shù)S和Server的證書
  3. 客戶端進(jìn)行證書的公鑰驗(yàn)證,來判定當(dāng)前server是否合法
  4. 客戶端組裝會(huì)話秘鑰(用隨機(jī)數(shù)C+S+客戶端產(chǎn)生的預(yù)主秘鑰三個(gè)組裝合 )
  5. 客戶端會(huì)發(fā)送報(bào)文,通過Server的公鑰對(duì)預(yù)主秘鑰進(jìn)行加密傳輸
  6. server端通過私鑰解密得到預(yù)主秘鑰
  7. server端組裝會(huì)話秘鑰(用隨機(jī)數(shù)C+S+私鑰解密得到的預(yù)主秘鑰三個(gè)組裝合成)
  8. 客戶端向Server端發(fā)送加密的握手消息
  9. Server端返回給客戶端一個(gè)加密的握手消息,來驗(yàn)證安全通道是否已經(jīng)驗(yàn)證完成
HTTPS的連接建立流程

備注:
會(huì)話秘鑰 = 隨機(jī)數(shù)S + 隨機(jī)數(shù)C + 預(yù)主秘鑰
會(huì)話秘鑰是對(duì)稱加密的秘鑰

公鑰和私鑰是非對(duì)稱加密

HTTPS中使用了哪些加密手段,為什么使用這些?

主要使用了對(duì)稱加密和非對(duì)稱加密

  1. 連接建立過程使用非對(duì)稱加密,保證安全
    非對(duì)稱加密很耗時(shí)!!!,因?yàn)榧用芎徒饷苁褂玫氖侄尾灰粯?/li>
  2. 數(shù)據(jù)傳輸過程是使用的對(duì)稱加密,減少耗時(shí)所帶來的性能損耗

非對(duì)稱加密??
假設(shè)發(fā)送方要發(fā)送hello出去,那么發(fā)送方會(huì)先用一個(gè)公鑰對(duì)hello進(jìn)行加密,之后經(jīng)過TCP的連接,將加密之后的內(nèi)容發(fā)給接收方
當(dāng)接收方拿到數(shù)據(jù)后,用私鑰進(jìn)行解密,然后拿到hello
加密用公鑰,解密就要用私鑰,如果加密用私鑰,那么解密就要用公鑰
????加密和解密必須使用不同的鑰
好處是非常安全,只有公鑰是在TCP中傳輸,私鑰永遠(yuǎn)保留在Server端,不涉及被中間人盜取的情況


對(duì)稱加密??
發(fā)送方使用一個(gè)對(duì)稱秘鑰進(jìn)行加密,然后將結(jié)果通過TCP連接傳過去
接收方通過同一個(gè)對(duì)稱秘鑰進(jìn)行解密,拿到結(jié)果
加密和解密是同一把鑰匙
自身缺點(diǎn)是:秘鑰需要通過TCP通道進(jìn)行傳遞,這樣server才能使用這個(gè)秘鑰,一旦在傳遞過程中被中間人攻擊,那么就不能保證安全了


工具
Charles查爾斯小瓶子(網(wǎng)絡(luò)調(diào)試代理)

當(dāng)你開著charles去刷新某個(gè)網(wǎng)頁時(shí)饼疙,charles會(huì)抓到你請(qǐng)求的數(shù)據(jù)

?? 查爾斯抓包原理是什么?
利用了HTTP的中間人攻擊漏洞來進(jìn)行實(shí)現(xiàn)的

??關(guān)于HTTP的中間人攻擊是什么?
當(dāng)客戶端發(fā)送請(qǐng)求時(shí),中間人會(huì)攔截住,然后假冒客戶端的身份,去向server請(qǐng)求, server會(huì)返回結(jié)果給中間人,然后中間人再把結(jié)果返回給客戶端
中間人可以篡改我們請(qǐng)求的參數(shù),包括server返回的數(shù)據(jù)也可以篡改

  1. Wireshark(網(wǎng)絡(luò)分析器)
    打開Wireshark的wifi連接溺森,然后隨便打開一個(gè)網(wǎng)頁,就可以在Wireshark看到網(wǎng)絡(luò)數(shù)據(jù)
    80是HTTP的端口號(hào)
    5985是客戶端的臨時(shí)端口號(hào)
    下面這條59854 - 80的數(shù)據(jù)窑眯,是客戶端向服務(wù)器端方向發(fā)送的一個(gè)報(bào)文屏积,還可以看到是TCP報(bào)文,并且是SYN,證明是第一次握手
傳輸層中的TCP和UDP

TCP: 傳輸控制協(xié)議
UDP: 用戶數(shù)據(jù)報(bào)協(xié)議

UDP

UDP協(xié)議是什么,特點(diǎn)和功能是什么?
????特點(diǎn):

  1. 無連接: 發(fā)送UDP數(shù)據(jù)報(bào)時(shí),不需要事先建立好連接,也不需要釋放連接
  2. 盡最大努力交付: 不保證可靠傳輸
  3. 面向報(bào)文: 既不合并,也不拆分,它會(huì)將應(yīng)用層報(bào)直接拼接UDP首部,組成UDP數(shù)報(bào),然后再在IP層拼接上IP首部,直接向外傳送
    !](https://upload-images.jianshu.io/upload_images/1602974-fc3012d6f898f61f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    備注:
    IP層: 網(wǎng)絡(luò)層
    TCP層:傳輸層
    HTTP:應(yīng)用層
    SSL/TLS: 協(xié)議中間層

????功能:復(fù)用分用,差錯(cuò)檢測(cè)

復(fù)用分用
建立傳輸過程中需要IP地址和端口號(hào)的組成,也就是常說的套接字


TCP

特點(diǎn)

  1. 面向連接 : 數(shù)據(jù)傳輸開始前需要建立連接,結(jié)束后要釋放連接
  2. 可靠傳輸: 保證報(bào)文無差錯(cuò),不丟失,不重復(fù),按序到達(dá)
  3. 面向字節(jié)流
  4. 流量控制
  5. 擁塞控制

??為什么是三次握手?
三次握手能解決請(qǐng)求的超時(shí)場(chǎng)景



三次握手可以解決客戶端第一次SYN報(bào)文的超時(shí)問題
假如第一次SYN超時(shí),客戶端會(huì)在一定時(shí)間后發(fā)起SYN重連,當(dāng)Server回復(fù)連接報(bào)文后,如果客戶端的第一個(gè)超時(shí)SYN此時(shí)發(fā)出來了,如果是兩次握手的話,那么Server端會(huì)認(rèn)為客戶端發(fā)來兩次連接報(bào)文,如果是三次連接,當(dāng)Server回復(fù)后,會(huì)等待客戶端的ACK確認(rèn)報(bào)文,客戶端只會(huì)確認(rèn)一次,那么Server就會(huì)認(rèn)為客戶端第二次發(fā)送的SYN報(bào)文是無效的

??為什么是四次揮手?



6和7之后,客戶端向server端的通道就關(guān)閉了
8和9之后,server端向客戶端的通道就關(guān)閉了
之所以關(guān)閉兩次,是因?yàn)門CP通道是雙向的,一條通道,兩方都可以發(fā)送和接收,所以必須兩次斷開

DNS解析

域名到IP地址的映射

Session / Cookie

是為了解決HTTP的無狀態(tài)特點(diǎn)的

無狀態(tài): 在多次發(fā)送HTTP請(qǐng)求的時(shí)候,如果是同一個(gè)用戶的話,對(duì)于server端,它是不知道這是同一個(gè)用戶的
當(dāng)我們打開一個(gè)網(wǎng)頁去購買商品的時(shí)候,會(huì)添加到購物車中,會(huì)發(fā)送多次請(qǐng)求,那么server端應(yīng)該如何去規(guī)避這種無狀態(tài)的弊端呢

Cookie是用來區(qū)分用戶的,他會(huì)記錄用戶狀態(tài),保存在客戶端
Session也是用來區(qū)分用戶的,他會(huì)記錄用戶狀態(tài),保存在Server端

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末磅甩,一起剝皮案震驚了整個(gè)濱河市炊林,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌更胖,老刑警劉巖铛铁,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔显,死亡現(xiàn)場(chǎng)離奇詭異却妨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)括眠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門彪标,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掷豺,你說我怎么就攤上這事捞烟。” “怎么了当船?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵题画,是天一觀的道長。 經(jīng)常有香客問我德频,道長苍息,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任壹置,我火速辦了婚禮竞思,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钞护。我一直安慰自己盖喷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布难咕。 她就那樣靜靜地躺著课梳,像睡著了一般距辆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暮刃,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天挑格,我揣著相機(jī)與錄音,去河邊找鬼沾歪。 笑死漂彤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灾搏。 我是一名探鬼主播挫望,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼狂窑!你這毒婦竟也來了媳板?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤泉哈,失蹤者是張志新(化名)和其女友劉穎蛉幸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丛晦,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奕纫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烫沙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匹层。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锌蓄,靈堂內(nèi)的尸體忽然破棺而出升筏,到底是詐尸還是另有隱情,我是刑警寧澤瘸爽,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布您访,位于F島的核電站,受9級(jí)特大地震影響剪决,放射性物質(zhì)發(fā)生泄漏灵汪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一昼捍、第九天 我趴在偏房一處隱蔽的房頂上張望识虚。 院中可真熱鬧,春花似錦妒茬、人聲如沸担锤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肛循。三九已至铭腕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間多糠,已是汗流浹背累舷。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夹孔,地道東北人被盈。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像搭伤,于是被迫代替她去往敵國和親只怎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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