TCP原理
TCP建立(三次握手)
- 由主機(jī)Client發(fā)送建立tcp連接的請(qǐng)求,此時(shí)tcp報(bào)文會(huì)隨機(jī)生成一個(gè)seq號(hào)為a(序列號(hào)),并把SYN字段置為1,表示需要建立tcp連接。
- 主機(jī)Server接受到主機(jī)Client發(fā)送來的tcp連接請(qǐng)求,也會(huì)在回復(fù)的tcp報(bào)文中隨機(jī)生成一個(gè)序列號(hào)為B,SYN字段置為1,ack設(shè)置為A+1進(jìn)行回復(fù),以便Client收到信息時(shí),知曉自己的tcp建立請(qǐng)求已得到了驗(yàn)證
-
主機(jī)Client接收到主機(jī)Server的發(fā)送來的信息后,將自己的seq+1 ,ack設(shè)為B+1,并且再次回復(fù)ack驗(yàn)證請(qǐng)求,進(jìn)行回復(fù)。
TCP斷開(四次握手)
- 由客戶端發(fā)起tcp斷開連接,此時(shí)seq為A+1 FIN置為1,表示請(qǐng)求斷開連接
- 服務(wù)器接受到tcp斷開請(qǐng)求后,此時(shí)seq為B+1,ack置為A+1+1,表示客戶端發(fā)起的斷開請(qǐng)求我已經(jīng)接收到了
- 服務(wù)器并不會(huì)馬上斷開tcp連接,它需要將數(shù)據(jù)信息全都傳入給客戶端后,會(huì)把tcp報(bào)文的 seq=B+1 FIN置為1 ack置為A+2,此時(shí)服務(wù)器表示可以斷開tcp連接了
-
客戶端接受到信息后,會(huì)發(fā)送一個(gè)確認(rèn)斷開的報(bào)文,seq置為A+1 ack為B+1+1,確認(rèn)斷開連接
假設(shè)Client端發(fā)起中斷連接請(qǐng)求,也就是發(fā)送FIN報(bào)文。Server端接到FIN報(bào)文后,意思是說"我Client端沒有數(shù)據(jù)要發(fā)給你了",但是如果你還有數(shù)據(jù)沒有發(fā)送完成,則不必急著關(guān)閉Socket,可以繼續(xù)發(fā)送數(shù)據(jù)。所以你先發(fā)送ACK,“告訴Client端,你的請(qǐng)求我收到了,但是我還沒準(zhǔn)備好,請(qǐng)繼續(xù)你等我的消息”。這個(gè)時(shí)候Client端就進(jìn)入FIN_WAIT狀態(tài),繼續(xù)等待Server端的FIN報(bào)文。當(dāng)Server端確定數(shù)據(jù)已發(fā)送完成,則向Client端發(fā)送FIN報(bào)文,“告訴Client端,好了,我這邊數(shù)據(jù)發(fā)完了,準(zhǔn)備好關(guān)閉連接了”。Client端收到FIN報(bào)文后,"就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò),怕Server端不知道要關(guān)閉,所以發(fā)送ACK后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒有收到ACK則可以重傳?!?,Server端收到ACK后,“就知道可以斷開連接了”。Client端等待了2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,那好,我Client端也可以關(guān)閉連接了。Ok,TCP連接就這樣關(guān)閉了!
UDP原理
UDP是無連接的傳輸協(xié)議,主要用于在相對(duì)可靠的網(wǎng)絡(luò)上的數(shù)據(jù)傳輸,或用于對(duì)延遲較敏感的應(yīng)用等。
UDP是面向報(bào)文的,發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付給IP層。
理解
UDP是是IP協(xié)議暴露在傳輸層上的接口。
UDP的優(yōu)點(diǎn):
UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接,(當(dāng)然,發(fā)送數(shù)據(jù)結(jié)束時(shí)也沒有連接可釋放),因此減少了開銷和發(fā)送數(shù)據(jù)之前的時(shí)延。
沒有擁塞控制,傳輸速度快
UDP的缺點(diǎn):
傳輸不可靠
總結(jié)
- TCP和UDP通過端口號(hào)標(biāo)識(shí)上層應(yīng)用和服務(wù)
- TCP通過三次握手建立可靠連接
- TCP通過校驗(yàn)和進(jìn)行差錯(cuò)校驗(yàn),通過序列號(hào)、確認(rèn)和超時(shí)重傳機(jī)制實(shí)現(xiàn)可靠傳輸,通過滑動(dòng)窗口實(shí)現(xiàn)流量控制
- UDP實(shí)現(xiàn)簡(jiǎn)單,資源占用少,實(shí)用性強(qiáng),適用于可靠性高的網(wǎng)絡(luò)和延遲敏感的用用