【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★
文章目錄
- 一、傳輸層 TCP / UDP 協(xié)議 ★
- 二、尋址端口號(hào) ★
- 三、UDP 協(xié)議特點(diǎn)
- 四、UDP 協(xié)議首部格式
- 五、UDP 校驗(yàn)
- 六、TCP 協(xié)議 特點(diǎn) ★
- 七、TCP 報(bào)文段首部格式
- 八、TCP 報(bào)文段首部 666 控制位
- 九、TCP 連接建立 ★★
- 十、TCP 連接建立 相關(guān)報(bào)文段 字段
- 十一、TCP 連接釋放 ★★
- 十二、TCP 可靠傳輸機(jī)制 ★★
- 十三、TCP 快速重傳 機(jī)制
- 十四、TCP 流量控制 ★★
- 十五、TCP 擁塞控制
- 十六、TCP 擁塞控制算法 ★★
- 十七、慢開始 和 擁塞避免 算法 ★
- 十八、快重傳 和 快回復(fù) 算法★
一、傳輸層 TCP / UDP 協(xié)議 ★
傳輸層 協(xié)議 :
① UDP 協(xié)議 : 無連接 用戶數(shù)據(jù)報(bào)協(xié)議 ;
- 無連接 無確認(rèn) : 數(shù)據(jù)傳輸前 , 不建立連接 , 接收端收到 UDP 報(bào)文后 , 不需要給出確認(rèn) ;
- 特點(diǎn) : 不可靠 , 無連接 , 延遲小 , 適用于少量數(shù)據(jù)傳輸 ;
② TCP 協(xié)議 : 面向連接 傳輸控制協(xié)議 ;
- 面向連接 : 傳輸數(shù)據(jù)前 , 建立連接 , 數(shù)據(jù)傳輸后 , 釋放連接 ;
- 無多播 : 不提供 廣播 多播 服務(wù) ;
- 額外開銷 : TCP 提供可靠的 , 面向連接的 傳輸服務(wù) , 需要額外開銷 , 如 : 收據(jù)接收確認(rèn) , 流量控制 , 計(jì)時(shí)器 , 連接管理 ;
- 協(xié)議特點(diǎn) : 可靠 , 面向連接 , 時(shí)延大 , 適用于大數(shù)據(jù)量傳輸 ;
復(fù)用與分用 :
① 復(fù)用 : 應(yīng)用層 多個(gè) 應(yīng)用進(jìn)程 通過傳輸層 傳輸?shù)?網(wǎng)絡(luò)層 中 ;
② 分用 : 傳輸層 從 網(wǎng)絡(luò)層 接收數(shù)據(jù) , 分發(fā)給不同的 應(yīng)用進(jìn)程 ;
參考 : 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層 : 傳輸層概述 ( 設(shè)備層級(jí) | 傳輸層功能 | TCP 協(xié)議 | UDP 協(xié)議 | 復(fù)用與分用 | 端口號(hào) | 套接字 )
二、尋址端口號(hào) ★
端口號(hào) : 軟件端口 , 邏輯端口 , 用于標(biāo)識(shí) 主機(jī)中的 應(yīng)用程序 ;
① 端口號(hào) 只在主機(jī) 本地有實(shí)際意義 ;
② 取值范圍 : 端口號(hào)長(zhǎng)度 161616 位 , 取值范圍 000 ~ 655356553565535 ;
端口號(hào)分類 :
① 服務(wù)端使用的端口號(hào) :
- 熟知端口號(hào) : 000 ~ 102310231023 , 給 TCP/IP 的重要程序使用 ;
- 登記端口號(hào) : 102410241024 ~ 491514915149151 , 給普通應(yīng)用程序使用 ;
② 客戶端使用的端口號(hào) : 491524915249152 ~ 655356553565535 , 客戶端程序動(dòng)態(tài)分配 ;
應(yīng)用程序的 熟知端口號(hào) 對(duì)應(yīng) :
- FTP : 212121
- TELNET : 232323
- SMTP : 252525
- DNS : 535353
- TFTP : 696969
- HTTP : 808080
- SNMP : 161161161
參考 : 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層 : 傳輸層概述 ( 設(shè)備層級(jí) | 傳輸層功能 | TCP 協(xié)議 | UDP 協(xié)議 | 復(fù)用與分用 | 端口號(hào) | 套接字 )
三、UDP 協(xié)議特點(diǎn)
四、UDP 協(xié)議首部格式
五、UDP 校驗(yàn)
六、TCP 協(xié)議 特點(diǎn) ★
TCP 協(xié)議 特點(diǎn) :
① 面向連接 : TCP 協(xié)議的連接是 “虛連接” ;
② 點(diǎn)對(duì)點(diǎn) : TCP 協(xié)議 是 點(diǎn)對(duì)點(diǎn) 的 , 是兩個(gè)端點(diǎn)之間的連接 ;
③ 可靠傳輸 : TCP 協(xié)議提供 可靠服務(wù) , 按序到達(dá) , 沒有丟失 , 沒有重復(fù) ;
④ 全雙工 : TCP 協(xié)議通信是全雙工通信 ;
- 發(fā)送緩存 : 存儲(chǔ) 準(zhǔn)備發(fā)送的數(shù)據(jù) , 已經(jīng)發(fā)送尚未確認(rèn)送達(dá)的數(shù)據(jù) ;
- 接收緩存 : 存儲(chǔ) 按序到達(dá)尚未被讀取的數(shù)據(jù) , 不按序到達(dá)的數(shù)據(jù) ;
⑤ 面向字節(jié)流 : TCP 協(xié)議將 數(shù)據(jù) 看做 無結(jié)構(gòu)的字節(jié)流 ;
七、TCP 報(bào)文段首部格式
TCP 報(bào)文段首部格式 :
① TCP 報(bào)文段組成 : 由 TCP 首部 和 TCP 數(shù)據(jù)部分 組成 ;
② TCP 首部格式 : 由 202020 字節(jié)固定首部 + 可變的選項(xiàng) + 填充部分 組成 ; 其中 可變選項(xiàng) + 填充部分 是 444 字節(jié)整數(shù)倍 , 填充部分的意義就是為了讓整個(gè) TCP 首部大小是 444 字節(jié)整數(shù)倍 ;
③ 源端口 / 目的端口 : 進(jìn)程端口號(hào) , 每個(gè) 222 字節(jié) , 取值范圍 000 ~ 655356553565535 ;
④ 序號(hào) : TCP 連接中 , 字節(jié)流中的 字節(jié)按照順序編號(hào) , 每個(gè)字節(jié)都有一個(gè)序號(hào) , 本首部中的序號(hào)是本 TCP 報(bào)文 數(shù)據(jù)部分第一個(gè)字節(jié)的序號(hào) ;
⑤ 確認(rèn)號(hào) : 期望收到 對(duì)方 下一個(gè)報(bào)文段 第一個(gè)數(shù)據(jù)字節(jié)的序號(hào) ; 序號(hào)為 100100100 , 說明 999999 及之前的數(shù)據(jù)都已經(jīng)收到 ;
⑥ 數(shù)據(jù)偏移 : TCP 報(bào)文段 數(shù)據(jù)部分起始位置 , 距離 TCP 報(bào)文段的起始位置 , 有多遠(yuǎn) , 單位 444 字節(jié) ; 即 整個(gè) TCP 報(bào)文段 中 TCP 首部的長(zhǎng)度 ;
⑦ 窗口 : 發(fā)送本報(bào)文段一方的 接收窗口 ( 發(fā)送方 ) , 即允許對(duì)方發(fā)送的數(shù)據(jù)量 ( 接收方 ) ;
⑧ 檢驗(yàn)和 : 檢驗(yàn)首部 + 數(shù)據(jù) ; 檢驗(yàn)時(shí) 加上 121212 字節(jié)偽首部 , 第 444 字段都是 666 ;
⑨ 緊急指針 : 當(dāng) URG 緊急標(biāo)志位 為 111 時(shí) 有效 , 表明本報(bào)文段的緊急數(shù)據(jù)字節(jié)數(shù) ; 如 : 緊急指針值為 888888 , 說明 報(bào)文段的 數(shù)據(jù)部分 前 88 字節(jié)時(shí) 緊急數(shù)據(jù) ;
⑩ 選項(xiàng) : 最大報(bào)文段長(zhǎng)度 MSS , 窗口擴(kuò)大字段 , 時(shí)間戳 , 選擇確認(rèn)信息 等 ; 如果選項(xiàng) 不足 444 字節(jié)整數(shù)倍 , 使用填充 000 使 TCP 首部是 444 字節(jié)整數(shù)倍 ;
八、TCP 報(bào)文段首部 666 控制位
TCP 報(bào)文段首部 666 控制位 :
① URG ( 緊急位 ) : URG =1= 1=1 時(shí) , 表明 該報(bào)文段中有緊急數(shù)據(jù) , 優(yōu)先級(jí)很高 , 盡快傳送 , 不在緩存中排隊(duì) , 結(jié)合緊急指針字段使用 ;
② ACK ( 確認(rèn)位 ) : ACK =1= 1=1 時(shí) , 確認(rèn)號(hào)有效 , 連接建立后 , 所有的報(bào)文段的 ACK 都必須設(shè)置為 111 ;
③ PSH ( 推送位 ) : PSH =1=1=1 時(shí) , 接收方 要 盡快交付接收應(yīng)用進(jìn)程 , 不用等到接收緩存滿后再交付 ;
④ RST ( 復(fù)位 ) : RST =1=1=1 時(shí) , TCP 連接中出現(xiàn)錯(cuò)誤 , 必須釋放當(dāng)前連接 , 重新建立連接 ;
⑤ SYN ( 同步位 ) : SYN =1=1=1 時(shí) , 表明該報(bào)文是一個(gè) 連接請(qǐng)求 / 連接接收 報(bào)文 ;
⑥ FIN ( 終止位 ) : FIN =1=1=1 時(shí) , 表明該報(bào)文發(fā)送完畢 , 釋放連接 ;
九、TCP 連接建立 ★★
TCP 連接建立過程 : 客戶端 與 服務(wù)器 的 TCP 連接建立過程 ;
① 客戶端 發(fā)送 連接請(qǐng)求報(bào)文段 , 該報(bào)文段 沒有應(yīng)用層數(shù)據(jù) ;
- SYN = 1 , 同步位 , 如果為 111 , 說明該位是連接請(qǐng)求 / 連接接收 報(bào)文 ; 本次的情況是 連接請(qǐng)求 ;
- seq = x ( 隨機(jī) ) , 序號(hào)位 , 隨機(jī)產(chǎn)生一個(gè)字節(jié) , 確認(rèn)號(hào)此時(shí)是無效的 , 客戶端沒有收到服務(wù)器發(fā)送的報(bào)文段 , 不知道期待獲取什么序號(hào)的數(shù)據(jù) ;
- ACK = 0 , 確認(rèn)位 , 連接還沒有建立成功 , 此時(shí)是 000 , 之后連接建立成功后置位 111 ;
② 服務(wù)器端 收到 連接請(qǐng)求報(bào)文段 , 為 TCP 連接 分配 緩存和變量 , 向客戶端返回 確認(rèn)報(bào)文段 , 允許客戶端連接 , 此時(shí)該報(bào)文段 也沒有應(yīng)用層數(shù)據(jù) ;
- SYN = 1 , 同步位 , 如果為 111 , 說明該位是連接請(qǐng)求 / 連接接收 報(bào)文 ; 本次的情況是 連接接收 ;
- seq = y ( 隨機(jī) ) , 序號(hào)位 , 隨機(jī)產(chǎn)生一個(gè)字節(jié) , 確認(rèn)號(hào)此時(shí)是無效的 , 客戶端沒有收到服務(wù)器發(fā)送的報(bào)文段 , 不知道期待獲取什么序號(hào)的數(shù)據(jù) ;
- ACK = 1 , 確認(rèn)位 , 連接建立成功后置位 111 ;
- ack = x + 1 , 確認(rèn)號(hào) , 該 ack 與上面的 ACK 是配套使用的 ; 只有 ACK = 1 確認(rèn)位為 1 時(shí) , 確認(rèn)號(hào) ack 才生效 ;
③ 客戶端 收到 服務(wù)器端 返回的 確認(rèn)報(bào)文段 , 客戶端為 TCP 連接分配緩存和變量 , 同時(shí)向 服務(wù)器端 返回 確認(rèn)報(bào)文段 的 確認(rèn) , 并可以 攜帶實(shí)際傳輸?shù)臄?shù)據(jù) ;
- SYN = 0 , 同步位 , 說明該位 不是 連接請(qǐng)求 / 連接接收 報(bào)文 ;
- seq =x+1 , 序號(hào)位 , 表明本次發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào) ;
- ACK = 1 , 確認(rèn)位 , 連接建立成功后置位 111 ;
- ack = y + 1 , 確認(rèn)號(hào) , 期望收到 服務(wù)器端 下一次 發(fā)送的序號(hào) ; 該 ack 與上面的 ACK 是配套使用的 ; 只有 ACK = 1 確認(rèn)位為 1 時(shí) , 確認(rèn)號(hào) ack 才生效 ;
總結(jié) :
- SYN : 在開始的兩個(gè)報(bào)文段為 111 , 這是建立連接的前兩次握手 ; 等到真實(shí)傳輸數(shù)據(jù)時(shí) , 該位 為 000 ;
- ACK : 只在第一次握手時(shí) 為 000 , 此時(shí)還沒有建立連接 , 之后服務(wù)器端接收后 , 知道連接建立成功了 , ACK 設(shè)置為 111 ;
- 序號(hào)位 : 隨機(jī)值 , 客戶端生成 發(fā)送的 隨機(jī)序號(hào)位 x , 服務(wù)器端生成 發(fā)送的 隨機(jī)序號(hào)位 y ;
- 確認(rèn)號(hào) : 對(duì)應(yīng)上述 序號(hào)位 的是 確認(rèn)號(hào) , 客戶端 生成的隨機(jī)序號(hào) x 是 服務(wù)器端 期待的接收的序號(hào) 確認(rèn)號(hào) , 服務(wù)器端 生成的 隨機(jī)序號(hào) y 是 客戶端 期待接收的 序號(hào) 確認(rèn)號(hào) ;
十、TCP 連接建立 相關(guān)報(bào)文段 字段
上述涉及到的 TCP 報(bào)文的 四個(gè)字段 :
- 序號(hào) seq : TCP 連接中 , 字節(jié)流中的 字節(jié)按照順序編號(hào) , 每個(gè)字節(jié)都有一個(gè)序號(hào) , 本首部中的序號(hào)是本 TCP 報(bào)文 數(shù)據(jù)部分第一個(gè)字節(jié)的序號(hào) ;
- 確認(rèn)號(hào) ack : 期望收到 對(duì)方 下一個(gè)報(bào)文段 第一個(gè)數(shù)據(jù)字節(jié)的序號(hào) ; 序號(hào)為 100100100 , 說明 999999 及之前的數(shù)據(jù)都已經(jīng)收到 ;
- 同步位 SYN : SYN =1=1=1 時(shí) , 表明該報(bào)文是一個(gè) 連接請(qǐng)求 / 連接接收 報(bào)文 ;
- 確認(rèn)位 ACK : ACK =1= 1=1 時(shí) , 確認(rèn)號(hào)有效 , 連接建立后 , 所有的報(bào)文段的 ACK 都必須設(shè)置為 111 ;
上述 涉及到 TCP 報(bào)文內(nèi)容 , 參考博客 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層 : TCP 協(xié)議 ( TCP 協(xié)議特點(diǎn) | TCP 報(bào)文段首部格式 | TCP 報(bào)文段控制位 )
十一、TCP 連接釋放 ★★
TCP 連接釋放 : 四次揮手 ;
① 客戶端 : 客戶端 發(fā)送 連 接釋放報(bào)文段 , 停止發(fā)送數(shù)據(jù) , 發(fā)起 TCP 連接關(guān)閉流程 ; 連接釋放報(bào)文段 關(guān)鍵字段如下 :
- FIN = 1 : 表明該報(bào)文發(fā)送完畢 , 釋放連接 ;
- seq = u : 序號(hào)位設(shè)置成 u
② 服務(wù)器端 : 返回 確認(rèn)報(bào)文段 , 客戶端收到該報(bào)文段后 ; 確認(rèn)報(bào)文段 關(guān)鍵字段 如下 :
- ACK = 1
- seq = v : 服務(wù)器端生成的發(fā)送序號(hào) ;
- ack = u + 1 : 期待收到 客戶端 發(fā)送的 u 之后的報(bào)文段 u + 1 ;
③ 服務(wù)器端 : 發(fā)送完畢 上面的 確認(rèn)報(bào)文段后 , 發(fā)送 連接釋放報(bào)文段 , 關(guān)閉 TCP 連接 ( 該鏈接時(shí) 客戶端 -> 服務(wù)器端 方向的連接 ) ; 連接釋放報(bào)文段 關(guān)鍵字段如下 :
- FIN = 1
- ACK = 1
- seq = w : 服務(wù)器端 生成的序號(hào) ;
- ack = u + 1 : 該步驟 與 步驟 ② 中 , 沒有收到客戶端的報(bào)文 , 因此 ack 仍然保持 u + 1 不變 ;
④ 客戶端 : 收到 服務(wù)器端 連接釋放報(bào)文段 , 回復(fù) 確認(rèn)報(bào)文段 , 等待 2MSL ( 最長(zhǎng)報(bào)文壽命 ) 后 , 關(guān)閉 TCP 連接 ( 服務(wù)器 -> 客戶端 方向連接 ) ; 確認(rèn)報(bào)文段 格式 :
- ACK = 1
- seq = u + 1 : 第一次回收時(shí)是 u , 第四次揮手 時(shí) , 是 u + 1 ;
- ack = w + 1 : 服務(wù)器端發(fā)送的數(shù)據(jù)序號(hào)是 w , 本次期待收到下一次 w + 1
十二、TCP 可靠傳輸機(jī)制 ★★
TCP 實(shí)現(xiàn)可靠傳輸機(jī)制 :
① 校驗(yàn) : 使用 偽首部 進(jìn)行校驗(yàn) ;
② 序號(hào) : 每個(gè)字節(jié)編一個(gè)序號(hào) ; 序號(hào) 字段 的值是 報(bào)文段 第一個(gè)字節(jié)的序號(hào) ;
③ 確認(rèn) : 累計(jì)確認(rèn) ;
④ 重傳 : 重傳 與 確認(rèn)機(jī)制 結(jié)合使用 , 發(fā)送方 如果 在 規(guī)定時(shí)間內(nèi) , 沒有收到 接收端的確認(rèn) , 就要重發(fā)報(bào)文段 ;
- 重傳時(shí)間 : TCP 使用 自適應(yīng) 算法 , 動(dòng)態(tài)改變重傳時(shí)間 RTTs , 該時(shí)間成為 加權(quán)平均往返時(shí)間 ;
十三、TCP 快速重傳 機(jī)制
TCP 快速重傳 機(jī)制 : 使用 冗余確認(rèn) 機(jī)制 , 實(shí)現(xiàn)快速重傳 ;
① 冗余 ACK 確認(rèn)信息 : 接收方 接收到 接收到 比 期望序號(hào)大的 失序報(bào)文段 , 就向 發(fā)送方 發(fā)送 冗余 ACK , 表明下一個(gè)期待的序號(hào) ;
② 快速重傳示例 :
- 發(fā)送方 發(fā)送 1 , 2 , 3 , 4 , 5 報(bào)文段 ;
- 接收方 收到 1 號(hào)報(bào)文 , 向 發(fā)送方 返回 1 號(hào) 確認(rèn) ACK ;
- 2 號(hào)報(bào)文 丟失 ;
- 接收方 收到 3 號(hào)報(bào)文 , 向 發(fā)送方 返回 1 號(hào) 確認(rèn) ACK ;
- 接收方 收到 4 號(hào)報(bào)文 , 向 發(fā)送方 返回 1 號(hào) 確認(rèn) ACK ;
- 接收方 收到 5 號(hào)報(bào)文 , 向 發(fā)送方 返回 1 號(hào) 確認(rèn) ACK ;
- 如果 發(fā)送方 連續(xù)收到 3 個(gè)相同 確認(rèn)號(hào) 的 冗余 ACK , 此時(shí)認(rèn)為該確認(rèn)號(hào) 報(bào)文丟失 , 重傳該報(bào)文<> ; 如 本次的 222 號(hào)報(bào)文丟失 , 一直發(fā) 1 號(hào)確認(rèn)信息 ;
十四、TCP 流量控制 ★★
參考 : 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層 : TCP 流量控制 ( 流量控制過程 | 持續(xù)計(jì)時(shí)器機(jī)制 )
TCP 流量控制 :
① 流量控制 : 控制 發(fā)送方 降低發(fā)送速率 , 避免 接收方 來不及接收 , 丟棄數(shù)據(jù) , 導(dǎo)致重傳 ;
② 滑動(dòng)窗口機(jī)制 : TCP 通過 該 滑動(dòng)窗口機(jī)制 實(shí)現(xiàn) 流量控制 ;
③ 滑動(dòng)窗口 調(diào)整 : 接收方 根據(jù) 接收緩存大小 , 動(dòng)態(tài)調(diào)整 發(fā)送方 發(fā)送窗口 大小 ;
④ 接收方窗口 rwnd : 接收方 設(shè)置 確認(rèn)報(bào)文段 中含有 窗口字段 , 將 rwnd 通知給發(fā)送方 ;
⑤ 發(fā)送窗口 : 發(fā)送方 發(fā)送窗口 取 接收窗口 rwnd , 與 擁塞窗口 cwnd , 中較小的值 ;
TCP 流量控制 過程 : 發(fā)送端 向 接收端 發(fā)送數(shù)據(jù) ;
① 連接建立 : 接收端 向 發(fā)送端 發(fā)送 接收窗口 rwnd = 400 ;
② 發(fā)送端 發(fā)送數(shù)據(jù) :
- 發(fā)送 1 ~ 100 字節(jié) , 此時(shí)還能再發(fā)送 300 字節(jié) ; ( seq = 1 )
- 發(fā)送 101 ~ 200 字節(jié) , 此時(shí)還能再發(fā)送 200 字節(jié) ; ( seq = 101 )
- 發(fā)送 201 ~ 300 字節(jié) , 該報(bào)文段丟失 ; ( seq = 201 )
③ 接收端 返回?cái)?shù)據(jù) : 返回 ACK = 1 , ack = 201 , rwnd = 300 ;
- 表示 接收端 接收到了 201 之前的數(shù)據(jù) , 期待發(fā)送 201 數(shù)據(jù) , 接收窗口 rwnd 大小為 300 字節(jié) ;
- 發(fā)送方此時(shí) 只能發(fā)從 201 開始的 300 字節(jié)滑動(dòng)窗口大小的數(shù)據(jù) , 即發(fā)送 201 ~ 500 之間的數(shù)據(jù) , 共 300 字節(jié) ;
④ 發(fā)送方 發(fā)送數(shù)據(jù) :
- 發(fā)送 301 ~ 400 字節(jié) , 此時(shí)還能再發(fā)送 100 字節(jié)數(shù)據(jù) ;
- 發(fā)送 401 ~ 500 字節(jié) , 此時(shí)滑動(dòng)窗口的數(shù)據(jù)都發(fā)送完畢 , 不能再發(fā)送了 ;
- 發(fā)送方 的 超時(shí)重傳計(jì)時(shí)器 , 時(shí)間到期 , 重傳 201 ~ 300 字節(jié)數(shù)據(jù) , 此時(shí)不能發(fā)送 新數(shù)據(jù) ;
⑤ 接收方 接收數(shù)據(jù) : 接收方接收到了上述 所有發(fā)送的數(shù)據(jù) , 返回 ACK = 1 , ack = 501 , rwnd = 100 ; 表示 期待 發(fā)送方發(fā)送 501 之后的數(shù)據(jù) , 接收窗口 rwnd 設(shè)置為 100 字節(jié) ;
⑥ 發(fā)送方 發(fā)送數(shù)據(jù) : 發(fā)送方發(fā)送 501 ~ 600 字節(jié)數(shù)據(jù) , 此時(shí)滑動(dòng)窗口占滿 , 不能繼續(xù)發(fā)送數(shù)據(jù) ;
⑦ 接收方 接收數(shù)據(jù) : 接收方接收到了 501 ~ 600 字節(jié)數(shù)據(jù) , 此時(shí)回送 ACK = 1 , ack = 601 , rwnd = 0 ; 設(shè)置期望發(fā)送 601 之后的數(shù)據(jù) , 接收窗口設(shè)置為 0 ; 此時(shí)不允許發(fā)送方再發(fā)送了 ;
十五、TCP 擁塞控制
TCP 擁塞控制 :
① 擁塞出現(xiàn)表現(xiàn) : 資源需求總和 大于 可用資源 ;
② 擁塞問題發(fā)展 : 網(wǎng)絡(luò)中 資源 供應(yīng)不足 -> 網(wǎng)絡(luò)性能降低 -> 網(wǎng)絡(luò)吞吐量隨著負(fù)荷增加而降低
③ 擁塞控制 : 防止數(shù)據(jù)大量注入到網(wǎng)絡(luò)中 , 降低整體網(wǎng)絡(luò)中主機(jī)的發(fā)送速率 , 流量控制 是 降低一臺(tái)主機(jī)的發(fā)送速率 ;
④ 流量控制 與 擁塞控制 : 流量控制 是 點(diǎn)到點(diǎn) 的問題 , 擁塞控制 是 全局性 問題 ;
十六、TCP 擁塞控制算法 ★★
TCP 擁塞控制算法 :
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復(fù)
TCP 擁塞控制相關(guān)術(shù)語 :
① 單向傳輸 : 擁塞控制假定單向傳輸數(shù)據(jù) , 發(fā)送方 向 接收方 發(fā)送 數(shù)據(jù) , 接收方 向 發(fā)送方 回送 確認(rèn)信息 ;
② 發(fā)送窗口 : 接收方 緩存空間 足夠大 , 發(fā)送窗口大小 取決于 網(wǎng)絡(luò)擁塞程度 ; 發(fā)送窗口大小 是 接收窗口 rwnd 和 擁塞窗口 cwnd 中的 較小的值 ;
③ 接收窗口 : 接收方 根據(jù) 接收緩存 設(shè)置 接收窗口 大小值 , 同時(shí)將該大小 告知發(fā)送方 , 可以反映接 收方容量 ;
④ 擁塞窗口 : 發(fā)送方 估算 網(wǎng)絡(luò)擁塞程度 , 設(shè)置 合適的 擁塞窗口 值 , 反映當(dāng)前 網(wǎng)絡(luò)容量 ;
( 知道每個(gè)算法的原理 , 細(xì)節(jié)僅做了解 )
十七、慢開始 和 擁塞避免 算法 ★
坐標(biāo)系說明 :
① 縱坐標(biāo) : 縱坐標(biāo) 是 擁塞窗口 cnwd 大小 , 單位是 一個(gè)報(bào)文段 , 長(zhǎng)度是一個(gè)最大報(bào)文段長(zhǎng)度 MSS ;
- 如 : 縱坐標(biāo)的 4 指的是 4 個(gè) MSS , 8 指的是 8 個(gè) MSS ;
② 橫坐標(biāo) : 橫坐標(biāo) 是 傳輸輪次 ;
- 往返時(shí)延 : 一個(gè)傳輸輪次 是 發(fā)送一批報(bào)文段 , 并接收到它們的 確認(rèn)信息 所花費(fèi)的時(shí)間 ; 即 RTT ;
- 如 : 發(fā)送方 向 接收方 發(fā)送 N 個(gè)報(bào)文段 , 發(fā)送方 發(fā)送完畢后 , 接收到所有 N 個(gè) 報(bào)文段的確認(rèn)信息 , 所花費(fèi)的時(shí)間 , 就是 一個(gè)傳輸輪次 ;
- 報(bào)文段發(fā)送間隔 : 也可以理解成 發(fā)送方 開發(fā)發(fā)送一批 擁塞窗口 中的報(bào)文段 , 到 開始發(fā)送 下一批 擁塞窗口 報(bào)文段 的時(shí)間 ;
慢開始 和 擁塞避免 算法 :
① 慢開始 : 擁塞窗口 開始設(shè)置成 1 , 每隔一個(gè) 傳輸輪次 , 收到上一個(gè)報(bào)文段的確認(rèn)報(bào)文后 , 擁塞窗口翻倍 , 即變?yōu)橹暗?兩倍 ;
② 慢開始門限值 ( ssthresh ) : 當(dāng) 擁塞窗口 到達(dá) 慢開始門限值 ( ssthresh ) 初始值時(shí) , 停止指數(shù)級(jí)增長(zhǎng) , 開始線性增長(zhǎng) ;
③ 擁塞避免 : 進(jìn)入到 慢開始門限值 后 , 開始進(jìn)行 擁塞避免算法 , 每個(gè)傳輸輪次 , 擁塞窗口 增加 1 ;
④ 網(wǎng)絡(luò)擁塞 : 當(dāng) 擁塞窗口 增加到一定值 , 檢測(cè)到了 網(wǎng)絡(luò)擁塞 , 此時(shí)瞬間將 擁塞窗口降為 1 ; 繼續(xù)執(zhí)行慢開始算法 , 新的 慢開始門限值 變?yōu)?網(wǎng)絡(luò)擁塞時(shí) 的 擁塞窗口的 1/2 大小 ;
擁塞窗口改變時(shí)機(jī) :
- 收到上一個(gè)報(bào)文段的確認(rèn)報(bào)文后 , 擁塞窗口翻倍 ;
- 收到上一個(gè)報(bào)文段的擁塞信息后 , 擁塞窗口變?yōu)?1 ;
十八、快重傳 和 快回復(fù) 算法★
快重傳算法 : 收到 3 個(gè)冗余的 確認(rèn)后 , 執(zhí)行快重傳算法 ;
示例 : 發(fā)送方 給 接收方 發(fā)送 1 2 3 4 5 , 五個(gè)報(bào)文 , 2 號(hào)報(bào)文丟失 , 如果收到 3 4 5 號(hào)報(bào)文 , 其中會(huì)攜帶期待 發(fā)送方 發(fā)送 2 號(hào)報(bào)文 , 此時(shí)觸發(fā) 快重傳 算法機(jī)制 , 在超時(shí)計(jì)時(shí)器到時(shí)之前 , 快速發(fā)送 丟失的 2 號(hào) 報(bào)文 ;
快回復(fù)算法 : 與 上面的 擁塞避免算法的 區(qū)別是 , 出現(xiàn) 網(wǎng)絡(luò)擁塞 之后 , 擁塞窗口 不降為 1 , 而是降低到 慢開始門限值 , 即當(dāng)前的 擁塞窗口大小的 1/2 , 然后線性增加 擁塞窗口 ;
總結(jié)
以上是生活随笔為你收集整理的【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【组合数学】排列组合 ( 排列组合内容概
- 下一篇: 【计算机网络】应用层 : 总结 ( 网络