導航:首頁 > 網路連接 > rtts計算機網路怎麼獲得

rtts計算機網路怎麼獲得

發布時間:2023-10-13 08:13:25

A. 計網:運輸層

本篇文章先概括介紹運輸層協議的特點、進程之間的通信和埠等重要概念,然後講述比較簡單的UDP協議。然後討論較為復雜但非常重要的TCP協議和可靠傳輸的工作原理,包括停止等待協議和ARQ協議。在詳細講述TCP報文段的首部格式之後,討論TCP的三個重要問題:滑動窗口、流量控制和擁塞控制機制。最後,介紹TCP的連接管理。

從通信和信息處理的角度看,運輸層向它上面的應用層提供通信服務,它屬於面向通信部分的最高層,同時也是用戶功能中的最低層。

當網路的邊緣部分中的兩台主機使用網路 的核心部分的功能進行端到端的通信時,只有主機的協議棧才有運輸層,而網路核心部分中的路由器在轉發分組時都只用到下三層的功能。

運輸層有一個很重要的功能 復用和分用:

從IP層來說,通信的兩端是兩台主機。但實際上,真正進行通信的實體是 在主機中的進程,是這台主機中的一個進程和另一台主機中的一個進程在交換數據(即通信)。運輸層提供應運蔽用進程間的邏輯通信。「邏輯通信」的意思是:從應用層來看,只要把應用層報文交給下面的運輸層, 運輸層就可以把這報文傳送到對方的運輸層。但事實上這兩個運輸層之間並沒有一條水平方向的物理連接。數據的傳送是沿著圖中的虛線方向(經過多個層次)傳送的。

從這里可以看出網路層和運輸層有明顯的區別。網路層為主機之間提供邏輯通信,而運輸層為應用進程之間提供端到端的邏輯通信。

運輸層還要對收到的報文進行差錯檢測,而在網路層,IP數據報首部中的檢驗和欄位,只檢驗首部是否出現差錯而不檢查數據部分。

根據應用程序的不同需求,運輸層需要有兩種不同的運輸協議,即面向連接的TCP和無連接的UDP,這兩種協議就是本章要討論的主要內容。

當運輸層採用面向連接的TCP協議時,盡管下面的網路是不可靠的(只提供盡最大努力服務),但這種邏輯通信信道就相當於一條全雙工的可靠信道。但當運輸層釆用無連接的UDP協議時,這種邏輯通信信道仍然是一條不可靠信道。

TCP/IP運輸層的兩個主要協議都是互聯網的正式標准,即:

在TCP/IP體系中,則根據所使用的協議是TCP或 UDP,分別稱之為TCP報文段或UDP用戶數據報。

UDP在傳送數據之前不需要先建立連接。遠地主機的運輸層在收到UDP報文後,不需要給出任何確認。雖然UDP不提供可靠交付,但在某些情況下UDP卻是一種最有效的工作方式。

TCP則提供面向連接的服務。在畝譽傳送數據之前必須先建立連接,數據傳送結束後要釋放連接。TCP不提供廣播或多播服務。由於TCP要提供可靠的、面向連接的運輸服務,因此不可避免地增加了許多的開銷,佔用許多處理機資源。

前面己經提到過運輸層的復用和分用功能。應用層所有的應用進程都可以通過運輸層再傳送到IP層(網路層),這就是復用。運輸層從IP層收到發送給各應用進程的數據後,必須分別交付指明的各應用進程,這就是分用。顯然,給應用層的每個應用進程賦予一個非常明確的標志是至關重要的。

為了使運行不同操作系統的計算機的應用進程能夠互相通信,就必須用統一的方法(而這種方法必須與特定操作系統無關)對TCP/IP體系的應用進程進行標志。

解決這個問題的方法就是在運輸層使用協議埠號,或通常簡稱為埠。這就是說,雖然通信的終點是應用進程,但只要把所傳送的報文交到目的主機的某個合適的目的埠,剩下的工作(即最後交付目的進程)就由TCP或UDP來完成。

在協議棧層間的抽象的協議埠是軟體埠,和路由器或交換機上的硬體埠是完全不同的概念。軟體埠是迅悄段應用層的各種協議進程與運輸實體進行層間交互的一種地址。

TCP/IP的運輸層用一個16位埠號來標志一個埠。但請注意,埠號只具有本地意義,它只是為了標志本計算機應用層中的各個進程在和運輸層交互時的層間介面。在互聯網不同計算機中,相同的埠號是沒有關聯的。

兩個計算機中的進程要互相通信,不僅必須知道對方的IP地址(為了找到對方的計算機),而且要知道對方的埠號(為了找到對方計算機中的應用進程)。

因此運輸層的埠號分為下面的兩大類:

用戶數據報協議UDP只在IP的數據報服務之上增加了很少一點的功能,這就是復用和分用的功能以及差錯檢測的功能。

UDP的主要特點是:

用戶數據報UDP有兩個欄位:數據欄位和首部欄位。首部欄位很簡單,只有8個位元組。由四個欄位組成,每個欄位的長度都是兩個位元組。各欄位意義如下:

當運輸層從IP層收到UDP數據報時,就根據首部中的目的埠,把UDP數據報通過相應的埠,上交最後的終點——應用進程。

如果接收方UDP發現收到的報文中的目的埠號不正確(即不存在對應於該埠號的應用進程),就丟棄該報文,並由網際控制報文協議ICMP發送「埠不可達」差錯報文給發送方。

UDP用戶數據報首部中檢驗和的計算方法有些特殊。在計算檢驗和時,要在UDP用戶 數據報之前增加12個位元組的偽首部。所謂「偽首部」是因為這種偽首部並不是UDP用戶數 據報真正的首部。只是在計算檢驗和時,臨時添加在UDP用戶數據報前面,得到一個臨時的 UDP用戶數據報。檢驗和就是按照這個臨時的UDP用戶數據報來計算的。偽首部既不向下傳
送也不向上遞交,而僅僅是為了計算檢驗和。

UDP計算檢驗和的方法和計算IP數據報首部檢驗和的方法相似。但不同的是:IP數據 報的檢驗和只檢驗IP數據報的首部,但UDP的檢驗和是把首部和數據部分一起都檢驗。

TCP是TCP/IP體系中非常復雜的一個協議,下面介紹TCP最主要的特點:

前面己經講過,每一條TCP連接有兩個端點,TCP連接的端點叫做套接字或插口。埠號拼接到IP地址即 構成了套接字。

因此,套接字的表示方法是在點分十進制的IP地址後面寫上埠號,中間用冒號或逗號隔開,例如說:

每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定,例如:

這里IP1和IP2分別是兩個端點主機的IP地址,而port1和port2分別是兩個端點主機中的埠號。TCP連接的兩個套接字就是socket1和socket2。

總之,TCP連接就是由協議軟體所提供的一種抽象。

雖然有時為了方便,我們也可以說,在一個應用進程和另一個應用進程之間建立了一條TCP連接,但一定要記住:TCP連 接的端點是個很抽象的套接字,即(IP地址:埠號)。

我們知道,TCP發送的報文段是交給IP層傳送的。但IP層只能提供盡最大努力服務,也就是說,TCP下面的網路所提供的是不可靠的傳輸。因此,TCP必須釆用適當的措施才能使得兩個運輸層之間的通信變得可靠。

「停止等待」就是每發送完一個分組就停止發送,等待對方的確認。在收到確認後再發送下一個分組。

停止等待協議有以下四種情況:

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

信道利用率U可以用以下公式計算:

為了提高傳輸效率,發送方可以不使用低效率的停止等待協議,而是釆用流水線傳輸,這種傳輸方式可以獲得很高的信道利用率。

滑動窗口協議比較復雜,是TCP協議的精髓所在。這里先給出連續ARQ協議最基本的概念,但不涉及許多細節問題。

發送方維持的發送窗口,它的意義是:位於發送窗口內的分組都可連續發送出去,而不需要等待對方的確認。這樣,信道利用率就提高了。

連續ARQ協議規定,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。

如果原來己經發送了前5個分組,那麼現在就可以發送窗口內的第6個分組了。

接收方一般都是釆用累積確認的方式。這就是說,接收方不必對收到的分組逐個發送 確認,而是在收到幾個分組後,對按序到達的最後一個分組發送確認,這就表示:到這個分組為止的所有分組都已正確收到了。

累積確認有優點也有缺點。優點是:容易實現,即使確認丟失也不必重傳。但缺點是不能向發送方反映出接收方己經正確收到的所有分組的信息。

如果發送方發送了前5個分組,而中間的第3個分組丟失了。這時接收方只能對前兩個分組發出確認。發送方無法知道後面三個分組的下落,而只好把後面的三個分組都再重傳一次。這就叫做Go-back-N(回退N)。

TCP雖然是面向位元組流的,但TCP傳送的數據單元卻是報文段。一個TCP報文段分為首部和數據兩部分,而TCP的全部功能都體現在它首部中各欄位的作用。

TCP報文段首部的前20個位元組是固定的,後面有4n位元組是根據需要而增加的選項。因此TCP首部的最小長度是20位元組。

首部固定部分各欄位的意義如下:

TCP的滑動窗口是以位元組為單位的。

現假定A收到了 B發來的確認報文段,其中窗口是20位元組,而確認號是31(這表明B期望收到的下一個序號是31,而序號30為止的數據已經收到了)。

A的發送窗口表示:在沒有收到B的確認的情況下,A可以連續把窗口內的數據都發送出去。凡是已經發送過的數據,在未收到確認之前都必須暫時保留,以便在超時重傳時使用。

發送窗口後沿的後面部分表示己發送且己收到了確認。發送窗口後沿的變化情況有兩種可能,即不動(沒有收到新的確認)和前移(收到了新的確認)。

發送窗口裡面的序號表示允許發送的序號。窗口越大,發送方就可以在收到對方確認之前連續發送更多的數據,因而可能獲得更高的傳輸效率。但A的發送窗口一定不能超過B的接收窗口數值。

發送窗口前沿的前面部分表示不允許發送的。發送窗口前沿通常是不斷向前移動,但也有可能不動。這對應於兩種情況:一是沒有收到新的確認,對方通知的窗口大小也不變;二是收到了 新的確認但對方通知的窗口縮小了,使得發送窗口前沿正好不動。

現在假定A發送了序號為31〜41的數據。這時,發送窗口位置並未改變, 但發送窗口內靠後面有11個位元組(灰色小方框表示)表示己發送但未收到確認。而發送窗口內靠前面的9個位元組(42〜50)是允許發送但尚未發送的。

從以上所述可以看出,要描述一個發送窗口的狀態需要三個指針:P1,P2和P3,小於P1的是已發送並已收到確認的部分,而大於P3的是不允許發送的部分:

再看一下B的接收窗口。B的接收窗口大小是20。在接收窗口外面,到30號為止的數據是已經發送過確認,並且已經交付主機了。因此在B可以不再保留這些數據。接收窗口內的序號(31〜50)是允許接收的。

此時B收到了序號為32和33的數據。這些數據沒有按序到達,因為序號為31的數據沒有收到(也許丟失了,也許滯留在網路中的某處)。請注意,B只能對按序收到的數據中的最高序號給出確認,因此B發送的確認報文段中的確認號仍然是31 (即期望收到的序號),而不能是32或33。

現在假定B收到了序號為31的數據,並把序號為31〜33的數據交付主機,然後B刪除這些數據。接著把接收窗口向前移動3個序號,同時給A發送確認,其中窗口值仍為20,但確認號是34。這表明B已經收到了到序號33為止的數據。我們注意到,B還收到了序號為37, 38和40的數據,但這些都沒有按序到達,只能先暫存在接收窗口中。

A在繼續發送完序號42〜53的數據後,指針P2向前移動和P3重合。發送窗口內的序號都已用完,但還沒有再收到確認(圖5-18)。由於A的發送窗口己滿,可用窗口已減小到零,因此必須停止發送。為了保證可靠傳輸,A只能認為B還沒有收到這些數據。於是,A在經過一段時間後(由超時計時器控制)就重傳這部分數據,重新設置超時計時器,直到收到B的確認為止。

CP的發送方在規定的時間內沒有收到確認就要重傳已發送的報文段。這種重傳的概念是很簡單的,但重傳時間的選擇卻是TCP最復雜的問題之一。

如果把超時重傳 時間設置得太短,就會引起很多報文段的不必要的重傳,使網路負荷增大。但若把超時重傳 時間設置得過長,則又使網路的空閑時間增大,降低了傳輸效率。

那麼,運輸層的超時計時器的超時重傳時間究竟應設置為多大呢?

TCP釆用了一種自適應演算法,它記錄一個報文段發出的時間,以及收到相應的確認的 時間。這兩個時間之差就是報文段的往返時間RTT。TCP保留了 RTT的一個加權平均往返時間RTT s

每當第一次測量到RTT樣本時,RTTs值就取為所測量到的RTT樣本 值。但以後每測量到一個新的RTT樣本,就按下式重新計算一次RTT s

顯然,超時計時器設置的超時重傳時間RTO應略大於上面得 出的加權平均往返時間RTT s ,所以RTO應該這樣計算。

而RTT D 是RTT的偏差的加權平均值,它與RTTs和新的RTT樣本之差有關。

現在發送出一個報文段,設定的重傳時間到了,還沒有收到確認。於是重傳報文段。經過了一段時間後,收到了確認報文段。現在的問題是:如何判定此確認報文段 是對先發送的報文段的確認,還是對後來重傳的報文段的確認?

Kam演算法進行修正。方法是:報文段每重傳一次,就把超時重傳時間RTO增大一些。典型的做法是取新的重傳時間為舊的重傳時間的2倍。當不再發生報文段的重傳時,才根據上面給出的式子計算超時重傳時間。

現在還有一個問題沒有討論。這就是若收到的報文段無差錯,只是未按序號,中間還缺少一些序號的數據,那麼能否設法只傳送缺少的數據而不重傳已經正確到達接收方的數據?答案是可以的。選擇確認就是一種可行的處理方法。

舉一個例子來說明選擇確認的工作原理。TCP的接收方在接收對方發送過來的數據位元組流的序號不連續,結果就形成了一些不連續的位元組塊。

可以看出,序號1〜1000收到了,但序號1001〜1500沒有收到。接下來的位元組流又收到了,可是又缺少了3001〜3500。再後面從序號4501起又沒有收到。

也就是說,接收方收到了和前面的位元組流不連續的兩個位元組塊。如果這些位元組的序號都在接收窗口之內,那麼接收方就先收下這些數據,但要把這些信息准確地告訴發送方,使發送方不要再重復發送這些已收到的數據。

一般說來,我們總是希望數據傳輸得更快一些。但如果發送方把數據發送得過快,接 收方就可能來不及接收,這就會造成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。

利用滑動窗口機制可以很方便地在TCP連接上實現對發送方的流量控制。

設A向B發送數據。在連接建立時,B告訴了A:「我的接收窗口rwnd = 400」。因此,發送方的發送窗口不能超過接收方給出的接收窗口的數值。

我們應注意到,接收方的主機B進行了三次流量控制。第一次把窗口減小到rwnd = 300, 第二次又減到rwnd = 100,最後減到rwnd = 0,即不允許發送方再發送數據了。這種使發送方暫停發送的狀態將持續到主機B重新發出一個新的窗口值為止。

TCP協議使得在發送方不發送很小的報文段的同時,接收方也不要 在緩存剛剛有了一點小的空間就急忙把這個很小的窗口大小信息通知給發送方。

計算機網路中的鏈路容量(即帶寬)、交換結點中的緩存和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的性能就要變壞。這種情況就叫做擁塞,即對資源需求之和 > 可用資源。

網路擁塞往往是由許多因素引起的。簡單地將處理機的速率提高或簡單地擴大緩存的存儲空間,可能會使上述情況緩解一些,但往往又會將瓶頸轉移到其他地方。問題的實質往往是整個系統的各個部分不匹配。只有所有的部分都平衡了,問題才會得到解決。

擁塞控制與流量控制的關系密切,它們之間也存在著一些差別。擁塞控制就是防止過多的數據注入到網路中,這樣可以使網路中的路由器或鏈路不致過載。流量控制往往是指點對點通信量的控制,是個端到端的問題(接收端控制發送端)。

下圖中橫坐標是提供的負載,代表單位時間內輸入給網路的分組數目。縱坐標是吞吐量,代表單位時間內從網路輸出的分組數目。

實踐證明,擁塞控制是很難設計的,因為它是一個動態的(而不是靜態的)問題。

從大的方面看,可以分為 開環控制 閉環控制 兩種方法:

TCP進行擁塞控制的演算法有四種,即慢開始、擁塞避免、快重傳和快恢復。

為了集中精力討論擁塞控制,我們假定:

擁塞控制也叫做基於窗口的擁塞控制。為此,發送方維持一個叫做擁塞窗口cwnd的狀態變數。擁塞窗口的大小取決於網路的擁塞程度,並且動態地在變化。發送方讓自己的發送窗口等於擁塞窗口。

發送方控制擁塞窗口的原則是:只要網路沒有出現擁塞,擁塞窗口就可以再增大一些,以便把更多的分組發送出去,這樣就可以提高網路的利用率。但只要網路出現擁塞或有可能出現擁塞,就必須把擁塞窗口減小一些,以減少注入到網路中的分組數,以便緩解網路出現的擁塞。

發送方又是如何知道網路發生了擁塞呢?我們知道,當網路發生擁塞時,路由器就要丟棄分組。因此只要發送方沒有按時收到應當到達的確認報文,也就是說,只要出現了超時,就可以猜想網路可能出現了擁塞。現在通信線路的傳輸質量一般都很好,因傳輸出差錯而丟棄分組的概率是很小的(遠小於1%)。因此,判斷網路擁塞的依據就是出現了超時。

慢開始演算法的思路是這樣的:當主機開始發送數據時,由於並不清楚網路的負荷情況,所以如果立即把大量數據位元組注入到網路,那麼就有可能引起網路發生擁塞。因此我們由小到大逐漸增大擁塞窗口數值。

新的RFC5681把初始擁塞窗口cwnd設置為不超過2至4個SMSS(發送方的最大報文段)的數值。慢開始規定,在每收到一個對新的報文段的確認後,可以把擁塞窗口增加最多一個SMSS的數值。

下面用例子說明慢開始演算法的原理。在一開始發送方先設置cwnd = 1,發送第一個報文段M1,接收方收到後確認M1。發送 方收到對M1的確認後,把cwnd從1增大到2,於是發送方接著發送M2和M3兩個報文 段。接收方收到後發回對M2和M3的確認。發送方每收到一個對新報文段的確認(重傳的不算在內)就使發送方的擁塞窗口加1,因此發送方在收到兩個確認後,cwnd就從2增大到4,並可發送M4〜M7共4個報文段。

與慢開始演算法相輔助的演算法是擁塞避免演算法。

擁塞避免演算法的思路是讓擁塞窗口 cwnd緩慢地增大,即每經過一個往返時間RTT就 把發送方的擁塞窗口cwnd加1,而不是像慢開始階段那樣加倍增長。在擁塞避免階段,擁塞窗口 cwnd按線性規律緩慢增長,比慢開始演算法的擁塞窗口增長速率緩慢得多。

為了防止擁塞窗口 cwnd增長過大引起網路擁塞,還需要設置一個慢開始門限ssthresh 狀態變數。慢開始門限ssthresh的用法如下:

下面用圖片說明慢開始演算法和擁塞避免演算法相互配合的原理。

其中ssthresh的初始值設置為16,開始時使用慢開始演算法,成指數性增長,當到達ssthresh值時,TCP協議預測可能會出現擁塞,所以開始使用避免擁塞演算法,成線性增長,當發生超時重傳時,立即減小擁塞窗口,重復上述步驟。

但是,有時,個別報文段會在網路中丟失,但實際上網路並未發生擁塞。如果發送方遲遲收 不到確認,就會產生超時,就會誤認為網路發生了擁塞。這就導致發送方錯誤地啟動慢開 始,把擁塞窗口cwnd又設置為1,因而降低了傳輸效率。

釆用快重傳演算法可以解決上述問題。快重傳演算法可以讓發送方盡早知道發生了個別報文段的丟失。快重傳演算法首先要求接收方不要等待自己發送數據時才進行捎帶確認,而是要立即發送確認,即使收到了失序的報文段也要立即發出對已收到的報文段的重復確認。

下面舉一個例子來說明快重傳演算法的原理。接收方收到了M1和M2後都分別及時發出了確認。現假定接收方沒有收到M3但卻收到了 M4。本來接收方可以什麼都不做。但按照快重傳演算法,接收方必須立即發送對M2的重復確認,以便讓發送方及 早知道接收方沒有收到報文段M3。發送方接著發送M5和M6。接收方收到後也仍要再次分別發出對M2的重復確認。這樣,發送方共收到了接收方的4個對M2的確認,其中後3個都是重復確認。快重傳演算法規定,發送方只要一連收到3個重復確認,就知道接收方確實沒 有收到報文段M3,因而應當立即進行重傳(即「快重傳」),這樣就不會出現超時,發送方也不就會誤認為出現了網路擁塞。

快恢復演算法與快重傳演算法配合使用,當使用快重傳演算法發現是由於數據丟失而引起的超時(不是網路擁塞引起的),就使用快恢復演算法,此時發送方調整門限值ssthresh=cwnd/2,同時設置擁塞窗口cwnd=ssthresh,並開始執行擁塞避免演算法。

慢開始、擁塞避免、快重傳和快恢復這四種演算法相輔相成,構成了TCP的擁塞控制。

網路層的策略對TCP擁塞控制影響最大的就是路由器的分組丟棄策略。在最簡單的情 況下,路由器的隊列通常都是按照「先進先出」的規則處理到來的分組。

由於隊列長度總是有限的,因此當隊列已滿時,以後再到達的所有分組(如果能夠繼續排隊,這些分組都將排在隊列的尾部)將都被丟棄。這就叫做尾部丟棄策略。

路由器的尾部丟棄往往會導致一連串分組的丟失,這就使發送方出現超時重傳,使 TCP進入擁塞控制的慢開始狀態,結果使TCP連接的發送方突然把數據的發送速率降低到 很小的數值。更為嚴重的是,在網路中通常有很多的TCP連接(它們有不同的源點和終 點),這些連接中的報文段通常是復用在網路層的IP數據報中傳送。在這種情況下,若發生了路由器中的尾部丟棄,就可能會同時影響到很多條TCP連接,結果使這許多TCP連接在同一時間突然都進入到慢開始狀態。這在TCP的術語中稱為全局同步。

為了避免發生網路中的全局同步現象,可以使用主動隊列管理AQM。

所謂「主動」就是不要等到路由器的隊列長度已經達到最大值時才不得不丟棄後面到達的分組。這樣就太被動了。應當在隊列長度達到某個值得警惕的數值時 (即當網路擁塞有了某些擁塞徵兆時),就主動丟棄到達的分組。這樣就提醒了發送方放慢發送的速率,因而有可能使網路擁塞的程度減輕,甚至不出現網路擁塞。

TCP是面向連接的協議。運輸連接是用來傳送TCP報文的。TCP運輸連接的建立和釋放是每一次面向連接的通信中必不可少的過程。因此,運輸連接就有三個階段,即:連接建立、數據傳送和連接釋放。運輸連接的管理就是使運輸連接的建立和釋放都能正常地進行。

在TCP連接建立過程中要解決以下三個問題:

TCP連接的建立釆用客戶伺服器方式。主動發起連接建立的應用進程叫做客戶,而被動等待連接建立的應用進程叫做伺服器。

TCP建立連接的過程叫做握手,握手需要在客戶和伺服器之間交換三個TCP報文段。

下面舉一個例子來說明TCP建立連接的過程。假定主機A運行的是TCP客戶程序,而B運行TCP伺服器程序。最初兩端的TCP進程都處於CLOSED(關閉)狀態。圖中在主機下面的方框分別是TCP進程所處的狀態。請注意,在本例中,A主動打開連接,而B被動打開連接。

一開始,B的TCP伺服器進程先創建傳輸控制塊TCB,准備接受客戶進程的連接請求。然後伺服器進

B. 什麼是RTT計算機網路里的東西

RTT(Round-Trip Time):往返時延。是指數據從網路一端傳到另一端所需的時間。通常,時延由發送時延、傳播時延、排隊時延、處理時延四個部分組成。

(1)發送時延

發送時延是結點將數據分組發送到傳輸媒介所需要的時間,也就是從分組的第一個比特開始發送算起,到最後一個比特發送完畢所需要的時間。顯然,發送時延與網路介面/信道的傳輸速率成反比,與數據分組的長度成正比。

(2)傳播時延

傳播時延是電磁波在信道中傳播一定距離所需要花費的時間,傳播時延和信道的傳輸速率無關,
而是取決於傳輸媒介的長度,以及某種物理形式的信號在傳輸媒介中的傳播速度。

如電磁波在自由空間的傳播速度是光速,即3×105km/s。電磁波在網路傳輸媒體中的傳播速度比在自由空間中的傳播速度要略低一些,在銅線中的傳播速度約為2.3×105km/s
,在光纖中的傳播速度約為2.0×105km/s 。

(3)排隊時延

排隊時延是分組在所經過的網路結點的緩存隊列中排隊所經歷的時延,排隊時延的長短主要取決於網路中當時的通信量,當網路的通信流量大時,排隊時間就長,極端情況下,當網路發生擁塞導致分組丟失時,該結點的排隊時延視為無窮大。

此外,在有優先順序演算法的網路中,排隊時延還取決於數據的優先順序和結點的隊列調度演算法。

(4)處理時延

處理時延是分組在中間結點的存儲轉發過程中而進行的一些必要的處理所花費的時間,這些處理包括提取分組的首部,進行差錯校驗,為分組定址和選路等。

(2)rtts計算機網路怎麼獲得擴展閱讀

網路端到端的時延是幾種時延的總合,其計算公式是:

總時延=傳播時延+發送時延+排隊時延+處理時延

根據網路的不同情況,有時有些時延可以忽略不計,如在區域網中,傳播時延很小可以忽略不計;當網路沒有擁塞時,分組在各個結點的排隊時延可以忽略不計。

往返時延(Round-Trip Time,RTT)也是一個重要的性能指標,它表示從發送方發送數據開始,到發送方收到來自接收方的確認,總共經歷的時延。對於復雜的網路,往返時延要包括各中間結點的處理時延和轉發數據時的發送時延。

C. 已達到計算機的連接數最大值,無法在同此遠程計算機連接。怎麼辦

已達到計算機的連接數最大值,無法在同此遠程計算機連接這不是最大連接數的問題,而是XP系統本身對入站連接數進行了限制。

對於 Windows XP Professional,最多允許 10 台不同的計算機通過網路同時連接。此限制包括所有傳輸和共享協議的資源的組合。 對於 Windows XP Home Edition,最多允許 5 台其他計算機通過網路同時連接。

(3)rtts計算機網路怎麼獲得擴展閱讀:

遠程計算機連接原理是客戶端和伺服器端通過TCP/IP協議和標準的區域網構架聯系,通過客戶端終端,客戶端的滑鼠、鍵盤的輸入傳遞到伺服器端上,再把伺服器端的顯示傳遞回客戶端。應用程序始終運行在伺服器端上,客戶端不需要具有計算能力,至多隻需提供一定的緩存能力。

利用該技術。我們就可以在辦公室將個人PC機作為主控端。管理遠程機房中的多台應用伺服器。實現伺服器異地管理搞定。以後每隔15分鍾就會清一次會話,10個並發限制一般就不會用完。 時間你可以自己調整。

眾多的客戶端可以同時登錄到伺服器上,彷彿同時在伺服器端工作一樣。它們之間作為不同的會話連接是互相獨立的。伺服器端如果在公網內.必須具有公網的IP地址,或在網關中添加指向遠程桌面伺服器端機器的3389埠映射。

D. 計算機網路_運輸層

在IP層看來,通信的兩端是兩個主機,IP數據報的首部明確的標志了這兩個主機的IP地址。但是兩個主機之間的通信這種說法還不夠清楚,這是因為真正進行通信的實體是在主機中的 進程 ,是兩個進程之間在交換數據。從而引出了運輸層,從運輸層的角度看來, 通信的真正端點並不是主機而是主機中的進程 (端到端的通信)。

在一個主機中經常有多個應用進程同時分別和另一個主機的多個應用進程通信。這就表明了運輸層有一個很重要的功能, 復用和分用 ,應用層不同進程的報文通過不同的埠向下交到運輸層,再往下就共用網路層提供的服務。

「運輸層提供應用進程間的邏輯通信」。「邏輯通信」的意思是:運輸層之間的通信好像是沿水平方向傳送數據。但事實上這兩個運輸層之間並沒有一條水平方向的物理連接。

TCP/IP 的運輸層有兩個不同的協議:

由此可見兩個計算機中的進程要相互通信,不僅要知道對方的IP地址,還要知道對方的埠號。

如果接收方UDP發現收到的報文中的目的埠號不正確(即不存在對應於該埠的號的應用進程),就丟棄該報文,並由網際控制報文協議ICMP發送 埠不可達 差錯報文給發送方。

在計算檢驗和時,臨時把 「偽首部」 和 UDP 用戶數據報連接在一起得到一個臨時的數據報,它不向下傳遞也不向上遞交。 偽首部僅僅是為了計算檢驗和

UDP計算檢驗和的方法和IP數據報首部檢驗和方法相類似。但不同的是,IP數據報的檢驗和 只檢驗IP數據報的首部 ,但UDP的檢驗和是 把首部和數據部分一起檢驗

計算UDP檢驗和的例子:

在發送方,先把全0放入檢驗和欄位,再把偽首部以及UDP用戶數據報看成是許多16位的字串接起來。若UDP用戶報的數據部分不是偶數個位元組,則要填入一個全零位元組(先不發送)。然後按照 二進制反碼 計算出這些16位字的和。將此和的二進制反碼寫入 檢驗和欄位 後,就發送這樣的UDP數據報。在接收方,把收到的UDP數據報連通偽首部(以及可能填充全零位元組)一起,按二進制反碼求這些16位字的和。當無差錯時其結果應為全1(原本的檢驗和為0,封裝成數據報後再次相加的時候就多個檢驗和反碼相加,所以無差錯時結果為1)。

每一條TCP連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定,即:

TCP發送的報文段是交給IP層傳輸的。但IP層只提供盡最大努力服務,也就是說,TCP下面的網路所提供的是不可靠傳輸,因此,TCP必須採用適當的措施才能使得兩個運輸層之間的通信變得可靠。

在這樣的理想傳輸條件下,不需要採取任何措施就能夠實現可靠傳輸。然而實際的網路都不具備以上兩個理想的條件。但我們可以使用一些可靠傳輸協議,當出現差錯時讓發送方重傳出現差錯的數據,同時在接收方來不及處理收到的數據時,及時告訴發送方適當的降低發送數據的速度,這樣一來,本來是不可靠的傳輸信道就能夠實現可靠傳輸。

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

假定AB之間有一條直通的信道來傳送分組

這里的TD是A發送分組所需要的時間(顯然TD = 分組長度 / 數據速率)再假定TA是B發送確認分組所需要的時間(A和B處理分組的時間都忽略不計)那麼A在經過TD+RTT+TA時間後才能發送下一個分組,這里的RTT是往返時間,因為只有TD是採用來傳輸有用的數據(這個數據包括了分組首部,如果可以知道傳輸更精確的數據的時間,可以計算的更精確),所有信道利用率為

為了提高傳輸效率,發送方可以不使用低效率的停止等待協議,而是採用 流水線傳輸 :就是發送方可以 連續的發送多個分組 ,不必每發完一個分組就停下來等待對方的確認。這樣可使信道上一直有數據不間斷地在傳送。顯然這種傳輸方式可以獲得很高的信道利用率

當時使用流水線傳輸時,就要使用下面介紹的 連續ARQ協議 滑動窗口協議

滑動窗口協議比較復雜,是TCP協議的精髓所在,在這里先給出ARQ協議最基本的概念,但不涉及到許多細節問題。

位於發送窗口的分組都可以連續的發送出去,而不需要等待對方的確認,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。

詳細可以見P201

TCP雖然是面向位元組流的,但是TCP傳送的數據單元卻是報文段(可以看上述TCP面向流的概念),而且TCP的 全部功能都體現在它的首部中各個欄位

詳解請見P206,注意圖中的後沿,前沿

從下圖可以看出來,要描述一個發送窗口的狀態需要三個指針:P1,P2,P3

有很多信息見P208,這里不贅述

發送方的應用進程把位元組流寫入TCP的發送緩存,接收方的應用進程從TCP的接收緩存中讀取位元組流。下面進一步討論前面講的 窗口和緩存 的關系

發送緩存

發送窗口通常只是發送緩存的一部分,已被確認的數據應當從發送緩存中刪除,因此 發送緩存和發送窗口的後沿是重合 的。發送應用程序最後寫入發送緩存的位元組減去最後被確認的位元組,就是還保留在發送緩存中被寫入的位元組。發送應用程序必須控制寫入緩存的速率,不能太快 ,否則發送緩存就會沒有存放數據的空間。

如果收到的分組被檢測出有差錯,則要丟棄。如果接收應用程序來不及讀取收到的數據,接收緩存最終就會被填滿,使接收窗口減少到零。反之,如果接收應用程序能夠及時從接收緩存中讀取收到的數據,接收窗口就可以增大,但最大不能超過接收緩存的大小。

TCP才用了一種自適應演算法,它記錄一個報文段發出的時間,以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間RTT。

TCP 保留了 RTT 的一個 加權平均往返時間 RTTs (這又稱為平滑(smooth)的往返時間,因為是加權平均,所以是平滑的)。
第一次測量到 RTT 樣本時, RTTS 值就取為所測量到的 RTT 樣本值 。以後每測量到一個新的 RTT 樣本,就按下式重新計算一次 RTTS:

顯然,RTO 應略大於上面得出的加權平均往返時間 RTTs
RFC 2988 建議使用下式計算 RTO:

RTTD 是 RTT 的 偏差的 加權平均值,他與RTTs和新的RTT樣本之差有關。
RFC 2988 建議這樣計算 RTTD。第一次測量時,RTTD 值取為測量到的 RTT 樣本值的一半。在以後的測量中,則使用下式計算加權平均的 RTTD:

β是個小於 1 的系數,其推薦值是 1/4,即 0.25。

為了解決上面那個問題,Karn提出了一個演算法

在計算平均往返時間 RTT 時,只要**報文段重傳了,就不採用其往返時間樣本。這樣得出的加權平均平均往返時間 RTTS 和超時重傳時間 RTO 就較准確。 **

但是,這又有了新的問題、設想出現這樣的情況:報文段的時延突然增大了很多。因此在原來得出的重傳時間內,不會收到確認報文段。於是就重傳報文段。但根據Karn演算法,不考慮重傳的報文段的往返時間樣本。這樣,超時重傳時間就無法更新。

報文段每重傳一次,就把 RTO 增大一些:

系數 γ 的典型值是 2 。
當不再發生報文段的重傳時,才根據報文段的往返時延更新平均往返時延 RTT 和超時重傳時間 RTO 的數值。
實踐證明,這種策略較為合理。

接收方收到了和前面的位元組流 不連續 *的兩個位元組塊(只是未按序號,它是無差錯的)

如果這些位元組的序號都在接收窗口之內,那麼接收方就先收下這些數據,但要把這些信息准確地告訴發送方,使發送方不要再重復發送這些已收到的數據。

和前後位元組不連續的每一個位元組塊都有兩個邊界:左邊界和右邊界。圖中用四個指針標記這些邊界。第一個位元組塊的左邊界 L1 = 1501,但右邊界 R1 = 3001。左邊界指出位元組塊的第一個位元組的序號,但右邊界減 1 才是位元組塊中的最後一個序號。第二個位元組塊的左邊界 L2 = 3501,而右邊界 R2 = 4501。

詳見P211

一般說來,我們總是希望數據傳輸得更快一些。但如果發送方把數據發送得過快,
接收方就可能來不及接收,這就會造成數據的丟失。

流量控制(flow control)就是讓發送方的發送速率不要太快,既要讓接收方來得及接收,也不要使網路發生擁塞

利用 滑動窗口機制 可以很方便地在 TCP 連接上實現流量控制。

A 向 B 發送數據。在連接建立時,�B 告訴 A:「我的接收窗口 rwnd = 400(位元組)」。 看下TCP首部窗口欄位的用處

接收方的主機B一共進行了3次流量控制(藍線)

考慮一種情況,B向A發送了零窗口的報文段後不久,B的接收緩存又有了一些存儲空間。於是B向A發送了rwnd = 400的報文段,然而這個報文段在傳輸過程中丟失了。A一直等收到B發送非零窗口的通知,B也一直等A發送數據來,就形成了 死鎖 。下面的 持續計時器 就是為了打破死鎖僵局的

應用進程把數據傳送到TCP發送緩存後,剩下的發送任務就由TCP來控制了。可以用不同的機制來控制 TCP 報文段的發送時機:

至於如何控制發送的 時機 詳見P213

在某段時間,若對網路中某資源的需求超過了該資源所能提供的可用部分,網路的性能就要變壞——產生 擁塞(congestion)

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

若網路中有許多資源同時產生擁塞,網路的性能就要明顯變壞,整個網路的吞吐量將隨輸入負荷的增大而下降。

解決擁塞的要點是 平衡 ,要讓整個系統的性能想匹配(P214)。

橫坐標為 提供的負載 ,代表單位時間內輸入給網路的分組的數目(也叫作輸入負載或網路負載),縱坐標是 吞吐量 ,代表單位時間內從網路輸出的分組數目。

由於缺少緩存空間而被丟棄的分組的百分數,平均隊列長度,超時重傳的分組數,平均分組時延,分組時延的標准差等,這些指標的上升都標志著擁塞的增長。

方便起見,我們用 報文段的個數 作為窗口大小的單位

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

擁塞避免演算法的思路是讓擁塞窗口 cwnd 緩慢地增大,即每經過一個往返時間 RTT 就把發送方的擁塞窗口 cwnd 加 1,而不是加倍,使擁塞窗口 cwnd 按線性規律緩慢增長 ,比慢開始演算法的擁塞窗口增長速率緩慢很多。

網路出現擁塞時

當 TCP 連接進行初始化時,將擁塞窗口置為 1。圖中的窗口單位不使用位元組而使用 報文段

慢開始門限的初始值設置為 16 個報文段,即 ssthresh = 16。

發送端的發送窗口不能超過擁塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我們假定接收端窗口足夠大,因此現在發送窗口的數值等於擁塞窗口的數值。

下面的執行步驟就是按照折現上的點的順序

E. 計算機網路(5)| 運輸層

從通信和處理信息的角度看,運輸層是向它上面的應用層提供通信服務的,它屬於面向通信部分的最高層,同時也是用戶功能中的最低層。當網路的邊緣部分中的兩台主機使用網路的核心部分的功能進行端到端的通信時,只有主機的協議棧才有運輸層,而網路核心部分中的路由器在轉發分組時都只用到下三層的功能。

運輸層的兩個主要協議 TCP/IP 都是互聯網的正式標准,即:
(1)用戶數據報協議UDP
(2)傳輸控制協議TCP

TCP則是面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束後要釋放連接。TCP不提供廣播或者多播服務。由於TCP要提供可靠的面向連接的運輸服務,因此需要增加很多的開銷。

TCP/IP的運輸層用一個16位埠號來標志一個埠。埠號只有本地意義。它是為了標志本計算機應用層中的各個進程在和運輸層交互時的層間介面。

運輸層的埠號分為以下兩類:
(1)伺服器端使用的埠號: 它主要分為系統埠號0~1023和登記埠號1024~49151。

(2)客戶端使用的埠號: 49152~65535,這類埠號僅在客戶端進程運行時才動態選擇。當伺服器收到客戶端進程的報文時,就知道客戶端進程的埠號。因而可以把數據發送給客戶進程。

用戶數據報協議相比於IP的數據報服務就是只增加了復用、分用和差錯檢測功能。UDP的主要特點是:
(1)UDP是無連接的, 發送數據之前不需要建立連接,因此減少開銷和發送數據之前的時延。
(2)UDP使用盡最大努力交付, 即不保證可靠交付,因此主機不需要維持復雜的連接狀態表。
(3)UDP是面向報文的。 發送方的UDP對應用交下來的報文,添加首部後就向下交付給IP層。不對報文做任何處理,因此當報文過長時,IP層可能需要進行分片處理。
(4)UDP沒有擁塞控制, 網路出現的擁塞不會使源主機的發送速率減低。
(5)UDP支持一對一、一對多、多對一和多對多的交互通信。
(6)UDP的首部開銷小, 只有8個位元組。

UDP有兩個欄位:數據欄位和首部欄位。先介紹首部欄位,它是由4個欄位組成的,每個欄位只有2個位元組,總共有8個位元組。各個欄位的意義如下:
(1)源埠: 源埠號。在需要對方回信時選用。不需要時可用全0。
(2)目的埠: 目的埠號。在這終點交付報文時必須使用。
(3)長度: UDP用戶數據報的長度,其最小值是8(只有首部)。
(4)檢驗和: 檢測UDP用戶數據報在傳輸中是否有錯,有錯則丟棄。

當在傳送用戶數據報時,如果接收方UDP發現收到的報文中目的埠號不正確(即不存在對應於該埠號的應用進程),就丟棄該報文,並由網際控制報文協議ICMP發送「埠不可達」差錯報文給發送方。

TCP的主要特點如下:
(1)TCP是面向連接的運輸層協議。 應用程序在使用TCP協議之前,必須先建立TCP連接。傳送數據完畢後,必須釋放TCP連接。
(2)每一條TCP連接只能有兩個端點。 每一條TCP連接只能是點對點的。
(3)TCP提供可靠交付的服務。 通過TCP連接傳送的數據,無差錯、不丟失、不重復,並且按序到達。
(4)TCP提供全雙工通信。 TCP允許通信雙方的應用進程在任何時候都能發送數據。
(5)面向位元組流。 TCP中的流指的是流入到進程或進程流出的位元組序列。雖然應用程序和TCP的交互是一次一個數據塊,但TCP把應用程序交下來的數據看成一連串的無結構的位元組流。TCP不保證發送方發送的數據塊和接收方接收的數據塊一致,但保證程序接收到的位元組流和程序發送的位元組流一致。

TCP連接的端點叫做套接字或者插口。套接字是指將埠號拼接到IP地址之後,即:

每一條TCP連接唯一的被通信兩端的兩個端點所確定。即:

如圖所示,A發送分組M1,發送完畢就暫停發送,等待B的確認,B收到了M1就向A發死你確認。A在收到了對M1的確認之後,就再發送下一個分組M2,以此類推。

如圖所示,當B接收M1時檢測出了差錯,就丟棄M1,其他什麼也不做。而A只要超過了一段時間沒有收到確認,就會認為剛才發送的分組丟失了,因而重傳前面發送過的分組,這就叫做超時重傳,而實現超時重傳則需要A為每一個已發送的分組都設置一個超時計時器。
需要注意以下三點:
(1)A在發送完一個分組後,必須暫時保留已發送的分組的副本。
(2)分組和確認分組必須編號,這樣才能明確哪一個發出的分組收到了確認。
(3)超時計時器設置的重傳時間應當比數據在分組傳輸的平均往返時間更長。

如圖所示,B所發送的對M1確認丟失了,A在設定的超時重傳時間內沒有收到確認,所以無法知道自己發送的分組是怎樣出錯的,所以會重傳M1,而當B又收到了重傳的分組M1,這時應該採取兩個行動:
(1)丟棄這個重復分組M1。
(2)向A發送確認。

還有一種情況就是在傳輸過程中沒有出現差錯,但B對分組M1的確認遲到了,而A會收到重復的確認,A收下後就會丟棄,B仍然會收到重復的M1,並且同樣要丟棄重復的M1,並且重傳確認分組。

停止等待協議的優點是簡單,缺點則是信道的利用率太低。我們用TD表示A發送分組需要的時間,TA表示B發送確認分組需要的時間,RTT為往返時間,則:

為了提高傳輸的效率,發送方可以不使用低效率的停止等待協議,而是採用流水線傳輸的方式。即不必每發完一個分組就停下來等待對方的確認,這樣就可以使信道上一直有數據在不間斷的傳送。

如圖表示的是發送方維持的發送窗口,它指的是位於發送窗口內的5個分組都可以連續發送出去而不需要等待對方的確認。同時連續ARP協議規定,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。

對於接收方採用的則是累計確認的方式,即接收方不必對收到的分組逐個發送確認。而是在收到幾個分組後,對按序到達的最後一個分組發送確認,這就表示:到這個分組為止的所有分組都已正確收到了。這種方式的優點是:容易實現,即使確認丟失也不必重傳(意思是發送方不必重傳)。但缺點是不能向發送方反映出接收方已經正確收到的所有分組信息。

TCP雖然是面向位元組流的,但傳送TCP的數據單元卻是報文段。一個TCP報文段可以分為首部和數據兩部分。

為了後面講述的方便,我們假設數據傳輸只在一個方向進行,即A發送數據,B給出確認。

TCP的滑動窗口是以位元組為單位的。如圖所示,現在假定A收到了B發來的確認報文段,其中的窗口是20位元組,而確認號是31,根據這2個數據,A就構造出自己的發送窗口。

發送窗口表示:在沒有收到B的確認的情況下,A可以連續把窗口內的數據都發送出去。凡是已經發送過的數據,在未收到確認之前都必須暫時保留,以便在超時重傳時使用。發送窗口後面的部分表示已發送且已經收到了確認。而發送窗口前沿的部分表示不允許發送的。

現在假定A發送了序號為31~41的數據。這時發送窗口位置並未改變但是發送窗口內靠後面有11個位元組表示已發送但是未收到確認。而發送窗口內靠前面的9個位元組時允許發送但未發送的。如圖所示:

而對於B,它的接收窗口大小是20,在接收窗口外面到30號位置的數據是接收並確認的,因此可以丟棄。在下圖中,B收到了32和33的數據,但它們不是按序到達的,因為並沒有收到31號數據。B只能對按序達收到的數據中的最高序號給出確認,因此B發送的確認報文欄位的確認號依然是31號。

現在假定B收到了序號為31的數據,並把31~33的數據交付主機,然後B刪除這些數據。接著把窗口向前移動3個序號,同時給a發送確認,其中的窗口值仍為20,但確認號變為34。表明B已經收到序號33為止的數據。

因為TCP的發送方在規定的時間內沒有收到確認就要重傳已經發送的報文段,但是重傳時間的選擇卻TCP最復雜的問題之一。為此TCP採用了一種自適應演算法,它記錄了一個報文段發出的時間以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間RTT,同時TCP保留了RTT的加權平均往返時間RTTs。而RTTD是RTT的偏差加權平均值,它與RTTs和新的RTT樣本之差有關。

超時重傳時間的演算法如下:
第一次測量時,加權平均往返時間取往返時間RTT,以後每次測量到一個新的RTT,按以下公式計算:

第一次測量時,RTT偏差的加權平均等於RTT的一半,以後的測里中,按以下公式計算:

綜上超時重傳時間RTO計算如下:

若收到的報文無差錯,只是未按序號,使用選擇確認SACK可是讓發送方發送那些未收到的數據,而不重復發送已經收到的那些數據。如果要使用選擇確認SACK,那麼在建立TCP連接時,就要在TCP首部的選項中加上「允許SACK」的選項,並且雙方必須都事先商量好。

流量控制就是指讓發送方的發送速率不要太快,要讓接收方來得及接收。而利用滑動窗口機制就可以很方便的在TCP連接上實現對發送方的流量控制。

如上圖所示,接收方B進行了三次流量控制。第一次把窗口減小到rwnd=300,第二次又減到rwnd=100,最後是rwnd=0,即不允許發送方再發送數據了。

但是我們應該考慮一種情況,就是當接收方B的存儲已滿時,會向發送方發送零窗口的報文段,接著B的存儲又有了一些空間,B再向A發送一個不為零的窗口值,但這個報文丟失了,結果就是雙方一直等待下去。所以為了解決這個問題,TCP為每一個連接設有一個持續計時器。只要TCP連接的一方收到對方的零窗口通知,就啟動持續計時器,當計時器到期後,就發送一個探測段文段,而對方就在確認這個探測段時給出了現在的窗口值。如果窗口仍然是0,那麼收到這個報文段的一方就重新設置持續計時器,反之則死鎖的僵局就可以打破了。

應用程序把數據傳送到TCP的發送緩存後,TCP在何時發送這些數據?,在TCP的實現中廣泛使用了Nagle演算法。具體演算法如下:
(1)若發送應用進程要把數據逐個位元組地送到TCP的發送緩存,則發送方就把第一個數據位元組先發出去,把後面到達的數據位元組都緩存起來。
(2)方發送方收到對第一個數據位元組的確認後,再把發送緩存中的所有數據組裝成一個報文發送出去,同時繼續對後續到來的數據進行緩存。
(3)只有收到對前一個報文段的確認後才繼續發送下一個報文段。

當數據到達快而網路速度慢時,這種方法可以明顯減少網路帶寬。Nagle還規定:當到達的數據達到窗口的一半或最大報文長度時就立即發送一個報文。

但還還需要考慮一個叫做糊塗綜合征的問題,具體內容是若接收方的緩存已滿,應用進程每次只從緩存中取1個位元組,然後向發送方確認,並把窗口設為1個位元組(緩存只空了1個位元組的空間),接著發送方發來1個位元組,接收方發回確認,仍然將窗口設為1,這樣進行下去,網路的利用率很低。

為了解決這個問題,可以讓接收方等待一段時間,使得或者緩存已有足夠的空間或者等到接收緩存已有一半的空閑空間。此時,接收方就發出確認報文,並向發送方通知當前窗口的大小。

擁塞 是指在某一段時間內,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的性能就會變壞的情況。而所謂的 擁塞控制 就是防止過多的數據注入到網路當中,這樣可以使網路中的路由器或者鏈路不致過載,它是一個全局性的過程,涉及到所有的主機和路由器,而流量控制往往是指點對點通信量的控制。擁塞控制所要做的都有一個前提,就是網路能夠承受現有的網路負荷。

TCP進行擁塞控制的演算法有4種:慢開始、擁塞避免、快重傳和快恢復。下面在討論這些演算法時我們假定:
(1)數據是單方向傳送的,對方只傳送確認報文。
(2)接收方總是有足夠大的緩存空間。

發送方維持一個擁塞窗口的狀態變數,其大小取決於擁塞程度,並且動態變化。發送方讓自己的發送窗口小於擁塞窗口(如果考慮接收方的接收能力的話,發送窗口可能小於擁塞窗口)。發送方控制擁塞窗口的原則是:只要網路沒有擁塞,擁塞窗口就再增大一點,以便把更多的分組發送出去,只要出現擁塞,就減小擁塞窗口,以減少注入到網路的分組數。

下面會從「慢開始演算法」講起來討論擁塞窗口的大小如何變化的。

慢開始的演算法思路是:當主機開始發送數據時,由於並不清楚網路的負荷情況,所以如果立即把大量數據位元組注入到網路中,就有可能引起網路擁塞。因此會採用由小逐漸增大發送窗口。即在通常開始發送報文時,先將擁塞窗口cwnd的值設為一個最大報文段MSS的數值,而在每收到一個新的報文段確認後,把擁塞窗口增加至多一個MSS的數值。

如上圖所示,開始時cwnd=1,發送方發送一個M1,接收方收到M1發送確認,發送方收到一個確認後將cwnd加1,此時cwnd=2,因此發送方發送M2和M3兩個報文段,接收方收到後返回兩個確認,因此cwnd增加兩次,此時cwnd=4,接著發送方發送M4~M7四個報文段。依次類推。因此使用慢開始演算法後,每經過一個傳輸輪次,擁塞窗口就加倍。

但是為了防止擁塞窗口cwnd增加過大導致網路擁塞,需要設置一個慢開始門限ssthresh,慢開始門限用法如下:
當cwnd<ssthresh時,使用上述的慢開始演算法。
當cwnd>ssthresh時,停止使用慢開始演算法,使用擁塞避免演算法。
當cwnd=ssthresh時,既可以使用慢開始演算法,也可以使用擁塞避免演算法。
這里的擁塞避免演算法是指讓擁塞窗口緩慢的增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是像慢開始階段那樣加倍增長。

需要注意的是無論在慢開始階段還是擁塞避免階段,只要發送方判斷網路出現擁塞(根據是沒有按時收到確認),立即把慢開始門限ssthresh設為出現擁塞時的發送窗口的一半。然後發送窗口cwnd重新設為1,執行慢開始演算法。目的是迅速減少主機發送到網路分組的分組數。

快重傳演算法要求接收方每收到一個失序的報文段後就立即發送重復確認,如下圖接收了M1和M2後,又接收到一個M4,M4屬於失序報文,則發送對M2的重復確認。發送方只要連續收到三次確認重復就立即重傳對方未收到的報文段M3。

與快重傳演算法配合的還有快恢復演算法,過程如下:
(1)當發送方連續收到三個重復確認時,就把慢開始門限ssthresh減半,這是為了防止網路擁塞,接著並不執行慢開始演算法。
(2)由於上圖這種情況很可能不是因為網路擁塞引起的,因此這里不執行慢開始演算法(即不把擁塞窗口cwnd設為1,這樣速度太慢),而是把cwnd值設置為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法。

TCP的運輸連接有是三個階段:連接建立、數據傳送和連接釋放。在TCP的連接過程中要解決以下三個問題:
(1)要使每一方能夠確知對方的存在。
(2)要允許雙方協商一些參數(如最大窗口值、是否使用窗口擴大選項和時間戳選項以及服務質量)。
(3)能夠對運輸實體資源進行分配。

TCP建立連接的過程叫做握手,握手需要在客戶和伺服器之間交換3個TCP報文段。如圖是三報文握手建立的連接過程:

A最後還要發送一次確認的原因是為了防止已經失效的連接請求報文段突然又傳送到了B,因而產生錯誤。試想一種情況:如果只有第一次和第二次握手,第二次B向A發送的確認丟失了,此時B進入了連接建立狀態,A沒有收到確認,過一段時間後會再次向B發送連接請求,B收到後又會再次建立連接,白白浪費B的資源。

A在TIME-WAIT狀態等待2MSL(MSL,最長報文段壽命),主要是因為以下兩點考慮:首先是為了保證A發送的最後一個ACK報文段能夠到達B,因為這個ACK報文段可能丟失,此時B會重傳連接釋放報文,如果A已經關閉,則無法收到這個報文。其次,當A在發送完最後一個ACK報文段後,再經過時間2MSL,就可以使本連接持續時間內產生的所有報文段都從網路中消失。這樣,下一個新連接中不會出現這種舊的連接請求報文段。

在圖中每一個方框即TCP可能具有的狀態。每個方框中的大寫英文字元串時TCP標准所使用的的TCP連接狀態名。狀態之間的箭頭表示可能發生的狀態變遷。箭頭旁邊的字表明引起這種變遷的原因,或表明發生狀態變遷後又出現什麼動作,在圖中粗實線箭頭表示對客戶進程的正常變遷,粗虛線箭頭表示對伺服器進程的正常變遷,細線箭頭表示異常變遷。

閱讀全文

與rtts計算機網路怎麼獲得相關的資料

熱點內容
移動網路調測費 瀏覽:661
如何做好網路編輯一職 瀏覽:518
電腦時間網路校正軟體 瀏覽:30
夏普201nv復印機設置網路 瀏覽:62
美圖網路手機版下載安裝 瀏覽:715
怎樣增強網路信號和網速 瀏覽:868
5g網路干擾路由器么 瀏覽:845
數字共享網路 瀏覽:10
網路管理地址進不去怎麼辦 瀏覽:240
網路連接太多人會斷網 瀏覽:519
無線網路熱點在哪裡 瀏覽:864
電腦上的網路顯示標志 瀏覽:921
無線網路可以裝監控嗎 瀏覽:1001
孩子偷父母的錢玩網路游戲怎麼辦 瀏覽:708
自學網路技術有哪些 瀏覽:1003
動物園上的無線網路 瀏覽:169
租房子網路怎麼設置撥號 瀏覽:839
瑞視達網路攝像頭軟體 瀏覽:316
4g網路設備添加是什麼意思 瀏覽:1000
手機投屏需要連接同一網路嗎 瀏覽:830

友情鏈接