網(wǎng)絡(luò)五層模型
應(yīng)用層:通過應(yīng)用進(jìn)程間的交互來完成特定網(wǎng)絡(luò)應(yīng)用遍蟋,指的是遵循 http撰糠,ftp等協(xié)議運(yùn)行的應(yīng)用進(jìn)程
傳輸層:兩臺主機(jī)中進(jìn)程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù),指的是將應(yīng)用層的數(shù)據(jù)通過tcp或者udp協(xié)議進(jìn)行傳輸,tcp傳輸過程就是遵循socket接口(套字節(jié))
網(wǎng)絡(luò)層:網(wǎng)絡(luò)層負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信服務(wù)具练,指的是將傳輸層的數(shù)據(jù)進(jìn)行分組打包,通過IP協(xié)議甜无,選擇適合的路由進(jìn)行傳遞
數(shù)據(jù)鏈路層:指的是網(wǎng)絡(luò)層傳輸數(shù)據(jù)的過程中的步驟扛点,因?yàn)閭鬏敂?shù)據(jù)是在一段一段鏈路上傳送的哥遮,所以這里也遵循鏈路層協(xié)議來保證傳輸信息的可靠性
物理層:通過路由選擇算法,為報(bào)文或分組通過通信子網(wǎng)選擇最適當(dāng)?shù)穆窂搅昃俊T搶涌刂茢?shù)據(jù)鏈路層與傳輸層之間的信息轉(zhuǎn)發(fā)眠饮,建立、維持和終止網(wǎng)絡(luò)的連接铜邮。具體地說仪召,數(shù)據(jù)鏈路層的數(shù)據(jù)在這一層被轉(zhuǎn)換為數(shù)據(jù)包,然后通過路徑選擇牲距、分段組合返咱、順序、進(jìn)/出路由等控制牍鞠,將信息從一個(gè)網(wǎng)絡(luò)設(shè)備傳送到另一個(gè)網(wǎng)絡(luò)設(shè)備
HTTP
http超文本傳輸協(xié)議 包含請求行(方法 路徑 協(xié)議)咖摹、請求頭(key-vaule)、請求主體(數(shù)據(jù))难述、響應(yīng)行(協(xié)議版本 狀態(tài)碼 狀態(tài)說明)萤晴、響應(yīng)頭、響應(yīng)主體
HTTP 協(xié)議:超文本傳輸協(xié)議胁后,對應(yīng)于應(yīng)用層店读,用于如何封裝數(shù)據(jù).
TCP/UDP 協(xié)議:傳輸控制協(xié)議,對應(yīng)于傳輸層攀芯,主要解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸屯断。
IP 協(xié)議:對應(yīng)于網(wǎng)絡(luò)層,同樣解決數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸侣诺。
傳輸數(shù)據(jù)的時(shí)候只使用 TCP/IP 協(xié)議(傳輸層)殖演,如果沒有應(yīng)用層來識別數(shù)據(jù)內(nèi)容,傳輸后的協(xié)議都是無用的年鸳。
應(yīng)用層協(xié)議很多 FTP,HTTP,TELNET等趴久,可以自己定義應(yīng)用層協(xié)議。
web 使用 HTTP 作傳輸層協(xié)議搔确,以封裝 HTTP 文本信息彼棍,然后使用 TCP/IP 做傳輸層協(xié)議,將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上
1膳算、http keep-alive
在一次tcp連接中可以連續(xù)發(fā)送多次數(shù)據(jù)座硕,即可以保持一段時(shí)間的tcp連接,在這個(gè)保持的通道上有多個(gè)request畦幢、多個(gè)response坎吻。而不用每發(fā)一次數(shù)據(jù)就要重新進(jìn)行三次握手連接,發(fā)完一次數(shù)據(jù)就要立即進(jìn)行四次揮手釋放連接宇葱。 這樣可以提高性能和吞吐率瘦真。
2刊头、tcp keep-alive
為了檢測tcp的連接狀況。經(jīng)過設(shè)定的時(shí)間之后诸尽,服務(wù)器會發(fā)出檢測包去確認(rèn)tcp連接是否還在原杂。如果出現(xiàn)了問題就關(guān)閉連接。
http和websocket
http協(xié)議決定了瀏覽器端總是主動發(fā)起方您机,http的服務(wù)端總是被動的接受穿肄、響應(yīng)請求。http提供的長連接服務(wù)器可以不接受际看。而websocket協(xié)議咸产,在連接之后,客戶端仲闽、服務(wù)端是完全平等的脑溢。websocket是真正的長連接。
TCP三次握手
標(biāo)記位標(biāo)記狀態(tài) 序號用來標(biāo)記順序 確認(rèn)好用來確認(rèn)
第一次握手客戶端向服務(wù)端發(fā)送報(bào)文包含標(biāo)記位赖欣、序號(請求建立新連接)
第二次握手服務(wù)端接收到客戶端的TCP報(bào)文后屑彻,向客戶端發(fā)送報(bào)文包含序號、確認(rèn)號顶吮、標(biāo)記位(表示同意創(chuàng)建新連接)
第三次握手客戶端接收了來自服務(wù)端的TCP報(bào)文社牲,向服務(wù)端發(fā)送報(bào)文包含序號標(biāo)記位確認(rèn)號(確認(rèn)收到服務(wù)器端同意連接的信號)
至此完成三次握手
四次揮手
第一次客戶端想釋放連接,向服務(wù)端發(fā)送了一段TCP報(bào)文悴了,其中包含標(biāo)記位搏恤,序號,隨后客戶端停止了向服務(wù)端發(fā)送數(shù)據(jù)湃交,等待服務(wù)端回應(yīng)(表示請求釋放連接)
第二次服務(wù)端接收了來自服務(wù)端的TCP報(bào)文挑社,確認(rèn)了客戶段想釋放連接,并返回了一段報(bào)文包含標(biāo)記位巡揍、序號、確認(rèn)號(表示收到)隨后服務(wù)端開始準(zhǔn)備釋放到服務(wù)端的連接
第三次服務(wù)端發(fā)送萬確認(rèn)報(bào)文之后菌瘪,做好了釋放服務(wù)端到客戶端的連接腮敌,再一次向客戶端發(fā)送了報(bào)文包含標(biāo)記位、序號俏扩、確認(rèn)號(表示已經(jīng)準(zhǔn)備好了釋放)
第四次客戶端收到服務(wù)端發(fā)送的報(bào)文糜工,確認(rèn)了服務(wù)端已經(jīng)做好釋放的準(zhǔn)備,并向服務(wù)端發(fā)送了一段報(bào)文包含標(biāo)記位录淡、序號捌木、確認(rèn)號,隨后客戶端開始等待2msl后結(jié)束了連接
至此完成四次揮手
注:后“兩次揮手”既讓客戶端知道了服務(wù)器端準(zhǔn)備好釋放連接了嫉戚,也讓服務(wù)器端知道了客戶端了解了自己準(zhǔn)備好釋放連接了刨裆。于是澈圈,可以確認(rèn)關(guān)閉服務(wù)器端到客戶端方向上的連接了,由此完成“四次揮手”
與“三次揮手”一樣帆啃,在客戶端與服務(wù)器端傳輸?shù)腡CP報(bào)文中瞬女,雙方的確認(rèn)號Ack和序號Seq的值,都是在彼此Ack和Seq值的基礎(chǔ)上進(jìn)行計(jì)算的努潘,這樣做保證了TCP報(bào)文傳輸?shù)倪B貫性诽偷,一旦出現(xiàn)某一方發(fā)出的TCP報(bào)文丟失,便無法繼續(xù)"揮手"疯坤,以此確保了"四次揮手"的順利完成报慕。
問:為什么客戶端要等待一段時(shí)間?
當(dāng)客戶端發(fā)出報(bào)文時(shí)候不確定服務(wù)端有沒有收到压怠,所以會設(shè)置2msl時(shí)間來計(jì)時(shí)眠冈,正好服務(wù)端和客戶端發(fā)送確認(rèn)報(bào)文的最大時(shí)長是2msl,如果在這個(gè)1msl里沒有收到和客戶端的報(bào)文就回再次詢問刑峡,否則認(rèn)為已確認(rèn)則斷開連接
問:為什么握手是三次揮手是四次洋闽?
答:因?yàn)槲帐质钦埱蠼⑦B接,沒存在數(shù)據(jù)傳輸?shù)臓顟B(tài)準(zhǔn)備突梦,而揮手是斷開連接屬于數(shù)據(jù)傳輸中則需要各自確認(rèn)數(shù)據(jù)傳輸狀態(tài)诫舅,已達(dá)到傳送數(shù)據(jù)安全和完整