網(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é)議握巢。
- 規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
- 讓客戶端和服務(wù)器能有效的進(jìn)行數(shù)據(jù)溝通
3. HTTP的特點(diǎn)
無(wú)連接晕鹊、 無(wú)狀態(tài),HTTP的持久連接暴浦、Cookie/Session
- 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)求忧设。
-
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
。
- 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贸辈?
- 簡(jiǎn)單快速:因?yàn)镠TTP協(xié)議簡(jiǎn)單,所以HTTP服務(wù)器的程序規(guī)模小碰逸,因而通信速度很快
- 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)
- 使用非 常持續(xù)鏈接:限制每次鏈接只處理一個(gè)請(qǐng)求乡小,服務(wù)器對(duì)客戶端的請(qǐng)求作出響應(yīng)之后,馬上端口鏈接饵史,節(jié)省傳輸時(shí)間
二满钟、HTTP的通信過(guò)程
想要使用HTTP協(xié)議想服務(wù)器索取數(shù)據(jù),首先要了解HTTP通信的完整過(guò)程胳喷,主要分為兩大步驟:
- 請(qǐng)求:客戶端向服務(wù)器索要數(shù)據(jù)
- 響應(yīng):服務(wù)器返回給客戶端響應(yīng)的數(shù)據(jù)
1. HTTP通信過(guò)程 之 請(qǐng)求
HTTP協(xié)議規(guī)定湃番,一個(gè)完整的有客戶端給服務(wù)器的HTTP請(qǐng)求中包含請(qǐng)求行、請(qǐng)求頭吭露、請(qǐng)求體三個(gè)部分:
- 請(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é)議版本
- 請(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è)面
- 請(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)容:
- 狀態(tài)行:包含了HTTP協(xié)議版本担孔,狀態(tài)碼江锨,短語(yǔ)(狀態(tài)描述)
'Protocol: HTTP/1.1' // HTTP協(xié)議版本
'Status Code: 200'
'OK'
- 響應(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í)間
- 實(shí)體內(nèi)容:服務(wù)器返回給客戶端的具體數(shù)據(jù)
{"resultCode":200,"message":"OK","data":{"list":[{"value":1,"name":"大客戶拜訪"},{"value":2,"name":"代理商檢核"}]}}
- 常見響應(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)求
- 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ù)器的處理能力)。
- 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ù))烟号。
- 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安全通信流程
- 客戶端向服務(wù)器發(fā)起
https請(qǐng)求
開始SSL通信
。- 服務(wù)器用自己的公鑰登錄數(shù)字證書認(rèn)證機(jī)構(gòu)门扇,獲取公鑰證書(服務(wù)器公鑰+數(shù)字證書認(rèn)證機(jī)構(gòu)的數(shù)字簽名)雹有。
- 服務(wù)器把公鑰證書發(fā)送給客戶端。
- 客戶端獲取公鑰證書后:
1). 通過(guò)數(shù)字證書認(rèn)證機(jī)構(gòu)驗(yàn)證公鑰證書是否有效受信臼寄。
2). 客戶端驗(yàn)證公鑰證書有效受信后霸奕,生成一段隨機(jī)數(shù)密碼并用公鑰證書中的公鑰加密(也就是服務(wù)器公鑰)。
3). 將帶有加密隨機(jī)數(shù)的信息發(fā)送給服務(wù)器吉拳。- 服務(wù)器接收到客戶端的消息后:
1). 用私鑰將信息解密取出隨機(jī)數(shù)密碼质帅。
2). 把內(nèi)容通過(guò)隨機(jī)數(shù)進(jìn)行對(duì)稱加密后,發(fā)送給客戶端留攒。- 客戶端通過(guò)隨機(jī)數(shù)解密服務(wù)器傳過(guò)來(lái)的加密信息煤惩。
- 之后所有的通信數(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é)議是
TCP
和UDP
驻仅。
2. TCP與UDP區(qū)別
TCP
面向連接(如打電話要先撥號(hào)建立連接),UDP
是無(wú)連接的登渣,即發(fā)送數(shù)據(jù)之前不需要建立連接噪服。TCP
提供可靠的服務(wù)。也就是說(shuō)胜茧,通過(guò)TCP連接傳送的數(shù)據(jù)粘优,無(wú)差錯(cuò)仇味、不丟失、不重復(fù)雹顺、且按序到達(dá)丹墨。UDP
則盡最大努力交付,但不保證可靠交付嬉愧。TCP
面向字節(jié)流贩挣。UDP
是面向報(bào)文的。UDP
沒(méi)有擁塞控制没酣,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用王财,如IP電話,實(shí)時(shí)視頻會(huì)議等)裕便。TCP連接
只能是點(diǎn)到點(diǎn)的绒净。UDP連接
支持一對(duì)一、一對(duì)多偿衰、多對(duì)一和多對(duì)多的交互通信挂疆。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. 三次握手 建立連接
- 客戶端首先向服務(wù)器申請(qǐng)打開某一個(gè)端口(用SYN段等于1的TCP報(bào)文)
- 然后服務(wù)器端發(fā)回一個(gè)ACK報(bào)文通知客戶端請(qǐng)求報(bào)文收到
- 客戶端收到確認(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è)方向上的連接董习。
- 客戶端發(fā)送一個(gè)FIN為1的TCP報(bào)文,用來(lái)關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送
- 服務(wù)器收到這個(gè)FIN爱只,返回給客戶端一個(gè)確認(rèn)ACK報(bào)文皿淋。
- 服務(wù)器關(guān)閉客戶端的連接,并且發(fā)送一個(gè)FIN給客戶端恬试。
- 客戶端發(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
UDP是User 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ò)程
建立連接步驟:
服務(wù)器端的步驟
- 用函數(shù)
socket()
踊东,創(chuàng)建一個(gè)socket北滥;- 用函數(shù)
setsockopt()
,設(shè)置socket屬性闸翅;- 用函數(shù)
bind()
再芋,綁定IP地址、端口等信息到socket坚冀;- 用函數(shù)
listen()
济赎,開啟監(jiān)聽;- 用函數(shù)
accept()
遗菠,接收客戶端上來(lái)的連接联喘;- 用函數(shù)
send()
、recv()
或者read()
辙纬、write()
豁遭,收發(fā)數(shù)據(jù);- 關(guān)閉網(wǎng)絡(luò)連接贺拣;
- 關(guān)閉監(jiān)聽蓖谢。
客戶端的步驟
- 用函數(shù)
socket()
,創(chuàng)建一個(gè)socket譬涡;- 用函數(shù)
setsockopt()
闪幽,設(shè)置socket屬性;- 用函數(shù)
bind()
涡匀,綁定IP地址盯腌、端口等信息到socket;- 設(shè)置要連接的對(duì)方的IP地址和端口等屬性陨瘩;
- 用函數(shù)
connect()
腕够,連接服務(wù)器级乍;- 用函數(shù)
send()
、recv()
或者read()
帚湘、write()
玫荣,收發(fā)數(shù)據(jù);- 關(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ù)按單一方向傳送.