Python學(xué)習(xí)【TCP/IP】

TCP與UDP的區(qū)別

1.TCP是面向連接的傳輸協(xié)議,傳輸前雙方需建立連接通道,而UDP可以直接傳輸。

2.TCP傳輸信息可靠,信息傳輸無差錯(cuò),不丟失,不重復(fù),且按序到達(dá)。UDP傳輸不保證可靠。

3.TCP是字節(jié)流傳輸(較長(zhǎng)數(shù)據(jù)分割成數(shù)據(jù)塊進(jìn)行傳輸),而UDP是報(bào)文流傳輸(給多少傳多少)。

4.TCP為了實(shí)現(xiàn)傳輸可靠性使用了較為復(fù)雜的算法和實(shí)現(xiàn)過程,不適用于實(shí)時(shí)傳輸,UDP實(shí)時(shí)性較好。

5.每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的,UDP支持一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多。

6.TCP占用系統(tǒng)資源較多,UDP相對(duì)較少。

TCP三次握手的具體過程? 并解釋為什么需要三次握手?

第一次握手:客戶端向服務(wù)端發(fā)出請(qǐng)求,發(fā)送SYN包(同步序列編號(hào))到客戶端,并進(jìn)入SYN_SENT狀態(tài)。

第二次握手:服務(wù)端獲取到SYN包后,需要回復(fù)確認(rèn)ACK,同時(shí)發(fā)送自己的SYN,并進(jìn)入SYN_RECV狀態(tài)。

第三次握手:客戶端獲取到服務(wù)端發(fā)送的ACK和SYN后,需要回復(fù)確認(rèn)ACK,發(fā)送完畢后,兩端同時(shí)進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。

分析:

TCP可視為全雙工通信,分為兩個(gè)通信方向:Client>>Server / Server>>Client。

第一次握手:客戶端提交數(shù)據(jù)傳輸請(qǐng)求。
(C提交申請(qǐng),但C自身并不知道C>>S 和S>>C是否可行)

第二次握手:服務(wù)端應(yīng)答客戶端,表示確認(rèn)接收到客戶端數(shù)據(jù),并發(fā)出SYN,等待客戶端應(yīng)答。
(S對(duì)C的請(qǐng)求進(jìn)行應(yīng)答,S可確認(rèn)C>>S可行,但不知道S>>C是否可行)

第三次握手:客戶端應(yīng)答服務(wù)端,表示確認(rèn)接收到服務(wù)端數(shù)據(jù),建立連接。
(C對(duì)S請(qǐng)求進(jìn)行應(yīng)答,C可知S>>C和C>>S均可行,S接收應(yīng)答后可知S>>C可行,即可建立連接)

三次握手是對(duì)可靠傳輸進(jìn)行確認(rèn)的必要過程,完成三次握手可確保信息傳輸?shù)目煽啃?。在兩端未確認(rèn)的情況下進(jìn)行傳輸,可能會(huì)導(dǎo)致信息重發(fā)等問題出現(xiàn)。

TCP四次斷開連接的過程, 并分析為什么斷開需要四次?

第一步,當(dāng)主機(jī)A的應(yīng)用程序通知TCP數(shù)據(jù)已經(jīng)發(fā)送完畢時(shí),TCP向主機(jī)B發(fā)送一個(gè)帶有FIN附加標(biāo)記的報(bào)文段(FIN表示英文finish)。

第二步,主機(jī)B收到這個(gè)FIN報(bào)文段之后,并不立即用FIN報(bào)文段回復(fù)主機(jī)A,而是先向主機(jī)A發(fā)送一個(gè)確認(rèn)序號(hào)ACK,同時(shí)通知自己相應(yīng)的應(yīng)用程序:對(duì)方要求關(guān)閉連接(先發(fā)送ACK的目的是為了防止在這段時(shí)間內(nèi),對(duì)方重傳FIN報(bào)文段)。

第三步,主機(jī)B的應(yīng)用程序告訴TCP:我要徹底的關(guān)閉連接,TCP向主機(jī)A送一個(gè)FIN報(bào)文段。

第四步,主機(jī)A收到這個(gè)FIN報(bào)文段后,向主機(jī)B發(fā)送一個(gè)ACK表示連接徹底釋放。

分析:

同樣,關(guān)閉連接前要兩端都確認(rèn)自己本端和對(duì)端數(shù)據(jù)傳輸完畢。即獲取對(duì)方發(fā)送的FIN并應(yīng)答(ACK)告訴對(duì)方自己獲取到了對(duì)方的FIN。

第一步,A主機(jī)給發(fā)給B主機(jī)的消息傳輸完畢,向B發(fā)送FIN,告知B自己發(fā)送完畢,準(zhǔn)備關(guān)閉連接。
(此時(shí)A傳輸完畢發(fā)出FIN,但不知道B是否發(fā)送完畢,也不知道B是否接收到自己的FIN報(bào)文)

第二步,B主機(jī)在未發(fā)送完畢的情況下接收到A的FIN,向A回復(fù)ACK且通知本機(jī)應(yīng)用層,并將未發(fā)送完畢的數(shù)據(jù)繼續(xù)發(fā)送完。
(B得知A發(fā)送完畢,A接收ACK后得知B接收到自己發(fā)送的FIN報(bào)文)

第三步,B主機(jī)發(fā)送完畢后,發(fā)出FIN報(bào)文,并等待A的應(yīng)答(2MSL內(nèi)沒有收到A的應(yīng)答,則重發(fā))
(B傳輸完畢,但不知道A是否接收到自己的FIN報(bào)文)
(MSL指一個(gè)片段在網(wǎng)絡(luò)中最大的存活時(shí)間,2MSL就是一個(gè)發(fā)送和一個(gè)回復(fù)所需的最大時(shí)間)

第四步,A收到B的FIN報(bào)文,做出ACK應(yīng)答,在等待2MSL后自行關(guān)閉。
(A應(yīng)答,B收到后得知A收到了自己的FIN報(bào)文,B關(guān)閉,A在2MSL內(nèi)沒有收到B的FIN重發(fā),判斷B已經(jīng)收到了自己的ACK,A關(guān)閉)

四次揮手可以看作是改良版的三次握手,只不過在第二次握手時(shí)考慮到B端數(shù)據(jù)沒有發(fā)送完畢的情況,因此ACK和FIN分兩次進(jìn)行發(fā)送,變成了四次。

分享名稱:Python學(xué)習(xí)【TCP/IP】
當(dāng)前網(wǎng)址:http://muchs.cn/article26/gespcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、、全網(wǎng)營(yíng)銷推廣ChatGPT、定制開發(fā)、網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)