tcp和udp協(xié)議的區(qū)別
https://blog.csdn.net/zhang6223284/article/details/81414149
1泛烙、TCP面向連接 (如打電話要先撥號建立連接); UDP是無連接 的,即發(fā)送數(shù)據(jù)之前不需要建立連接逗威。
2门坷、TCP提供可靠的服務(wù)绘搞。也就是說喂击,通過TCP連接傳送的數(shù)據(jù)昼榛,無差錯税迷,不丟失永丝,不重復(fù),且按序到達(dá);UDP盡最大努力交付箭养,即不保證可靠交付慕嚷。
3、UDP具有較好的實(shí)時性毕泌,工作效率比TCP高喝检,適用于對高速傳輸和實(shí)時性有較高的通信或廣播通信。
4.每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對一撼泛,一對多挠说,多對一和多對多的交互通信。
TCP的優(yōu)點(diǎn): 可靠愿题,穩(wěn)定 TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前损俭,會有三次握手來建立連接,而且在數(shù)據(jù)傳遞時潘酗,有確認(rèn)杆兵、窗口、重傳仔夺、擁塞控制機(jī)制拧咳,在數(shù)據(jù)傳完后,還會斷開連接用來節(jié)約系統(tǒng)資源囚灼。 TCP的缺點(diǎn): 慢骆膝,效率低,占用系統(tǒng)資源高灶体,易被攻擊 TCP在傳遞數(shù)據(jù)之前阅签,要先建連接,這會消耗時間蝎抽,而且在數(shù)據(jù)傳遞時政钟,確認(rèn)機(jī)制路克、重傳機(jī)制、擁塞控制機(jī)制等都會消耗大量的時間养交,而且要在每臺設(shè)備上維護(hù)所有的傳輸連接精算,事實(shí)上,每個連接都會占用系統(tǒng)的CPU碎连、內(nèi)存等硬件資源灰羽。 而且,因為TCP有確認(rèn)機(jī)制鱼辙、三次握手機(jī)制廉嚼,這些也導(dǎo)致TCP容易被人利用,實(shí)現(xiàn)DOS倒戏、DDOS怠噪、CC等攻擊。
UDP的優(yōu)點(diǎn): 快杜跷,比TCP稍安全 UDP沒有TCP的握手傍念、確認(rèn)、窗口葛闷、重傳捂寿、擁塞控制等機(jī)制,UDP是一個無狀態(tài)的傳輸協(xié)議孵运,所以它在傳遞數(shù)據(jù)時非城芈快。
TCP 的三次握手治笨、四次揮手
https://blog.csdn.net/qq_38950316/article/details/81087809
字段含義
- ACK 確認(rèn)號是否有效驳概,一般置為1。
- SYN 請求建立連接旷赖,并在其序列號的字段進(jìn)行序列號的初始值設(shè)定顺又。建立連接,設(shè)置為1
- FIN 希望斷開連接等孵。
TCP 的三次握手
TCP 的三次握手除了建立連接外稚照,主要還是為了溝通 TCP 包的序號問題。
在TCP/IP協(xié)議中俯萌,TCP協(xié)議提供可靠的連接服務(wù)果录,采用三次握手建立一個連接。
第一次握手:建立連接時咐熙,客戶端發(fā)送syn包(syn=x)到服務(wù)器弱恒,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn)棋恼;SYN:同步序列編號(Synchronize Sequence Numbers)返弹。
第二次握手:服務(wù)器收到syn包锈玉,必須確認(rèn)客戶的SYN(ack=x+1),同時自己也發(fā)送一個SYN包(syn=y)义起,即SYN+ACK包拉背,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包默终,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1)椅棺,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài)穷蛹,完成三次握手。
TCP 四次揮手
1)客戶端進(jìn)程發(fā)出連接釋放報文昼汗,并且停止發(fā)送數(shù)據(jù)肴熏。釋放數(shù)據(jù)報文首部,F(xiàn)IN=1顷窒,其序列號為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個字節(jié)的序號加1)蛙吏,此時,客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)鞋吉。 TCP規(guī)定鸦做,F(xiàn)IN報文段即使不攜帶數(shù)據(jù),也要消耗一個序號谓着。
2)服務(wù)器收到連接釋放報文泼诱,發(fā)出確認(rèn)報文,ACK=1赊锚,ack=u+1治筒,并且?guī)献约旱男蛄刑杝eq=v,此時舷蒲,服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)耸袜。TCP服務(wù)器通知高層的應(yīng)用進(jìn)程,客戶端向服務(wù)器的方向就釋放了牲平,這時候處于半關(guān)閉狀態(tài)堤框,即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù)纵柿,客戶端依然要接受蜈抓。這個狀態(tài)還要持續(xù)一段時間,也就是整個CLOSE-WAIT狀態(tài)持續(xù)的時間昂儒。
3)客戶端收到服務(wù)器的確認(rèn)請求后资昧,此時,客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài)荆忍,等待服務(wù)器發(fā)送連接釋放報文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))格带。
4)服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后撤缴,就向客戶端發(fā)送連接釋放報文,F(xiàn)IN=1叽唱,ack=u+1屈呕,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù)棺亭,假定此時的序列號為seq=w虎眨,此時,服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài)镶摘,等待客戶端的確認(rèn)嗽桩。
5)客戶端收到服務(wù)器的連接釋放報文后,必須發(fā)出確認(rèn)凄敢,ACK=1碌冶,ack=w+1,而自己的序列號是seq=u+1涝缝,此時扑庞,客戶端就進(jìn)入了TIME-WAIT(時間等待)狀態(tài)。注意此時TCP連接還沒有釋放拒逮,必須經(jīng)過2??MSL(最長報文段壽命)的時間后罐氨,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài)滩援。
6)服務(wù)器只要收到了客戶端發(fā)出的確認(rèn)栅隐,立即進(jìn)入CLOSED狀態(tài)。同樣玩徊,撤銷TCB后约啊,就結(jié)束了這次的TCP連接∮独担可以看到恰矩,服務(wù)器結(jié)束TCP連接的時間要比客戶端早一些。
【問題1】為什么連接的時候是三次握手憎蛤,關(guān)閉的時候卻是四次握手外傅?
答:因為當(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】為什么不能用兩次握手進(jìn)行連接?
答:3次握手完成兩個重要的功能锨推,既要雙方做好發(fā)送數(shù)據(jù)的準(zhǔn)備工作(雙方都知道彼此已準(zhǔn)備好)铅歼,也要允許雙方就初始序列號進(jìn)行協(xié)商,這個序列號在握手過程中被發(fā)送和確認(rèn)换可。
現(xiàn)在把三次握手改成僅需要兩次握手椎椰,死鎖是可能發(fā)生的。