iOS網(wǎng)絡(luò)相關(guān)

網(wǎng)絡(luò)基礎(chǔ)術(shù)語(yǔ)

  • HTTP:超文本傳輸協(xié)議盛正,信息是明文傳輸?shù)摹?/li>
  • HTTPS:添加了加密及認(rèn)證機(jī)制的HTTP,具有安全性的ssl加密傳輸協(xié)議杖小。
  • DNS:域名系統(tǒng)。
  • FTP:文件傳輸協(xié)議怕吴。
  • TCP:傳輸控制協(xié)議
  • UDP:用戶數(shù)據(jù)報(bào)協(xié)議窍侧。
  • TCP/IP協(xié)議簇TCP/IP不是一個(gè)協(xié)議县踢,而是一個(gè)協(xié)議簇的統(tǒng)稱转绷。通常使用的網(wǎng)絡(luò)是在TCP/IP協(xié)議簇的基礎(chǔ)上運(yùn)行的。應(yīng)用層HTTP硼啤、DNS议经、FTP傳輸層TCP谴返、UDP煞肾,網(wǎng)絡(luò)層IP等等都屬于它內(nèi)部的一個(gè)子集。
  • URI:全稱統(tǒng)一資源標(biāo)識(shí)符嗓袱。
  • URL:全稱統(tǒng)一資源定位符籍救。

里面包括了IP協(xié)議,ICMP協(xié)議渠抹,TCP協(xié)議蝙昙,以及http闪萄、ftp、pop3協(xié)議等等奇颠。

一败去、HTTP協(xié)議

1. HTTP協(xié)議簡(jiǎn)介

HTTP是基于TCP的應(yīng)用層協(xié)議。不管是移動(dòng)客戶端還是PC端烈拒,訪問(wèn)遠(yuǎn)程的網(wǎng)絡(luò)資源經(jīng)常使用 HTTP協(xié)議圆裕。

OSI網(wǎng)絡(luò)七層協(xié)議從上到下分別是 :
應(yīng)用層表示層荆几、會(huì)話層吓妆、傳輸層網(wǎng)絡(luò)層吨铸、數(shù)據(jù)鏈路層耿战、物理層

TCP/IP協(xié)議分層從上到下分別是 :
應(yīng)用層焊傅、傳輸層剂陡、網(wǎng)絡(luò)層數(shù)據(jù)鏈路層狐胎、物理層鸭栖。

2. HTTP協(xié)議的作用

HTTP的全稱是Hypertext Transfer Protocol,超文本傳輸協(xié)議握巢。

  1. 規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
  2. 讓客戶端和服務(wù)器能有效的進(jìn)行數(shù)據(jù)溝通

3. HTTP的特點(diǎn)

無(wú)連接晕鹊、 無(wú)狀態(tài),HTTP的持久連接暴浦、Cookie/Session

  1. HTTP的無(wú)狀態(tài):HTTP協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力溅话。
  • 每次的請(qǐng)求都是獨(dú)立的,它的執(zhí)行情況和結(jié)果與前面請(qǐng)求歌焦、后面請(qǐng)求無(wú)直接關(guān)系的飞几。即它不會(huì)受前面請(qǐng)求應(yīng)答情況直接影響,也不會(huì)直接影響后面的請(qǐng)求應(yīng)答情況独撇。
  • 服務(wù)器中沒(méi)有保存客戶端的狀態(tài)屑墨,客戶端必須每次帶上自己的狀態(tài)去請(qǐng)求服務(wù)器。
  • 標(biāo)準(zhǔn)的HTTP協(xié)議指的是不包括cookies纷铣,session卵史,application的HTTP協(xié)議

HTTP是一種無(wú)狀態(tài)的協(xié)議,為了保存狀態(tài)引入了 Cookie 技術(shù):

  • Cookie通過(guò)在請(qǐng)求和響應(yīng)報(bào)文中寫入Cookie信息來(lái)控制客戶端的狀態(tài)搜立。
  • 根據(jù)服務(wù)器發(fā)送響應(yīng)報(bào)文內(nèi)Set-Cookie的首部字段信息以躯,通知客戶端保存Cookie
  • 客戶端在下次發(fā)送請(qǐng)求時(shí)帶上Cookie值啄踊,這樣服務(wù)器通過(guò)Cookie值就能知道是誰(shuí)發(fā)送的請(qǐng)求忧设。
  1. HTTP的持久連接
  • 非持久連接:每個(gè)連接處理一個(gè)請(qǐng)求-響應(yīng)事務(wù)色鸳。
  • 持久連接:每個(gè)連接可以處理多個(gè)請(qǐng)求-響應(yīng)事務(wù)(服務(wù)器發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開著,同一對(duì)客戶/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過(guò)這個(gè)連接發(fā)送)见转。
  • HTTP/1.0 使用非持久連接命雀。HTTP/1.1 默認(rèn)使用持久連接Connection: keep-alive
  1. HTTP持久連接是怎么判斷一個(gè)請(qǐng)求是否結(jié)束的?
  • Content-length:根據(jù)所接收字節(jié)數(shù)是否達(dá)到Content-length值斩箫。
  • chunked(分塊傳輸):Transfer-Encoding吏砂。當(dāng)選擇分塊傳輸時(shí),響應(yīng)頭中可以不包含Content-Length乘客,服務(wù)器會(huì)先回復(fù)一個(gè)不帶數(shù)據(jù)的報(bào)文(只有響應(yīng)行和響應(yīng)頭和\r\n)狐血,然后開始傳輸若干個(gè)數(shù)據(jù)塊。當(dāng)傳輸完若干個(gè)數(shù)據(jù)塊后易核,需要再傳輸一個(gè)空的數(shù)據(jù)塊骗村,當(dāng)客戶端收到空的數(shù)據(jù)塊時(shí)济蝉,則客戶端知道數(shù)據(jù)接收完畢塞弊。

4. 為什么選擇使用HTTP贸辈?

  1. 簡(jiǎn)單快速:因?yàn)镠TTP協(xié)議簡(jiǎn)單,所以HTTP服務(wù)器的程序規(guī)模小碰逸,因而通信速度很快
  2. 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)
  3. 使用非 常持續(xù)鏈接:限制每次鏈接只處理一個(gè)請(qǐng)求乡小,服務(wù)器對(duì)客戶端的請(qǐng)求作出響應(yīng)之后,馬上端口鏈接饵史,節(jié)省傳輸時(shí)間

二满钟、HTTP的通信過(guò)程

想要使用HTTP協(xié)議想服務(wù)器索取數(shù)據(jù),首先要了解HTTP通信的完整過(guò)程胳喷,主要分為兩大步驟:

  1. 請(qǐng)求:客戶端向服務(wù)器索要數(shù)據(jù)
  2. 響應(yīng):服務(wù)器返回給客戶端響應(yīng)的數(shù)據(jù)
通信過(guò)程

1. HTTP通信過(guò)程 之 請(qǐng)求

HTTP協(xié)議規(guī)定湃番,一個(gè)完整的有客戶端給服務(wù)器的HTTP請(qǐng)求中包含請(qǐng)求行、請(qǐng)求頭吭露、請(qǐng)求體三個(gè)部分:

  1. 請(qǐng)求行:包含了請(qǐng)求方法吠撮,請(qǐng)求URL,HTTP協(xié)議版本
'Method: POST'  // 請(qǐng)求方法
'URL: http://sy.aerozhonghuan.com:81/test/qingqi/visitreport-agent-qk/getDropDownList' // 請(qǐng)求URL
'Protocol: HTTP/1.1' // HTTP協(xié)議版本
  1. 請(qǐng)求頭:包含了客戶端請(qǐng)求的主機(jī)地址奴饮,對(duì)客戶端的環(huán)境描述等信息
'Host: sy.aerozhonghuan.com:81' // 客戶端想訪問(wèn)的服務(wù)器主機(jī)地址 

'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148' // 用戶代理:即客戶端的類型纬向,客戶端的軟件環(huán)境 
'Accept: application/json, text/javascript, */*;' // 客戶端所能接收的數(shù)據(jù)類型 
'Accept-Language: zh-cn' // 客戶端的語(yǔ)言環(huán)境 
'Accept-Encoding: gzip, deflate' // 客戶端支持的數(shù)據(jù)壓縮格式 
'cookie' // HTTP請(qǐng)求發(fā)送時(shí),會(huì)把保存在該請(qǐng)求域名下的所有cookie值一起發(fā)送給服務(wù)器戴卜。
'Connection: keep-alive' // (HTTP/1.1協(xié)議開始默認(rèn)進(jìn)行持久連接)
'Referer: url' // 包含一個(gè)URL,用戶從該URL代表的頁(yè)面出發(fā)訪問(wèn)當(dāng)前請(qǐng)求的頁(yè)面
  1. 請(qǐng)求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù)
{token: "xxx", startDate: "2020-06-01", endDate: "2020-06-30"}

2. HTTP通信過(guò)程 之 響應(yīng)

客戶端向服務(wù)器發(fā)送請(qǐng)求琢岩,服務(wù)器應(yīng)當(dāng)做出響應(yīng)投剥,即返回?cái)?shù)據(jù)給客戶端 。HTTP協(xié)議規(guī)定一個(gè)完整的HTTP響應(yīng)中包含以下內(nèi)容:

  1. 狀態(tài)行:包含了HTTP協(xié)議版本担孔,狀態(tài)碼江锨,短語(yǔ)(狀態(tài)描述)
'Protocol: HTTP/1.1' // HTTP協(xié)議版本
'Status Code: 200'
'OK'
  1. 響應(yīng)頭:包含了對(duì)服務(wù)器的描述吃警,對(duì)返回?cái)?shù)據(jù)的描述
'Server: nginx/1.10.1' // 服務(wù)器的類型
'Content-Type: application/json;charset=UTF-8' // 返回?cái)?shù)據(jù)的類型  
'Date: Sun, 28 Jun 2020 11:09:06 GMT' // 響應(yīng)的時(shí)間 
  1. 實(shí)體內(nèi)容:服務(wù)器返回給客戶端的具體數(shù)據(jù)
{"resultCode":200,"message":"OK","data":{"list":[{"value":1,"name":"大客戶拜訪"},{"value":2,"name":"代理商檢核"}]}}
  1. 常見響應(yīng)狀態(tài)碼
狀態(tài)碼 短語(yǔ)(狀態(tài)描述) 中文描述
200 OK 請(qǐng)求成功
300 重定向
400 Bad Request 客戶端請(qǐng)求語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法解析
404 Not Found 服務(wù)端無(wú)法根據(jù)客戶端的請(qǐng)求URL找到資源
500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤啄育,無(wú)法完成請(qǐng)求

三酌心、發(fā)送HTTP請(qǐng)求的方法

1. 在HTTP/1.1協(xié)議中,定義了8種發(fā)送http請(qǐng)求的方法:

HTTP請(qǐng)求方法 作用
GET 查:向服務(wù)器請(qǐng)求一個(gè)文件
POST 改:向服務(wù)器發(fā)送數(shù)據(jù)挑豌,讓服務(wù)器進(jìn)行修改更新
PUT 增:向服務(wù)器發(fā)送數(shù)據(jù)并存儲(chǔ)在服務(wù)器內(nèi)部
DELETE 刪:從服務(wù)器刪除數(shù)據(jù)
HEAD 檢查一個(gè)對(duì)象是否存在
CONNECT 對(duì)通道提供支持
TRACE 跟蹤到服務(wù)器的路徑
OPTIONS 查詢服務(wù)器的性能

2. GET和POST請(qǐng)求

  1. GET和POST請(qǐng)求介紹
  • GET:在請(qǐng)求URL后面以?的形式拼接發(fā)給服務(wù)器的參數(shù)安券,多個(gè)參數(shù)之間用&隔開,參數(shù)長(zhǎng)度有限氓英。
  • POST:發(fā)給服務(wù)器的參數(shù)全部放在請(qǐng)求體中 侯勉,理論上傳遞的數(shù)據(jù)量沒(méi)有限制(具體還得看服務(wù)器的處理能力)。
  1. GET和POST請(qǐng)求響應(yīng)的不同
  • GET和POST本質(zhì)上就是TCP鏈接铝阐,并無(wú)差別址貌。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同徘键。
  • 在響應(yīng)時(shí)练对,GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包
    • 對(duì)于GET方式的請(qǐng)求吹害,瀏覽器會(huì)把Header和實(shí)體主體一并發(fā)送出去锹淌,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));
    • 而對(duì)于POST赠制,瀏覽器先發(fā)送Header赂摆,服務(wù)器響應(yīng)100 Continue,瀏覽器再發(fā)送實(shí)體主體钟些,服務(wù)器響應(yīng)200 OK(返回?cái)?shù)據(jù))烟号。
  1. GET和POST優(yōu)缺點(diǎn)
  • GET優(yōu)點(diǎn):
    • 請(qǐng)求方便:直接用一個(gè)完整的路徑去請(qǐng)求獲取數(shù)據(jù)。
    • 對(duì)服務(wù)器來(lái)說(shuō)比較安全:發(fā)送求請(qǐng)求過(guò)程中不會(huì)發(fā)送請(qǐng)求體政恍,不會(huì)破壞服務(wù)器的封裝性汪拥。從這個(gè)角度來(lái)講,GET相對(duì)于POST安全篙耗。
  • GET缺點(diǎn):
    • 數(shù)據(jù)不安全:GET請(qǐng)求數(shù)據(jù)會(huì)暴露參數(shù)信息迫筑,任何人都可見。
    • 參數(shù)長(zhǎng)度受限:GET方式通過(guò)直接拼接參數(shù)向服務(wù)器請(qǐng)求數(shù)據(jù)宗弯,網(wǎng)址輸入的長(zhǎng)度有上限脯燃,參數(shù)特別多的時(shí)候,會(huì)被截?cái)唷?注意:GET參數(shù)長(zhǎng)度限制為2048個(gè)字符)
  • POST優(yōu)點(diǎn):
    • 數(shù)據(jù)安全:發(fā)送請(qǐng)求時(shí)蒙保,參數(shù)封裝在請(qǐng)求體中發(fā)送辕棚,不會(huì)直接暴露參數(shù)信息。從這個(gè)角度講,POST相對(duì)GET安全一些逝嚎。(注意:如果被抓包扁瓢,明文參數(shù)一樣不安全。)
    • 參數(shù)大小不受限:使用POST請(qǐng)求數(shù)據(jù)時(shí)补君,通過(guò)請(qǐng)求體來(lái)傳遞參數(shù)引几,參數(shù)的大小遠(yuǎn)遠(yuǎn)要大于通過(guò)GET方式傳遞的參數(shù)大小,比較靈活挽铁。
  • POST缺點(diǎn):
    • 請(qǐng)求不方便:請(qǐng)求時(shí)要通過(guò)請(qǐng)求體發(fā)送參數(shù)伟桅,不如GET請(qǐng)求便捷。
    • 對(duì)服務(wù)器來(lái)說(shuō)不安全:POST請(qǐng)求時(shí)屿储,會(huì)向服務(wù)器發(fā)送請(qǐng)求體贿讹,破壞了服務(wù)器的封裝性。從這個(gè)角度講够掠,相對(duì)于GET不安全民褂。

四、HTTPS

1. HTTP的主要缺點(diǎn)

  • 通信使用明文疯潭,內(nèi)容可能被竊聽赊堪。
  • 不驗(yàn)證通信方的身份,因此可能遭遇偽裝竖哩。
  • 無(wú)法保證報(bào)文的完整性哭廉,所以可能遭到篡改。

2. 什么是HTTPS相叁?

  • HTTPS = HTTP + 加密 + 認(rèn)證 + 完整性保護(hù)遵绰,所以把添加了加密及認(rèn)證機(jī)制的HTTP稱為HTTPS
  • HTTPS并不是應(yīng)用層的新協(xié)議增淹,只是身披SSL外殼的HTTP協(xié)議椿访。
  • 通常情況下,HTTP直接和TCP通信虑润。當(dāng)使用SSL時(shí)成玫,則先和SSL通信再由它同TCP通信。
  • SSL是獨(dú)立于HTTP的協(xié)議拳喻,在很多方面都有使用哭当。它采用一種叫做公開秘鑰加密的加密處理方法。

3. HTTPS加密方式

  • 共享密鑰加密(對(duì)稱密鑰加密):加密和解密同用一個(gè)密鑰的方式冗澈。
  • 公開密鑰加密(非對(duì)稱加密):這種方式存在兩把密鑰钦勘,私有密鑰公開密鑰

HTTPS采用公開密鑰加密共享密鑰混合的加密機(jī)制渗柿。由于公開密鑰加密機(jī)制比較復(fù)雜个盆,在通信時(shí)使用處理效率較低脖岛。因此HTTPS先采用公開密鑰加密將共享密鑰發(fā)送給對(duì)方朵栖,然后使用共享加密方式通信颊亮。

公開密鑰存在一個(gè)問(wèn)題:無(wú)法證明密鑰本身是否是真實(shí)的。為了解決這個(gè)問(wèn)題陨溅,使用數(shù)字證書認(rèn)證(CA)和相關(guān)機(jī)關(guān)頒發(fā)的公開密鑰證書终惑。

3. HTTPS安全通信流程

  1. 客戶端向服務(wù)器發(fā)起https請(qǐng)求開始SSL通信
  2. 服務(wù)器用自己的公鑰登錄數(shù)字證書認(rèn)證機(jī)構(gòu)门扇,獲取公鑰證書(服務(wù)器公鑰+數(shù)字證書認(rèn)證機(jī)構(gòu)的數(shù)字簽名)雹有。
  3. 服務(wù)器把公鑰證書發(fā)送給客戶端。
  4. 客戶端獲取公鑰證書后:
    1). 通過(guò)數(shù)字證書認(rèn)證機(jī)構(gòu)驗(yàn)證公鑰證書是否有效受信臼寄。
    2). 客戶端驗(yàn)證公鑰證書有效受信后霸奕,生成一段隨機(jī)數(shù)密碼并用公鑰證書中的公鑰加密(也就是服務(wù)器公鑰)。
    3). 將帶有加密隨機(jī)數(shù)的信息發(fā)送給服務(wù)器吉拳。
  5. 服務(wù)器接收到客戶端的消息后:
    1). 用私鑰將信息解密取出隨機(jī)數(shù)密碼质帅。
    2). 把內(nèi)容通過(guò)隨機(jī)數(shù)進(jìn)行對(duì)稱加密后,發(fā)送給客戶端留攒。
  6. 客戶端通過(guò)隨機(jī)數(shù)解密服務(wù)器傳過(guò)來(lái)的加密信息煤惩。
  7. 之后所有的通信數(shù)據(jù)將由之前客戶端生成的隨機(jī)數(shù)密碼利用對(duì)稱加密算法進(jìn)行加密解密。

HTTPS一般使用的加密算法和HASH算法如下:
非對(duì)稱加密算法:RSA炼邀,DSA/DSS
對(duì)稱加密算法:AES魄揉,RC4,3DES
HASH算法:MD5拭宁,SHA1洛退,SHA256

4. SSL的位置

SSL介于HTTP應(yīng)用層TCP傳輸層之間。應(yīng)用層數(shù)據(jù)不再直接傳遞給傳輸層杰标,而是傳遞給SSL層兵怯,SSL層對(duì)從應(yīng)用層收到的數(shù)據(jù)進(jìn)行加密,然后傳遞給傳輸層在旱。

五摇零、TCP和UDP

1. 傳輸層中的協(xié)議

  • 傳輸層為應(yīng)用層提供會(huì)話和數(shù)據(jù)報(bào)通信服務(wù)。
  • 傳輸層承擔(dān)OSI傳輸層的職責(zé)桶蝎。
  • 傳輸層的核心協(xié)議是TCPUDP驻仅。

2. TCP與UDP區(qū)別

  1. TCP面向連接(如打電話要先撥號(hào)建立連接),UDP無(wú)連接的登渣,即發(fā)送數(shù)據(jù)之前不需要建立連接噪服。
  2. TCP提供可靠的服務(wù)。也就是說(shuō)胜茧,通過(guò)TCP連接傳送的數(shù)據(jù)粘优,無(wú)差錯(cuò)仇味、不丟失、不重復(fù)雹顺、且按序到達(dá)丹墨。UDP則盡最大努力交付,但不保證可靠交付嬉愧。
  3. TCP面向字節(jié)流贩挣。UDP面向報(bào)文的。
  4. UDP沒(méi)有擁塞控制没酣,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用王财,如IP電話,實(shí)時(shí)視頻會(huì)議等)裕便。
  5. TCP連接只能是點(diǎn)到點(diǎn)的绒净。UDP連接支持一對(duì)一、一對(duì)多偿衰、多對(duì)一和多對(duì)多的交互通信挂疆。
  6. TCP的邏輯通信信道是全雙工的可靠信道UDP則是不可靠信道哎垦。

3. TCP與UDP優(yōu)缺點(diǎn)

TCP的優(yōu)點(diǎn):數(shù)據(jù)傳輸可靠囱嫩、穩(wěn)定、保證數(shù)據(jù)順序正確漏设。
TCP的缺點(diǎn):數(shù)據(jù)傳輸慢墨闲、效率低、占用系統(tǒng)資源高郑口、易被攻擊鸳碧。
UDP的優(yōu)點(diǎn):數(shù)據(jù)傳輸快、比TCP相對(duì)安全犬性。
UDP的缺點(diǎn):數(shù)據(jù)傳輸不可靠瞻离、不穩(wěn)定、不保證順序乒裆。

什么時(shí)候應(yīng)該使用UDP:
當(dāng)對(duì)網(wǎng)絡(luò)通訊質(zhì)量要求不高的時(shí)候套利,要求網(wǎng)絡(luò)通訊速度盡量的快,這時(shí)就可以使用UDP鹤耍。 比如:語(yǔ)音肉迫、視頻等。

六稿黄、TCP

1. TCP特點(diǎn)

TCP全稱是Transmission Control Protocol喊衫,中文名為傳輸控制協(xié)議,它可以提供可靠的杆怕、面向連接族购、面向字節(jié)流的網(wǎng)絡(luò)數(shù)據(jù)傳遞服務(wù)壳贪。

2. TCP面向連接

TCP面向連接的協(xié)議,建立和斷開連接共需要經(jīng)過(guò)7步寝杖,三次握手建立連接违施,四次揮手斷開連接。

3. 三次握手 建立連接

  1. 客戶端首先向服務(wù)器申請(qǐng)打開某一個(gè)端口(用SYN段等于1的TCP報(bào)文)
  2. 然后服務(wù)器端發(fā)回一個(gè)ACK報(bào)文通知客戶端請(qǐng)求報(bào)文收到
  3. 客戶端收到確認(rèn)報(bào)文后朝墩,再次發(fā)出確認(rèn)報(bào)文確認(rèn)剛才服務(wù)器發(fā)出的確認(rèn)報(bào)文

至此建立了連接醉拓,這個(gè)過(guò)程也叫TCP的三次握手伟姐。如果想讓雙方都做好準(zhǔn)備的話收苏,一定要發(fā)送三次報(bào)文,而且只需要三次報(bào)文就可以了愤兵。

面試題:為什么是三次握手不是兩次鹿霸?

為了解決超時(shí)導(dǎo)致重復(fù)建立的問(wèn)題。
原因:如果是兩次握手會(huì)出現(xiàn)問(wèn)題秆乳∨呈螅客戶端發(fā)送SYN請(qǐng)求建立連接時(shí),如果網(wǎng)絡(luò)發(fā)生延遲超時(shí)后客戶端會(huì)重復(fù)發(fā)送SYN消息屹堰,服務(wù)器接收到第二次發(fā)送的建立連接請(qǐng)求肛冶,返回確認(rèn)信息,連接建立完成扯键。第一次發(fā)送SYN建立連接請(qǐng)求經(jīng)過(guò)一段時(shí)間后到達(dá)服務(wù)器睦袖,服務(wù)器會(huì)認(rèn)為客戶端要建立新的連接,會(huì)重新發(fā)送應(yīng)答響應(yīng)荣刑。這就導(dǎo)致了重復(fù)建立連接的情況馅笙。

4. 四次揮手 斷開連接

TCP的連接是全雙工(可以同時(shí)發(fā)送和接收)連接,因此在關(guān)閉連接的時(shí)候厉亏,必須關(guān)閉傳和送兩個(gè)方向上的連接董习。

  1. 客戶端發(fā)送一個(gè)FIN為1的TCP報(bào)文,用來(lái)關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送
  2. 服務(wù)器收到這個(gè)FIN爱只,返回給客戶端一個(gè)確認(rèn)ACK報(bào)文皿淋。
  3. 服務(wù)器關(guān)閉客戶端的連接,并且發(fā)送一個(gè)FIN給客戶端恬试。
  4. 客戶端發(fā)回ACK報(bào)文確認(rèn)窝趣。

至此斷開了連接。這個(gè)過(guò)程也叫TCP的四次揮手忘渔。

面試題:為什么是四次揮手?

TCP的連接是全雙工連接高帖,因此關(guān)閉連接,需要雙向關(guān)閉才算真正的關(guān)閉畦粮。
客戶端發(fā)送FIN請(qǐng)求切斷連接散址,服務(wù)器端發(fā)送ACK應(yīng)答切斷乖阵,當(dāng)前連接處于半關(guān)閉狀態(tài)。服務(wù)器端向客戶端發(fā)送FIN請(qǐng)求切斷連接预麸,客戶端返回ACK應(yīng)答請(qǐng)求瞪浸,此時(shí)連接才真正的關(guān)閉。

七吏祸、UDP

UDPUser Datagram Protocol的簡(jiǎn)稱对蒲, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是OSI參考模型中的一種無(wú)連接的傳輸層協(xié)議贡翘,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)蹈矮。

八、Socket(此處只做簡(jiǎn)單記錄鸣驱,沒(méi)有實(shí)操經(jīng)驗(yàn))

  • Socket是應(yīng)用層和TCP/IP協(xié)議簇通信的中間抽象層泛鸟,是一組接口API。
  • Socket連接過(guò)程

    Socket連接過(guò)程

  • 建立連接步驟:

服務(wù)器端的步驟

  1. 用函數(shù)socket()踊东,創(chuàng)建一個(gè)socket北滥;
  2. 用函數(shù)setsockopt()設(shè)置socket屬性闸翅;
  3. 用函數(shù)bind()再芋,綁定IP地址、端口等信息到socket坚冀;
  4. 用函數(shù)listen()济赎,開啟監(jiān)聽
  5. 用函數(shù)accept()遗菠,接收客戶端上來(lái)的連接联喘;
  6. 用函數(shù)send()recv()或者read()辙纬、write()豁遭,收發(fā)數(shù)據(jù)
  7. 關(guān)閉網(wǎng)絡(luò)連接贺拣;
  8. 關(guān)閉監(jiān)聽蓖谢。

客戶端的步驟

  1. 用函數(shù)socket(),創(chuàng)建一個(gè)socket譬涡;
  2. 用函數(shù)setsockopt()闪幽,設(shè)置socket屬性
  3. 用函數(shù)bind()涡匀,綁定IP地址盯腌、端口等信息到socket
  4. 設(shè)置要連接的對(duì)方的IP地址和端口等屬性陨瘩;
  5. 用函數(shù)connect()腕够,連接服務(wù)器级乍;
  6. 用函數(shù)send()recv()或者read()帚湘、write()玫荣,收發(fā)數(shù)據(jù)
  7. 關(guān)閉網(wǎng)絡(luò)連接大诸。

九捅厂、補(bǔ)充

  • 全雙工(Full Duplex):是指在發(fā)送數(shù)據(jù)的同時(shí)也能夠接收數(shù)據(jù),兩者同步進(jìn)行资柔,這好像我們平時(shí)打電話一樣焙贷,說(shuō)話的同時(shí)也能夠聽到對(duì)方的聲音。目前的網(wǎng)卡一般都支持全雙工建邓。
  • 半雙工(Half Duplex):盈厘,所謂半雙工就是指一個(gè)時(shí)間段內(nèi)只有一個(gè)動(dòng)作發(fā)生,舉個(gè)簡(jiǎn)單例子官边,一條窄窄的馬路,同時(shí)只能有一輛車通過(guò)外遇,當(dāng)目前有兩量車對(duì)開注簿,這種情況下就只能一輛先過(guò),等到頭兒后另一輛再開跳仿,這個(gè)例子就形象的說(shuō)明了半雙工的原理诡渴。早期的對(duì)講機(jī)、以及早期集線器等設(shè)備都是基于半雙工的產(chǎn)品菲语。
  • 單工通信是指通信線路上的數(shù)據(jù)按單一方向傳送.
網(wǎng)絡(luò)請(qǐng)求過(guò)程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妄辩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子山上,更是在濱河造成了極大的恐慌眼耀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佩憾,死亡現(xiàn)場(chǎng)離奇詭異哮伟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妄帘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門楞黄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人抡驼,你說(shuō)我怎么就攤上這事鬼廓。” “怎么了致盟?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵碎税,是天一觀的道長(zhǎng)柏副。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚣录,這世上最難降的妖魔是什么割择? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮萎河,結(jié)果婚禮上荔泳,老公的妹妹穿的比我還像新娘。我一直安慰自己虐杯,他們只是感情好玛歌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著擎椰,像睡著了一般支子。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上达舒,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天值朋,我揣著相機(jī)與錄音,去河邊找鬼巩搏。 笑死昨登,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贯底。 我是一名探鬼主播丰辣,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼禽捆!你這毒婦竟也來(lái)了笙什?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胚想,失蹤者是張志新(化名)和其女友劉穎琐凭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顿仇,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淘正,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臼闻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸿吆。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖述呐,靈堂內(nèi)的尸體忽然破棺而出惩淳,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布思犁,位于F島的核電站代虾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏激蹲。R本人自食惡果不足惜棉磨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望学辱。 院中可真熱鬧乘瓤,春花似錦、人聲如沸策泣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萨咕。三九已至统抬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間危队,已是汗流浹背聪建。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留交掏,地道東北人妆偏。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盅弛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叔锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344