一般說來,我們總是希望資料傳輸得更快一些。但如果傳送方把資料傳送得過快,接收方就可能來不及接收,這就會造成資料的丟失。
流量控制(flow control) 就是讓傳送方的傳送速率不要太快,既要讓接收方來得及接收,也不要使網路發生擁塞。 利用滑動視窗機制可以很方便地在tcp連線上實現流量控制。
a向b傳送資料。在連線建立時,b告訴a: 「我的接收視窗rwnd = 400(位元組)」
可能發生死鎖
b向a傳送了零視窗的報文段後不久,b的接收快取又有了一些儲存空間。於是b向a傳送了rwnd = 400的報文段。但這個報文段在傳送過程中丟失了。a一直等待收到b傳送的非零視窗的通知,而b也一直等待a傳送的資料。
如果沒有其他措施,這種互相等待的死鎖局面將一 直延續下去。為了解決這個問題,tcp為每乙個連線設有乙個持續計時器(persistence timer)。
tcp 為每乙個連線設有乙個持續計時器 (persistence timer) 。只要tcp連線的一方收到對方的零視窗通知,就啟動該持續計時器。
若持續計時器設定的時間到期,就傳送乙個零視窗探測報文段(僅攜帶1 位元組的資料),而對方就在確認這個探測報文段時給出了現在的視窗值。
若視窗仍然是零,則收到這個報文段的一方就重新 設定持續計時器。若視窗不是零,則死鎖的僵局就可以打破了。
可以用不同的機制來控制tcp報文段的傳送時機:
第一種機制是tcp維持乙個變數,它等於最大報文段長度mss。只要快取中存放的資料達到mss位元組時,就組裝成乙個tcp報文段傳送出去。
第二種機制是由傳送方的應用程序指明要求傳送報文段, 即tcp 支援的推送(push)操作。
第三種機制是傳送方的乙個計時器期限到了,這時就把當前已有的快取資料裝入報文段(但長度不能超過mss) 傳送出去。 如何控制tcp傳送報文段的時機仍然是乙個較為複雜的問題。
傳送方tcp每次接收到一位元組的資料後就傳送。這樣,傳送乙個位元組需要形成41位元組長的ip資料報。若接收方確認,並且傳送方要求回送這一位元組, 就需傳送總長度為162位元組共4個報文段。效率很低。解決方法:使用nagle 演算法。
若傳送應用程序把要傳送的資料逐個位元組地送到tcp的傳送快取,則傳送方就把第乙個資料位元組先傳送出去,把後面到達的資料位元組都快取起來。
當傳送方收到對第乙個資料字元的確認後,再把傳送快取中的所有資料組裝成乙個報文段傳送出去, 同時繼續對隨後到達的資料進行快取。
只有在收到對前乙個報文段的確認後才繼續傳送下乙個報文段。當資料到達較快而網路速率較慢時, 用這樣的方法可明顯地減少所用的網路頻寬。
當到達的資料已達到傳送視窗大小的一半或已達到報文段的最大長度時,就立即傳送乙個報文段。這樣可提高網路的吞吐量。
當接收方的tcp緩衝區已滿,接收方會向傳送方傳送視窗大小為0的報文。若此時接收方的應用程序以互動方式每次只讀取乙個位元組,於是接收方又傳送視窗大小為乙個位元組的更新報文,傳送方應邀傳送乙個位元組的資料(傳送的ip資料報是41位元組長),於是接收視窗又滿了,如此迴圈往復。
解決方法:讓接收方等待一段時間,使得或者接收快取已有足夠空間容納乙個最長的報文段,或者等到接收快取已有一半空閒的空間。只要出現這兩種情況之 一,接收方就發出確認報文,並向傳送方通知當前的視窗大小。同時,傳送方也不要傳送太小的報文段。
計算機網路 運輸層
問題 一 運輸層為相互通訊的的應用程序提供邏輯通訊 問題二 埠和套接字的意義 問題三 理解udp和tcp協議 問題四 在不可靠的網路上實現可靠傳輸的工作原理 問題五 tcp的滑動視窗 流量控制 擁塞控制和連線管理 1 埠 應用層所有的應用程序都可以通過運輸層傳送到ip層,這就是復用 運輸層從ip層收...
計算機網路 運輸層
運輸層協議作用於端系統,為執行在不同主機上的程序提供了邏輯通訊,將主機間的交付擴充套件到程序間交付。該層的分組稱為segment 報文段 多路復用 主機把不同套接字 每生成乙個套接字同時分配乙個埠號 收集的資料封裝後生成報文段,傳送給網路層 多路分解 將運輸層報文段的不同資料 通過套接字的埠號 交付...
計算機網路 運輸層
運輸層協議為執行在不同主機上的應用程序之間提供了邏輯通訊 logic communication 功能。運輸層協議是在端系統中而不是在路由器中實現的 在傳送端,運輸層將從傳送應用程式程序接收到的報文轉換成運輸層分組 運輸層報文段,segment 實現的方法 可能 是將應用報文劃分為較小的塊,並為每塊...