TCP與UDP的對比
(1)連接方面雾家,TCP需要三次握手而UDP并不需要
(2)TCP有完善的擁塞控制機(jī)制乡翅,UDP沒有
(3)UDP可以有無連接狀態(tài)
(4)UDP分組首部開銷更小
可靠性協(xié)議以及機(jī)制
檢驗和 用于檢測分組中是否出現(xiàn)比特錯誤
定時器 用于超時/重傳分組
序號 檢測出一個分組的冗余副本
確認(rèn) 通知發(fā)送方分組已經(jīng)接收
否定確定 接收方通知發(fā)送方分組未能接收
窗口 發(fā)送方也被允許限制僅發(fā)送那些序號落在一個指定范圍的分組
TCP/UDP
多路復(fù)用/多路分解
TCP的流量控制:
流量控制是一個速度匹配的服務(wù)蚁飒,即發(fā)送方的發(fā)送速率與接收方的讀取速率相匹配。
三次握手:
(1)每次ACK針對###對方###發(fā)過來的Seq進(jìn)行加一并返回給對方瑰钮。
(2)為啥是三次是三次握手:為了防止已經(jīng)失效的連接請求重新打到了服務(wù)端邻辉。
(3)為啥需要初始化序列號:
四次握手:
(1)客戶發(fā)送關(guān)閉請求
(2)服務(wù)端針對這個關(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),但客戶端此時仍然可以接收消息聋迎。
FIN_WAIT_2:
客戶端接收到服務(wù)端的ACK信息隨即進(jìn)入FIN_WAIT_2狀態(tài)脂矫,并等待服務(wù)端發(fā)送FIN消息。
CLOSE_WAIT:
這種狀態(tài)的含義其實是表示在等待關(guān)閉霉晕。怎么理解呢庭再?當(dāng)對方close一個SOCKET后發(fā)送FIN報文給自己,你系統(tǒng)毫無疑問地會回應(yīng)一個ACK報文給對方牺堰,此時則進(jìn)入到CLOSE_WAIT狀態(tài)拄轻。接下來呢,實際上你真正需要考慮的事情是察看你是否還有數(shù)據(jù)發(fā)送給對方伟葫,如果沒有的話恨搓,那么你也就可以 close這個SOCKET,發(fā)送FIN報文給對方筏养,也即關(guān)閉連接斧抱。所以你在CLOSE_WAIT狀態(tài)下,需要完成的事情是等待你去關(guān)閉連接渐溶。(被動方)
LAST_ACK:
它是被動關(guān)閉一方在發(fā)送FIN報文后辉浦,最后等待對方的ACK報文。當(dāng)收到ACK報文后茎辐,也即可以進(jìn)入到CLOSED可用狀態(tài)了宪郊。(被動方)
TIME_WAIT:
表示收到了對方的FIN報文,并發(fā)送出了ACK報文拖陆,就等2MSL后即可回到CLOSED可用狀態(tài)了弛槐。如果FINWAIT1狀態(tài)下,收到了對方同時帶FIN標(biāo)志和ACK標(biāo)志的報文時依啰,可以直接進(jìn)入到TIME_WAIT狀態(tài)乎串,而無須經(jīng)過FIN_WAIT_2狀態(tài)。(主動方)
TIME_WAIT存在的意義是防止最后一次ACK對方?jīng)]有接收到需要進(jìn)行重傳速警。
CLOSED:
表示連接中斷灌闺。
在四次揮手過程中艰争,TCP的FIN和ACK消息可以是異步的,因為在接收到關(guān)閉連###接請求之后可以先把手頭的數(shù)據(jù)處理完再進(jìn)行ACK確認(rèn)桂对。
擁塞控制原理
通過超時或者3次冗余確認(rèn)可被認(rèn)為是網(wǎng)絡(luò)擁塞的一個跡象甩卓。TCP會相應(yīng)的減小其窗口長度。
2種控制方法:
(1)端到端擁塞控制
(2)網(wǎng)絡(luò)輔助的擁塞控制:通過網(wǎng)絡(luò)層構(gòu)建(即路由器)
TCP擁塞控制:
首先看一下TCP連接的每一端的構(gòu)成:接收緩存蕉斜、一個發(fā)送緩存逾柿、幾個變量。運(yùn)行在發(fā)送方的TCP擁塞控制機(jī)制還需要跟蹤一個額外的變量:擁塞窗口(用于控制發(fā)送速率)宅此。
控制算法:
該算法主要包括三個部分:慢啟動机错、擁塞避免、快速恢復(fù)父腕;
慢啟動和擁塞避免是TCP的強(qiáng)制的部分弱匪。
慢啟動:
在慢啟動階段,TCP的發(fā)送速率是以指數(shù)進(jìn)行增長璧亮。如果出現(xiàn)丟包則重新啟動慢啟動萧诫;如果速率進(jìn)入慢啟動閾值則進(jìn)入擁塞避免方式;如果監(jiān)測到三個冗余ACK枝嘶,此時TCP執(zhí)行快速重傳并進(jìn)入快速恢復(fù) 狀態(tài)帘饶。
擁塞避免:
更加保守的增加CWND的值:一種通用的方式是每當(dāng)收到一個ACK確認(rèn)則增加CWND的值。當(dāng)出現(xiàn)丟包或者三次冗余ACK的時候則CWND的值直接變成原來的一半群扶,接下來進(jìn)入快速恢復(fù)狀態(tài)及刻。
快速恢復(fù):
在TCP處于快速恢復(fù)狀態(tài)時候:每收到一個冗余確認(rèn)則CWND的值加1。