A. 計算機網路_運輸層
在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 中的最小值。我們假定接收端窗口足夠大,因此現在發送窗口的數值等於擁塞窗口的數值。
下面的執行步驟就是按照折現上的點的順序
B. 計算機網路運輸是什麼意思
從通信和信息處理的角度看,運輸層向它上面的應用層提供通信服務,它屬於面向通信部分的最高層,同時也是用戶功能中的最低層。
當網路的邊緣部分中的兩個主機使用網路的核心部分的功能進行端到端的通信時,只有位於網路邊緣部分的主機的協議棧才有運輸層,而網路核心部分中的路由器在轉發分組時都只用到下三層的功能。
應用進程之間的通信
在IP層看來,通信的兩端是兩個主機,IP數據報的首部明確的標志了這兩個主機的IP地址。但是兩個主機之間的通信這種說法還不夠清楚,這是因為真正進行通信的實體是在主機中的進程,是兩個進程之間在交換數據。從而引出了運輸層,從運輸層的角度看來,通信的真正端點並不是主機而是主機中的進程(端到端的通信)。
在一個主機中經常有多個應用進程同時分別和另一個主機的多個應用進程通信。這就表明了運輸層有一個很重要的功能,復用和分用,應用層不同進程的報文通過不同的埠向下交到運輸層,再往下就共用網路層提供的服務。
復用指的是發送方不同的應用進程都可以使用同一個運輸層協議傳輸數據(當然要加上適當的首部)
分用指的是接收方的運輸層在剝去報文的首部後能夠把這些數據正確交付目的應用進程
「運輸層提供應用進程間的邏輯通信」。「邏輯通信」的意思是:運輸層之間的通信好像是沿水平方向傳送數據。但事實上這兩個運輸層之間並沒有一條水平方向的物理連接。
運輸層的主要功能
運輸層為應用進程之間提供端到端的邏輯通信(但網路層是為主機之間提供邏輯通信)
運輸層還要對收到的報文進行差錯檢測。
運輸層需要有兩種不同的運輸協議,即面向連接的 TCP 和無連接的 UDP
兩種不同的運輸協議
運輸層向高層用戶屏蔽了下面網路核心的細節(如網路拓撲、所採用的路由選擇協議等),它使應用進程看見的就是好像在兩個運輸層實體之間有一條端到端的邏輯通信信道。
當運輸層採用面向連接的 TCP 協議時,盡管下面的網路是不可靠的(只提供盡最大努力服務),但這種邏輯通信信道就相當於一條全雙工的可靠信道。
當運輸層採用無連接的 UDP 協議時,這種邏輯通信信道是一條不可靠信道
C. osi七層模型各層功能有哪些
OSI參考模型分為7層,分別是物理層,數據鏈路層,網路層,傳輸層,會話層,表示層和應用層。
各層的主要功能及其相應的數據單位如下:
1、物理層:要傳遞信息就要利用一些物理媒體,如雙紐線、同軸電纜等,但具體的物理媒體並不在OSI的7層之內,有人把物理媒體當作第0層,物理層的任務就是為它的上一層提供一個物理連接,以及它們的機械、電氣、功能和過程特性。
2、數據鏈路層:數據鏈路層負責在兩個相鄰結點間的線路上,無差錯的傳送以幀為單位的數據。每一幀包括一定數量的數據和一些必要的控制信息。
3、網路層:在計算機網路中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。
4、傳輸層:該層的任務時根據通信子網的特性最佳的利用網路資源,並以可靠和經濟的方式,為兩個端系統的會話層之間,提供建立、維護和取消傳輸連接的功能,負責可靠地傳輸數據。在這一層,信息的傳送單位是報文。
5、會話層:會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如伺服器驗證用戶登錄便是由會話層完成的。
6、表示層:這一層主要解決擁護信息的語法表示問題。它將欲交換的數據從適合於某一用戶的抽象語法,轉換為適合於OSI系統內部使用的傳送語法。
7、應用層:確定進程之間通信的性質以滿足用戶需要以及提供網路與用戶應用軟體之間的介面服務。
(3)計算機網路中運輸層功能擴展閱讀:
OSI 參考模型將整個網路通信的功能劃分為七個層次,見圖1。它們由低到高分別是物理層(PH)、數據鏈路層(DL)、網路層(N)、傳輸層(T)、會話層(S)、表示層(P)、應用層(A)。每層完成一定的功能,每層都直接為其上層提供服務,並且所有層次都互相支持。第四層到第七層主要負責互操作性,而一層到三層則用於創造兩個網路設備間的物理連接。
D. 計算機網路中五層協議它們分別的主要功能是什麼它們具體分別是在哪裡(從硬體層面上談)實現的
1,物理層;其主要功能是:主要負責在物理線路上傳輸原始的二進制數據。
2、數據鏈路層;其主要功能是:主要負責在通信的實體間建立數據鏈路連接。
3、網路層;其主要功能是:要負責創建邏輯鏈路,以及實現數據包的分片和重組,實現擁塞控制、網路互連等功能。
4、傳輸層;其主要功能是:負責向用戶提供端到端的通信服務,實現流量控制以及差錯控制。
5、應用層;其主要功能是:為應用程序提供了網路服務。
物理層和數據鏈路層是由計算機硬體(如網卡)實現的,網路層和傳輸層由操作系統軟體實現,而應用層由應用程序或用戶創建實現。
(4)計算機網路中運輸層功能擴展閱讀:
應用層是體系結構中的最高層。應用層確定進程之間通信的性質以滿足用戶的需要。這里的進程就是指正在運行的程序。
應用層不僅要提供應用進程所需要的信息交換
和遠地操作,而且還要作為互相作用的應用進程的用戶代理,來完成一些為進行語義上有意義的信息交換所必須的功能。應用層直接為用戶的應用進程提供服務。
傳輸層的任務就是負責主機中兩個進程之間的通信。網際網路的傳輸層可使用兩種不同協議:即面向連接的傳輸控制協議TCP,和無連接的用戶數據報協議UDP。
面向連接的服務能夠提供可靠的交付,但無連接服務則不保證提供可靠的交付,它只是「盡最大努力交付」。這兩種服務方式都很有用,備有其優缺點。在分組交換網內的各個交換結點機都沒有傳輸層。
網路層負責為分組交換網上的不同主機提供通信。在發送數據時,網路層將運輸層產生的報文段或用戶數據報封裝成分組或包進行傳送。
在TCP/IP體系中,分組也叫作IP數據報,或簡稱為數據報。網路層的另一個任務就是要選擇合適的路由,使源主
機運輸層所傳下來的分組能夠交付到目的主機。
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連接狀態名。狀態之間的箭頭表示可能發生的狀態變遷。箭頭旁邊的字表明引起這種變遷的原因,或表明發生狀態變遷後又出現什麼動作,在圖中粗實線箭頭表示對客戶進程的正常變遷,粗虛線箭頭表示對伺服器進程的正常變遷,細線箭頭表示異常變遷。
F. 計算機網路的應用層有什麼功能
計算機網路的應用層的功能有:
1、運輸訪問和管理
文件運輸與遠程文件訪問是任何計算機網路最常用的兩種應用。文件運輸與遠程訪問所使用的技術是類似的
2、電子郵件
電子郵件與通用文件運輸的另一個差別是,郵件文電是最高度結構化的文本。在許多系統中,每個文電除了它的內容外,還有大量的附加信息域,這些信息域包括發送方名和地址、接收方名和地址、投寄的日期和時刻、接收復寫副本的人員表、失效日期、重要性等級、安全許可性以及其它許多附加信息。
3、虛擬終端
它實際上只是代有實際終端的抽象狀態的一種抽象數據結構。這種抽象數據結構可由鍵盤和計算機兩者操作,並把數據結構的當前狀態反映在顯示器上。
4、其它功能
(1)目錄服務:它類似於電子電話本,提供了在網路上找人或查到可用服務地址的方法。
(2)遠程作業錄入:允許在一台計算機上工作的用戶把作業提交到另一台計算機上去執行。
(3)圖形:具有發送如工程圖在遠地顯示和標繪的功能。
(4)信息通信:用於家庭或辦公室的公用信息服務。例如智能用戶電報、電視圖文等。
(6)計算機網路中運輸層功能擴展閱讀:
計算機網路各層的作用:
1、實體層(物理層)
物理層說白了就是那些連線,光纖、雙絞線之類的。
2、鏈接層(數據鏈路層)
也是計算機網路的低層,他的作用就是將網路層交下來的數據封裝成幀交給物理層,以及將從物理層接收的幀解析出數據交給網路層。(ps:數據在物理層一般叫幀,在網路層交IP數據報或者包)。像適配器、轉發器、集線器、網橋、交換機都被歸在鏈接層。
3、網路層
網路層的作用是向上層提供簡單靈活的、無連接的、盡最大努力交付的數據報服務,它不提供服務質量的承諾,它是為主機間提供邏輯通信。這里涉及到地址解析,路由等內容。常見的路由器可以歸為網路層。
4、運輸層
運輸層是為應用進程之間提供端到端的邏輯通信。傳說中的TCP三次握手、四次握手就發生在這里。這里需要重點關注。
5、應用層
域名解析、HTTP、電子郵件等等都是應用層的范疇。應用層的協議比較多。
G. 計算機網路為什麼運輸層是必不可少的
傳輸層是OSI中最重要, 最關鍵的一層,是唯一負責總體的數據傳輸和數據控制傳輸層的一層.傳輸層提供端到端的交換數據的機制.傳輸層對會話層等高三層提供可靠的傳輸服務,對網路層提供可靠的目的地站點信息。
傳輸層提供了主機應用程序進程之間的端到端的服務,基本功能如下
(1) 分割與重組數據
(2) 按埠號定址
(3) 連接管理
(4) 差錯控制和流量控制,糾錯的功能
傳輸層要向會話層提供通信服務的可靠性,避免報文的出錯、丟失、延遲時間紊亂、重復、亂序等差錯。