一焕妙、網(wǎng)絡(luò)協(xié)議分層--經(jīng)典五層模型
各層作用請參見:https://www.cnblogs.com/qishui/p/5428938.html
物理層:定義物理設(shè)備之間如何傳輸數(shù)據(jù)
數(shù)據(jù)鏈路層:在通信的實體間建立數(shù)據(jù)鏈路鏈接
網(wǎng)絡(luò)層:為數(shù)據(jù)在節(jié)點之間的傳輸創(chuàng)建邏輯鏈路
傳輸層:向用戶提供可靠的端到端的服務(wù)缩搅,傳輸層通過封裝向高層屏蔽了下層數(shù)據(jù)通信的細節(jié)
應(yīng)用層:為應(yīng)用軟件提供了很多服務(wù),構(gòu)建于tcp協(xié)議之上驱显,屏蔽了網(wǎng)絡(luò)傳輸相關(guān)的細節(jié)
二、Http三次握手和四次揮手
前置:1瞳抓、Http請求是基于Tcp connection這個鏈接的
? ? ? ? ? ?2埃疫、位碼即tcp標(biāo)志位,有6種標(biāo)示:
? ? ? ? ? ? ? ? ? ? ?SYN(synchronous建立聯(lián)機) 、ACK(acknowledgement 確認)挨下、 PSH(push傳送)
? ? ? ? ? ? ? ? ? ? ?FIN(finish結(jié)束)熔恢、RST(reset重置)、 URG(urgent緊急)
? ? ? ? ? ? ? ? ? ? Sequence number(順序號碼)?
? ? ? ? ? ? ? ? ? ? ?Acknowledge number(確認號碼)
(一)三次握手:
第一次握手:主機A發(fā)送位碼為syn=1,隨機產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器臭笆,主機B由SYN=1知道叙淌,A要求建立聯(lián)機秤掌;
第二次握手:主機B收到請求后要確認聯(lián)機信息,向A發(fā)送ack number=(主機A的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包鹰霍;
第三次握手:主機A收到后檢查ack number是否正確闻鉴,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確茂洒,主機A會再發(fā)送ack number=(主機B的seq+1),ack=1孟岛,主機B收到后確認seq值與ack=1則連接建立成功。
注:為什么要采用三次握手督勺,兩次不行嗎渠羞?
(二)四次揮手:
第一次揮手:TCP發(fā)送一個FIN(結(jié)束),用來關(guān)閉客戶到服務(wù)端的連接智哀。
第二次揮手:服務(wù)端收到這個FIN次询,他發(fā)回一個ACK(確認),確認收到序號為收到序號+1瓷叫,和SYN一樣屯吊,一個FIN將占用一個序號。TCP服務(wù)器通知高層的應(yīng)用進程摹菠,客戶端向服務(wù)器的方向就釋放了盒卸,這時候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了次氨,但是服務(wù)器若發(fā)送數(shù)據(jù)蔽介,客戶端依然要接受。(服務(wù)器端繼續(xù)發(fā)送未發(fā)送完的數(shù)據(jù))
第三次揮手:服務(wù)端發(fā)送一個FIN(結(jié)束)到客戶端糟需,服務(wù)端關(guān)閉客戶端的連接屉佳。
第四次揮手:客戶端發(fā)送ACK(確認)報文確認,并將確認的序號+1洲押,這樣關(guān)閉完成武花。
注:1、那么為什么是4次揮手呢杈帐?tcp握手的時候為何ACK(確認)和SYN(建立連接)是一起發(fā)送体箕。揮手的時候為什么是分開的時候發(fā)送呢?
因為當(dāng)Server端收到Client端的SYN連接請求報文后挑童,可以直接發(fā)送SYN+ACK報文累铅。其中ACK報文是用來應(yīng)答的,SYN報文是用來同步的站叼。但是關(guān)閉連接時娃兽,當(dāng)Server端收到FIN報文時,很可能并不會立即關(guān)閉 SOCKET尽楔,所以只能先回復(fù)一個ACK報文投储,告訴Client端第练,"你發(fā)的FIN報文我收到了"。只有等到我Server端所有的報文都發(fā)送完了玛荞,我才能發(fā)送FIN報文娇掏,因此不能一起發(fā)送。故需要四步握手勋眯。
2婴梧、為什么客戶端最后還要等待2MSL?
第一客蹋,保證客戶端發(fā)送的最后一個ACK報文能夠到達服務(wù)器塞蹭,因為這個ACK報文可能丟失,站在服務(wù)器的角度看來讶坯,我已經(jīng)發(fā)送了FIN+ACK報文請求斷開了浮还,客戶端還沒有給我回應(yīng),應(yīng)該是我發(fā)送的請求斷開報文它沒有收到闽巩,于是服務(wù)器又會重新發(fā)送一次,而客戶端就能在這個2MSL時間段內(nèi)收到這個重傳的報文担汤,接著給出回應(yīng)報文涎跨,并且會重啟2MSL計時器。
第二崭歧,防止類似與“三次握手”中提到了的“已經(jīng)失效的連接請求報文段”出現(xiàn)在本連接中隅很。客戶端發(fā)送完最后一個確認報文后率碾,在這個2MSL時間中叔营,就可以使本連接持續(xù)的時間內(nèi)所產(chǎn)生的所有報文段都從網(wǎng)絡(luò)中消失。這樣新的連接中不會出現(xiàn)舊連接的請求報文所宰。
三绒尊、TCP和UDP的區(qū)別 ?
1、TCP面向連接(如打電話要先撥號建立連接)仔粥;UDP是無連接的婴谱,即發(fā)送數(shù)據(jù)之前不需要建立連接??
(連接和無連接)
2、TCP提供可靠的服務(wù)躯泰。即通過TCP連接傳送的數(shù)據(jù)谭羔,無差錯,不丟失麦向,不重復(fù)瘟裸,且按序到達;
? ? ?UDP盡最大努力交付,即不保證可靠交付
(可靠和不可靠)
3诵竭、TCP面向字節(jié)流话告,實際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流兼搏;UDP是面向報文的
? ? UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應(yīng)用很有用超棺,如IP電話向族,實時視頻會議等)
(字節(jié)流和報文加擁塞)
4、每一條TCP連接只能是點到點的; UDP支持一對一棠绘,一對多件相,多對一和多對多的交互通信
(一對一和一對多)
5、TCP首部開銷20字節(jié);UDP的首部開銷小氧苍,只有8個字節(jié)
(開銷問題)
6夜矗、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
簡單再了解
1让虐、簡單快速:客戶向服務(wù)器請求服務(wù)時紊撕,只需傳送請求方法和路徑。請求方法常用的有GET赡突、HEAD对扶、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同惭缰。由于HTTP協(xié)議簡單浪南,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快漱受。
2络凿、靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記昂羡。
3.無連接:無連接的含義是限制每次連接只處理一個請求絮记。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后虐先,即斷開連接怨愤。采用這種方式可以節(jié)省傳輸時間。
4.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議赴穗。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力憔四。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳般眉,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大了赵。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快甸赃。
5柿汛、支持B/S及C/S模式。
參考:http://www.cnblogs.com/ranyonsue/p/5984001.html
? ? ? ? ??https://www.cnblogs.com/qdhxhz/p/8470997.html
? ? ? ? ?https://blog.csdn.net/qq_18425655/article/details/52163228
? ? ? ? ?https://blog.csdn.net/qzcsu/article/details/72861891
? ? ? ? https://blog.csdn.net/yanxinrui0027/article/details/70243665