A. [計算機網路之一] 網路基礎知識
協議就是計算機與計算機之間通過網路實現通信時事先達成的一種 「約定」。這種 「約定」 使那些由不同的廠商、不同的 CPU 以及不同的操作系統組成的計算機之間,只要遵循相同的協議就能夠實現通信。
TCP/IP、AppleTalk(僅限蘋果計算機使用)、SNA(IBM)、DECnet(DEC)、IPX/SPX(Novell)
分組交換是指將大數據分割為一個個叫做包的較小單位進行傳輸的方法。
ISO (International Organization for Stardards,國際標准化組織)制定了國際標准 OSI (Open System Interconnection,開放系統互聯參考模型),但是沒有得到普及,反而是隨 Apanet 而生的 TCP/IP 協議在大學研究機構和計算機行業的推動下成為實際的業界標准。
每個分層都接收由它下一層所提供的特定服務,並且負責為自己的上一層提供特定服務。上下層之間進行交互所遵循的約定叫做 「介面」 ,同一層之間交互所遵循的約定叫做 「協議」 。
協議分層參考了計算機軟體中的模塊化開發。
單播、廣播、多播、任播。
一個地址必須明確地表示一個主體對象,在同一個通信網路中不允許有兩個相同地址的通信主體存在。
有層次性的地址方便高效地找到通訊目標(eg: 快遞地址國家、省市區)
MAC地址有唯一性但沒有層次性。
乙太網、無線、幀中繼、ATM、FDDI、ISDN。
NIC(Network Interface Card,網路介面卡),計算機必須有網卡才能接入網路。
物理層面上延長網路的設備。將電纜傳遞過來的光電信號經過波形調整和放大之後傳遞給另一個電纜。
集線器 :提供多個埠的中繼器。
數據鏈路層面連接兩個網路的設備。 不同網路可能採用了不同的數據鏈路,數據傳輸的速率可能完全不一樣 ,網橋會緩存一個網段傳輸到另一個網段的數據幀,再重新生成信號作為全新的幀轉發給另一個網段(這里我理解不同數據鏈路幀的格式不一樣,所以網橋需要緩存數據並轉換位另一個數據鏈路中的幀格式)。
網橋的其他作用:
① 根據數據幀中的 FCS 檢查數據幀是否已損壞,是則不轉發;
② 自學習MAC設備來自哪些網路,並記錄在地址轉發表中(地址轉發表記錄硬體地址與網路的映射關系);
③ 過濾功能控制網路流量。
交換集線器 :每個埠都相當於一個網橋。
網路層面上連接兩個網路、並對分組報文進行轉發的設備。
應用場景:廣域網加速器、特殊應用訪問加速、防火牆。
將傳輸層到應用層的數據進行轉發和翻譯的設備。
代理伺服器 :控制流量和出於安全考慮,客戶端和服務端無需在網路上直接通信,而是從傳輸層到應用層對數據和訪問進行各種控制和處理。
研發基於分組交換技術的 ARPANET,取代容災性差的中央集中式網路。
單個網路無法解決所有通信問題,開始研究網路互連技術,出現了 TCP/IP,並首先被 BSD UNIX 採用,隨之被廣泛使用變得流程,所有使用 TCP/IP 協議的計算機都能利用互連網相互通信。
圍繞大型計算機中心建設計算機網路,即 NSFNET(國家科學基金網),它是一個三級網路,分為主幹網、地區網和校園網。這種三級計算機網路覆蓋了全美主要的大學和研究所,並成為互聯網中的主要組成部分。
NSFNET 逐漸被商用的互聯網主幹網替代,政府機構不再負責互聯網的運營。用戶接入互聯網需要通過 ISP(Internet Service Provider:互聯網服務提供商)。
IXP(Internet eXchange Point)互聯網交換點 的作用是允許兩個網路直接相連並交換分組,而不需要再通過第三個網路(如上圖中的主幹 ISP)來轉發分組。
所有的互聯網標准都是以 RFC 的形式在互聯網上發表的,但並非所有的 RFC 文檔都是互聯網標准。
制定互聯網的正式標准要經過以下三個階段
(1)互聯網草案
(2)建議標准
(3)互聯網標准
由所有連接在互聯網上的主機組成。這部分是用戶直接使用的額,用來進行通信和資源共享。
由大量網路和連接這些網路的路由器組成。這部分視為邊緣部分提供服務的(提供連通性和交換)。
① 電路交換的起源
② 電路交換的特點
在使用信道時,信道兩端的兩個用戶始終佔用端到端的通信資源,線路上真正傳送數據的時間比例很小,傳輸效率很低。
③ 電路交換的步驟
建立連接 (佔用通信資源)→ 通話 (一直佔用通信資源)→ 釋放連接 (歸還通信資源)
電報通信採用基於存儲轉發原理的報文交換,整個報文被發送到相鄰結點,存儲下來,再轉發到下一個結點。
① 分組交換的特點
把一個完整的報文劃分為一個個分組,每個分組傳送到相鄰結點後,存在下來查找轉發表,在轉發到下一個結點。
② 分組交換的優缺點
優點:每個分組可以經過不同的路由,使得有更好的可靠性,也能充分利用網路性能。
缺點:分組控制信息有一定開銷,路由器存儲轉發時需要排隊導致產生時延,無法確保通信時端到端所需的寬頻。
① 廣域網 WAN(Wide Area Network) 廣域網的作用范圍通常為幾十到幾千公里,是互聯網的核心,其任務是通過長距離運送主機鎖發送的數據。連接廣域網各結點交換機的鏈路一般都是高速鏈路,具有較大的通信量。
② 城域網 MAN(Metropolotan Area Network) 城域網的作用范圍一般是一個城市,作用距離約為 5 ~ 50 km。可以為一個或幾個單位所用歐,也可以是一種公用設置,用來將多個區域網進行互聯。目前很多城域網採用的是乙太網技術。
③ 區域網 LAN(Local Area Network) 區域網一般用微型計算機或工作站通過高速通信鏈路相連(速率通常在 10 Mbit/s 以上),但地理上則局限在較小的范圍(如 1 km 左右)。在區域網發展的初期,一個學校或工廠往往只擁有有個區域網,但現在區域網已非常廣泛地使用,學校或企業大都擁有多個互連的區域網(這樣的網路常稱為 校園網 或 企業網 )。
④ 個人區域網 PAN(Personal Area Network) 個人區域網就是在個人工作的地方把屬於個人使用的電子設備用無線技術連接起來的網路,因此也常稱為 無線個人區域網 WPAN(Wireless PAN) ,其范圍很小,大約在 10 m 左右。
① 公用網(pulic network) 電信公司出資建造的大型網路。
② 專用網(private network) 某個部門為滿足本單位的特殊業務工作的需要而建造的網路。這種網路不向本單位以外的人提供服務,例如,軍隊、鐵路、銀行、電力等系統均有本系統的專用網。
接入網(Access Network) ,又稱為本地接入網或居民接入網。
數據的傳輸速率,也稱為數據率或比特率,單位為 bit/s(比特每秒)(或 b/s,有時也寫為 bps,即 bit per second)。
1 kbit/s = 1 × 10³ bit/s,1 Mbit/s = 1 × 10^6 bit/s,1 Gbit/s = 1 × 10^9 bit/s,1 Tbit/s = 1 × 10^12 bit/s
吞吐量表示在單位時間內通過某個網路的實際的數據量,單位同速率帶寬。
時延是指數據從網路的一端傳送到另一端所需的時間,網路時延由幾個部分組成:
網路總時延 = 發送時延 + 傳播時延 + 處理時延 + 排隊時延
[誤區] 光纖的傳播速率實際上比銅線要慢,但是光纖的帶寬卻比普通的雙絞線要快,這是因為光信號的抗干擾性強,並且可以通過波分復用的信道復用技術,達到一路光纖傳輸多路信號的效果。
時延帶寬積表示信道中可以容納多少比特。
在計算機網路中,往返時間 RTT(Round-Trip Time)是一個重要的性能指標,因為在許多情況下,互聯網上的信息不僅僅單方向傳輸而是雙向交互的。
使用衛星通信時,發送時延很短,主要消耗在來回傳播時延上,即往返時間相對較長。
利用率有信道利用率和網路利用率兩種。信道利用率指出某信道有百分之幾的時間是被利用的(有數據通過)。完全空閑的信道的利用率為零。網路利用率則是全網路的信道利用率的加權平均值。
D0 表示網路空閑時的時延,D 表示網路當前的時延,U 表示利用率,則
U = 1 - D0/D,變形一下,有
信道利用率不是越高越好,因為信道利用率增大時,網路時延也會增加,因為排隊時延增大。所以當 U 趨於 1 時,D 會趨於無限大,所以 信道或網路的利用率過高會產生非常大的時延 。
費用、質量、標准化、可靠性、可擴展性和可升級性、易於管理和維護。
① 語法,即數據與控制信息的結構或格式;
② 語義,即需要發出何種控制信息,完成何種動作以及做出何種響應;
③ 同步,即時間實現順序的詳細說明。
① 各層獨立;
② 靈活性好;
③ 結構上可分割開;
④ 易於實現和維護;
⑤ 能促進標准化工作。
計算機網路的各層及其協議的集合就是網路的體系結構。
實體 :表示任何可發送或接收信息的硬體或軟體進程。
協議 :協議是水平的,控制兩個對等實體進行通信的規則的集合。
服務 :服務是垂直的,下層通過介面向上層提供服務。
服務訪問點 :SAP(Service Access Point),同一系統中相鄰兩層的實體進行交互的地方。
B. 計算機網路基礎知識(一)
參考:計算機網路 謝希仁 第7版
一、現在最主要的三種網路
電信網路(電話網)
有線電視網路
計算機網路 (發展最快,信息時代的核心技術)
二、internet 和 Internet
internet 是普通名詞
泛指一般的互連網(互聯網)
Internet 是專有名詞,標准翻譯是「網際網路」 世界范圍的互連網(互聯網)
使用 TCP/IP 協議族
前身是美國的阿帕網 ARPANET
三、計算機網路的帶寬
計算機網路的帶寬是指網路可通過的最高數據率,即每秒多少比特。 描述帶寬也常常把「比特/秒」省略。
例如,帶寬是 10 M,實際上是 10 Mb/s。注意:這里的 M 是 106。
四、對寬頻傳輸的錯誤概念
在網路中有兩種不同的速率:
信號(即電磁波)在傳輸媒體上的傳播速率(米/秒,或公里/秒)
計算機向網路發送比特的速率(比特/秒),也叫傳輸速率。 這兩種速率的意義和單位完全不同。
寬頻傳輸:計算機向網路發送比特的速率較高。 寬頻線路:每秒有更多比特從計算機注入到線路。 寬頻線路和窄帶線路上比特的傳播速率是一樣的。
早期的計算機網路採用電路交換,新型的計算機網路採用分組交換的、基於存儲轉發的方式。 分組交換:
在發送端把要發送的報文分隔為較短的數據塊
每個塊增加帶有控制信息的首部構成分組(包)
依次把各分組發送到接收端
接收端剝去首部,抽出數據部分,還原成報文
IP 網路的重要特點
每一個分組獨立選擇路由。
發往同一個目的地的分組,後發送的有可能先收到(即可能不按順序接收)。 當網路中的通信量過大時,路由器就來不及處理分組,於是要丟棄一些分組。 因此, IP 網路不保證分組的可靠地交付。
IP 網路提供的服務被稱為:
盡最大努力服務(best effort service) 五、最重要的兩個協議:IP 和 TCP
TCP 協議保證了應用程序之間的可靠通信,IP 協議控制分組在網際網路的傳輸,但網際網路不保證可靠交付.
在 TCP/IP 的應用層協議使用的是客戶伺服器方式。
客戶(client)和伺服器(server)都是指通信中所涉及的兩個應用進程。
客戶伺服器方式所描述的是進程之間服務和被服務的關系。
當 A 進程需要 B 進程的服務時就主動呼叫 B 進程,在這種情況下,A 是客戶而 B 是伺服器。
可能在下一次通信中,B 需要 A 的服務,此時,B 是客戶而 A 是伺服器。
注意:
使用計算機的人是「用戶」(user)而不是「客戶」(client)。
客戶和伺服器都指的是進程,即計算機軟體。
由於運行伺服器進程的機器往往有許多特殊的要求,因此人們經常將主要運行伺服器進程的
機器(硬體)不嚴格地稱為伺服器。
例如,「這台機器是伺服器。」 意思是:「這台機器(硬體)主要是用來運行伺服器進程(軟體)。」 因此,伺服器(server)一詞有時指的是軟體,但也有時指的是硬體。
六、總結
網際網路(Internet)是世界范圍的、互連起來的計算機網路,它使用 TCP/IP 協議族,並且它的前身是美 國阿帕網 ARPANET。
計算機網路的帶寬是網路可通過的最高數據率。
網際網路使用基於存儲轉發的分組交換,並使用 IP 協議傳送 IP 分組。
路由器把許多網路互連起來,構成了互連網。路由器收到分組後,根據路由表查找出下一跳路由器的
地址,然後轉發分組。
路由器根據與其他路由器交換的路由信息構造出自己的路由表。
IP 網路提供盡最大努力服務,不保證可靠交付。
TCP 協議保證計算機程序之間的、端到端的可靠交付。
在 TCP/IP 的應用層協議使用的是客戶伺服器方式。
客戶和伺服器都是進程(即軟體)。客戶是服務請求方,伺服器是服務提供方。
伺服器有時也指「運行伺服器軟體」的機器。
一、IP 網路是虛擬網路
IP 網路是虛擬的。在 IP 網路上傳送的是 IP 數據報(IP 分組)。
實際上在網路鏈路上傳送的是「幀」,使用的是幀的硬體地址(MAC 地址)。
地址解析協議 ARP 用來把 IP 地址(虛擬地址)轉換為硬體地址(物理地址)。
二、IP 地址的表示方法
IP 地址的表示方法有兩種:二進制和點分十進制。
IP 地址是 32 位二進制數字,為方便閱讀和從鍵盤上輸入,可把每 8 位二進制數字轉換成一個十進制數字,並 用小數點隔開,這就是點分十進制。
三、網際網路的域名
網際網路的域名分為: 頂級域名 二級域名 三級域名
四級域名
四、域名伺服器 DNS (Domain Name Server)
網際網路中設有很多的域名伺服器 DNS,用來把域名轉換為 IP 地址。
五、電子郵件
發送郵件使用的協議——簡單郵件傳送協議 SMTP (Simple Mail Transfer Protocol) 接收郵件使用的協議——郵局協議版本 3 POP3 (Post Office Protocol version 3) 注:郵件的傳送仍然要使用 IP 和 TCP 協議
六、統一資源定位符 URL (Uniform Resource Locator)
URL 用來標識萬維網上的各種文檔。
網際網路上的每一個文檔,在整個網際網路的范圍內具有惟一的標識符 URL。 URL 實際上就是文檔在網際網路中的地址。
七、超文本傳送協議 HTTP (HyperText Transfer Protocol) 萬維網客戶程序與伺服器程序之間的交互遵守超文本傳送協議 HTTP。
八、結束語
IP 地址是 32 位二進制數字。為便於閱讀和鍵入,也常使用點分十進制記法。 個人用戶上網可向本地 ISP 租用臨時的 IP 地址。
域名伺服器 DNS 把計算機域名轉換為計算機使用的 32 位二進制 IP 地址。 發送電子郵件使用 SMTP 協議,接收電子郵件使用 POP3 協議。
統一資源定位符 URL 惟一地確定了萬維網上文檔的地址。
超文本傳送協議 HTTP 用於萬維網瀏覽器程序和伺服器程序的信息交互。
超文本標記語言 HTML 使萬維網文檔有了統一的格式。
IP 電話不使用 TCP 協議。利用 IP 電話網關使得在普通電話之間可以打 IP 電話。
一、網際網路服務提供者 ISP (Internet Service Provider) 根據提供服務的覆蓋面積大小以及所擁有的 IP 地址數目的不同,ISP 也分成為不同的層次。
二、兩種通信方式
在網路邊緣的端系統中運行的程序之間的通信方式通常可劃分為兩大類:C/S 方式 和 P2P 方式
(Peer-to-Peer,對等方式)。
三、網際網路的核心部分
網路核心部分是網際網路中最復雜的部分。
網路中的核心部分要向網路邊緣中的大量主機提供連通性,使邊緣部分中的任何一個主機都能夠向其 他主機通信(即傳送或接收各種形式的數據)。
網際網路的核心部分是由許多網路和把它們互連起來的路由器組成,而主機處在網際網路的邊緣部分。
在網際網路核心部分的路由器之間一般都用高速鏈路相連接,而在網路邊緣的主機接入到核心部分則通 常以相對較低速率的鏈路相連接。
主機的用途是為用戶進行信息處理的,並且可以和其他主機通過網路交換信息。路由器的用途則是用 來轉發分組的,即進行分組交換的。
在網路核心部分起特殊作用的是路由器(router)。
路由器是實現分組交換(packet switching)的關鍵構件,其任務是轉發收到的分組,這是網路核心部分
最重要的功能。
四、電路交換
電路交換必定是面向連接的。 電路交換的三個階段:建立連接、通信、釋放連接。
五、網路的分類
不同作用范圍的網路
廣域網 WAN (Wide Area Network)
區域網 LAN (Local Area Network)
城域網 MAN (Metropolitan Area Network)
個人區域網 PAN (Personal Area Network)
從網路的使用者進行分類
公用網 (public network)
專用網 (private network)
用來把用戶接入到網際網路的網路
接入網 AN (Access Network),它又稱為本地接入網或居民接入網。
注:由 ISP 提供的接入網只是起到讓用戶能夠與網際網路連接的「橋梁」作用。
六、計算機網路的性能指標
速率
帶寬
吞吐量
時延(delay 或 latency)
傳輸時延(發送時延) —— 從發送數據幀的第一個比特算起,到該幀的最後一個比特發送完 畢所需的時間。
傳播時延 —— 電磁波在信道中需要傳播一定的距離而花費的時間。 注:信號傳輸速率(即發送速率)和信號在信道上的傳播速率是完全不同的概念。
處理時延 —— 交換結點為存儲轉發而進行一些必要的處理所花費的時間。
排隊時延 —— 結點緩存隊列中分組排隊所經歷的時延。 總時延 = 發送時延+傳播時延+處理時延+處理時延
時延帶寬積
利用率 —— 分為信道利用率和網路利用率。
信道利用率——某信道有百分之幾的時間是被利用的(有數據通過)。 網路利用率——全網路的信道利用率的加權平均值。 注:信道利用率並非越高越好。
七、網路協議(network protocol) 簡稱為協議,是為進行網路中的數據交換而建立的規則、標准或約定。其組成要素有以下三點:
語法 語義 同步
數據與控制信息的結構或格式 。
需要發出何種控制信息,完成何種動作以及做出何種響應。 事件實現順序的詳細說明。
八、實體、協議、服務和服務訪問點
實體(entity)——表示任何可發送或接收信息的硬體或軟體進程。 協議——是控制兩個對等實體進行通信的規則的集合。
在協議的控制下,兩個對等實體間的通信使得本層能夠向上一層提供服務。 要實現本層協議,還需要使用下層所提供的服務。
本層的服務用戶只能看見服務而無法看見下面的協議。
下面的協議對上面的服務用戶是透明的。
協議是「水平的」,即協議是控制對等實體之間通信的規則。
服務是「垂直的」,即服務是由下層向上層通過層間介面提供的。 同一系統相鄰兩層的實體進行交互的地方,稱為服務訪問點 SAP (Service Access Point)。
九、TCP/IP 的體系結構
路由器在轉發分組時最高只用到網路層,而沒有使用運輸層和應用層。
C. 計算機網路自學筆記:TCP
如果你在學習這門課程,僅僅為了理解網路工作原理,那麼只要了解TCP是可靠傳輸,數據傳輸丟失時會重傳就可以了。如果你還要參加研究生考試或者公司面試等,那麼下面內容很有可能成為考查的知識點,主要的重點是序號/確認號的編碼、超時定時器的設置、可靠傳輸和連接的管理。
1 TCP連接
TCP面向連接,在一個應用進程開始向另一個應用進程發送數據之前,這兩個進程必須先相互「握手」,即它們必須相互發送某些預備報文段,以建立連接。連接的實質是雙方都初始化與連接相關的發送/接收緩沖區,以及許多TCP狀態變數。
這種「連接」不是一條如電話網路中端到端的電路,因為它們的狀態完全保留在兩個端系統中。
TCP連接提供的是全雙工服務 ,應用層數據就可在從進程B流向進程A的同時,也從進程A流向進程B。
TCP連接也總是點對點的 ,即在單個發送方與單個接收方之間建立連接。
一個客戶機進程向伺服器進程發送數據時,客戶機進程通過套接字傳遞數據流。
客戶機操作系統中運行的 TCP軟體模塊首先將這些數據放到該連接的發送緩存里 ,然後會不時地從發送緩存里取出一塊數據發送。
TCP可從緩存中取出並放入報文段中發送的數據量受限於最大報文段長MSS,通常由最大鏈路層幀長度來決定(也就是底層的通信鏈路決定)。 例如一個鏈路層幀的最大長度1500位元組,除去數據報頭部長度20位元組,TCP報文段的頭部長度20位元組,MSS為1460位元組。
報文段被往下傳給網路層,網路層將其封裝在網路層IP數據報中。然後這些數據報被發送到網路中。
當TCP在另一端接收到一個報文段後,該報文段的數據就被放人該連接的接收緩存中。應用程序從接收緩存中讀取數據流(注意是應用程序來讀,不是操作系統推送)。
TCP連接的每一端都有各自的發送緩存和接收緩存。
因此TCP連接的組成包括:主機上的緩存、控制變數和與一個進程連接的套接字變數名,以及另一台主機上的一套緩存、控制變數和與一個進程連接的套接字。
在這兩台主機之間的路由器、交換機中,沒有為該連接分配任何緩存和控制變數。
2報文段結構
TCP報文段由首部欄位和一個數據欄位組成。數據欄位包含有應用層數據。
由於MSS限制了報文段數據欄位的最大長度。當TCP發送一個大文件時,TCP通常是將文件劃分成長度為MSS的若干塊。
TCP報文段的結構。
首部包括源埠號和目的埠號,它用於多路復用/多路分解來自或送至上層應用的數據。另外,TCP首部也包括校驗和欄位。報文段首部還包含下列欄位:
32比特的序號欄位和32比特的確認號欄位。這些欄位被TCP發送方和接收方用來實現可靠數據傳輸服務。
16比特的接收窗口欄位,該欄位用於流量控制。該欄位用於指示接收方能夠接受的位元組數量。
4比特的首部長度欄位,該欄位指示以32比特的字為單位的TCP首部長度。一般TCP首部的長度就是20位元組。
可選與變長的選項欄位,該欄位用於當發送方與接收方協商最大報文段長度,或在高速網路環境下用作窗口調節因子時使用。
標志欄位ACK比特用於指示確認欄位中的ACK值的有效性,即該報文段包括一個對已被成功接收報文段的確認。 SYN和FIN比特用於連接建立和拆除。 PSH、URG和緊急指針欄位通常沒有使用。
•序號和確認號
TCP報文段首部兩個最重要的欄位是序號欄位和確認號欄位。
TCP把數據看成一個無結構的但是有序的位元組流。TCP序號是建立在傳送的位元組流之上,而不是建立在傳送的報文段的序列之上。
一個報文段的序號是該報文段首位元組在位元組流中的編號。
例如,假設主機A上的一個進程想通過一條TCP連接向主機B上的一個進程發送一個數據流。主機A中的TCP將對數據流中的每一個位元組進行編號。假定數據流由一個包含4500位元組的文件組成(可以理解為應用程序調用send函數傳遞過來的數據長度),MSS為1000位元組(鏈路層一次能夠傳輸的位元組數),如果主機決定數據流的首位元組編號是7。TCP模塊將為該數據流構建5個報文段(也就是分5個IP數據報)。第一個報文段的序號被賦為7;第二個報文段的序號被賦為1007,第三個報文段的序號被賦為2007,以此類推。前面4個報文段的長度是1000,最後一個是500。
確認號要比序號難理解一些。前面講過,TCP是全雙工的,因此主機A在向主機B發送數據的同時,也可能接收來自主機B的數據。從主機B到達的每個報文段中的序號欄位包含了從B流向A的數據的起始位置。 因此主機B填充進報文段的確認號是主機B期望從主機A收到的下一報文段首位元組的序號。
假設主機B已收到了來自主機A編號為7-1006的所有位元組,同時假設它要發送一個報文段給主機A。主機B等待主機A的數據流中位元組1007及後續所有位元組。所以,主機B會在它發往主機A的報文段的確認號欄位中填上1007。
再舉一個例子,假設主機B已收到一個來自主機A的包含位元組7-1006的報文段,以及另一個包含位元組2007-3006的報文段。由於某種原因,主機A還沒有收到位元組1007-2006的報文段。
在這個例子中,主機A為了重組主機B的數據流,仍在等待位元組1007。因此,A在收到包含位元組2007-3006的報文段時,將會又一次在確認號欄位中包含1007。 因為TCP只確認數據流中至第一個丟失報文段之前的位元組數據,所以TCP被稱為是採用累積確認。
TCP的實現有兩個基本的選擇:
1接收方立即丟棄失序報文段;
2接收方保留失序的位元組,並等待缺少的位元組以填補該間隔。
一條TCP連接的雙方均可隨機地選擇初始序號。 這樣做可以減少將那些仍在網路中的來自兩台主機之間先前連接的報文段,誤認為是新建連接所產生的有效報文段的可能性。
•例子telnet
Telnet由是一個用於遠程登錄的應用層協議。它運行在TCP之上,被設計成可在任意一對主機之間工作。
假設主機A發起一個與主機B的Telnet會話。因為是主機A發起該會話,因此主機A被標記為客戶機,主機B被標記為伺服器。用戶鍵入的每個字元(在客戶機端)都會被發送至遠程主機。遠程主機收到後會復制一個相同的字元發回客戶機,並顯示在Telnet用戶的屏幕上。這種「回顯」用於確保由用戶發送的字元已經被遠程主機收到並處理。因此,在從用戶擊鍵到字元顯示在用戶屏幕上之間的這段時間內,每個字元在網路中傳輸了兩次。
現在假設用戶輸入了一個字元「C」,假設客戶機和伺服器的起始序號分別是42和79。前面講過,一個報文段的序號就是該報文段數據欄位首位元組的序號。因此,客戶機發送的第一個報文段的序號為42,伺服器發送的第一個報文段的序號為79。前面講過,確認號就是主機期待的數據的下一個位元組序號。在TCP連接建立後但沒有發送任何數據之前,客戶機等待位元組79,而伺服器等待位元組42。
如圖所示,共發了3個報文段。第一個報文段是由客戶機發往伺服器,其數據欄位里包含一位元組的字元「C」的ASCII碼,其序號欄位里是42。另外,由於客戶機還沒有接收到來自伺服器的任何數據,因此該報文段中的確認號欄位里是79。
第二個報文段是由伺服器發往客戶機。它有兩個目的:第一個目的是為伺服器所收到的數據提供確認。伺服器通過在確認號欄位中填入43,告訴客戶機它已經成功地收到位元組42及以前的所有位元組,現在正等待著位元組43的出現。第二個目的是回顯字元「C」。因此,在第二個報文段的數據欄位里填入的是字元「C」的ASCII碼,第二個報文段的序號為79,它是該TCP連接上從伺服器到客戶機的數據流的起始序號,也是伺服器要發送的第一個位元組的數據。
這里客戶機到伺服器的數據的確認被裝載在一個伺服器到客戶機的數據的報文段中,這種確認被稱為是捎帶確認.
第三個報文段是從客戶機發往伺服器的。它的唯一目的是確認已從伺服器收到的數據。
3往返時延的估計與超時
TCP如同前面所講的rdt協議一樣,採用超時/重傳機制來處理報文段的丟失問題。最重要的一個問題就是超時間隔長度的設置。顯然,超時間隔必須大於TCP連接的往返時延RTT,即從一個報文段發出到收到其確認時。否則會造成不必要的重傳。
•估計往返時延
TCP估計發送方與接收方之間的往返時延是通過採集報文段的樣本RTT來實現的,就是從某報文段被發出到對該報文段的確認被收到之間的時間長度。
也就是說TCP為一個已發送的但目前尚未被確認的報文段估計sampleRTT,從而產生一個接近每個RTT的采樣值。但是,TCP不會為重傳的報文段計算RTT。
為了估計一個典型的RTT,採取了某種對RTT取平均值的辦法。TCP據下列公式來更新
EstimatedRTT=(1-)*EstimatedRTT+*SampleRTT
即估計RTT的新值是由以前估計的RTT值與sampleRTT新值加權組合而成的。
參考值是a=0.125,因此是一個加權平均值。顯然這個加權平均對最新樣本賦予的權值
要大於對老樣本賦予的權值。因為越新的樣本能更好地反映出網路當前的擁塞情況。從統計學觀點來講,這種平均被稱為指數加權移動平均
除了估算RTT外,還需要測量RTT的變化,RTT偏差的程度,因為直接使用平均值設置計時器會有問題(太靈敏)。
DevRTT=(1-β)*DevRTT+β*|SampleRTT-EstimatedRTT|
RTT偏差也使用了指數加權移動平均。B取值0.25.
•設置和管理重傳超時間隔
假設已經得到了估計RTT值和RTT偏差值,那麼TCP超時間隔應該用什麼值呢?TCP將超時間隔設置成大於等於估計RTT值和4倍的RTT偏差值,否則將造成不必要的重傳。但是超時間隔也不應該比估計RTT值大太多,否則當報文段丟失時,TCP不能很快地重傳該報文段,從而將給上層應用帶來很大的數據傳輸時延。因此,要求將超時間隔設為估計RTT值加上一定餘量。當估計RTT值波動較大時,這個余最應該大些;當波動比較小時,這個餘量應該小些。因此使用4倍的偏差值來設置重傳時間。
TimeoutInterval=EstimatedRTT+4*DevRTT
4可信數據傳輸
網際網路的網路層服務是不可靠的。IP不保證數據報的交付,不保證數據報的按序交付,也不保證數據報中數據的完整性。
TCP在IP不可靠的盡力而為服務基礎上建立了一種可靠數據傳輸服務。
TCP提供可靠數據傳輸的方法涉及前面學過的許多原理。
TCP採用流水線協議、累計確認。
TCP推薦的定時器管理過程使用單一的重傳定時器,即使有多個已發送但還未被確認的報文段也一樣。重傳由超時和多個ACK觸發。
在TCP發送方有3種與發送和重傳有關的主要事件:從上層應用程序接收數據,定時器超時和收到確認ACK。
從上層應用程序接收數據。一旦這個事件發生,TCP就從應用程序接收數據,將數據封裝在一個報文段中,並將該報文段交給IP。注意到每一個報文段都包含一個序號,這個序號就是該報文段第一個數據位元組的位元組流編號。如果定時器還沒有計時,則當報文段被傳給IP時,TCP就啟動一個該定時器。
第二個事件是超時。TCP通過重傳引起超時的報文段來響應超時事件。然後TCP重啟定時器。
第三個事件是一個來自接收方的確認報文段(ACK)。當該事件發生時,TCP將ACK的值y與變數SendBase(發送窗口的基地址)進行比較。TCP狀態變數SendBase是最早未被確認的位元組的序號。就是指接收方已正確按序接收到數據的最後一個位元組的序號。TCP採用累積確認,所以y確認了位元組編號在y之前的所有位元組都已經收到。如果Y>SendBase,則該ACK是在確認一個或多個先前未被確認的報文段。因此發送方更新其SendBase變數,相當於發送窗口向前移動。
另外,如果當前有未被確認的報文段,TCP還要重新啟動定時器。
快速重傳
超時觸發重傳存在的另一個問題是超時周期可能相對較長。當一個報文段丟失時,這種長超時周期迫使發送方等待很長時間才重傳丟失的分組,因而增加了端到端時延。所以通常發送方可在超時事件發生之前通過觀察冗餘ACK來檢測丟包情況。
冗餘ACK就是接收方再次確認某個報文段的ACK,而發送方先前已經收到對該報文段的確認。
當TCP接收方收到一個序號比所期望的序號大的報文段時,它認為檢測到了數據流中的一個間隔,即有報文段丟失。這個間隔可能是由於在網路中報文段丟失或重新排序造成的。因為TCP使用累計確認,所以接收方不向發送方發回否定確認,而是對最後一個正確接收報文段進行重復確認(即產生一個冗餘ACK)
如果TCP發送方接收到對相同報文段的3個冗餘ACK.它就認為跟在這個已被確認過3次的報文段之後的報文段已經丟失。一旦收到3個冗餘ACK,TCP就執行快速重傳 ,
即在該報文段的定時器過期之前重傳丟失的報文段。
5流量控制
前面講過,一條TCP連接雙方的主機都為該連接設置了接收緩存。當該TCP連接收到正確、按序的位元組後,它就將數據放入接收緩存。相關聯的應用進程會從該緩存中讀取數據,但沒必要數據剛一到達就立即讀取。事實上,接收方應用也許正忙於其他任務,甚至要過很長時間後才去讀取該數據。如果應用程序讀取數據時相當緩慢,而發送方發送數據太多、太快,會很容易使這個連接的接收緩存溢出。
TCP為應用程序提供了流量控制服務以消除發送方導致接收方緩存溢出的可能性。因此,可以說 流量控制是一個速度匹配服務,即發送方的發送速率與接收方應用程序的讀速率相匹配。
前面提到過,TCP發送方也可能因為IP網路的擁塞而被限制,這種形式的發送方的控制被稱為擁塞控制(congestioncontrol)。
TCP通過讓接收方維護一個稱為接收窗口的變數來提供流量控制。接收窗口用於告訴發送方,該接收方還有多少可用的緩存空間。因為TCP是全雙工通信,在連接兩端的發送方都各自維護一個接收窗口變數。 主機把當前的空閑接收緩存大小值放入它發給對方主機的報文段接收窗口欄位中,通知對方它在該連接的緩存中還有多少可用空間。
6 TCP連接管理
客戶機中的TCP會用以下方式與伺服器建立一條TCP連接:
第一步: 客戶機端首先向伺服器發送一個SNY比特被置為1報文段。該報文段中不包含應用層數據,這個特殊報文段被稱為SYN報文段。另外,客戶機會選擇一個起始序號,並將其放置到報文段的序號欄位中。為了避免某些安全性攻擊,這里一般隨機選擇序號。
第二步: 一旦包含TCP報文段的用戶數據報到達伺服器主機,伺服器會從該數據報中提取出TCPSYN報文段,為該TCP連接分配TCP緩存和控制變數,並向客戶機TCP發送允許連接的報文段。這個允許連接的報文段還是不包含應用層數據。但是,在報文段的首部卻包含3個重要的信息。
首先,SYN比特被置為1。其次,該 TCP報文段首部的確認號欄位被置為客戶端序號+1最後,伺服器選擇自己的初始序號,並將其放置到TCP報文段首部的序號欄位中。 這個允許連接的報文段實際上表明了:「我收到了你要求建立連接的、帶有初始序號的分組。我同意建立該連接,我自己的初始序號是XX」。這個同意連接的報文段通常被稱為SYN+ACK報文段。
第三步: 在收到SYN+ACK報文段後,客戶機也要給該連接分配緩存和控制變數。客戶機主機還會向伺服器發送另外一個報文段,這個報文段對伺服器允許連接的報文段進行了確認。因為連接已經建立了,所以該ACK比特被置為1,稱為ACK報文段,可以攜帶數據。
一旦以上3步完成,客戶機和伺服器就可以相互發送含有數據的報文段了。
為了建立連接,在兩台主機之間發送了3個分組,這種連接建立過程通常被稱為 三次握手(SNY、SYN+ACK、ACK,ACK報文段可以攜帶數據) 。這個過程發生在客戶機connect()伺服器,伺服器accept()客戶連接的階段。
假設客戶機應用程序決定要關閉該連接。(注意,伺服器也能選擇關閉該連接)客戶機發送一個FIN比特被置為1的TCP報文段,並進人FINWAIT1狀態。
當處在FINWAIT1狀態時,客戶機TCP等待一個來自伺服器的帶有ACK確認信息的TCP報文段。當它收到該報文段時,客戶機TCP進入FINWAIT2狀態。
當處在FINWAIT2狀態時,客戶機等待來自伺服器的FIN比特被置為1的另一個報文段,
收到該報文段後,客戶機TCP對伺服器的報文段進行ACK確認,並進入TIME_WAIT狀態。TIME_WAIT狀態使得TCP客戶機重傳最終確認報文,以防該ACK丟失。在TIME_WAIT狀態中所消耗的時間是與具體實現有關的,一般是30秒或更多時間。
經過等待後,連接正式關閉,客戶機端所有與連接有關的資源將被釋放。 因此TCP連接的關閉需要客戶端和伺服器端互相交換連接關閉的FIN、ACK置位報文段。