計(jì)算機(jī)網(wǎng)絡(luò)

TCP與UDP的對比
(1)連接方面,TCP需要三次握手而UDP并不需要
(2)TCP有完善的擁塞控制機(jī)制,UDP沒有
(3)UDP可以有無連接狀態(tài)
(4)UDP分組首部開銷更小

可靠性協(xié)議以及機(jī)制

檢驗(yàn)和 用于檢測分組中是否出現(xiàn)比特錯(cuò)誤
定時(shí)器 用于超時(shí)/重傳分組
序號 檢測出一個(gè)分組的冗余副本
確認(rèn) 通知發(fā)送方分組已經(jīng)接收
否定確定 接收方通知發(fā)送方分組未能接收
窗口 發(fā)送方也被允許限制僅發(fā)送那些序號落在一個(gè)指定范圍的分組

TCP/UDP
多路復(fù)用/多路分解

TCP的流量控制:
流量控制是一個(gè)速度匹配的服務(wù),即發(fā)送方的發(fā)送速率與接收方的讀取速率相匹配。

三次握手:
(1)每次ACK針對###對方###發(fā)過來的Seq進(jìn)行加一并返回給對方。
(2)為啥是三次是三次握手:為了防止已經(jīng)失效的連接請求重新打到了服務(wù)端。
(3)為啥需要初始化序列號:

四次握手:
(1)客戶發(fā)送關(guān)閉請求
(2)服務(wù)端針對這個(gè)關(guān)閉連接的請求進(jìn)行ACK
(3)服務(wù)端向客戶端發(fā)送關(guān)閉信息
(4)客戶端針針對服務(wù)端發(fā)送來的關(guān)閉信息進(jìn)行ACK

四次握手的狀態(tài):
FIN_WAIT_1:
客戶端發(fā)送關(guān)閉連接請求之后即進(jìn)入FIN_WAIT_1狀態(tài),但客戶端此時(shí)仍然可以接收消息。
FIN_WAIT_2:
客戶端接收到服務(wù)端的ACK信息隨即進(jìn)入FIN_WAIT_2狀態(tài),并等待服務(wù)端發(fā)送FIN消息。
CLOSE_WAIT:
這種狀態(tài)的含義其實(shí)是表示在等待關(guān)閉。怎么理解呢?當(dāng)對方close一個(gè)SOCKET后發(fā)送FIN報(bào)文給自己,你系統(tǒng)毫無疑問地會回應(yīng)一個(gè)ACK報(bào)文給對方,此時(shí)則進(jìn)入到CLOSE_WAIT狀態(tài)。接下來呢,實(shí)際上你真正需要考慮的事情是察看你是否還有數(shù)據(jù)發(fā)送給對方,如果沒有的話,那么你也就可以 close這個(gè)SOCKET,發(fā)送FIN報(bào)文給對方,也即關(guān)閉連接。所以你在CLOSE_WAIT狀態(tài)下,需要完成的事情是等待你去關(guān)閉連接。(被動方)
LAST_ACK:
它是被動關(guān)閉一方在發(fā)送FIN報(bào)文后,最后等待對方的ACK報(bào)文。當(dāng)收到ACK報(bào)文后,也即可以進(jìn)入到CLOSED可用狀態(tài)了。(被動方)
TIME_WAIT:
表示收到了對方的FIN報(bào)文,并發(fā)送出了ACK報(bào)文,就等2MSL后即可回到CLOSED可用狀態(tài)了。如果FINWAIT1狀態(tài)下,收到了對方同時(shí)帶FIN標(biāo)志和ACK標(biāo)志的報(bào)文時(shí),可以直接進(jìn)入到TIME_WAIT狀態(tài),而無須經(jīng)過FIN_WAIT_2狀態(tài)。(主動方)
TIME_WAIT存在的意義是防止最后一次ACK對方?jīng)]有接收到需要進(jìn)行重傳。
CLOSED:
表示連接中斷。

在四次揮手過程中,TCP的FIN和ACK消息可以是異步的,因?yàn)樵诮邮盏疥P(guān)閉連###接請求之后可以先把手頭的數(shù)據(jù)處理完再進(jìn)行ACK確認(rèn)。

擁塞控制原理
通過超時(shí)或者3次冗余確認(rèn)可被認(rèn)為是網(wǎng)絡(luò)擁塞的一個(gè)跡象。TCP會相應(yīng)的減小其窗口長度。
2種控制方法:
(1)端到端擁塞控制
(2)網(wǎng)絡(luò)輔助的擁塞控制:通過網(wǎng)絡(luò)層構(gòu)建(即路由器)

TCP擁塞控制:
首先看一下TCP連接的每一端的構(gòu)成:接收緩存、一個(gè)發(fā)送緩存、幾個(gè)變量。運(yùn)行在發(fā)送方的TCP擁塞控制機(jī)制還需要跟蹤一個(gè)額外的變量:擁塞窗口(用于控制發(fā)送速率)。

控制算法:
該算法主要包括三個(gè)部分:慢啟動、擁塞避免、快速恢復(fù);
慢啟動和擁塞避免是TCP的強(qiáng)制的部分。
慢啟動:
在慢啟動階段,TCP的發(fā)送速率是以指數(shù)進(jìn)行增長。如果出現(xiàn)丟包則重新啟動慢啟動;如果速率進(jìn)入慢啟動閾值則進(jìn)入擁塞避免方式;如果監(jiān)測到三個(gè)冗余ACK,此時(shí)TCP執(zhí)行快速重傳并進(jìn)入快速恢復(fù) 狀態(tài)。
擁塞避免:
更加保守的增加CWND的值:一種通用的方式是每當(dāng)收到一個(gè)ACK確認(rèn)則增加CWND的值。當(dāng)出現(xiàn)丟包或者三次冗余ACK的時(shí)候則CWND的值直接變成原來的一半,接下來進(jìn)入快速恢復(fù)狀態(tài)。
快速恢復(fù):
在TCP處于快速恢復(fù)狀態(tài)時(shí)候:每收到一個(gè)冗余確認(rèn)則CWND的值加1。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容