【学习笔记】传输层:TCP协议(报文段、连接管理{握手}、可靠传输、流量控制、拥塞控制)
生活随笔
收集整理的這篇文章主要介紹了
【学习笔记】传输层:TCP协议(报文段、连接管理{握手}、可靠传输、流量控制、拥塞控制)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一. 協議特點 & 報文段
- ① 特點
- ② 報文段首部格式
- 二. TCP連接管理
- ① 建立聯系(三次握手)
- SYN洪泛攻擊
- ② 連接釋放(四次揮手)
- 三. TCP流量控制
- ① 序號
- ② 重傳
- 冗余ACK(快速重傳)
- 三. 流量控制
- ① 定義
- ② 實例
- 四. TCP擁塞控制
- ① 定義
- ② 擁塞控制四種算法
- 慢開始和擁塞避免
- 快重傳和快恢復
一. 協議特點 & 報文段
① 特點
- 面向連接;虛連接(并非物理連接)
- 因為是全雙工,所以需要用到緩存
- 比如下圖,用123字節和TCP頭組成報文段
② 報文段首部格式
- 序號:比如上圖的123傳遞成功后,發送方要傳送456字節,那么組成報文段中的序號就是4。
- 確認號:用序號的例子,123傳遞成功后,接收方發送的報文段的確認號就是4
(表示123已經收到,期待接收到4) - 填充:TCP首部大小需要滿足是4B的倍數,因此需要填充0來結合選項大小滿足4B
- 數據偏移:由“填充”可知,TCP首部大小不一定是20B,因此需要用“數據偏移"部分來記錄TCP首部的實際大小。
- URG = 1:可以直接插隊到最前面
- 控制位、窗口可以結合后面的例子理解,這里可以先看定義。
- 對于檢驗和,UDP的第四個字段是17,和TCP的6不同。
二. TCP連接管理
- 類似打電話,采用客戶服務器方式
① 建立聯系(三次握手)
- 參考上圖男女的對話
- 有ACK就有ack
- x,y都是隨機的
- 用到了控制位中的SYN(同步位),和ACK(確認位)
- 返回確認的確認時,可以攜帶數據。
SYN洪泛攻擊
- 用SYN cookie來解決
- 簡述:大量進行ROUND 1,而不進行ROUND 3,讓服務器大量TCP連接掛起,浪費資源。
② 連接釋放(四次揮手)
- 先看下圖男女對話,TCP的連接釋放過程就類似下圖
- 半關閉狀態:只是單向的連接釋放,而非互相的連接釋放。
- ROUND 2(ack=u+1)時客戶端不用回復確認報文段,因為已經進入半關閉狀態。
- ROUND 3的ack=u+1,因為ROUND 2時客戶端并沒有回送報文段。
- ROUND 3的seq = w,不一定有 w = v + 1,因為ROUND 2 - 3之間服務端可能還在發信息
- ROUND 4等待原理:
1) 如果確認報文段丟失了,A會在2MSL內收到B重發的ROUND 3數據報,并重新開始計算2MSL:如果之后報文段繼續丟失,則重來一次這個操作;如果收到了,就圓滿結束。
2) 如果不設置這個操作,可能會出現因為報文段丟失,導致B一直處于等待報文段狀態,無法正常結束。
3)為什么是2MSL:ROUND 4丟失的情況下,在1MSL的時候服務器會重傳ROUND 3,然后再經歷一個1MSL抵達客戶端,
三. TCP流量控制
- 網絡層不可靠,靠傳輸層用TCP實現可靠。
如果是UDP,則在應用層實現可靠。 - 機制:校驗、序號、確認、重傳
① 序號
- 發送123后(發123時序號字段為1)
- 可見此時兩方緩存都有123,發送方要等收到確認收到123的信息后才能把123從緩存中去掉。(便于在丟失時可以重傳)
- 此時發送了456、78,但是只有78傳到了。
- 則接收方回送報文段時,報文段首部確認號仍為4
- 之后補上456后,因為接收方緩存中已經有78了,因此回送的報文段首部確認號會是9(累計確認)
② 重傳
- RTTs:發送第一個時,RTTs = RTT1_11?。
發送第二個后,RTTs由RTT1_11?和RTT2_22?來決定(并非平均),以此類推。
冗余ACK(快速重傳)
- 通過收到多次冗余ack,判斷報文段丟失
三. 流量控制
① 定義
- 發送方的發送窗口:取接收窗口和擁塞窗口的最小值。
- 發送窗口可以動態變化
- 滑動窗口類似鏈路層的滑動窗口。
② 實例
- 接收方可能會讓發送方發送窗口為0,此時不能再發送。
此時接收方把緩存數據上傳,傳完后再讓接收方繼續發。
- 在上例結束后,可能B會讓A繼續傳輸,但是發送報文段丟失。那么可能雙方會一直僵持。解決方法見下圖。
四. TCP擁塞控制
① 定義
- 擁塞:網絡狀況不好,接收、發送數據慢
- 流量控制:點到點,防止發送方發太快,出問題知道找哪臺主機。
- 擁塞控制:全局,發送方發送不到接收方,出問題不知道找哪臺主機
② 擁塞控制四種算法
慢開始和擁塞避免
- 慢開始:雖然是指數增長,但是起點低(1、2、4…)
- ssthresh:慢開始門限值,說明要開始慢點加了。
- 新ssthresh:一發生擁塞,就生成新ssthresh,值為擁塞時cwnd的一半(如圖中為 24/2 = 12)
- 擁塞直接降到1。
快重傳和快恢復
- 擁塞降到新ssthresh(而非1),因此叫快恢復。
- 在收到3個確認的時候就得到新ssthresh
- 用到快重傳算法(見三.②)
總結
以上是生活随笔為你收集整理的【学习笔记】传输层:TCP协议(报文段、连接管理{握手}、可靠传输、流量控制、拥塞控制)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php request time,php
- 下一篇: axure 图片切换图片的交互_Axur