標籤:
第五章 運輸層
1.運輸層的功能:為應用進程之間提供端到端的邏輯通訊,為應用程式層提供通訊服務。(網路層是為主機到主機之間提供邏輯通訊)
2.運輸層的兩個重要協議:使用者資料包協議UDP和傳輸控制通訊協定TCP
3.
運輸層的連接埠(協議連接埠號碼)
(1) 軟體連接埠時是應用程式層的各種協議進程與運輸實體進行層間互動的一種地址
(2) 伺服器連接埠號碼:熟知或系統連接埠號碼0~1023,登記連接埠號碼1024~49151
(3) 用戶端連接埠號碼:49151~65535 短暫連接埠號碼,僅在客戶進程運行時才動態選擇
4.
使用者資料包通訊協定UDP
4.1
特點:
- UDP時面向不需連線的,不需要建立串連就可以傳輸資料
- UDP盡最大可能交付,不保證可靠交付
- UDP是面向報文,對應用程式層傳輸的報文添加首部後就直接發送,不合并不拆分
- UDP沒有擁塞控制
- UDP支援一對一,一對多,多對一,多對多
- UDP首部八個位元組,開銷小
4.2 UDP首部格式:源連接埠|目的連接埠|長度|校正和
4.3
計算校正和:和IP資料報首部校正和一樣,反碼算術運算
5.
傳輸控制通訊協定TCP
5.1 特點:
- TCP時連線導向的,先建立TCP串連才能傳輸資料,傳輸完成需要釋放以及建立的TCP串連
- TCP串連兩個連接埠(通訊端),點對點
- TCP提供可靠交付
- TCP提供全雙工系統通訊
- TCP是面向位元組流,TCP根據對方給出的視窗值和網路擁塞狀況來決定一個資料報的長度,如果快取資料太長則劃分短一些再傳送,如果資料太短,則等待積累更多後一起傳送。
通訊端socket = (IP地址:連接埠號碼) , TCP串連:: = {socket1,socket2} = {(IP1:port1),(IP2:port2)}(指兩個連接埠的通訊端)
5.2 可靠的傳輸原理
(1) 停止等待協議:(在不可靠的傳輸網路上實現可靠傳輸)(自動重傳請求ARQ)
- 無差錯情況:A發送一個分組M1,B收到向A確認,A繼續發送分組M2,依次下去….直到全部發送完。
- 出現差錯:B接受分組出現差錯則直接丟棄,A沒有收到確認訊息,就一直等待,直到逾時重傳。A發送一個分組都會暫時保留這個分組的副本,為發生逾時重傳時使用;分組和確認分組必須編號,確認哪些收到哪些沒有收到;逾時計時器必須比資料在分組傳輸的平均往返時間更長一些。
- 確認丟失和確認遲到:B的確認M1訊息丟失了,A逾時重傳M1,B收到後丟棄重複的M1,重傳確認M1;B的確認M1訊息遲到了,A重傳後也收到確認了,這個時候遲到的確認M1來了,A收到後丟棄。
- 通道利用率:總時間 = A的發送時間TD+往返時間RTT+確認訊息發送時間TA。通道利用率 = A的發送時間TD/總時間。往返時間一般遠大於發送時間,故通道利用率極低!
5.3 連續ARQ協議:維持一個滑動視窗,收到一個確認分組後就向前滑動視窗,發送下一個分組。
Tips:接收方不必對沒有分組都進行確認,而是採取累積確認的方法,對按需到達的最後一個分組發送確認。注意這裡如果中間丟失了一個分組M,接收方只能接受M前面的分組確認,發送方只能回退到丟失的M分組位置,對後面的分組再一次發送!
5.4 TCP報文的首部格式P194
5.5
TCP可靠傳輸的實現
(1) 以位元組為單位的滑動視窗:維護一個發送視窗和接受視窗,發送視窗根據收到的確認序號不斷更新發送視窗,其內部有三個指標,依次指向視窗的起始序號,視窗已發送位元組尾部序號,視窗允許發送的尾部序號,這三個指標不斷更新;接受視窗則按序接受資料,並發送按序接受的最高序號的確認資訊。具體過程參考書中P197
(2) 逾時重傳時間的選擇
記錄每個報文的往返時間RTT,TCP保留一個加權平均往返時間RTTs。逾時重傳的時間RTO = RTTs+4×RTTd,RTTd為RTT的偏差的加權平均值。
Karn演算法:在計算加權平均RTTs時,只要報文段重傳了,就不採用其往返時間樣本,這樣得出的加權平均RTTs和RTO就較準確。而後提出了karn的修正方法,只要報文段重傳了,就取新的重傳時間為2倍的舊的重傳時間。
(3) 選擇確認SACK
TCP接受方收到的資料位元組流不連續,通過選擇確認,讓發送放只重傳缺少的資料,而不是重傳所有沒有收到確認的資料。
5.6
TCP的流量控制(讓發送方的發送速率不要太快,要讓接收方來得及接收)
(1) 利用滑動視窗控制流程量:發送方的發送視窗不能超過接收方給出的接受視窗的數值
(2) 傳輸效率:TCP要控制發送緩衝發送的時機來保證傳輸效率。
- 快取資料到達MSS就組成TCP報文發送出去
- 發送方應用進程指明要求發送的報文段,用TCP支援的推送push操作
- 發送方計時期限到了就把已有的緩衝發送出去,但必須小於最長報文段長度MS
- Nagle演算法:先發送第一個位元組,收到確認後再把緩衝中的資料群組成TCP報文發送出去
- 解決糊塗視窗綜合症:發送方不發送很小的報文段的同時,接收方也不要在緩衝只有一點的時候就發送確認資訊給發送方
5.7 TCP的擁塞控制
(1) 擁塞控制的概念:防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載
(2) 擁塞的幾種狀態:
- 輕度擁塞:當網路的輸送量明顯小於理想的輸送量時進入輕度擁塞
- 擁塞狀態:當提供的負載達到某一數值時,網路的輸送量反而隨提供的負載的增大而下降時進入擁塞狀態
- 死結:當提供的負載繼續增大到某一數值時,網路的輸送量就下降到零,網路已無法工作,則進入死結
(3) 開環和閉環控制
- 開環控制:在設計網路時事先將有關發生擁塞的因素考慮周到,力求網路在工作時不產生擁塞
- 閉環控制:監測網路系統以便監測擁塞在何時何處發生;把擁塞發生的資訊傳送到可採取行動的地方;調整網路系統的運行以解決出現的問題
(4) 控制擁塞的方法:
- 慢開始和擁塞避免
慢開始:由小到大增加發送視窗和擁塞視窗(cwnd小於等於發送視窗),每次都乘以2;擁塞避免:當擁塞視窗超過慢開始門限ssthresh後,讓擁塞視窗緩慢增大,即每經過一個RTT就加1(即加法增大)。如果網路發生逾時,即有可能發生擁塞,就將ssthresh減小為cwnd的一半(乘法減小)。
- 快重傳和快恢複
快重傳:每收到一個失序的報文段就立即發出重複確認,使發送方及早知道有報文段沒有到達對方,二不要等待自己發送資料時進行捎帶;快恢複:執行乘法減小時,把ssthresh減小一半後不執行慢開始把cwnd設定為1,而是把cwnd設定為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法。
(5) 發送方視窗的上限值 = Min[rwnd,cwnd]
5.8 隨機早期檢測RED(分組丟棄策略)
(1) 尾部丟棄策略:路由器的隊列滿了之後,以後到達的分組就直接丟棄
(2) 維持兩個參數:THmax和THmin,採用加權平均計算平均隊列長度Lav,當Lav小於THmin就加入到隊列,若大於THmax則直接丟棄,若大於THmin小於THmax就以機率p丟棄。
(3) 好處:當Lav超過THmin時只會有少量分組被丟棄,使得少量TCP減小其視窗值,進而使得到達路由器的分組就變少了,因此Lav減小,從而避免了網路擁塞
5.9 TCP的運輸串連管理
(1) 客戶和伺服器:主動發起串連的叫客戶,被動等待串連的叫伺服器
(2) TCP的串連建立:
- Client的TCP向Server發出串連請求報文,其首部的同步位SYN=1,序號seq = J,Client進入SYN-SENT狀態
- Server收到串連請求報文後,如果同意串連,就發送確認報文。其首部的SYN和ACK都置為1,同時選擇一個序號seq = K,確認號為ACK = J+1,Server進入SYN-REVD狀態,
- Client收到Server發出的確認報文後,還要向Server發出確認報文,其首部ACK=1,確認號為K+1,序號為J+1,然後Client進入ESTABLISHED狀態,即建立串連
- Server收到Client發出的確認報文後,立即進入ESTABLISHED狀態,雙方可以開始傳輸資料
(2) TCP的串連釋放:
- Client先向其TCP發出串連釋放請求,並停止發送資料。其TCP報文的首部FIN=1,序號seq=u(前一個發送資料的序號+1),這是Client進入FIN_WAIT1狀態
- Server收到Client發來的串連釋放請求後,立即發出確認,確認號ack = u+1,序號seq=v,並把ACK置1,Server進入CLOSE-WAIT狀態
- Client收到確認報文後,進入FIN_WAIT2狀態,等待Server發出串連釋放請求
- Server等待其資料發送完後,其應用程式就通知TCP釋放串連,其首部FIN=1,ACK=1,seq=w,ack=u+1,進入LAST-ACK最後確認狀態
- Client收到Server的串連釋放請求後,必須對此確認,其報文首部ACK=1,ack=w+1,seq=u+1,然後進入TIME-WAIT狀態,
- Server收到Client的確認報文後,進入CLOSED狀態,Client等到2MSL後進入CLOSED狀態。
Tips:為什麼要等到2MSL?
答案:一是為了保證最後發出的確認報文能夠到達Server,避免Server沒有收到FIN+ACK報文逾時重發後Client能收到並重發確認報文;二是避免已發送的串連請求報文段出現在本串連中,經過2MSL能讓本串連持續的時間內所產生的所有報文都從網路中消失,在下一個串連中不會出現舊的串連請求報文。
【電腦網路 第五版】閱讀筆記之五:運輸層