第一章 計算機網路和因特網(Computer Networks and Internet)
首先在這里再次宣告一下,本系列博客內容參考北京交通大學軟體學院計算機網路課程的教學資料,參考教材為英文教材:《Computer Networking- A Top-Down Approach》,編者英文水平有限,如有部分翻譯不準確的地方,還請大家幫忙指正,本系列博客僅供計算機愛好者學習交流使用,未經允許禁止任何形式二改二傳及任何個人或商業用途,

第一章是一個介紹性章節,將會給大家一個全部內容的大綱和框架,
文章目錄
- 第一章 計算機網路和因特網(Computer Networks and Internet)
- 1.1 什么是因特網
- 1.1.1 "Nuts-and-Bolts"(描述什么是網路)
- 1.1.2 "Service" (描述什么是網路)
- 1.1.3 What is a protocol (什么是協議)
- 1.2 網路邊緣(Network Edge)
- 1.2.1 接入網
- 1.2.2 物理介質
- 1.3 網路核心
- 1.3.1 分組交換
- 存盤轉發傳輸(store-and-forward transmission)
- 排隊時延和分組丟失
- 1.3.2 電路交換(curcuit switching)
- 頻分復用--FDM
- 時分復用--TDM
- 分組交換與電路交換的對比(packet switching VS curcuit switching)
- 1.3.3 網路的網路(network of networks)
- 1.4 分組交換網中的時延、丟包和吞吐量
- 1.4.1 分組交換中的延時
- 處理時延
- 排隊時延
- 傳輸時延(發射時延)
- 傳播時延
- 1.4.2 排隊時延和丟包
- 1.4.3 端到端時延
- 利用Tranceroute程式加深認識
- 1.4.4 計算機網路中的吞吐量
- 1.5 協議層次及其服務模型
- 1.5.1 協議分層
- 1.5.2 封裝(encapsulation)
1.1 什么是因特網
什么是因特網?有許多方式回答這個問題,首先,我們可以用"nuts and bolts"模型來描述因特網,即就是最基本的軟體和硬體組成了因特網,其次,我們可以根據提供不同的功能的網路基礎設施來描述因特網,
那因特網都包含哪些東西呢?
類比于我們的社會:
| 社會中 | 網路中 |
|---|---|
| 使用網路的人,物體 | 網路組件 |
| 社會服務 | 網路服務 |
| 法律、規則 | 網路協議、標準 |

首先我們由"nuts-and-bolts"模型開始介紹什么是網路
1.1.1 “Nuts-and-Bolts”(描述什么是網路)
因特網是一個由數以百億的全世界相互連接的計算機所構成的計算機網路,不久之前,這些計算機基本上是傳統PC,Linux作業站,還有所謂的服務器組成的,然而,日漸增多的非傳統因特網終端例如筆記本電腦,智能手機,平板,聯網電視等等設備的接入,使得“計算機網路”這個名詞逐漸變得過時了,這些設備在專業術語中叫做主機(host)或者終端(end systems)

這些終端以通信鏈路(communication link)和分組交換機(packet switching)連接在一起進行通信,

這些鏈接的 傳輸速率(transmission rate) 是以位元/秒的單位來計算的,這里的傳輸速率就是我們熟知的 帶寬(bandwidth) ,發送終端會把需要發送的資料切開(segment),并給每一個部分加上一個首位元組(header bytes),這就是我們所說的 資料包(packet) ,資料包發送出去以后,需要經過 路由器(router) 或 鏈路層交換器(link-layer switch) 發送到資料包所需要發送的最終目的地,
端系統通過因特網服務提供商(Internet Service Provider, ISP) 接入因特網,
端系統、分組交換機和其他因特網部件都要運行一系列協議(Protocol),這些協議控制因特網中資訊的接收和發送
1.1.2 “Service” (描述什么是網路)
前面已經討論了因特網的組件,這邊我們用另外一個視角來看看什么是因特網:為應用程式提供服務的基礎設施,
首先這些應用程式被稱之為分布式應用程式(distributed application) (這些應用程式涉及多個相互交換資料的端系統)
與因特網相連的端系統提供了一個介面(socket interface) ,該介面規定了運行在一個端系統上的程式請求因特網基礎設施向運行在另一個端系統上的特定目的程式交付資料的方式,
我們做一個類比,假定A向B發送一封信,A肯定不能僅僅寫了信的內容就把它丟到窗外,A需要將信放入信封中,信封的中間寫上B的名字,地址,郵編,貼上郵票,然后投入郵箱,這樣郵政系統才能開始運作將信件送給B,從中我們可以看出,郵政系統有他的一套規則,叫“郵政服務介面”,那么因特網中的介面也是一樣的,
1.1.3 What is a protocol (什么是協議)
同樣我們做一個類比:
A向B開始通信,先向B說Hi,來請求開始交流
B回復A說Hi,表明B收到了A的請求,并同意開始交流
A問B問:“Got the time?”,向B請求當前時間這個資訊資源
B回復A說:“2:00”,B收到該請求,并回復(發送)給A當前時間“2:00”類比到計算機網路中:
A->B:請求建立連接
B->A:收到請求,同意建立連接
A->B:請求資源******
B->A:收到請求,發送該資源
上述例子很好類比到計算機網路中,這里直接給出其定義:(我把英文原文也貼在這里供大家參考)
協議(protocol)定義了在兩個或多個通信物體之間交換的報文的格式和順序,以及報文發送和接收一條報文或其他事件所采取的動作
1.2 網路邊緣(Network Edge)

我們更進一步的剖析網路,分為三個部分:
| 第一部分 | 網路邊緣(network edge) | 應用程式和主機 |
| 第二部分 | 接入網,物理介質 | 有線和無線鏈接 |
| 第三部分 | 網路核心(network core) | 相互連接的路由器 |
回顧前一節中的術語,通常把與因特網相連接的計算機和其他設備稱為端系統,由于他們位于因特網的邊緣,所以才被稱之為端系統,
1.2.1 接入網
接入網是指將端系統物理連接到其邊緣路由器(edge router) 的網路,邊緣路由器是端系統到任何其他遠程端系統的路徑上的第一臺路由器
1.2.2 物理介質
設備發送資料時,通過跨越一種物理媒介(physical medium) 傳播電磁波或光脈沖來發送,
1.3 網路核心

上圖中紅色部分,為網路核心部分
這里有一個最基本的問題:
資料時如何在這樣的網路中傳輸的?
有兩種方法:
- 分組交換(packet switching)
- 線路交換(circuit switching)
1.3.1 分組交換
在各個網路應用中,端系統彼此交換報文(message) ,報文能夠包含協議設計者需要的任何東西,包括資料或者控制功能,為了從源端系統向目的端系統發送一個報文,源將長報文劃分為較小的資料塊,稱之為分組(packet) ,在源和目的地之間,每個分組都通過通信鏈路和分組交換機(packet switch) 傳送,

存盤轉發傳輸(store-and-forward transmission)
存盤轉發傳輸是指在交換機能夠開始向輸出鏈路傳輸該分組的第一個位元之前,必須接收到整個分組,
傳輸時延(transmission delay)
通過由N條速率均為R的鏈路組成的路徑(中間會有N-1臺路由器),從源到目的地發送一個分組,我們所看到的時延應該是:(這里忽略傳播時延)
d
e
l
a
y
=
N
L
R
delay=N\frac{L}{R}
delay=NRL?
排隊時延和分組丟失
每臺分組交換機有多條鏈路與之相連,對于每條相連的鏈路,該分組交換機具有一個輸出快取(output buffer) ,如果到達該分組需要傳輸的某條鏈路,但是恰好該鏈路正在傳輸其他的分組,該分組必須要在快取中等待,因此就產生了排隊時延(queuing delay) 這個時延取決于擁塞程度,由于快取空間的大小有限,如果該分組到達分組交換機時,快取已經滿了,那么這個分組將會丟失,也稱為分組丟失(丟包)

1.3.2 電路交換(curcuit switching)
在分組交換中,傳輸的所用的線路是不會預留的,會話的報文按需使用這些資源,所以就不能避免排隊接入通信線路,
而電路交換就不一樣了,他會提前預留好所需傳輸的線路,
那么,如何進行預留呢?
有兩種方式進行電路交換網路中的復用(預留)
- 頻分復用(Frequency-Division Multiplexing, FDM)
- 時分復用(Time-Division Multiplexing, TDM)
頻分復用–FDM
鏈路的頻譜由跨越鏈路創建的所有連接共享,在連接期間鏈路為每條連接專用一個頻段,該頻段的寬度稱為帶寬(bandwidth) ,

時分復用–TDM
對于一條TDM鏈路,時間被劃分為固定期間的幀(Frame) ,并且每個幀被劃分為固定數量的間隙(slot) ,當網路連接時,網路在每個幀中為該連接指定一個間隙,這些間隙就像餐館里的預留VIP包房一樣,只供一個用戶使用

分組交換與電路交換的對比(packet switching VS curcuit switching)
這里我們用一個例子來說明,多個用戶共享一個1Mbps的鏈路,用戶當使用網路的時候,以100kbps的速率傳輸,只有10%的時間是在使用網路進行傳輸的,
那么,如果使用電路交換:
由于線路是預留的,所以一共只能有
n u m O f U s e r s = 1 M b / s 100 k b / ( s ? u s e r ) = 10 numOfUsers = \frac{1Mb/s}{100kb/(s·user)} = 10 numOfUsers=100kb/(s?user)1Mb/s?=10
如果使用的是分組交換:
由于線路不會預留給用戶,我只需要保證總傳輸速率不大于10Mb/s即可,當用戶數量達到35個的時候,10個用戶同時在線的概率為:
p = ( 10 35 ) ( 0.1 ) 10 ( 1 ? 0.1 ) 35 ? 10 ≈ 0.004 p=\binom{10}{35}(0.1)^{10}(1-0.1)^{35-10}\approx0.004 p=(3510?)(0.1)10(1?0.1)35?10≈0.004

1.3.3 網路的網路(network of networks)

粗略的分層:
第一層往往是比較大范圍的ISP

第二層往往是小范圍(區域性的)ISP

第三層就是最接近終端的ISP,區域更加小

最后就是終端了,所以,一個終端到另一個終端,可能需要經過很遠的“路程”

1.4 分組交換網中的時延、丟包和吞吐量
理想情況下,我們希望因特網能夠在任意兩個端系統之間隨心所欲地瞬間傳輸資料而沒有任何丟失,然而這是一個幾乎不可能實作的目標,
相反的是,計算機網路必定要限制在端系統之間的吞吐量(每秒能夠傳送的資料量),在端系統之間引入時延,而且實際上分組丟失也是很常見的
1.4.1 分組交換中的延時
資料從一臺主機傳輸到另外一臺主機的歷程中,會經歷幾個不同型別的延時,大致為以下幾種:
- 節點處理時延(nodal processing delay)
- 排隊時延(queuing delay)
- 傳輸時延(transmission delay)
- 傳播時延(propagation delay)
以上這些時延總和為節點總時延(total nodal delay)
d
n
o
d
a
l
=
d
p
r
o
c
+
d
q
u
e
u
e
+
d
t
r
a
n
s
+
d
p
r
o
p
d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop}
dnodal?=dproc?+dqueue?+dtrans?+dprop?
處理時延
檢查分組首部和決定該分組導向何處所需的時間為處理時延 的一部分,當然處理時延還包括其他部分,比如檢查位元級別差錯所需的時間,
這里我們做一個類比,把兩個端系統相互傳輸資料的程序類比于寄信
這里的處理時延就相當于郵局在處理需要發出郵件的時間,郵局需要知道這封郵件需要寄給誰,從而決定如何派送該郵件

排隊時延
在佇列中,當分組在鏈路上等待傳輸時,需要經受排隊時延 ,該時延取決于路由器的等級和網路的擁塞程度,
繼續類比,這個程序好比于信件在中轉站里面等待發送的時延

傳輸時延(發射時延)
用L表示該分組的長度,用R bps表示從路由器A傳輸到路由器B的鏈路傳輸速率,傳輸時延就是在傳輸程序中所需的時間,
這個是將所有分組的位元推向鏈路所需要的時間,所以我覺得這個名字起得不好,我給它取名叫發射時延
d
t
r
a
n
s
=
L
R
d_{trans}=\frac{L}{R}
dtrans?=RL?
繼續類比,這個程序所需的時間相當于把郵件分配給派送員的程序所花的時間,

傳播時延
當一個位元唄推向鏈路,位元需要在鏈路上傳送給路由器B,從鏈路起點到路由器B傳播所花時間為傳播時延 ,傳播速率取決于鏈路的物理介質,大致為2×10^8 ~ c(光速)假設A和B之間的距離為d,傳播速率為s,則:
d
p
r
o
p
=
d
s
d_{prop}=\frac{d}{s}
dprop?=sd?
還是類比一下:這里相當于郵件在運送程序中所需的時間

1.4.2 排隊時延和丟包
排隊時延其實在前面已經討論過了,這里我們討論一下什么時候排隊時延大,什么時候小?
這個主要取決于流量到達該佇列的速率、鏈路的傳輸速率和到達流量的性質(流量是周期性到達還是突發形式到達),
令a為分組到達該佇列的平均速率(單位:pkt/s)R為傳輸速率,假定所有的分組都是L位元,那么到達佇列的平均速率應該為
L
a
b
p
s
La bps
Labps最后,假定佇列足夠大,可以容納無限量的位元,比率
L
a
/
R
La/R
La/R被稱之為流量強度(traffic intensity)

| 流量強度 | 效果 | I/O |
|---|---|---|
| L a / R ≈ 0 La/R\approx0 La/R≈0 | 排隊時延非常小 | input<output |
| L a / R ? > 1 La/R -> 1 La/R?>1 | 時延將越來越大 | input->output |
| L a / R > 1 La/R > 1 La/R>1 | 越來越多的資料到達路由器,排隊時延將趨近于無窮 | input>output |
在上述討論是基于理想情況,路由器的緩沖佇列無限大的時候,但是實際情況中,路由器的佇列是有限大的,所以,如果一個分組到達該路由器時,發現該路由器的佇列滿了,該分組將會被丟棄(drop) ,分組就丟失(lost) 了, 這就是所說的丟包 ,
1.4.3 端到端時延
前面一直討論的是節點時延,也就是單臺路由器的時延,現在我們討論一下總時延,假定兩個主機之間有
N
?
1
N-1
N?1臺路由器,再假設網路無擁塞的(排隊時延微不足道),每臺路由器和源主機上的處理時延都是
d
p
r
o
c
d_{proc}
dproc?,每臺路由器和源主機的輸出速率都是R bps,每條鏈路的傳播時延是
d
p
r
o
p
d_{prop}
dprop?,那么節點時延累加起來就是端到端時延:
d
e
n
d
?
e
n
d
=
N
(
d
p
r
o
c
+
d
t
r
a
n
s
+
d
p
r
o
p
)
d_{end-end}=N(d_{proc}+d_{trans}+d_{prop})
dend?end?=N(dproc?+dtrans?+dprop?)
利用Tranceroute程式加深認識
用一個例子,追蹤路由從源主機(gaia.cs.umass.edu)到(cis.poly.edu)輸出為以下:

這6列資料時這樣組成的
| 第一列 | 第二列 | 第三列 | 第四列 | 第五列 | 第六列 | |
|---|---|---|---|---|---|---|
| 舉例 | 1 | cs-gw | (128.119.240.254) | 1.009ms | 0.899ms | 0.993ms |
| 解釋 | 路徑上路由器的編號 | 路由器名稱 | 路由器地址 | 實驗1往返時延 | 實驗2往返時延 | 實驗3往返時延 |
最后3列是3次實驗的往返時延,如果源從任何給定路由器接收到的報文少于3條(丟包造成的),Traceroute在該路由器號碼后面放一個星號,并向那臺路由器報告少于3次往返時間,
1.4.4 計算機網路中的吞吐量
考慮從A到B跨越計算機網路傳送一個大檔案,在任何瞬間的瞬時吞吐量(instantaneous throughput) 是主機B接收到了該檔案的速率,
如果該檔案又F位元組成,主機B接收到了所有F位元用了T秒,則檔案的平均吞吐量(average throughput) 是
F
/
T
b
p
s
F/T bps
F/Tbps
為了深入理解,我們還是舉一個例子,一個服務器一個客戶端,中間兩條鏈路和一個路由器,
R
s
R_s
Rs?表示服務器與路由器之間的鏈路速率,
R
c
R_c
Rc?表示路由器與客戶之間的鏈路速率,那么,整個網路的吞吐量是多少?
我們可以想象位元(資料)是流體,通信鏈路是管道,如果
R
s
<
R
c
R_s<R_c
Rs?<Rc?,則在給定的吞吐量
R
s
b
p
s
R_s bps
Rs?bps的情況下,該服務器注入的位元將順暢的通過路由器,并以
R
s
R_s
Rs?的速率到達客戶,
如果
R
s
>
R
c
R_s>R_c
Rs?>Rc?,路由器只能以其最大能力,用
R
c
R_c
Rc?的速率發送,吞吐量為
R
c
R_c
Rc?,同時,路由器內的資料會不斷積壓,
因此,對于這樣簡單的網路,吞吐量為
m
i
n
R
c
,
R
s
min{R_c,R_s}
minRc?,Rs?

也就是說,吞吐量是瓶頸鏈路(bottleneck link) 的傳輸速率,
比如我要下載一個
F
=
32
×
1
0
6
F=32×10^6
F=32×106位元的一個檔案,服務器
R
s
=
2
M
b
p
s
R_s=2Mbps
Rs?=2Mbps,客戶端
R
c
=
1
M
b
p
s
R_c=1Mbps
Rc?=1Mbps,那么下載所需時間就是32秒,(當然這里只是一個理想狀況下的近似值)
如果說服務器到客戶端有多個路由器和鏈路,其實效果也一樣,吞吐量還是取決于傳輸速率最小的那個

接下來考慮這樣一種情況:
有10臺服務器和10個客戶與計算機網路核心相連,同時發生10個下載,中間瓶頸鏈路的傳輸速率為R,所有服務器接入鏈路速率相同為
R
s
R_s
Rs?,客戶接入鏈路有相同速率
R
c
R_c
Rc?,現在的吞吐量該如何衡量?
如果R比
R
s
R_s
Rs?和
R
c
R_c
Rc?大得多(比如100多倍),那么每個下載的吞吐量仍然是
m
i
n
R
c
,
R
s
min{R_c,R_s}
minRc?,Rs?,
如果R與其具有相同的數量級怎么辦?假定
R
s
=
2
M
b
p
s
,
R
c
=
1
M
b
p
s
,
R
=
5
M
b
p
s
R_s=2Mbps, R_c=1Mbps, R=5Mbps
Rs?=2Mbps,Rc?=1Mbps,R=5Mbps并且公共鏈路部分下載速率平等劃分,這時候每個下載的瓶頸就不再位于接入網中了,而是在于共享鏈路,每個下載的吞吐量為
R
10
\frac{R}{10}
10R?

1.5 協議層次及其服務模型
1.5.1 協議分層
所有層的協議被稱為協議堆疊(protocol stack) ,由以下幾層組成:物理層(physical layer)、鏈路層(link layer)、網路層(network layer)、運輸層(transport layer)、應用層(application layer)

- 應用層
支持網路應用
- 傳輸層
處理資料傳輸方向
- 網路層
幫助規劃資料在網路中從源頭到目的地的傳輸路徑
- 鏈路層
資料在相鄰網路元素之間的傳輸
- 物理層
使用什么樣的介質來傳輸資料

1.5.2 封裝(encapsulation)
這里我們先講一個例子,還是A向B寄信,A寫好信件,需要先用信封把信紙包起來,并且在信封上寫上相關資訊,然后放到發件箱中,該地區(比如AA省)郵局作業人員會再次將其包裝,再寫上相關資訊并發送給B所在的地區(比如BB省),BB省的郵局作業人員會拆開最外面的封裝,也就是省級的,然后才能看到收件人的資訊并發送給B,B收到信件以后,也是要先拆開信封,才能看到其中的信件,
可以看到,信件這個系統是一層一層的,寄出的時候,會一層一層的包裝,然后就是目的地的一層一層的揭開包裝,目標用戶才能看到其中的內容,那么計算機網路也是一樣的,
發送端發送一條訊息之后(此訊息也稱為應用層報文(application-layer message) ),傳送給下一層,也就是運輸層,運輸層會再加上一個運輸層報文(transport-layer segment),也就是運輸層報文封裝了應用層內容,接下來就是不斷地添加,依次是網路層資料報(network-layer datagram),鏈路層幀(link-layer frame),在每一層都有兩種型別的欄位,一個是首部欄位,也就是本層添加的欄位,第二是有效荷載欄位(payload field)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225856.html
標籤:其他
上一篇:我和我的智能車


