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