一、傳輸層的基本服務
1、傳輸層功能
- 傳輸層的核心任務:應用進程之間提供端到端的邏輯通信服務
- 只有主機纔有傳輸層,網絡核心中的:路由器、交換機、集線器,只有下三層
- 傳輸層的功能
- 對應用層報文進行分段重組
- 面向應用層實現復用與分解
- 實現端到端的流量控制
- 擁塞控制
- 傳輸層尋址
- 對報文進行差錯檢測
- 實現進程間端到端的可靠數據控制傳輸
2、傳輸層尋址與端口
- 一臺計算機中,不同應用進程用進程標識符(進程ID)區分
- 在全網範圍內利用ip地址+端口號唯一標識一個通訊端點
- 傳輸層端口號爲16位整數,可以編號65536個(2的16次方):常用端口號:小於256的端口號
3、無連接服務與面向連接服務
二、 傳輸層的複用與分解
1、複用與分解
- 多路複用:在源主機,傳輸層協議從不同的套接字收集應用進程發送的數據塊,併爲每個數據塊包裝上首部信息(包括用於分解的信息)構成報文段,然後將報文段傳遞給網絡層
- 多路分解:在目的主機,傳輸層讀取報文段中的數據,標識出接收套接字,進而通過該套接字,將傳輸層的報文段數據交付給正確的套接字
- 多路複用與多路分解(複用與分解/複用與分用):支持衆多應用進程公用一個傳輸層協議,並能夠將接收到的數據準確的交付給不同的應用進程
2、無連接的多路複用與多路分解
- UDP(用戶數據報協議):無連接服務的傳輸層協議
- UDP套接字二元組:<目的ip地址,目的端口號>
3、面向連接的多路複用與多路分解
- TCP(傳輸控制協議):面向連接服務的傳輸層協議
- TCP套接字四元組:<源ip地址,源端口號,目的ip地址,目的端口號>
三、停-等協議與滑動窗口協議
1、可靠數據傳輸基本原理
基於不可靠信道實現可靠數據傳輸的採取的措施
- 差錯檢測:利用編碼實現數據包傳輸過程中的比特錯誤檢測
- 確認:接收方向發送方反饋接收狀態(ACK:成功;NCK:失敗)
- 重傳:發送方重新向接收方發送接收方沒有收到的數據
- 序號:確保數據按序提交
- 計時器:解決數據丟失問題
2、停-等協議(自動重傳協議(ARQ))
停-等協議工作流程:發送方經過報文段等待接收方確認,接收方校驗通過接收後返回ACK,校驗不通過返回NCK,發送方接收到ACK後繼續發送後續報文,否則重發剛剛發送的報文
3、滑動窗口協議
流水線協議(管道協議):允許發送方在沒有收到確認前連續發送多個分組;最典型的流水線協議:滑動窗口協議
根據窗口大小,可具體分爲:
- 回退N步協議:GBN協議:發送窗口Ws ≥1 ,接收窗口Wr =1。
- 選擇重傳協議:SR協議:發送窗口Ws >1,接收窗口Wr >1。
四、用戶數據報協議(UDP)
UDP:傳輸層協議,提供無連接、不可靠、數據報盡力傳輸協議
1、UDP特點
- 應用進程容易控制發送什麼數據何時發送,會出現分組的丟失和重複
- 無需建立連接
- 無連接狀態
- 首部開銷小,只需8個字節
2、UDP數據報結構
UDP首部四個字段:每個字段2字節,共8個字節
- 源端口號、目的端口號:UDP實現複用與分解
- 長度:UDP報文中的字節數(首部和數據的總和)
- 校驗和:接收方用來校驗數據報是否有差錯
3、UDP校驗和
UDP校驗和計算規則
- 所有參與計算的內容按16位對齊求和
- 計算過程中如有溢出則進行反捲(進位與和的最低位再進行相加)
- 最後得到的和取反碼,就是UDP校驗和,填入數據報的校驗和字段
UDP校驗和參與計算的內容包含3部分:僞首部(只參與計算,不傳輸)、首部、應用數據
五、傳輸控制協議(TCP)
傳輸控制協議(TCP):傳輸層協議,提供面向連接、可靠、有序、字節流傳輸服務
- 應用進程先建立連接
- 每條TCP連接只有兩個端點
- 可靠交付:無差錯、不丟失、不重複、按序到達
- 全雙工通訊
- 面向字節流
1、TCP報文結構
TCP首部分爲:固定首部(20字節)、選項(0-40字節)
- 序號字段:對每個應用層數據的每個字節進行編碼
- 確認序號字段:期望從對方接受數據的字節序號,即還未接收到的數據,用ack_seq表示
- TCP首部長度最短20字節,最長60字節
- 首部長度的單位是4字節,所以首部長度=首部長度字段值*4
URG、ACK、PSH、RST、SYN、FIN各佔1位。爲標誌位字段;
各佔1位,值爲0或1;
- 緊急URG=1,緊急指針字段有效,優先傳送。
- 確認ACK=1,確認序號字段有效;ACK=0時,確認序號字段無效。
- 推送PSH=1,儘快將報文段中的數據交付接收應用迚程,丌要等緩存滿了再交付。
- 復位RST=1,TCP連接出現嚴重差錯,釋放連接,再重新建立TCP連接。
- 同步SYN=1,該TCP報文段是一個建立新連接請求控制段或者同意建立新連接的確認段。
- 終止FIN=1,TCP報文段的發送端數據已經發送完畢,請求釋放連接。
2、連接管理
三次握手
解釋:
- 期初客戶端和服務器都處於CLOSED(關閉階段),第一步首先服務器啓動,服務器進入LISTEN(監聽狀態)
- 第一次握手:客戶端向服務器發送請求(SYN=1(建立連接請求),seq=x(該報文段的序號x)),此時客戶端進入SYN_SENT(同步發送)
- 第二次握手:服務端接收到客戶端請求後給客戶端返回應答(SYN=1(響應建立連接請求)ACK=1(同意建立連接響應)seq=y(響應報文的序列號y)ack_seq=x+1(下次請求需要的報文序列號)),此時服務端進入SYN_RCVD(同步收到)
- 第三次握手:客戶端對服務端的同意連接進行確認(ACK=1(正常響應)seq=x+1(本次報文序列號)ack_seq=y+1(客戶端希望下次接收到服務端的序列號)),此時客戶端進入ESTABLISHED(已建立連接),服務端接收到ACK後進入ESTABLISHED(已建立連接)(注意:第三次握手可攜帶數據)
解釋:
- 拆除連接之前客戶端和服務端都處於(ESTABLISHED:已建立連接傳輸數據狀態)
- 第一次揮手:客戶端發送釋放連接報文(FIN=1(數據發送完畢請求釋放連接)seq=u(本次報文的序列號)),此時客戶端從ESTABLISHED進入到FIN_WAIT_1(終止等待1)
- 第二次揮手:服務端接收到客戶端釋放連接請求後響應客戶端(ACK=1(確認請求)seq=v(本次請求報文序列號)ack_seq=u+1(服務端希望下次接收到的報文序列號)),服務端進入到CLOSE_WAIT(關閉等待),客戶端接收到響應後進入FIN_WAIT_2(終止等待2)
- 第三次揮手:服務端發送完數據後給客戶端發送釋放連接報文(FIN=1(終止請求)ACK=1(確認響應)seq=v+1(本次報文序列號)ack_seq=u+1(下次希望收到的序列號)),服務端進入到LAST_ACK(最後應答)
- 第四次揮手:客戶端接收到服務端釋放連接請求後響應服務端(ACK=1,seq=u+1,ack_seq=v+1+1)此時客戶端進入TIME_WAIT,等待2MSL時間進入到CLOSED狀態,服務端接收到響應後進入到CLOSED狀態
3、TCP可靠數據傳輸工作機制
- 應用層數據被分割成TCP認爲最合適發送的數據塊
- 序號,發送方對發送的數據進行編號,確保數據按照編號提交跟接收方
- 確認,接收方向發送方反饋接收狀態,確認是否正確接收數據(TCP採用累積確認)
- 差錯檢測,利用差錯編碼實現數據包傳輸過程中的比特差錯檢測
- 重傳,發送發重新發送沒有被接收方正在接收的數據
- 計時器,在發送方引入計時器,解決數據丟失問題
4、TCP流量控制
流量控制:協調接收方和發送方的數據發送接收速度
TCP報文結構中,接收窗口字段用於實現TCP的流量控制
5、TCP擁塞控制
擁塞控制:通過合理調度、規範、調整向網絡中發送數據的主機數量、發送速率、數據量,以避免擁塞或消除已發生的擁塞
概念:
- 擁塞窗口(CongWin):連接開始爲1MSS(一個報文段最大長度)
- 閾值(Threshold):臨界值
TCP擁塞控制算法:
1、慢啓動:在TCP建立連接時,每經過1個RTT時間,擁塞窗口增大1倍
2、擁塞避免:當擁塞窗口大於等於閾值時,每經過1個RTT時間,擁塞窗口加1
3、快速重傳:收到3次重複確認,則推斷該報文段已丟失,於是立即重傳被重複確認的報文段
4、快速恢復:當發生3次重複確認時,不再從慢啓動開始而是從新的閾值開始直接進入擁塞避免階段(網絡擁塞程度並不嚴重)
怎麼算報文丟失?
- 收到3次重複確認(網絡擁塞並不是很嚴重):觸發快速恢復算法,計算新的閾值(新的閾值=當前擁塞窗口/2),新擁塞窗口調整爲新閾值,從新的閾值直接進入擁塞避免階段
- 計時器超時(網絡擁塞嚴重):新的閾值=當前擁塞窗口/2;新的擁塞窗口調整爲1MSS,然後從1MSS進入到慢啓動階段,到達新閾值後進入到擁塞避免階段