① 網路協議的概念。OSI各層的特點和作用。尤其是數據鏈路層、網路層、傳輸層的功能
有物理層.數據鏈路層..網路層..傳輸層.會話層.表示層..應用層第一層:物理層(PhysicalLayer)
規定通信設備的機械的、電氣的、功能的和規程的特性,用以建立、維護和拆除物理鏈路連接。具體地講,機械特性規定了網路連接時所需接插件的規格尺寸、引腳數量和排列情況等;電氣特性規定了在物理連接上傳輸bit流時線路上信號電平的大小、阻抗匹配、傳輸速率距離限制等;功能特性是指對各個信號先分配確切的信號含義,即定義了DTE和DCE之間各個線路的功能;規程特性定義了利用信號線進行bit流傳輸的一組操作規程,是指在物理連接的建立、維護、交換信息時,DTE和DCE雙方在各電路上的動作系列。
在這一層,數據的單位稱為比特(bit)。
屬於物理層定義的典型規范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
物理層的主要功能:
為數據端設備提供傳送數據的通路,數據通路可以是一個物理媒體,也可以是多個物理媒體連接而成.一次完整的數據傳輸,包括激活物理連接,傳送數據,終止物理連接.所謂激活,就是不管有多少物理媒體參與,都要在通信的兩個數據終端設備間連接起來,形成一條通路.
傳輸數據.物理層要形成適合數據傳輸需要的實體,為數據傳送服務.一是要保證數據能在其上正確通過,二是要提供足夠的帶寬(帶寬是指每秒鍾內能通過的比特(BIT)數),以減少信道上的擁塞.傳輸數據的方式能滿足點到點,一點到多點,串列或並行,半雙工或全雙工,同步或非同步傳輸的需要.
完成物理層的一些管理工作.
物理層的主要設備:中繼器、集線器。
第二層:數據鏈路層(DataLinkLayer)
在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動作系列。
數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址定址、數據的成幀、流量控制、數據的檢錯、重發等。
在這一層,數據的單位稱為幀(frame)。
數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。
鏈路層的主要功能:
鏈路層是為網路層提供數據傳送服務的,這種服務要依靠本層具備的功能來實現。鏈路層應具備如下功能:
鏈路連接的建立,拆除,分離。
幀定界和幀同步。鏈路層的數據傳輸單元是幀,協議不同,幀的長短和界面也有差別,但無論如何必須對幀進行定界。
順序控制,指對幀的收發順序的控制。
差錯檢測和恢復。還有鏈路標識,流量控制等等.差錯檢測多用方陣碼校驗和循環碼校驗來檢測信道上數據的誤碼,而幀丟失等用序號檢測.各種錯誤的恢復則常靠反饋重發技術來完成。
數據鏈路層主要設備:二層交換機、網橋
第三層是網路層(Network layer)
在計算機網路中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網路層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。網路層將數據鏈路層提供的幀組成數據包,包中封裝有網路層包頭,其中含有邏輯地址信息- -源站點和目的站點地址的網路地址。
如果你在談論一個IP地址,那麼你是在處理第3層的問題,這是「數據包」問題,而不是第2層的「幀」。IP是第3層問題的一部分,此外還有一些路由協議和地址解析協議(ARP)。有關路由的一切事情都在第3層處理。地址解析和路由是3層的重要目的。網路層還可以實現擁塞控制、網際互連等功能。
在這一層,數據的單位稱為數據包(packet)。
網路層協議的代表包括:IP、IPX、RIP、OSPF等。
網路層主要功能:
網路層為建立網路連接和為上層提供服務,應具備以下主要功能:
路由選擇和中繼
激活,終止網路連接
在一條數據鏈路上復用多條網路連接,多採取分時復用技術
差錯檢測與恢復
排序,流量控制
服務選擇
網路管理
網路層標准簡介
網路層主要設備:路由器
第四層是處理信息的傳輸層(Transport layer)
第4層的數據單元也稱作數據包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的數據單元稱為段(segments)而UDP協議的數據單元稱為「數據報(datagrams)」。這個層負責獲取全部信息,因此,它必須跟蹤數據單元碎片、亂序到達的數據包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(最終用戶到最終用戶)的透明的、可靠的數據傳輸服務。所謂透明的傳輸是指在通信過程中傳輸層對上層屏蔽了通信傳輸系統的具體細節。
傳輸層協議的代表包括:TCP、UDP、SPX等。
傳輸層是兩台計算機經過網路進行數據通信時,第一個端到端的層次,具有緩沖作用。當網路層服務質量不能滿足要求時,它將服務加以提高,以滿足高層的要求;當網路層服務質量較好時,它只用很少的工作。傳輸層還可進行復用,即在一個網路連接上創建多個邏輯連接。傳輸層也稱為運輸層.傳輸層只存在於端開放系統中,是介於低3層通信子網系統和高3層之間的一層,但是很重要的一層.因為它是源端到目的端對數據傳送進行控制從低到高的最後一層.
有一個既存事實,即世界上各種通信子網在性能上存在著很大差異.例如電話交換網,分組交換網,公用數據交換網,區域網等通信子網都可互連,但它們提供的吞吐量,傳輸速率,數據延遲通信費用各不相同.對於會話層來說,卻要求有一性能恆定的界面.傳輸層就承擔了這一功能.它採用分流/合流,復用/介復用技術來調節上述通信子網的差異,使會話層感受不到.
此外傳輸層還要具備差錯恢復,流量控制等功能,以此對會話層屏蔽通信子網在這些方面的細節與差異.傳輸層面對的數據對象已不是網路地址和主機地址,而是和會話層的界面埠.上述功能的最終目的是為會話提供可靠的,無誤的數據傳輸.傳輸層的服務一般要經歷傳輸連接建立階段,數據傳送階段,傳輸連接釋放階段3個階段才算完成一個完整的服務過程.而在數據傳送階段又分為一般數據傳送和加速數據傳送兩種。傳輸層服務分成5種類型.基本可以滿足對傳送質量,傳送速度,傳送費用的各種不同需要.
第五層是會話層(Session layer)
這一層也可以稱為會晤層或對話層,在會話層及以上的高層次中,數據傳送的單位不再另外命名,統稱為報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如伺服器驗證用戶登錄便是由會話層完成的。
會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續恢復通信。這種能力對於傳送大的文件極為重要。會話層,表示層,應用層構成開放系統的高3層,面對應用進程提供分布處理,對話管理,信息表示,恢復最後的差錯等.會話層同樣要擔負應用進程服務要求,而運輸層不能完成的那部分工作,給運輸層功能差距以彌補.主要的功能是對話管理,數據流同步和重新同步。要完成這些功能,需要由大量的服務單元功能組合,已經制定的功能單元已有幾十種.現將會話層主要功能介紹如下.
為會話實體間建立連接。為給兩個對等會話服務用戶建立一個會話連接,應該做如下幾項工作:
將會話地址映射為運輸地址
選擇需要的運輸服務質量參數(QOS)
對會話參數進行協商
識別各個會話連接
傳送有限的透明用戶數據
數據傳輸階段
這個階段是在兩個會話用戶之間實現有組織的,同步的數據傳輸.用戶數據單元為SSDU,而協議數據單元為SPDU.會話用戶之間的數據傳送過程是將SSDU轉變成SPDU進行的.
連接釋放
連接釋放是通過"有序釋放","廢棄","有限量透明用戶數據傳送"等功能單元來釋放會話連接的.會話層標准為了使會話連接建立階段能進行功能協商,也為了便於其它國際標准參考和引用,定義了12種功能單元.各個系統可根據自身情況和需要,以核心功能服務單元為基礎,選配其他功能單元組成合理的會話服務子集.會話層的主要標准有"DIS8236:會話服務定義"和"DIS8237:會話協議規范".
第六層是表示層(Presentation layer)
這一層主要解決用戶信息的語法表示問題。它將欲交換的數據從適合於某一用戶的抽象語法,轉換為適合於OSI系統內部使用的傳送語法。即提供格式化的表示和轉換數據服務。數據的壓縮和解壓縮, 加密和解密等工作都由表示層負責。例如圖像格式的顯示,就是由位於表示層的協議來支持。
第七層應用層(Application layer)
應用層為操作系統或網路應用程序提供訪問網路服務的介面。
應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。
通過 OSI 層,信息可以從一台計算機的軟體應用程序傳輸到另一台的應用程序上。例如,計算機 A 上的應用程序要將信息發送到計算機 B 的應用程序,則計算機 A 中的應用程序需要將信息先發送到其應用層(第七層),然後此層將信息發送到表示層(第六層),表示層將數據轉送到會話層(第五層),如此繼續,直至物理層(第一層)。在物理層,數據被放置在物理網路媒介中並被發送至計算機 B 。計算機 B 的物理層接收來自物理媒介的數據,然後將信息向上發送至數據鏈路層(第二層),數據鏈路層再轉送給網路層,依次繼續直到信息到達計算機 B 的應用層。最後,計算機 B 的應用層再將信息傳送給應用程序接收端,從而完成通信過程。下面圖示說明了這一過程。
OSI 的七層運用各種各樣的控制信息來和其他計算機系統的對應層進行通信。這些控制信息包含特殊的請求和說明,它們在對應的 OSI 層間進行交換。每一層數據的頭和尾是兩個攜帶控制信息的基本形式。
對於從上一層傳送下來的數據,附加在前面的控制信息稱為頭,附加在後面的控制信息稱為尾。然而,在對來自上一層數據增加協議頭和協議尾,對一個 OSI 層來說並不是必需的。
當數據在各層間傳送時,每一層都可以在數據上增加頭和尾,而這些數據已經包含了上一層增加的頭和尾。協議頭包含了有關層與層間的通信信息。頭、尾以及數據是相關聯的概念,它們取決於分析信息單元的協議層。例如,傳輸層頭包含了只有傳輸層可以看到的信息,傳輸層下面的其他層只將此頭作為數據的一部分傳遞。對於網路層,一個信息單元由第三層的頭和數據組成。對於數據鏈路層,經網路層向下傳遞的所有信息即第三層頭和數據都被看作是數據。換句話說,在給定的某一 OSI 層,信息單元的數據部分包含來自於所有上層的頭和尾以及數據,這稱之為封裝。
例如,如果計算機 A 要將應用程序中的某數據發送至計算機 B ,數據首先傳送至應用層。 計算機 A 的應用層通過在數據上添加協議頭來和計算機 B 的應用層通信。所形成的信息單元包含協議頭、數據、可能還有協議尾,被發送至表示層,表示層再添加為計算機 B 的表示層所理解的控制信息的協議頭。信息單元的大小隨著每一層協議頭和協議尾的添加而增加,這些協議頭和協議尾包含了計算機 B 的對應層要使用的控制信息。在物理層,整個信息單元通過網路介質傳輸。
計算機 B 中的物理層收到信息單元並將其傳送至數據鏈路層;然後 B 中的數據鏈路層讀取計算機 A 的數據鏈路層添加的協議頭中的控制信息;然後去除協議頭和協議尾,剩餘部分被傳送至網路層。每一層執行相同的動作:從對應層讀取協議頭和協議尾,並去除,再將剩餘信息發送至上一層。應用層執行完這些動作後,數據就被傳送至計算機 B 中的應用程序,這些數據和計算機 A 的應用程序所發送的完全相同 。
一個 OSI 層與另一層之間的通信是利用第二層提供的服務完成的。相鄰層提供的服務幫助一 OSI 層與另一計算機系統的對應層進行通信。一個 OSI 模型的特定層通常是與另外三個 OSI 層聯系:與之直接相鄰的上一層和下一層,還有目標聯網計算機系統的對應層。例如,計算機 A 的數據鏈路層應與其網路層,物理層以及計算機 B 的數據鏈路層進行通信。
② [計算機網路之六] 傳輸層
傳輸層向它上面的應用層提供通信服務,它屬於面向通信部分的最高層,同時也是用戶功能中的最底層。
從傳輸層的角度,通信的真正端點並不是主機而是主機中的進程。
傳輸層有 分用 和 復用 的功能。 「復用」 是指在發送方不同的應用進程都可以使用同一個運輸層協議傳送數據, 「分用」 是指接收方的運輸層在剝去報文的首部後能夠把這些數據正確交付目的應用進程。
網路層和運輸層有明顯的區別,網路層為主機之間提供邏輯通信,而運輸層為應用進程之間提供端到端的邏輯通信。
知名埠號 :0~1023
登記埠號 :1024~49151
客戶端短暫埠號 :49152~65535
① 無連接。 發送數據之前不需要建立連接,因此減少了開銷和發送數據之前的時延。
② 盡最大努力交付。 即不保證可靠交付,因此主機不需要維持復雜的連接狀態表。
③ 面向報文的。 對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界,UDP 一次交付一個完整的報文。
用戶數據報 UDP 有兩個欄位:數據欄位和首部欄位。首部欄位很簡單,只有 8 個位元組,由四個欄位組成,每個欄位的長度都是兩個位元組。各欄位意義如下:
① 源埠 在需要對方回信時選用。不需要時可用全0。
② 目的埠 目的埠號。這在終點交付報文時必須使用。
③ 長度 用戶數據報的長度,最小值為 8 (僅有首部)。
④ 檢驗和 檢測用戶數據報在傳輸中是否有錯。有錯就丟棄。
用戶數據報首部檢驗和的計算和校驗都要計算出一個偽首部。
① 面向連接。
應用程序在使用 TCP 協議之前,必須先建立 TCP 連接;傳送數據完畢後,必須釋放已經建立的 TCP 連接。類似於打電話:通話前要先撥號建立連接,通話結束後要掛機釋放連接。
② 一對一。
TCP 連接只能是點對點的(一對一)。
③ 可靠交付。
通過 TCP 連接傳送的數據,無差錯、不丟失、不重復,並且按序到達。
④ 全雙工通信。
通信雙方的應用進程在任何時候都能發送和接收數據,TCP 連接的兩端都設有發送緩存和接收緩存,用來臨時存放雙向通信的數據。
⑤ 面向位元組流。
TCP 中的 「流」 指的是流入到進程或從進程流出的位元組序列。
「面向位元組流」 的含義:雖然應用程序和 TCP 的互動式一次一個數據塊(大小不等),但 TCP 把應用程序交下來的數據僅僅看成是一連串無結構的位元組流。TCP 並不知道所傳送的位元組流的含義。TCP 不保證接收方應用程序鎖收到的數據塊和發送方應用程序所發出的數據塊具有對應的大小關系。但接收方應用程序收到的位元組流必須和發送方應用程序發出的位元組流完全一樣,當然接收方的應用程序必須有能力識別收到的位元組流,把它還原成有意義的應用層數據。
TCP 連接是協議軟體提供的一種抽象,每一條 TCP 連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定,即:
TCP 連接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}
IP1 和 IP2 分別是兩個端點主機的 IP 地址,port1 和 port2 分別是兩端端點主機中的埠號。
網路只能提供最大努力的服務,是不可靠的,因此 TCP 必須採用適當的措施才能使得兩個運輸層之間的通信變得可靠。當出現差錯時讓發送方重傳出現差錯的數據,同時在接收方來不及處理收到的數據時,及時告知發送方適當降低發送數據的速度,這樣就可以在不可靠的傳輸信道實現可靠傳輸。
ARQ(Auto Repeat-reQuest):自動重傳請求。
發送方每發送完一個分組就停止發送,等待接收方確認,在收到確認後再發送下一個分組。
A 是發送方,B 是接收方。
A 每發送一個分組後,等待 B 對該分組的確認後,再接著發送下一個分組。
【發送方】A 發送的分組在傳輸過程中出錯,可能是丟失了,也可能是分組受到干擾出錯了
【接收方】這時 B 直接丟棄分組,什麼也不做(也不通知 A 受到的分組有差錯)。
【解決方案】發送方在每發送完一個分組時設置一個 超時計數器 ,只要超過一段時間仍然沒有接收到確認,就認為剛才發送的分組丟失了,因而重傳前面發送過的分組,這叫 超時重傳 。反之在超時計時器到期之前收到了相應的確認,就撤銷該超時計時器。
第一,A 在發送完一個分組後, 必須暫時保留已發送的分組的副本 (在發生超時重傳時使用)。只有在收到相應的確認後才能清楚暫時保留的分組副本。
第二,分組和確認分組都必須進行 編號 。這樣才能明確是哪一個發送出去的分組受到了確認,而哪一個分組還沒有收到確認。
第三,超時計時器設置的 重傳時間應當比數據在分組傳輸的平均往返時間更長一些 。
【發送方】超時重傳時間內沒有收到確認報文,無法確認是發送出錯、丟失,還是接收方的確認丟失,超時計時器到期後就要重傳。
【接收方】丟棄收到的重復分組,不向上層交付;向發送方發送確認。
【發送方】收下遲到的確認,並且丟棄
發送方大部分時間都在等待確認,信道的利用率低
使用流水線的 ARQ 可以提高信道利用率
【發送方】維持一個發送窗口,位於發送窗口內的分組都可連續發送出去,而不需要等待對方的確認。
回退N幀協議 :如果發送方發送了多個分組,但中間的某個分組丟失了,這時接收方只能對丟失分組之前的分組發出確認,而發送方無法知道丟失分組及後面分組的接收情況,只好把丟失分組及後面的分組重傳一次,這叫 Go-back-N ,表示需要再退回來重傳已發送過的 N 個分組。
前面 20 個位元組固定,因此 TCP 首部最小長度是 20 位元組。
TCP 的滑動窗口以位元組為單位,窗口後沿的部分表示已發送且已收到通知,窗口裡的序號表示允許發送的序號,窗口前沿之前的數據暫時不允許發送,需要等待收到接收方的確認後前沿往前移才可發送。
描述一個發送窗口需要三個指針:P1、P2 和 P3,如圖所示:
小於 P1 的是已發送並已收到確認的部分,而大於 P3 的是不允許發送的部分。
P3 - P1 = A 的發送窗口
P2 - P1 = 已發送但尚未收到確認的位元組數
P3 - P2 = 允許發送但當前尚未發送的位元組數(又稱為 可用窗口 或 有效窗口 )
接收方 B 接收窗口大小為20,因為未收到 31 的數據,即使已收到後面的序號 32、33 的數據,返回的確認號仍然是 31。
現在接收方收到了 31、32、33,並返回確認號 33,接收窗口往前滑動 3 個序號,發送方接收到確認,發送窗口也向前滑動 3 個序號大小,現在 A 可以發送序號 51~53 的數據了。
當發送方將發送窗口內的數據都發送出去,但是接收方的確認可能由於網路擁塞滯留,這時發送方發送窗口已滿,可用窗口為 0,只能等待接收方的確認報文到達。
TCP 為了保證可靠傳輸,要求必須受到對已發送報文的確認,如果超過一定時間未受到確認報文,則重傳已發送的報文。這個時間就叫 超時重傳時間 ,很明顯超時重傳時間的大小設置應該更貼近網路的實際情況,如果網路狀況好,就設短一點,否則使網路的空閑時間增大,降低了傳輸效率;網路差就設長一點,否則會引起很多不必要的重傳,使網路負荷增大。
TCP 採用了一種自適應的演算法:
RTT(報文段的往返時間)、RTTs(加權平均往返時間),RTTs 的計算公式:
RTTd(RTT 的偏差的加權平均值)、RTO(RetransmissionTime-Out 超時重傳時間):
【場景】TCP 的接收方在接收對方發送過來的數據位元組流的序號不連續,形成一些不連續的位元組塊,如果簡單按照回退N幀協議處理,意味著要重傳第一個未收到的序號數據塊及之後的數據,如果能通知發送方已收到了哪些數據(選擇確認),就可以讓發送方只發送接收方未收到的數據。
流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。
當發送方收到接收方通知,將窗口縮小為 0 時,發送方將暫時不能發送數據了,必須等接收方通知更新接收窗口大小,但是這個通知又有可能丟失,導致發送方沒收到通知。
為了避免雙方互相等待死鎖,TCP 為每個鏈接設有一個 持續計時器 ,只要 TCP 連接的一方收到對方的零窗口通知,就啟動持續計時器。若持續計時器設置的時間到期,就發送一個零窗口 探測報文段 (僅攜帶 1 位元組的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。如果窗口仍然是零,那麼受到這個報文段的一方就重新設置持續計時器;如果窗口不是零,那麼死鎖的僵局就可以打破了。
【優點】提高網路利用率
【缺點】可能會發生某種程度的延遲
【場景】接收數據的主機如果每次都立刻回復確認應答的話,可能會返回一個較小的窗口,因為接收方剛接收完數,緩沖區已滿。
【糊塗窗口綜合征問題】
TCP 接收方緩存已滿,而互動式的應用進程一次只從接收緩存中讀取 1 個位元組(這樣就使接收緩存空間僅騰出 1 個位元組),然後向發送方發送確認,並把窗口設置為 1 個位元組(但發送的數據報是 40 位元組長,TCP 首部 + IP 數據報首部)。接著,發送方又發來 1 個位元組的數據(注意發送方發送的 IP 數據報是 41 位元組長)。接收方發回確認,仍然將窗口設置為 1 個位元組。這樣進行下去,使網路的效率很低。
TCP 文件傳輸中,就採用了兩個數據段返回一次確認應答,並且等待一定時間後沒有其他數據包到達時也依然發送確認應答。
當對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的性能就要變壞,這種情況就叫做 擁塞 。
慢開始(slow-start)、擁塞避免(congestion avoidance)、快重傳(fast retransmit)和快恢復(fast recovery)。
【演算法思路】
當主機開始發送數據時,由於並不清楚網路的負荷情況,所以如果立即把大量數據位元組注入網路,那麼就有可能引起網路發生擁塞。較好的方法是先探測一下,即 由小到大逐漸增大發送窗口 ,也就是說, 由小到大逐漸增大擁塞窗口數值 。
【處理過程】
慢開始門限值 ssthresh 決定了擁塞窗口達到多大時要執行什麼演算法。
① 當 cwnd < ssthresh 時,使用慢開始演算法;
② 當 cwnd > ssthresh 時,停止使用慢開始演算法而改用擁塞避免演算法;
③ 當 cwnd = ssthresh 時,既可使用慢開始演算法,也可使用擁塞避免演算法。
在擁塞窗口 cwnd 達到門限值之前,發送方每一輪次收到確認應答後,cwnd 就增大為原來的兩倍;達到門限值後,執行擁塞避免演算法。
PS. 慢開始只是表示初始發送數據少,不代表發送速率增長速度慢,實際上是指數級增長非常快。
【演算法思路】
讓擁塞窗口 cwnd 緩慢地增大,即每經過一個往返時間 RTT 就把發送方的擁塞窗口 cwnd 加 1,而不是像慢開始階段那樣加倍增長。擁塞避免階段有 「加法增大」 的特點,按線性規律緩慢增長,使網路比較不容易出現擁塞 。
【處理過程】
在執行擁塞避免演算法階段,當網路出現超時時,發送方判斷為網路擁塞,調整門限值為當前擁塞窗口的一半,即 ssthresh = cwnd / 2,同時擁塞窗口重置為 1,即 cwnd = 1,進入慢開始階段。
【演算法原理】
① 快重傳
【場景】有時,個別報文段會在網路中丟失,但實際上網路並未發生擁塞。如果發送方遲遲收不到確認,就會產生超時,就會誤認為網路發生了擁塞,導致發送方錯誤地啟動慢開始,把擁塞窗口 cwnd 又設置為 1,因而降低了傳輸效率。
【方案】接收方不要等待自己發送數據時才進行捎帶確認,而是要立即發送確認,即使收到了失序的報文段也要立即發出對已收到的報文段的重復確認,當發送方 一連收到 3 個重復確認 ,就知道接收方確實沒有收到某個報文段,因而應當 立即進行重傳 。
② 快恢復:
發送方知道只是丟失了個別的報文段,於是不啟動慢開始,而是執行快恢復演算法,調整發送方門限值 ssthresh = cwnd / 2,同時設置擁塞窗口 cwnd = ssthresh = 8,並開始執行擁塞避免演算法。
擁塞控制的流程如下:
擁塞窗口 cwnd,接收方窗口 rwnd, 發送方發送窗口的上限值 = Min[rwnd, cwnd] 。
① 當 rwnd < cwnd,接收方的接收能力限制發送方窗口大小;
② 當 cwnd < rwnd,網路的擁塞程度限制發送方窗口大小。
【問題背景】
路由器採取分組丟棄策略,即按照 先進先出(FIFO) 規則處理分組,當隊列已滿時,則丟棄後面到達的分組,這叫 尾部丟棄策略 。
丟失的分組會導致發送方出現超時重傳,發送方轉而執行慢開始演算法,不同分組屬於不同 TCP 連接,導致很多 TCP 同時進入慢開始狀態,這種現象稱為 全局同步 。
【解決方案】
主動隊列管理 AQM:不等到路由器的隊列長度已經達到最大值時才不得不丟棄後面到達的分組,而是在隊列長度達到某個警惕值時就主動丟棄到達的分組,這樣就提醒了發送方放慢發送的速率,因而有可能使網路擁塞的程度減輕,甚至不出現網路擁塞。
TCP 是面向連接的協議,運輸連接有三個階段: 連接建立、數據傳送、連接釋放 。
TCP 連接建立過程要解決的幾個問題:
① 使每一方能夠確知對方的存在;
② 允許雙方協商一些參數(如最大窗口值、是否使用窗口擴大選項和時間戳選項以及服務質量等);
③ 能夠對運輸實體資源(如緩存大小、連接表中的項目等)進行分配。
TCP 建立連接的過程叫做握手,握手需要在客戶和伺服器之間交換三個 TCP 報文段,即 三次握手 。
最初客戶端和服務端都處於 CLOSED(關閉) 狀態,A(Client)主動打開連接,B(Server)被動打開連接。
一開始,B 的 TCP 伺服器進程先創建 傳輸控制塊 TCB ,准備接受客戶進程的連接請求。然後伺服器進程就處於 LISTEN(收聽)狀態,等待客戶端的連接請求。如有,即作出響應。
第一次握手 :A 的 TCP 客戶進程也是首先創建傳輸控制塊 TCB,准備接受客戶進程的連接請求。然後在打算建立 TCP 連接時,向 B 發出連接請求報文段,這時首部中的同步位 SYN = 1,同時選擇一個初始序號 seq = x。TCP 規定,SYN 報文段(即 SYN = 1 的報文段)不能攜帶數據,但要 消耗掉一個序號 。這時,TCP 客戶進程進入 SYN-SENT(同步已發送) 狀態。
第二次握手 :B 收到連接請求報文段後,如同意建立連接,則向 A 發送確認。在確認報文段中應把 SYN 位和 ACK 位都置 1,確認號是 ack = x + 1,同時也為自己選擇一個初始序號 seq = y。請注意,這個報文段也不能攜帶數據,但同樣 要消耗掉一個序號 。這時 TCP 伺服器進程進入 SYN-RCVD(同步收到) 狀態。
第三次握手 :TCP 客戶進程收到 B 的確認後,還要向 B 給出確認。確認報文段的 ACK 置 1,確認號 ack = y + 1,而自己的序號 seq = x + 1。TCP 的標准規定,ACK 報文段可以攜帶數據。但 如果不攜帶數據則不消耗序號 ,在這種情況下,下一個數據報文段的序號仍是 seq = x + 1。這時,TCP 連接已經建立,A 進入 ESTABLISHED(已建立連接) 狀態。當 B 收到 A 的確認後,也進入 ESTABLISHED(已建立連接)狀態。
數據傳輸結束後,通信的方法都可釋放連接。現在 A 和 B 都處於 ESTABLISHED 狀態。
第一次揮手 :A 的應用進程先向其 TCP 發出連接釋放報文段,並停止再發送數據,主動關閉 TCP 連接。A 把連接釋放報文段首部的終止控制位 FIN 置 1,其序號 seq = u,它等於前面已傳送過的數據的最後一個位元組的序號加 1。這時 A 進入 FIN-WAIT-1(終止等待 1)狀態,等待 B 的確認。請注意,TCP 規定,FIN 報文段即使不攜帶數據,它也消耗掉一個序號。
第二次揮手 :B 收到連接釋放報文後即發出確認,確認號是 ack = u + 1,而這個報文段自己的序號是 v,等於 B 前面已傳送過的最後一個位元組的序號加 1。然後 B 就進入 CLOSE-WAIT(關閉等待)狀態。TCP 伺服器進程這時應通知高層應用程序,因而從 A 到 B 這個方向的連接就釋放了,這時的 TCP 連接處於半關閉(half-close)狀態,即 A 已經沒有數據要發送了,但 B 若發送數,A 仍要接收。也就是說,從 B 到 A 這個方向的連接並未關閉,這個狀態可能會持續一段時間。A 收到來自 B 的確認後,就進入 FIN-WAIT-2(終止等待 2)狀態,等待 B 發出的連接釋放報文段。
第三次揮手 :若 B 已經沒有要向 A 發送的數據,其應用進程就通知 TCP 釋放連接。這時 B 發出的連接釋放報文段必須使 FIN = 1。現假定 B 的序號為 w(在半關閉狀態 B 可能又發送了一些數據)。B 還必須重復上次已發送過的確認號 ack = u + 1。這時 B 就進入 LAST-ACK(最後確認)狀態,等待 A 的確認。
第四次揮手 :A 在收到 B 的連接釋放報文段後,必須對此發出確認。在確認報文段中把 ACK 置 1,確認號 ack = w + 1,而自己的序號是 seq = u + 1(根據 TCP 標准,前面發送過的 FIN 報文段要消耗一個序號)。然後進入 TIME-WAIT(時間等待)狀態。請注意,現在 TCP 連接還沒有釋放掉。必須經過時間等待計時器(TIME-WAIT timer)設置的時間 2MSL 後,A 才進入到 CLOSED 狀態,然後撤銷傳輸控制塊,結束這次 TCP 連接。當然如果 B 一收到 A 的確認就進入 CLOSED 狀態,然後撤銷傳輸控制塊。所以在釋放連接時,B 結束 TCP 連接的時間要早於 A。
③ 網路五層結構
計算機網路五層結構是指應用層、傳輸層、網路層、數據鏈路層、物理層。
1、應用層
專門針對某些應用提供服務。
2、傳輸層
網路層只把數據送到主機,但不會送到進程。傳輸層負責負責進程與主機間的傳輸,主機到主機的傳輸交由網路層負責。傳輸層也稱為端到端送。
3、網路層
把包裡面的目的地址拿出來,進行路由選擇,決定要往哪個方向傳輸。
負責從源通過路由選擇到目的地的過程,達到從源主機傳輸數據到目標主機的目的。
4、數據鏈路層
通過物理網路傳送包,這里的包是通過網路層交過來的數據報。
只完成一個節點到另一個節點的傳送(單跳)。
5、物理層
通過線路(可以是有形的線也可以是無線鏈路)傳送原始的比特流。
只完成一個節點到另一個節點的傳送(單跳)。
(3)計算機網路傳輸層特點擴展閱讀:
計算機網路是指將地理位置不同的具有獨立功能的多台計算機及其外部設備,通過通信線路連接起來,在網路操作系統,網路管理軟體及網路通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。
計算機網路也稱計算機通信網。關於計算機網路的最簡單定義是:一些相互連接的、以共享資源為目的的、自治的計算機的集合。若按此定義,則早期的面向終端的網路都不能算是計算機網路,而只能稱為聯機系統(因為那時的許多終端不能算是自治的計算機)。但隨著硬體價格的下降,許多終端都具有一定的智能,因而「終端」和「自治的計算機」逐漸失去了嚴格的界限。若用微型計算機作為終端使用,按上述定義,則早期的那種面向終端的網路也可稱為計算機網路。
④ 什麼是ISO/OSI網路參考模型其主要特點是什麼
OSI(Open System Interconnect),即開放式系統互聯。 一般都叫OSI參考模型,是ISO(國際標准化組織)組織在1985年研究的網路互聯模型。該體系結構標準定義了網路互連的七層框架(物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層),即ISO開放系統互連參考模型。在這一框架下進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性、互操作性和應用的可移植性。
特點:
(1)網路中各節點都有相同的層次;
(2)不同節點的同等層具有相同的功能;
(3)同一節點內相鄰層之間通過介面通信;
(4)每一層使用下層提供的服務,並向其上層提供服務;
(5)不同節點的同等層按照協議實現對等層之間的通信。
⑤ 計算機網路傳輸層
端到端的連接
網路層:提供主機之間的邏輯通信
傳輸層:提供應用進程之間的邏輯通信
位於網路層之上、依賴網路層服務、對網路層服務進行可能的增強
接收端:多路分用
相同目的地址目的埠號的UDP會被導向同一個socket
每個srcIp srcPort DestIp DestPort 導向自己獨有的socket(創建多個socket)
(伺服器也可以讓一個進程創建多個線程與tcp連接綁定)
發送端:多路復用
什麼是可靠? 不錯、不亂、不丟
可靠數據傳輸協議
GBN
1.發送方 分組頭部包含k-bit序列號
窗口尺寸為N,最多允許N個分組未確認
序列號 :表示本報文段所發送數據的第一個位元組的編號。而不是報文段的編號(這里防止被攻擊混入其他的段難以檢測的問題)。
建立TCP連接時,雙方隨即選擇序列號
ACKs 表示接收方期望收到發送方下一個報文段的第一個位元組數據的編號。
累計確認:該序列號之前所有的位元組均已被正確接收到(GBN)
TCP在IP層提供的不可靠服務基礎上實現可靠數據傳輸服務
流水線機制
累積確認
TCP使用單一重傳定時器
觸發重傳的事件
超時
收到重復ACK
漸進式
暫不考慮重復ACK
暫不考慮流量控制
暫不考慮擁塞控制
1.點對點 一個sender 一個 reciever
2.可靠的、按序的位元組流
3.流水線機制
案例:
何時應該指數性增長切換為線性增長(擁塞避免)?
當CongWin達到Loss事件前值的1/2時.
實現方法:利用一個變數 Threshold, Loss事件發生時, Threshold被設為Loss事件前CongWin值的1/2。
Loss事件處理辦法
3個重復ACKs:CongWin切到一半然後線性增長
Timeout事件:CongWin直接設為1個MSS,然後指數增長,達到threshold後, 再線性增長(擁塞更嚴重了)
TCP擁塞控制演算法
4.接收方/發送方緩存
5.全雙工:同一連接中能傳輸雙數據流
6.面向連接(連接管理)
TCP連接包括:兩台主機上的緩存、連接狀態變數、socket等
客戶端初始化的序列號是隨機的
7.流量控制機制:發送方不會傳輸的太多、太快以至於淹沒接收方(buffer溢出)
8.復用/分用
1.基於「盡力而為」的網路層,沒有做(可靠性)
丟失
非按序到達
2.基於Internet IP協議
復用/分用
簡單的錯誤校驗
3.無連接
UDP發送方和接收方之間不需要握手
每個UDP段的處理獨立於其他段
UPD優點:
1.無需建立連接(減少延遲)-DNS
2.實現簡單,無需維護連接狀態
3.頭部開銷小(8byte)
4.沒有擁塞控制:應用可更好的控制發送時間和速率
常用於流媒體應用
1.容忍丟失
2.速率敏感
DNS/SNMP
在UDP上實現可靠數據傳輸
UDP校驗和:檢測UDP段在傳輸過程中是否發生錯誤