1. 程式人生 > 其它 >(Net)第5章 運輸層

(Net)第5章 運輸層

技術標籤:Conclusion(總結)計算機網路

第5章 運輸層

文章目錄


協議一直是兩個實體水平方向上的邏輯通訊

網路層解決倆機器怎麼傳

運輸層解決倆機器對應的程序怎麼通訊(通過 Port)

5.1 運輸層協議概述

運輸層協議最重要的就是提供埠 Port

1.無連線的 UDP 協議

  • 使用者資料報協議 UDP(User Datagram Protocol)

    PDU: UDP 使用者資料報

    看個電影啥的沒必要用 TCP,廣播組播只能用 UDP,傳多媒體這種大量位元組的也用 UDP

2.面向連線的 TCP 協議

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

    PDU: TCP 報文段(segment)

    提供可靠性,每個位元組都編號、排序,(較麻煩)且只能一對一

16 位埠號(0-65535)

熟知埠號(well-known port number,知名埠號,系統埠號,大明星埠)【0~1023】

常用:應用層常用的協議

應用程式FTPTELNETSMTPDNSHTTP
知名埠號2123255380

登記埠號,小明星埠(也有規定)【1024~49151】

臨時埠,野埠【49152~65535】


5.2 使用者資料報協議UDP

  1. 無連線
  2. 盡最大努力交付
  3. 面向報文

啥都不做,8個位元組往上一加就完事了(麻袋一套)

8個位元組的首部格式:(無需協議號,直接交到程序了)

源埠目的埠UDP長度檢驗和
2 位元組222

還有個偽首部,不傳送,但是算校驗和的時候用(UDP 17,TCP 6)

(和反碼,與IP校驗類似,正常加,不模2,max不進位或尾加1)


5.3 傳輸控制協議TCP 概述

只能一對一

全雙工,面向位元組流(UDP 是面向報文的,TCP 全拆成位元組,然後編號)【不關心應用層報文多長】

TCP 連線是一條虛連線(即邏輯連線),而不是一條真正的物理連線
套 接 字 s o c k e t = ( I P 地 址 : 端 口 號 ) 套接字\ socket = (IP\ 地址:埠號) socket=(IP:)
IP 地址確定兩臺主機,埠號確定對應程序

每一條 TCP 連線唯一地被通訊兩端的兩個端點(即兩個套接字)所確定【一對套接字確定一條 TCP 連線】


5.4 可靠傳輸的工作原理

確保可靠性:確認 + 重傳

停止等待協議:停等協議,是一個理想協議(死等確認)

為了防止死等,在發後啟動重傳計時器(超時重傳),t 略大於 往返時間,這段時間裡A保留副本(要有編號)

三點:(分組定義泛化為 PDU)

  1. t 時間內必須保留副本

  2. 分組和確認分組都要有編號

  3. t 略大於平均往返時間

如果確認丟了,或者確認遲到了,問題不大,分組和確認都有編號(認不錯)

至此,我們在不可靠的傳輸網路上實現了可靠的通訊

ARQ 協議(Automatic Repeat reQuest,自動重傳協議),有計時器,是自動進行的
T D : 發 送 分 組 需 要 的 時 間 T A : 發 送 確 認 分 組 需 要 的 時 間 R T T : 平 均 往 返 時 間 ( 非 固 定 , 網 絡 是 變 動 的 , 有 專 門 的 算 法 ) T_D: 傳送分組需要的時間\\ T_A: 傳送確認分組需要的時間\\ RTT: 平均往返時間(非固定,網路是變動的,有專門的演算法) TD:TA:RTT:()

通道利用率 : T D T D + R T T + T A \colorbox{yellow}{通道利用率}:\ {\frac {T_D} {T_D + RTT + T_A}} :TD+RTT+TATD

停等協議的通道利用率較低,RTT 內傻等確認,超時自動重傳

解決辦法:用流水線,一次發多(n)個報文,但佔的資源多,n 個計時器(故只能有限個)

連續 ARQ 協議,滑動視窗,在視窗內的可以發

傳送視窗,滑出去後就丟棄副本,【累積確認】【Go-back-N 回退】(1 3 4,等2來後累積確認,若2丟則234全重傳)


5.5 TCP 報文段的首部格式

雖然 TCP 是面向位元組流的,但其 PDU 仍是報文段

首部前20位元組固定

再分五行,一行四位元組

第一行:2位元組源埠,2位元組目的埠

第二行:4位元組序號 seq

  • 第一個位元組的編號【接下來每個位元組就按順序編號】,號碼用完後再從0開始

第三行:4位元組確認號 ack

  • 是期望收到對方下一個報文段的首位元組的序號,還沒發【確認號是N的話就是對前N - 1個全部確認】

第四行:4位資料偏移 + 6位保留 + 6位控制 + 2位元組視窗

  • 資料偏移,偏移了一個首部的長度(單位是4位元組)

  • 6個控制位

    緊急 URG(URGent),配合緊急指標使用
    確認 ACK(ACKnowledg),ACK = 1 時,帶有確認
    推送 PSH(PuSH),PSH = 1 時,不等到填滿再交了,直接推
    復位 RST,一般不用
    同步 SYN(SYNchronization),各自的第一個報文段,建立連線用,SYN置1
    終止 FIN(FINis),結束連線
    
  • 視窗,指接收視窗(我的接受能力),從而決定傳送視窗的大小【視窗值經常在動態變化著】

第五行:2位元組檢驗和,2位元組緊急指標

  • 緊急指標:緊急資料的長度(從第一個開始)

後面可變的選項不確定長度,有個填充幫忙填充至4的倍數

最初只規定了一種選項,最大報文長度 MSS(Maximum Segment Size),不算首部


5.6 TCP 可靠傳輸的實現

重點理解(以位元組為單位的)滑動視窗

假定 A 發資料,B 給確認

根據 B 確定傳送視窗的大小,等累積確認後,滑動

為啥視窗的大小會變?

傳送緩衝區:包括已傳送待確認的 + 未傳送的

接收緩衝區:包括已確認未遞交的 + 未確認的(遞交到應用層)


5.7 TCP 的流量控制

流量控制,就是告訴傳送方:悠著點,別發太快(傳送視窗別比我的接收視窗還大),讓接收方來得及接收

【反饋控制】

window(wnd),接收視窗(rwnd)

A 發前 200,B 收到後給個確認:ack = 201,rwnd = 300

(前200收到了但還未遞交,緩衝佔了200所以 rwnd=300,此時能接300)

若快取佔滿,B 給的確認:ack = 501,rwnd = 0【注意,死鎖了】

A 不再發了,B 也無法再通過確認告訴 A 視窗大小了

【增加一個機制:持續計時器(persistence timer),從收到 0 開始到時間 A 就發一個位元組過去(零視窗探測報文段)】

控制 TCP 傳送報文段的時機的機制:

  1. 往快取中放資料,放到 MSS 後就封裝成一個報文段發出去
  2. 應用程式指明發送(推送 push 操作),不等了,直接發
  3. 傳送計時器,不能狠等

5.8 TCP 的擁塞控制

擁塞控制,(是個全域性的概念)和傳送、接收方無關,全網傳送的時候都要悠著點

網路可用的資源小於需求,網路效能變壞,擁塞產生(congestion)

也用【反饋控制】

開環控制:事先將有關發生擁塞的因素考慮周到(這個思想程式設計可以有)

閉環控制:反饋控制(更可靠)

擁塞視窗(cwnd),大小取決於網路的擁塞程度

swnd 取 rwnd 和 cwnd 的最小值(互不影響,完全分開研究)

擁塞控制的三個階段

一階段:慢開始(slow-start),由小到大逐漸增大擁塞視窗數值

  • 每經過一個傳輸輪次,翻一倍(單位是 SMSS 最大報文段)【只要不堵塞】

二階段:擁塞避免(congestion)

  • 慢開始門限(自己定的閾值),到閾值後緩慢增長,cwnd + 1 / 輪次
  • 一旦出現超時重傳,開始擁塞

三階段:一旦擁塞,門限值調為當前的一半,cwnd 回 1

TCP Tahoe 版本用的是慢開始(已廢棄)

TCP Reno 版本用的是快重傳

快重傳,若一連收到 3 個重複確認,不等超時了,立即傳(自此擁塞分了兩種,快重傳和超時重傳,而且快重傳可能沒擁塞)

快恢復,認為可能並沒有擁塞,cwnd 調到和門限值一樣(掉一半)


5.9 TCP 的運輸連線管理

一對一的連線

用的都是客戶伺服器方式(知道伺服器的IP、埠)

客戶:A,伺服器: B

三次握手建立連線

A 主動開啟,發控制報文:SYN = 1,seq = x(這些控制報文 Data 都為 1位元組)

B 收到後發確認:SYN = 1, ACK = 1, seq = y,ack = x+1

A 收到確認後發確認:ACK = 1,seq = x+1,ack = y+1(A 已經可以發資料了)

B 收到應答後連線建立

四次握手釋放連線

A 主動關閉,發控制報文:FIN = 1,seq = u

B 收到後發個確認:ACK = 1, seq = v,ack = u+1,然後繼續發資料但 A 一直不回確認

B 最後發個結束:FIN = 1,ACK = 1, seq = w,ack = u+1(被動關閉)

A 收到結束後發個確認:ACK = 1,seq = u+1,ack = w+1 (表示w及之前的資料都收到了,累積確認)

B 收到該確認後馬上關閉,A 再等 B 收到後再關閉(2MSL 等報文生存時間 * 2)

MSL (Maximum Segment Lifetime,最長報文段壽命)

A:分吧

B: blabla…(仍不甘心)

B:分就分

A:好!


E n d . End. End.

md下載地址.