計算機網絡——傳輸層(TCP\UDP)

目錄

 

傳輸層兩個協議 

TCP(Transmission Control Protocol , 傳輸控制協議)協議

UDP(User Data Protocol,用戶數據報協議)協議

UDP首部

TCP報文段的格式

主機和網頁的交互過程

TCP如何實現可靠性傳輸TCP協議如何實現流量控制TCP協議如何避免網絡擁塞

可靠性傳輸工作原理——停止等待協議

可靠通信的實現

連續ARQ的機制是

累計確認

TCP協議如何實現流量控制

TCP協議如何避免網絡擁塞

慢開始和避免擁塞

慢開始算法

快恢復是什麼

TCP三次握手建立連接

TCP四次揮手斷開連接


傳輸層兩個協議 

  • TCP(Transmission Control Protocol , 傳輸控制協議)協議

需要將傳輸文件分段,傳輸建立會話,流量控制,是可靠傳輸

TCP概述:

1.TCP是面向連接的傳輸層協議

2.每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點

3.TCP提供可靠交付的服務

4.TCP提供全雙工通信

5.面向字節流

  • UDP(User Data Protocol,用戶數據報協議)協議

一個數據包就能完成數據通信,不需要分段不需要建立對話不需要流量控制,是不可靠控制

UDP特點:

1.無連接:發送數據前不用建立連接

2.使用盡最大努力交付,即不保證可靠交付,同時也不適用擁塞控制

3.面向報文,UDP沒有擁塞控制,適合多媒體通信

4.支持一對一、一對多、多對一和多對多的交互通信

5.首部開銷小,只有8字節

UDP首部

TCP報文段的格式

序號:數據段的第一個字節在整段中的位置是多少

確認號:給對方提示發第幾個字節,也就是下圖中203的接下來的數據

標誌位

URG = 1時,會無視在TCP緩存中的位置,優先傳輸過去

ACK = 1時,確認號才起作用

SYN = 1時,說明這個包是一個請求建立連接的包

PSH = 1時,在傳輸完成後放在目的地的TCP緩存中的最前排

RST = 1時,代表異常中斷,會結束後面的通信

FIN = 1時,代表通信完成,需要釋放,一般出現在末尾的包

窗口大小:指發送端的tcp緩存大小要和接收端的tcp緩存大小對應

緊急指針:只有當標誌URG = 1時才起作用,緊急指針爲50時,說明TCP數據部分的1~50個字節爲緊急數據

 

主機和網頁的交互過程

 

TCP如何實現可靠性傳輸TCP協議如何實現流量控制TCP協議如何避免網絡擁塞

可靠性傳輸工作原理——停止等待協議

 確認丟失和確認遲到都會重傳

總結:只要沒收到確認,就重傳

可靠通信的實現

使用上述的確認和重傳機制,就可以在不可靠傳輸網絡上實現可靠的通信,這種可靠傳輸協議通常被稱爲自動重傳請求ARQ(Automatic Repeat reQuest),ARQ表明重傳請求是自動進行的

停止等待的優點是簡單,但是缺點是信道利用率太低 

解決方法有:連續ARQ(流水線傳輸)和累計確認 

連續ARQ的機制是

1》先發送5個包(爲什麼是5個包,是因爲發送窗口是5),然後等待第一個的確認

2》第一個得到確認後從TCP緩存中去掉,接着發送第六個包,等待第二個確認,以此類推

累計確認

累計確認是累積到一定數量的包後一次性確認,當收到的包不是規定順序的時候,就只確認正確序列的最後一個,錯誤包以及以後的都得不到確認。

還有一種方法是滑動窗口技術,類似於上面兩種方法的結合體

TCP協議如何實現流量控制

A窗口向B窗口發送數據

B窗口的緩存大小是10,發給A窗口的包爲ack=0,rwnd=10,建立連接,然後A窗口開始發送數據,當接收到一定數據後,例如收到了前四個數據,B窗口再次發送 ack = 5,rwnd = 8,此時接收A從第五個數據開始的幾個數據,此時B窗口的TCP緩存中已經有相當一部分數據了,可以讓程序讀出這些數據,這時B向A發送的包爲 ack = 14 ,rwnd = 0,rwnd表示發送窗口爲 0 ,停止A發送數據,然後B在這個階段讀取緩存中的數據,這樣就達到了流量控制的效果

TCP協議如何避免網絡擁塞

出現擁塞的條件:對資源需求的總和 > 可用資源

擁塞控制是一個全局性的過程,涉及到所有主機和路由器

慢開始和避免擁塞

發送方維持擁塞窗口 cwnd(congestion window)

發送方控制擁塞窗口的原則是:

  • 只要網絡沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去
  • 只要網絡中出現擁塞,擁塞窗口就減小一些,以減小注入到網絡中的分組數

慢開始算法

慢開始算法是加倍cwnd

慢開始門限ssthresh的用法如下:

  • 當cwnd < ssthresh,使用慢開始算法
  • 當cwnd > ssthresh,停止使用慢開始算法而改用擁塞避免算法
  • 當cwnd = ssthresh,既可以使用慢開始算法也可以使用擁塞避免算法

擁塞避免算法的思路是讓cwnd緩慢增大,即每經過一個往返時間RTT就把擁塞窗口cwnd+1,而不是加倍

ps:無論在慢開始階段還是擁塞避免階段,只要發送方判斷網絡出現擁塞,就要把慢開始門限ssthresh設置爲出現擁塞時的cwnd的一半,但不能小於2,然後把cwnd設置爲1,執行慢開始算法。

 

慢開始和擁塞避免算法實例

快恢復是什麼

快恢復是發生在傳輸過程中丟包進行快速重傳之後的,如果只是單個的意外丟包,這時候沒必要進行慢開始和擁塞避免,這樣會浪費資源和時間,快重傳之後,門限變爲傳送窗口大小,窗口大小變爲一半,直接進行擁塞避免,當出現大面積時才執行上面介紹的步驟,門限變爲窗口一半,窗口變爲1.

 

TCP三次握手建立連接

  • 第一次握手(SYN=1, seq=x),發送完畢後,客戶端進入 SYN_SEND 狀態

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1), 發送完畢後,服務器端進入 SYN_RCVD 狀態。

  • 第三次握手(ACK=1,ACKnum=y+1),發送完畢後,客戶端進入 ESTABLISHED 狀態,當服務器端接收到這個包時,也進入 ESTABLISHED 狀態,TCP 握手,即可以開始數據傳輸。

TCP四次揮手斷開連接

  • 第一次揮手(FIN=1,seq=a),發送完畢後,客戶端進入 FIN_WAIT_1 狀態

  • 第二次揮手(ACK=1,ACKnum=a+1),發送完畢後,服務器端進入 CLOSE_WAIT 狀態,客戶端接收到這個確認包之後,進入 FIN_WAIT_2 狀態

  • 第三次揮手(FIN=1,seq=b),發送完畢後,服務器端進入 LAST_ACK 狀態,等待來自客戶端的最後一個ACK。

  • 第四次揮手(ACK=1,ACKnum=b+1),客戶端接收到來自服務器端的關閉請求,發送一個確認包,並進入 TIME_WAIT狀態,等待了某個固定時間(兩個最大段生命週期,2MSL,2 Maximum Segment Lifetime)之後,沒有收到服務器端的 ACK ,認爲服務器端已經正常關閉連接,於是自己也關閉連接,進入 CLOSED 狀態。服務器端接收到這個確認包之後,關閉連接,進入 CLOSED 狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章