主頁 > 軟體設計 > 江湖救急筆記——計算機網路

江湖救急筆記——計算機網路

2022-01-02 08:19:29 軟體設計

宣告:

·以功利的角度記筆記,有些太難/自己覺得考不到/太累的懶得記的點會記得比較簡單!

·能力有限,并不能100%保證正確,如果有不同的看法和認識一定要自己思考!

·適用于本科期末考,應該是比考研窄不少的

·word檔案粘貼的,估計會有一些奇奇怪怪的地方……

目錄

第一章——概述.. 3

一、基礎概念.. 3

1.計算機網路定義.. 3

2.P2P. 3

二、網路硬體.. 3

1.傳輸技術.. 3

2.按范圍分類.. 3

3.包交換/分組交換.. 4

三、網路軟體.. 4

1.協議層次結構.. 4

2.層次設計面臨的問題.. 4

3.面向連接與面向無連接.. 4

4.服務質量.. 5

5.服務與協議的關系.. 5

6.參考模型.. 6

四、網路標準化.. 7

1.802協議.. 7

第二章——物理層.. 7

一、資料通信理論基礎.. 7

1.帶寬bandwidth. 7

2.信道的最大資料速率計算.. 7

二、有導向的/引導性傳輸介質.. 8

三、公共交換電話網路PSTN. 8

1.調制解調器Modem的調制方式.. 8

2.非對稱數字用戶線ADSL. 8

3.干線與復用.. 9

4.交換.. 9

第三章——資料鏈路層.. 11

一、成幀(Framing).. 11

1.位元組填充——位元組填充的標志位元組法.. 11

2.位填充——位元填充的標志位元法.. 11

3.位元組計數法.. 12

4.物理層編碼違例.. 12

二、錯誤檢測和糾正.. 12

1.回圈冗余校驗CRC. 12

三、基本鏈路協議.. 13

0.實用的停等協議思路.. 13

1.烏托邦式單工協議.. 13

2.一種單工停等協議.. 14

3.單工且有噪聲的協議.. 14

四、滑動視窗協議.. 15

1.捎帶確認.. 15

2.發送與接收視窗.. 15

3.一位滑動視窗協議.. 15

4.回退N協議.. 16

第四章——介質訪問子層.. 17

一、靜態與動態信道分配.. 17

1.靜態信道分配.. 17

2.動態信道分配的假設前提.. 17

二、多路訪問協議.. 18

1.ALOHA(先說后聽).. 18

2.載波偵聽多路訪問協議CSMA(先聽后說).. 18

3.沖突避免多路訪問MACA. 19

三、以太網.. 20

1.二進制指數后退演算法CSMA/CD. 20

2.曼徹斯特編碼.. 20

3.802.3幀格式.. 20

四、WLAN. 21

1.隱藏站和暴露站.. 21

2.802.11 MAC子層協議.. 22

五、資料鏈路層交換.. 22

1.網橋.. 22

2.網橋演算法.. 23

3.生成樹網橋.. 23

4.各層的交換設備.. 24

第五章——網路層.. 25

一、網路層設計要點.. 25

1.無連接服務實作——資料報網路.. 25

2.面向連接服務實作——虛電路網路.. 25

第七章——應用層.. 26

一、DNS——域名系統.. 26

1.基礎定義.. 26

2.域名的格式.. 26

3.域名資源記錄.. 27

4.域名服務器.. 28

二、HTTP——超文本傳輸協議.. 28

1.方法.. 29

2.回應組的狀態碼.. 29

3.訊息頭.. 30

第一章——概述

一、基礎概念

1.計算機網路定義

·表示一組通過單一技術相互連接的自主計算機集合

2.P2P

對等通信技術:每個人可以和群體中的其他人通信,且沒有固定的客戶端和服務器的分工

二、網路硬體

1.傳輸技術

·點到點網路/點到點鏈路:使用一條鏈路將一對單獨的機器連接起來,資料包在傳輸程序中可能會經過多個中間機器,網路中也可能存在多條不同長度的路徑

·廣播網路/廣播式鏈路:通信信道被所有機器共享,任何一臺機器發出的資料包都可以被任意其他機器收到,資料包使用地址欄位指定接收方,只有檢查地址欄位并發現自己是目的地的機器才會處理此資料包

·單播(unicasting):只有一個發送方和一個接收方

·廣播(boradcasting):在地址欄位中使用一個特殊的地址,使得網路中每一臺機器都會接收并處理該資料包

·組播(multicating):有些廣播系統支持給一組機器發送資料包

2.按范圍分類

·個域網PAN:范圍1m,圍繞著個人進行通信

典型:藍牙

·局域網LAN:范圍10m~1km,私有網路,一般范圍覆寫一座建筑及附近一些區域

典型:公司使用的局域網稱為企業網路,以及無線局域網wifi(IEEE 802.11),有線局域網中的以太網Ethernet(IEEE 802.3)

·城域網MAN:范圍10km,覆寫一個城市

典型:有線電視

·廣域網WAN:范圍100km~1000km,國家級、地區級、大陸級的網路

·互聯網Internet:范圍10000km,行星級

3.包交換/分組交換

資料的各個包立刻發送且不必走同一條路

三、網路軟體

1.協議層次結構

·對等物體:不同機器上構成相應層次的物體

·協議protocol:通信雙方就如何進行通信的一種約定,它們連接對等物體,協議是水平方向的,同一層應當使用相同的協議

·介面interface:介面定義了層與層間,下層向上層提供哪些操作和服務,服務是垂直方向的

·分層的意義:簡化設計,各層間獨立,某一個層更改不會影響其它層,

2.層次設計面臨的問題

·差錯控制:進行檢錯、糾錯,保證可靠性

·流量控制:保證發送方的發送速度不會淹沒較慢的讀取方,或者避免網路中存在超出其傳遞能力的資料,

如果網路中的流量過大,網路的能力無法傳遞所有資料包,就會發生擁塞,

3.面向連接與面向無連接

·面向連接的服務

類似于電話系統,先建立連接在通信,各分組不需要攜帶目的結點的地址

有時建立連接需要發送方、接收方、子網一起協商

·可靠性好,但協議復雜,通信效率不高

·面向無連接的服務

·報文:報文在不同的背景關系中稱呼不同,資料包/包是網路層的報文,

在面向無連接的服務中,每個報文都攜帶完整的目標地址,每個報文都由系統中的中間結點路由

·可靠性不好,但協議簡單,效率高

·存盤-轉發交換:中間節點必須將報文(包)的所有資訊接收后才能將資料傳給下一個節點

·直通式交換:在報文還沒有被全部接收完畢前就向下一個節點傳輸

4.服務質量

可靠的服務從不丟失資料,通常這需要接收方向發送方確認每一個收到的報文,當然我們可以不進行確認,確認與否和面向連接與否可以進行組合,根據實際情況選擇合適的,

5.服務與協議的關系

·服務:某一層向它上一層提供的一組操作,服務會定義這一層需要提供什么樣的功能給用戶,但是并不會在乎如何實作

·協議:通信雙方就如何進行通信的一種約定,規定了對等物體之間交換的資料包或報文的格式和含義,

·服務是縱向的、抽象的,它指的是一層向另一層提供的可用操作;協議是橫向的、具體的,對等物體要通過協議來實作由服務定義的操作

6.參考模型

··OSI模型

·明確了3個主要概念:服務、介面、協議,并且定義清晰

·協議有很好的隱藏性,服務與協議的分離

·產生在協議發明之前

·分為7層

應用層:包含用戶所需的協議

表示層、會話層:已棄用,分別用于抽象出統一的資料格式和允許用戶建立有規則的會話

傳輸層:接收資料,必要時切割資料,將處理完的資料傳遞(給網路層),這一層需要消除網路層的不穩定性,本層為真正端到端的層,

網路層:主要功能為控制子網的運行,提供獨立于路由器的服務

資料鏈路層:糾正物理層的錯誤,將原始的傳輸設施變成沒有漏檢的傳輸錯誤的通路

物理層:在信道上正確傳輸原始的位元

·TCP/IP模型

·沒有明確區分:服務、介面、協議

·產生在協議發明之后

·共4層:

網路層:無連接(IP)

傳輸層:面向連接(TCP)和無連接(UCP)

·應用層、傳輸層、互聯網層、網路接入層

四、網路標準化

國際標準化組織ISO,國際電信聯盟ITU

1.802協議

IEEE下屬802委員會制定的標準

最重要的幾個:

·802.3:以太網

·802.11:無線局域網

·802.15:個域網(如藍牙)

·802.16:寬帶無線

第二章——物理層

一、資料通信理論基礎

1.帶寬bandwidth

帶寬有多種不同的意思

模擬信號中的帶寬:以Hz度量,指在傳輸程序中振幅不會明顯減弱的頻率的寬度

數字信號中的帶寬:以bps(位元/秒)度量,表示一個信道的最大資料速率

2.信道的最大資料速率計算

一般的語音信道是4000Hz

·尼奎斯特定理/奈奎斯特定理

該定律用于無噪聲、有限帶寬的信道

一個帶寬為H(單位Hz)的低通濾波器,信號包含V個離散等級,則有:

最大通信速率 = 2H log2V (bps位元/秒)

·香農定理

在帶寬為H的有噪聲信道中,信噪比為S/N(常用dB表示,1dB=10lgS/N,S/N相對較大,表明有效信號一般占比大),則信道的最大傳輸率:

最大位元率 = H log2(1+S/N) (bps 位元/秒)

*S/N即signal-to-noise ratio

二、有導向的/引導性傳輸介質

·磁介質:如磁帶

·雙絞線:3類、5類、6類線

·同軸電纜

·光纖:

·全反射

·多模光纖:同時傳出多個信號,通過角度不同或者多個波長實作

·光纖與銅線的比較

光纖的優點:

帶寬高、衰減小、抗干擾、輕、安全性高

幾乎無限的帶寬

光纖的缺點:

(曾經)技術陌生,易損壞

雙向傳輸時需要兩根光纖,或一根光纖上劃分兩個頻段

成本高

三、公共交換電話網路PSTN

1.調制解調器Modem的調制方式

Modem,調制解調器,俗稱“貓”,

Modem是用于將數字信號和模擬信號進行轉化的設備

·調幅:有振幅處代表1,無振幅處代表0

·調頻:高頻處代表1,低頻處代表0(也可以反過來,協商好對應頻率代表的意義就行)

2.非對稱數字用戶線ADSL

將1.1MHz的頻譜分割為256份,將信道0分給簡單老式電話服務POTS,信道1~5空閑以防止語音信號與資料信號干擾,其余信道中一條用于上行流控制,一條用于下行流控制,剩下的則可以按要求分配給上行流和下行流,

我們可以對半分,但是實際上我們經常將80%~90%分給下行信道,比如將32條信道用于上行

3.干線與復用

我們希望多個用戶、多個電話共享干線,于是就有了各種復用方法

要注意這些都是在2.5里

·頻分復用FDM

將頻譜分成幾個頻段,每個用戶占有各自的頻段進行通訊

不同頻段之間應該有一些空間分隔空間,比如若干個信道,每個需要3100Hz,但我們可能需要給每個信道分配4000Hz,多出來的部分稱為保護帶

·波分復用WDM

類似于FDM,不過我們分配的是波長,不同波長的光匯成一束傳出,然后通過一個特殊的核就能濾掉其他波長,

波分復用可以認為是光的頻分復用,對于光來說波長和頻率是一體的,

·時分復用TDM

將信道用于傳輸的時間分片,每個用戶可以分得一個時間片,并在占有的時間片內獲得全部帶寬,

4.交換

“交換是指在需要運送信號時,把一些功能單元、傳輸通路或電信電路互連起來的程序”

·電路交換

系統中的交換機在發出呼叫后,尋找呼叫方到接收方的一條物理路徑,從而建立連接,并在這條路徑上傳輸,

它有連接建立和連接釋放的程序,而在資料傳輸的程序中不間斷地傳完

·包交換/分組交換

將報文切割為多個資料包,然后每個資料包都各自前往目的地,這個程序中,會有多個資料包同時向目的地傳輸,各個資料包的傳輸路徑也會不同,這也會導致接收的順序與原始順序不一致,

使用存盤-轉發傳輸,一個包要被中間結點完全接收才能開始向下一個節點傳輸,這也是為什么在下面的例子中,某一個包還是不會重疊的,

分組沒有固定的連接建立、資料傳送、連接釋放的程序,一個包成功從A發送到B就會發送下一個包,而前一個包已經開始從B發送到C了,所以一大段報文的的不同部分可能同時處于網路中,它們的發送時間是重疊的,

·報文交換?

其實并沒有講啊,相對于包交換,報文交換一次發送一個報文,報文是具有完整意義的一段資料,但包可能是報文打散的形態,

·交換的比較

電路交換

包交換

連接建立?

需要

不需要

專用物理路徑?

各個包的路徑?

相同

不相同

包按序到達?

交換機崩潰?

致命

不致命

可用帶寬大小?

固定

不固定

可能擁塞的時間

建立時

每個包都有擁塞的可能

存盤-轉發傳輸?

不是

總得來說:

電路交換:需要建立一個專用且固定的連接,保證各個包在相同的路徑上按序傳輸,路徑上的交換機不能崩潰,帶寬大小固定

包交換:不需要建立連接,各個包獨自前往目的地,不保證按序,某一個交換機崩潰不一定會影響大局,且使用存盤-轉發傳輸

第三章——資料鏈路層

·可靠:資料鏈路層的主要功能之一是糾正物理層的錯誤,進行差錯控制

·高效:協調收發雙方的流量——流量控制,是實作高效的手段

網路層的包對應資料鏈路層的凈荷域(亦稱有效載荷),即資料鏈路層會在網路層傳下來的資料上套一層殼

是資料鏈路層的幀由:幀頭、有效載荷、幀尾,構成

一個包可能分為多個幀

“幀”這個概念屬于資料鏈路層

一、成幀(Framing)

要能夠確定幀的邊界

1.位元組填充——位元組填充的標志位元組法

幀與幀之間用特殊的標志位元組分割

但我們通常找不到一個所謂“特殊的位元組”,所以我們使用類似轉義符的機制

例如:ESC為轉義字符,FLAG為標志位元組,這兩個位元組出現在內容中就需要在前面加上ESC轉義

2.位填充——位元填充的標志位元法

以01111110(6個連續的1)標識每一幀的開始和結束,然后在資料中的連續5個“1”位后插入一個“0”,這樣就只有開始和結束時才會有連續6個1

解碼時要將連續5個1之后的0去除

3.位元組計數法

發送方發送時,用幀的第一個位元組來代表幀的長度

4.物理層編碼違例

物理層中,用高-低電平對代表“1”,低-高電平對代表“0”,然后幀的邊界就可以用高-高和低-低代表了,當然這只是一種例子,

二、錯誤檢測和糾正

海明碼建議參見修煉筆記

1.回圈冗余校驗CRC

發送:

1.在原資訊的末尾添加若干位“0”,位數等于你的生成器(Generator)的位數-1;

2.用添“0”后的原資訊除以生成器,這個除法和十進制除法不太一樣,結果上“1”還是“0”取決于你上一步的結果的最高位是“1”還是“0”(這里所說的結果是不包括最高位的,最高位顯然是0),原本除法中的減法操作轉變為異或操作,

3.最后的結果在左側添“0”,直到位數達到第1步中添加的“0”的位數,最后再將這些冗余位接在原資訊末尾,

這種運算方式很重要!

很重要!

很重要!

接收:

用接收端接收的資訊除以和發送端相同的生成器(Generator),如果余數不為0則一定出錯了;如果余數為0,原資訊的正確率是接近100%的(具體的正確率與生成器的選擇相關),但并不是100%正確的檢查

且這種方法無法糾錯,只能丟棄出現差錯的幀并重傳了

有可能給你一個多項式讓你CRC運算,這個時候我們要根據從n次項到0次項的系數來確定這個二進制數,

三、基本鏈路協議

0.實用的停等協議思路

ACK:代表獲得了正確的資料,ACK i代表正確接收了編號為i的資料

NAK:代表獲取資料出現了問題

A發給B資料,如果B順利接收且無誤,那么B就會回復ACK i,A繼續發送下一個資料;

A發給B資料,如果B順利接收但出錯了,那么B就會回復NAK i,A就會重發;

A發給B資料,如果資料丟失了,B未能接收,A就不會接到B的回復,A中有一個計時器,一段時間后仍然沒有得到B的回復就會重傳;

A發給B資料,如果B順利接收但回復丟失了,那么A仍然會重發(因為A并不能分辨是資料丟失還是回復丟失),這時B會丟棄重發的資料(因為B已經接收到了),并再次發送ACK i

1.烏托邦式單工協議

怎么說呢……

發送方不斷地從網路層獲得資料,不斷地發送

接收方阻塞在“等待有資料到來的信號”這一步,接收到之后瞬間將資料從物理層取出并傳遞到網路層

這個協議假設:

·資料只能單向傳輸

·資料鏈路層之間的通信信道永遠不會損壞或者丟失幀

·兩端的網路層就緒

·處理時間忽略

·緩沖區空間無窮大

看看就好……

2.一種單工停等協議

假設條件:

·單向資料傳輸

·發送方網路層一直有無限的資料要發送

·信道不會出錯,從不損壞或丟失幀

(拋棄了“接收方網路層一直可以接收,接收方緩沖無限大”的條件)

實作方法簡單來說就會在發送和接收方都有一個wait_for_event方法用于阻塞,之后物理層收到訊息時才允許通過,

發送方在發送資料后會阻塞,接收方只有在發送方發出資料才會通過阻塞,而接收方在將資料傳輸到網路層后會將一個沒有內容的信號幀傳給發送方,發送方才能通過阻塞發送下一個資料,

3.單工且有噪聲的協議

……其實和“實用的停等協議思路”一樣啊,代碼很亂(變數名稱無比糟糕),詳見修煉筆記吧(或者看PPT)

四、滑動視窗協議

1.捎帶確認

當接收到一個資料幀后,我們不立刻發回一個控制幀用來確認接收,而是等到需要傳送一個資料幀時將確認資訊附加在幀頭的一個ack欄位上

這就叫捎帶確認

2.發送與接收視窗

·發送視窗:發送方維持的一組序號,它代表著發送方準許發送的,以及已經被發送但還沒被確認的幀

·接收視窗:接收方維持的一組序號,它代表著接收方期望并準許接收單未被確認的幀

發送視窗內的幀都有在傳輸程序中丟失的風險,我們會在記憶體中快取這些幀

3.一位滑動視窗協議

每個發送的幀都有:序列號seq,確認號ack

(seq,ack,packetNum)

在一位滑動視窗協議中,視窗號只有0、1兩種

·計算機保存自己的發送視窗號to_send和接受視窗號expect

·當得到接收信號后:

如果接收的幀的seq等于expect,代表我接收了我需要的幀,這個幀就可以傳向網路層,并更改expect

如果接收的幀的ack等于to_send,代表我剛發送的幀被確認了,我們就可以從網路層取下一個幀以待發送了,并更改to_send

·也可能得到超時信號等信號,通常意味著故障了,我們要發送與上一次完全相同的幀

·之后我們直接發送一個幀,他的seq等于to_send,他的ack等于剛剛接受的seq(它應該等于1-expect),資料是當前待發送的

不同情況下會呈現這些結果:

·沒有接收到期望的幀號會導致發回的ack相比上次不變

·沒有接收到正確的確認號會導致發出的幀和seq相比上次不變

這個協議其實可能很混亂

4.回退N協議

·累計確認

約定接收方回傳Ack i,默認代表編號i與i之前的資料都已經接收了,

·普通回退N協議

發送方一直發,同時啟動一個計時器,如果在計時器的時間內還沒有接到接收方的確認,就重新發送,

接收方如果是因為沒有接收到資料而不發回確認,那就會一直等待正確的資料發送,期間不接受任何其他資料,

發送方超時后發現錯誤重新發送,會從沒有收到確認的幀開始按序重新發

·選擇重傳/選擇性重發

當接收方沒能接收時,會回傳一次Nak i表明自己沒有接收到

在發送方還沒有接收到Nak i時,發送方會繼續發送接下來的資料,而接收方會將它們快取,并回傳Ack i-1(表示自己接收的最新資料為i-1)

發送方接收到Nak i時會重發對應的資料,接收方接收后會將它和快取的資料一起(盡可能)處理掉(寫入網路層),之后Ack會重新回傳最新的Ack i,利用累計確認機制,就可以正常運作了

當然,如果因為種種意外(比如Nak丟了),發送方也會根據單個幀的超時重發,不過只重發超時的那一幀

第四章——介質訪問子層

這是屬于資料鏈路層的一個子層

這一層是用于信道分配的

一、靜態與動態信道分配

1.靜態信道分配

把信道容量直接拆開分配給用戶用

·缺點:無通信時信道白白浪費

2.動態信道分配的假設前提

一切方案都以以下假設構建的模型為前提

·站模型:模型中有N個獨立的站,站在生成幀后會持續等待,直到幀被發送出去

·單信道:所有通信共用一個信道

·沖突假設:沖突的幀必須在將來再次被發送

·時間連續或分槽:兩者二選一

·載波偵聽或不偵聽:可以選擇讓站監聽信道是否正在被使用,或者不監聽

二、多路訪問協議

1.ALOHA(先說后聽)

所有發送方都可以隨時發送資訊,但是如果此時信道上有兩個幀在同時嘗試使用信道,那就會沖突,兩個幀都會被損壞,等待一個隨機時間后再發送

(監聽損壞的可以讓一個中央計算機重新廣播幀)

·純ALOHA

可以隨時發送,出現沖突就等待一個隨機時間再發

·分槽ALOHA

將連續的時間分為時間槽,所有發送方只能在時間槽開始的時刻發送,允許發送的時間離散化,提高了吞吐量

因為本來如果一個幀的發送所需時間為t,那么在t0~t0+t這段時間內發送會導致尾部與此幀沖突,t0+t~t0+2t這段時間內發送會導致頭部沖突,所以此時易受沖突期為2t,但是分槽ALOHA只有在同一個時間槽內嘗試發送的兩個幀會引起沖突,易受沖突期變為t,(如果你在前一個幀正在傳輸的那一個時間槽內發,那就會強制要求你下一個時間槽再發)

2.載波偵聽多路訪問協議CSMA(先聽后說)

·1-堅持CSMA

當有一個站要發送時,先監聽信道;如果信道空閑就發送,否則就等待信道直到它空閑,

·非堅持CSMA

如果監聽到信道忙,那么就等待一個隨機時間后再監聽,而不是持續監聽

·p-堅持CSMA(適用于分時間槽的信道)

如果信道空閑,則有p的概率發送資料,如果不發送就推遲到下一個時間槽再使用此演算法嘗試進行一次發送;如果信道忙,則等到下一個時間槽再使用此演算法嘗試發送

·帶沖突檢測的CSMA CSMA/CD

如果兩個站都同時偵聽到信道為空并同時數就還是會沖突,我們需要解決,

這是一個在建立在p-堅持CSMA之上的CSMA演算法機制

額外增加沖突檢測,監聽2t時間后還沒有監聽到沖突就確定自己抓住了信道,這2t時間被稱為競爭期,t為兩個相距最遠的站傳輸所需時間,

如果檢測到沖突,就立刻中斷自己的傳輸,并在一段隨機時間后再嘗試重新傳送,

t是基于這樣的考慮:最糟糕的情況就是最遠的兩個站A和B,B在A的資料到自己門口了的時候發了一個資訊,沖突了,沖突信號想回傳發送方A,即使這么倒霉,也不會超過2t的時間,t為A傳輸到B所花時間

這就由此提出了一個重要概念:

·最小幀長

我們要求發送幀有一個最小幀長,這個幀的長度能保證需要在2t時間內占用總線,保證這段時間內總線被占用,使其他站點無法發送,直到2t后,發送站點100%能確定自己的發送是否發生沖突,

3.沖突避免多路訪問MACA

這是一個無線局域網協議

發送方向接收方先發送一個RTS(request to send)幀,這是一個短幀,包含了隨后要發的資料幀的長度;接收方會發一個CTS(clear to send)來回答,包含了從RTS幀中復制的資料長度,發送方接收了CTS后開始傳輸

RTS和CTS中都有幀長的資訊

任何站收到了不屬于自己的RTS都要保持一段時間的靜默,保證CTS可以被無沖突地傳回去

其他站只要聽到了RTS或CTS,那就說明它和某一個正在進行資料傳輸的站離得很近,那就要延緩發送任何資訊,直到傳輸完畢

我們認為MACA==CSMA/CA

MACAW要求每次成功發送的幀都要有一個ack

三、以太網

經典以太網使用1-堅持CSMA/CD演算法

1.二進制指數后退演算法CSMA/CD

專門優化CSMA/CD中遇到沖突后等待的時間的CSMA/CD改進版

在第i次沖突后,隨機等待一段時間再請求,隨機時間的范圍為0~2i – 1,

通常,會在某一次沖突后達到一個隨機上界的固定最大值,之后隨機上界將不再變化,在某一次沖突后將放棄,不再請求

2.曼徹斯特編碼

·曼徹斯特編碼

高-低(高轉低)電平對表示1,低-高電平對表示0(反之或許亦可)

·差分曼徹斯特編碼

每一個區間內仍然是電平對,但是如果下一個要發送的位是0,那么就要發生一次跳變:如果前一位是高-低電平,這一位就是高-低電平,如果下一個要發送1,那么就不發生跳變

3.802.3幀格式

這就是以太網幀,IEEE 802.3,這個概念歸屬于資料鏈路層-介質訪問子層

這里的地址是MAC地址,目標地址第一位為0時代表這是普通地址,第一位為1時代表這是組地址,

Data來自于網路層,這是網路層傳下來的東西,里面也必然包含網路層的各種頭啥的,

四、WLAN

1.隱藏站和暴露站

·隱藏站問題

·暴露站問題

2.802.11 MAC子層協議

這里實在是太太太混亂了……

這里顯示出實際上用的這個協議確實需要接到RTS和CTS的堆疊根據其中的NAV(網路分配向量)確定自己需要沉默的時長,

同時,這里要求接收方在幀成功傳遞后回傳一個ACK,如果發送方收不到ACK就要重發

五、資料鏈路層交換

1.網橋

網橋和交換機其實是一個東西,它運行在資料鏈路層上,連接多個局域網,各個埠連接的局域網是彼此隔離的,

網橋會利用幀頭中的目的地址來判斷這個幀下一步該前往哪個埠

每一個轉發表都會有一個轉發表,以散列形式存盤,指明某個目的站地址要從哪個埠出去,看個例子更靠譜:

2.網橋演算法

·flooding/泛洪演算法

如果一個入境幀(進入網橋的幀)并不能確定它應該輸出到哪個埠,就會被輸出到所有埠(除了入境的埠),網橋可以依賴這個程序來進行學習,

·后向學習法/逆向學習法

通過讀取每個幀的源地址來確定發送者能被哪個埠訪問,

·動態拓撲結構變化

哈希表還會記錄確定這個映射關系的時間,

有行程定期掃描哈希表,將時間過老表項刪掉,這當然會導致需要重新學習,

·集線器

集線器只會把各個線聚集,任何一端發出的內容都會無條件轉發給其他所有埠,這會導致有時目標地址的埠和源埠相同,此時網橋會丟棄這個幀,

3.生成樹網橋

如果一個網路中,網橋之間構成了環的話,那么泛洪時會導致無限回圈的,所以要把一部分鏈路直接禁用,最終使得網橋之間的聯系關系演化為一個生成樹,

·step1:選定一個網橋作為根,我們的選擇識別符號最低的網橋作為根,這個識別符號基于MAC地址的

·step2:構造從根到每個網橋的最短路徑生成樹(可以使用類似BFS的方法,如果有多個可選項就選識別符號最低的那一個)

·step3:確定結構后,關閉那些不需要的鏈路

4.各層的交換設備

·應用層:應用網關

·傳輸層:傳輸網關

·網路層:路由器

·資料鏈路層:網橋、交換機

·物理層:中繼器、集線器

這里也揭示了幀、資料包、頭等等的嵌套關系

傳輸層填一個TCP或UDP頭,網路層填一個IP頭(灰色部分就是網路層向資料鏈路層傳的),資料鏈路層再加上幀頭幀尾

·中繼器

模擬設備,中繼器不理解幀、資料包等概念,它只知道將位元編碼為電壓,它會將線纜上的信號清理、放大,然后放到另一個線纜上,

參考紅石中繼器?

·集線器

允許輸入多條線路,它也是物理層上的小傻子,啥也不懂,只知道把輸入進來的信號傳播到其它所有線路上

我們應當把集線器看作電纜的一部分,同時有兩個信號來的話也會沖突

·網橋和交換機

這兩個東西其實是一樣的,更多的是市場上的區別,交換機一般埠比網橋更多,

·路由器

屬于網路層,它會剝去幀頭幀尾,讀取IP資料包的頭部來進行路由(后面會講)

·傳輸網關

連接使用不同的面向連接傳輸協議的計算機,傳輸網關能將資料包從一個連接復制到另一個連接上,并可能重新進行格式化

·應用網關

它能理解資料的意義,將它們進行不同應用意義上的轉化,

“網關”本身還是一個術語,代表運行在較高層次的轉發行程

第五章——網路層

資料鏈路層關注的是將資料從線路的一邊傳到另一邊

網路層則關注如何將資料包從發送方一路送到接收方

·向上提供的服務獨立于路由器技術,屏蔽路由器的數量、型別、拓撲關系

·傳輸層可用的網路地址應該有統一的編址方案

一、網路層設計要點

1.無連接服務實作——資料報網路

所有資料包獨立地注入網路中,在這種背景下,我們通常稱資料包為資料報

這種網路被稱為資料報網路,

在這種情況下,從傳輸層來的資料會因為比較大而被分隔成若干資料報,它們會被傳到路由器,路由器中的路由表會指明:如果它需要前往某一個路由器,那么下一步應當前往的下一個路由器,

管理路由表并做出路由選擇的演算法稱為路由演算法,

IP協議就是無連接網路服務的重要范例,

2.面向連接服務實作——虛電路網路

在發送資料包之前,首先建立一條從源路由器到目標路由器之間的路徑,這個連接就是“虛電路”,

建立一個連接之后,這個連接的路徑就會被存盤在各個路由器的路由表中,發送的每一個資料包都有一個識別符號,

路由表會分為入境和出境,鍵為入境的設備,鍵值為它所屬于的連接,

路由表在建立前往同一個路由表的出境表項時,必須確保識別符號與之前不同,

額……這里看書吧,書上這里講的還算清楚

二、路由演算法

0.最優化原則

·最優化原則:如果路由器J在從路由器I到路由器K的最優化路徑上,那么從J到K的最優路徑也必定遵循同樣的路由

·熟悉嗎?熟悉就對了……

·匯集樹:根據最優化原則,所有的源端到一個指定目標的最優路徑會構成一棵以目標為根的樹,這棵樹就是匯集樹

·路由演算法的目標就是給每個路由器找到并使用匯集樹

1.最短路徑路由演算法(全域演算法)

這個演算法的前提是:給定一個完整的網路視圖,計算最優路徑

·測算“路徑長度”的方法是多樣的,包括站點數量、距離、信道帶寬、平均通信量、通信開銷、佇列平均長度、測量到的時延

·然后……Dijkstra迪杰斯特拉

2.泛洪演算法/擴散法

·原理:將每一個入境資料包發送到除了入境線路外的每一條其他線路

·問題:產生大量重復資料包,甚至會產生無限的資料包

·解法:

·分組頭設定一個計數器,沒經過一跳就減1,計數器到0就丟棄這個包

·選擇性擴散法:僅將分組擴散到與正確方向接近的線路上(?)

3.距離矢量演算法

·原理:每個路由器維護一張向量表,表中給出每個目的地已知的最佳距離和線路,通過相鄰路由器交換資訊來更新,節點u更新資訊,就可以從它的每一個鄰接v獲取表,然后通過計算u到v的距離加上v聲稱的到某一個節點的最短距離來計算一個新的距離,

·無窮計算問題:這個演算法收斂緩慢,且在一個節點離開時,可能會造成無窮的計算,圖中的例子相當有助于理解

在A下線后,B仍然會嘗試找到到A的最短距離,這時就只能找C了,C又得看B……

后者本質上是在節點被移除后,其余節點在嘗試尋找到它的路徑時不可避免地產生環路,

·環路的補救或避免

·定義最大值

定義一個最大跳數

·水平分割

傳送路由資訊的程序中,不再把路由資訊發送到接收此路由資訊的介面上,本質是防止將從鄰居身上學到的資訊再傳回去

4.鏈路狀態路由

·step1:發現鄰居節點及網路地址

向所有點到點的線路發送一個特殊的HELLO資料包,線路另一端的路由在接收后應回傳一個應答,回傳一個全域唯一的名稱

·step2:測量線路開銷或延遲

通過線路發送一個ECHO資料包,對方應立刻發回,然后將測量時間除以2

·step3:構造鏈路狀態包

狀態表如圖

·step4:發布鏈路狀態包

采取泛洪法,發送的包包括序號seq欄位和年齡age欄位,Age欄位會隨時間不斷減少,為0時路由器就會丟棄這個,不過由于系統中每過一會兒就會有新的包到來,所以這種丟棄就不會有問題(除非這個記錄對應的路由器撲街了),Seq欄位則是每發送一次就加1,

·seq序號回圈問題

使用32位的序號,137年才能繞回……

接收到一個包后要和自己狀態包緩沖區的對應路由器的狀態包進行比對,無論如何都放棄較老的包(即序號小的),相等時拋棄來的,

在路由器的狀態包緩沖區中,還有發送標志和ACK標志,對來源進行ACK回傳,對其他的則發送包,

如果有重復的資料包來了,我們就改變位,我們只改變這個最新的來源對應的send位和ACK位,然后根據這些位進行操作

·step5:計算最新路由

此時其實所有鏈路狀態對于所有路由器都是完整可見的了,相當于每個路由器都有完整的網路圖,直接Dijkstra

5.距離矢量路由和鏈路狀態路由的比較

·距離矢量路由只向鄰居分享自己的資訊,鏈路狀態路由使用泛洪將資訊傳遞給所有路由器

·距離矢量路由有收斂程序,不是借助全體資訊計算的,鏈路狀態路由直接對網路整體計算

·距離矢量路由在某一個路由器,某一個鏈路發生變化時,更可能影響所有路由器的所有表項,鏈路狀態路由更新更新的則是某一個或某幾個路由器的資訊,

6.分級路由

為防止路由表過大,我們將路由器按區域分組,同區域的目標地址還以完整地址的形式存盤于路由表中,不同區域則完全歸為一整個區域存盤于表中,從而降低路由表的大小

7.廣播路由

主機要給全部主機發送訊息稱為廣播

·方法1:分別發送分組到每個目的端

·方法2:擴散法/泛洪法

·方法3:多目的地路由選擇

每個資料包包含一組目標地址,路由器通過這一組地址判斷哪些輸出線路是必要的(“必要的”指這個輸出線路至少是到達某一個目標地址的最優路徑),然后路由器生成若干該資料包的副本,這些副本中的目標地址的只包含使用的線路能到的目標地址

·方法4:利用發起廣播的路由器的匯集樹或利用生成樹

這種方法需要所有路由器都能知道我們要使用的生成樹,這對于鏈路狀態路由好說(反正大家都有完整的網路圖),但是對于距離矢量路由就不太行了

·方法5:逆向路徑轉發

當一個廣播的包傳入時,如果輸入線路是常用的廣播源發送包的線路就把這個包轉發到其他所有線路上,反之丟棄,

8.移動路由

登錄程序:

·外地代理定期廣播分組,宣布自己的存在及地址;同時,移動主機可以廣播,問“這里有沒有外地代理?”

·移動主機登錄到外地代理

·外地代理與移動主機的本地代理聯系

·本地代理檢查安全性資訊

·外地代理得到本地代理的確認后,建立一個表項,并通知移動主機已經登錄了

移動主機先向將轉交地址(care of address)發回給本地代理,本地代理就可以把發來的資料轉給移動主機,移動主機直接向發送者回復

三、擁塞控制

1.概念

通信子網中存在太多分組時會使性能降低

2.負載脫落——隨機早期檢測RED

當鏈路上的平均佇列長度超過某個閾值,就被判定為即將擁塞,路由器會隨機選擇已有的資料包丟棄來避免擁塞

四、服務質量QoS

如何保證提供的吞吐能力、延遲匹配我們所需求的服務質量?

1.過度配置

給一個非常高的路由容量、帶寬配置,高到無論什么情況都能滿足高質量服務,簡稱力大磚飛,典型例子是電話系統

但是它貴……

2.接收方快取

·抖動:指連續傳遞的兩個相鄰資料包轉發的時延之差的絕對值,高抖動即兩個連續的資料包到達的時間間隔差距很大,這是不好的,

接收方先緩沖資料,延遲一段時間之后再正式讀取,這樣在接收方看來,資料就更像是連續發送的(我稱之為“攢著一起讀”),抖動小,

3.發送方快取——漏桶演算法和令牌桶

漏桶演算法:把資料想象為水,裝在一個漏桶里,不管有多少資料,漏桶以恒定的速度輸出資料,從而保證發送速度恒定,“桶”容量有限,滿的時候到來的資料就要在佇列中等待或者被丟棄

令牌桶:桶中會不斷產生令牌,想要從桶中取出資料就要同時拿到一個令牌(一般一個令牌能允許取出指定大小的資料),如果桶中有充足的令牌,發送端就可以全速發送,如果令牌在高速發送的情況下被全部消耗,那發送的速率就會與生成令牌的速率一致了

相比之下,漏桶比較死板,令牌桶由于可以積攢令牌所以更靈活一些

五、網路互連

不同的網路使用的協議可能不同,多個網路連接會遇到問題

1.隧道技術

用于處理兩個所處網路的型別相同,但是中間隔著一個不同型別的網路的情況,

直接將發出的資料包使用這個中間網路的協議進行包裝,等出了這個中間網路,到達那個相同的網路后再提取原本的內容,

六、Internet的網路層

1.IPv4協議

·IPv4頭部

要熟悉這個頭部結構,但不必背誦

這里的源地址和目標地址是IP地址格式

注意IHL指明的是頭部長度(以32位為單位),最小為5

總長度是包含頭部和資料的所有內容

DF代表“不分段”,為1時代表不允許路由器分割這個資料報

MF代表“更多的段”,除最后一個段之外的所有段都要設定

Fragment offset是分段偏移量,代表這個段在資料包整體中的位置

生存期每一跳就要減,用于避免資料永遠逗留

更多的看一看書P337

2.IP地址

·IP地址包括前綴和主機號,由4個8位域組成(咱們平時見到的是點分10進制)

前綴=“網路段”,同一個網路下的主機擁有相同的前綴,后面的位可以指明主機,前綴的長度由IP地址最后“/x”這樣的寫法來指明,代表前綴長度為x

·子網掩碼:前若干位為1,和一個IP地址進行AND操作可以提取出網路部分,在取反后進行AND可以取出主機部分

·子網:內部將一個網路塊分成幾個部分供多個內網使用,但對外則仍然像單個網路一樣,這種操作就叫子網劃分,分出的一系列結構就是子網,

我們可以看到,子網位是從原本的主機位中抽出來的,然后被歸于前綴

·分類和特殊尋址(這里最好看書p345)

·子網掩碼除了要用1覆寫掉前綴(包括型別位和網路段),還可以有更多的1,被1覆寫的部分用于指明子網,沒被1覆寫的部分可以用于指明子網中的主機

·一些特殊的IP地址:

·全為0

全0的IP地址代表本機

·網路段全為0,主機號部分有內容

代表默認認為這個地址和本機存在于同一網路中

·全為1

代表進行本地廣播

·網路段有意義,但是主機位全為1

遠端廣播

·127開頭

特殊的回環測驗用ip地址,不是互聯網中可用的ip地址

基于以上特殊ip地址,我們禁止主機位全為0或全為1(不過這是約定)

3.子網劃分

子網劃分時,要根據子網要求的主機數量確定使用的主機位位數(這代表我們劃分子網時必須是2^m個主機數),再輔以提前確定的地址型別(A類?B類這樣的),我們就可以確定拿多少位做子網位了,

我們要用恰到好處的位數當主機位,剩下的位全都當子網位,

4.CIDR——無類域間路由(路由聚合)

·起因:

B類地址對大多數機構來說太大了,IP地址會因此浪費并被很快用光

路由選擇表暴漲

·路由聚合

把多個長前綴的小地址塊合并成一個短前綴的大地址塊,這個合并程序稱為路由聚合,產生的較大地址塊稱為超網

·CIDR無類域間路由

在路由聚合機制之下,同一個IP地址可能被不同的路由器看作有不同的前綴,這種與類別地址層次編碼不同,每個路由器有各自的前綴資訊的路由稱為無類域間路由

·基本思想:以可變長分塊的方式分配C類地址(這個思想被提出時只剩這些IP地址了),并且有“分了又分”的操作

·原則1:分配出去的一塊地址,一直保持不變的位數需要相同,例如:如果你需要分配4096個地址作為一塊,那就要讓這4096個地址前20位完全相同,后12位遍歷0~4095.

·原則2:最長前綴匹配——一個IP地址到來后,如果和多個路由表中的表項匹配,那么誰匹配的長度最長就發向誰

5.NAT——網路地址轉換

·基本思想:一個內網中有非常多的設備,但是他們對外共享一個IP地址,一個資料包從內網向外傳時就需要將IP地址轉化為面向外網的真實IP地址,

·問題:有資料包傳回來的時候,由于所有設備都共享一個外網IP,我們如何將這個資料包傳給指定的設備?

·解決方法:

使用源埠號欄位存盤一個索引,這個索引和內網IP地址和原來的源埠資訊建立映射

當一個出境的資料包進入NAT盒子,其IP地址被真實的對外IP地址替代,源埠段被一個索引值替代(也就是說出去的資料包中的源埠段已經失去本來的意義),NAT盒子中的地址轉換表中會更新一個表項,由這個索引值指向原本的內部IP地址+源埠

然后還要重新就按IP頭和TCP(傳輸層)頭的校驗和

入境資料包會提取源埠號,當做索引項在地址轉換表中找到內部IP地址和真·埠號

·問題:它破壞了IP協議的很多原則

·IP地址不再唯一標識世界上的一臺機器

·違反了分層規則,NAT使用了埠號,它是別的層的

·NAT盒子保持埠號和IP地址的映射,這是面向連接網路

·地址轉換表項只能由出境資料包建立,那之后入境資料包才能正常輸入

6.Internet控制協議

·ICMP——Internet控制訊息協議

路由器處理的一個資料包程序中發生意外,可通過ICMP向源端報告有關事件

·ARP——地址決議協議

將目標IP地址轉化為MAC地址(資料鏈路層地址),以支持資料鏈路層幀的包裝

·同一個以太網下

當一個主機需要知道一個IP地址對應的MAC地址時,在以太網中廣播,問誰有這個IP地址對應的MAC地址,當然,只有這個IP地址對應的設備會回傳自己的MAC地址來應答,這樣就有了

請求這個MAC地址的主機還應該快取這個地址,留著稍后用,省得廣播,并且請求MAC地址的主機還應該把自己的IP-MAC地址對應關系也包含在這個ARP包里

ARP快取中的表項應該定期超時清理

·不同以太網上(路由器不轉發以太網級廣播報文)

這個時候主機會發現目標IP地址不在這個網路中,那它就會請求路由器(往往稱為默認網關)在這個以太網中的埠的MAC地址,默認網關的IP地址應該有這個網路里的最低地址,然后它就會利用這個MAC地址向路由器發送幀,

路由器這個幀后,可以通過IP內容了解到這個資料包該發送到哪個網路,該走哪個埠,路由器要是不知道目標IP的MAC地址還可以ARP,

還可以進行ARP代理:路由器直接以自己的MAC地址作為結果回傳,路由器將發來的幀轉發到該去的網路,

·RARP——反向地址決議

由MAC地址找IP地址的協議

·DHCP——動態主機配置協議

當一個主機接入網路后,廣播一個報文,DHCP服務器接收后(在這個廣播不能被DHCP直接接收時要由路由器轉交),DHCP會分配出一個空閑的IP并根據以太網地址作為標識把IP地址回傳

7.內部/外部網關路由協議

Internet由大量的獨立網路或自治系統(AS)構成,它們內部有各自的內部網關協議,之間則使用外部網關路由協議

·OSPF——內部網關路由協議

開放的最短路徑優先協議,是一種常用的內部網關協議,屬于鏈路狀態路由協議的一種

它考慮的物件是路由器和一個區域

·BGP——外部網關路由協議

邊界網關協議,用于連接自治域,是一種改進了的距離矢量路由協議(相比原本的路由協議,節點還能從鄰居那里獲得到達目的地的路徑,從而避免路徑上有自己形成環),保存完整的路由資訊,

它需要涉及各種政治、安全、經濟等方面考慮

第六章——傳輸層

·消除網路層的不可靠性

·提供從源端到目的端可靠的、與實際使用的網路無關的資訊傳輸

·傳輸物體:完成傳輸層功能的軟硬體,利用網路層提供的服務向高層提供有效的、可靠的服務

·標識物體的標簽為埠號專注于兩個計算機上的行程的連接

一、傳輸協議的要素

這里介紹的內容帶有理念性,它們傳輸層協議的理念模型,實際實作可能不一樣,

1.尋址

·TSAP:傳輸服務訪問點,代表傳輸層服務上的端點;NSAP則是網路服務訪問點,比如IP地址

·我們想要把摸一個行程關聯到本地TSAP不是問題,但如何獲得我們想要交流的遠方的服務程式的TSAP?即尋址

·planA:預先約定

使用廣為人知的TSAP,將其用于永久不變的服務,但是這個方法不能大規模使用,用戶的行程總是變化的,

·特殊的行程——Name Server名字服務器/Directory Server目錄服務器

在一個眾所周知的埠上監聽,

所有新服務被創建時都要向他注冊,將服務名(一個ASCII字串)和TSAP告訴他,

用戶要和名字服務器連接,發送服務名以獲得TSAP

·planB:初始連接協議

這個協議用于避免那些很少人使用的服務長期活躍并監視埠,

由行程服務器在一個眾所周知的埠運行,同時代替那些實用的服務器監聽各個埠,行程服務器監聽到某一個埠的一個用戶請求后,如果這個埠還沒有實用服務器在等待,那用戶就會先獲得一個和行程服務器的連接,然后行程服務器派生出實際需要的服務器的并轉交連接

2.建立連接

·問題:要在資料包丟失、損壞、延遲、重復等情況下保持架構的可靠

·planA:唯一傳輸地址

每次傳輸都生成一個唯一的地址,連接結束就丟棄,永遠不再使用

·planB:唯一識別符號

每個連接都有一個唯一識別符號,所有傳輸物體都要維護一個包含所有過期連接的表

·planC:兩次握手

A發出連接請求CR Segment,B發回連接確認ACK Segment

這個方案會因為網路層丟失、存盤和重復包而失敗

·planD:三次握手方案

A發出序號為X的CR Segment

B發出序號為Y的ACK Segment并用ACK ACK=x來確認A的序號為X的CR Segment

A發出序號為X的第一個資料Segment,并確認B的序號為Y的CR Segment

每個DATA都得帶著seq代表自己的連接標簽,ACK代表獲得的對方的連接標簽,舊的請求攜帶的ACK一定會和當前的連接產生沖突(看b),只要Host2記住自己當前的連接標簽,就可以拒絕那些舊的請求了,

Host2收到任何CR都會回復一個ACK,Host1會檢查對方發來的ACK,這樣就可以確認這是不是自己嘗試新建的連接了,如果不是的話就會回復REJECT

這兩者配合,前者保證接收方不會接收到錯誤的連接的資料,后者保證發送方會告知接收方一個請求的錯誤,

3.釋放連接

實際上釋放連接很難有說完全完美的方案

·planA:非對稱釋放

一方釋放連接,整個連接就斷開

·planB:對稱釋放

將連接看成兩個單向連接,雙方都同意斷開才是徹底斷開

·實際plan:三次握手

仍然是一個類似三次握手的協議

發起斷開的一方要向對方發送一個DR(disconnection request),并啟動一個計時器

另一方接收到DR后回傳一個DR,并啟動一個計時器

請求斷開方在接收到回復的DR時發回一個ACR并釋放連接

另一方在接收到ACR后釋放連接

如果“另一方”沒能接收到ACR(ACR因種種原因發不到),那么會在一段時間后超時釋放連接

如果發起方接收不到“另一方”的DR,那么會在一段時間后超時繼續發送DR并重新啟動計時器

理論上,如果發起方發送的所有DR都丟失也會引起問題,我們可以讓它在發送N次DR后強行釋放連接,不過這樣“另一方”又會無法正常釋放連接(因為它從來都沒有收到過DR),這個連接成了半開連接

我們可以讓雙方在一段時間內接收不到另一方發送的內容就斷開連接,不過為此,雙方都要在不想斷開連接但沒有資料可發的時候發送沒有內容的啞幀來保持連接

4.流量控制和差錯控制

·快取

網路層是不可靠的,傳輸層物體必須快取所有連接發出且未被確認的資料以備出錯重傳

有三種快取機制:固定快取大小,可變快取大小,大回圈緩沖區(顧名思義)

在這個程序中會使用累計確認,同樣有seq、ack,

接收方回傳ack是同時會回傳buf來指明自己緩沖區的剩余,為0時發送方就要停止,

·流量控制和擁塞控制面臨的問題

流量控制解決接收方沒有足夠緩沖區引起的問題

擁塞控制解決網路容量不足引起的問題

二、UDP

·不需要建立連接

·收發雙方不握手

·每個UDP報文處理都是獨立的

·延遲小

·沒有連接狀態、簡單

·報文頭小

·沒有擁塞控制、差錯控制,但可以盡快發送

·應用于:可以容忍丟包、速度敏感的場景,如流媒體

·應用程式可以自己定義錯誤恢復

·UDP頭結構可以參考書P418,偽頭在計算校驗和后就被丟棄

1.UDP頭

UDP頭有源埠和目標埠,這是UDP的存在的必要性

2.IPv4偽頭

這是IPv4偽頭,UDP計算校驗和時可以選擇構建一個臨時的IPv4偽頭,加入校驗和的一部分,然后丟棄,這有助于檢測出被錯誤遞交的資料包

三、TCP

1.TCP服務模型

·1024以下的埠號保留

·TCP連接:全雙工、點到點、不支持廣播和多播、位元組流而非訊息流(不保留訊息的邊界,不知道位元組所代表的是什么訊息)

2.TCP協議基礎

·每個位元組都有自己的編號

·累計確認:編號靠前的位元組必須先被確認,后面的位元組才能被確認

·接收方在接收到資訊后會回傳一個段,其中的確認號的值指明了接收端期望接收的下一個序號,應該是剛接收的位元組的序號+1(與之前的有區別)

3.TCP的頭

源埠欄位和目標埠不用說

序號和確認號就是seq和ack,TCP流中的每一個位元組都會被編號,序號和確認號都是基于這個“每個位元組都編號”的原則來的

TCP長度的單位是32位

CWR和ECE作為擁塞控制信號,TCP接收端收到擁塞指示后就會設定ECE位,告訴發送端發慢點;TCP發送端設定CWR,代表自己已經放慢了,不需要繼續借助ECE發送信號了

URG=1代表緊急指標啟用

ACK=1代表ack欄位有效,ACK=0時確認資訊是無效、可忽略的

PSH=1表示這個資料是被PUSH推出來的,很著急,請求接收端立刻將資料交給應用程式

PST=1表示重置一個混亂的連接,它為1就是連接出問題了

SYN代表是否處于建立連接的程序,即是否為連接請求和連接應答,SYN=1&&ACK=0表示它是一個連接建立程序且沒有確認欄位,對應連接請求;SYN=1&&ACK=1表示它是建立連接的程序且帶了確認,對應連接應答,

FIN=1代表釋放連接

后面是視窗大小

4.TCP連接建立

三次握手,和之前的那個一樣,但是要注意的是ACK是接收到的序號+1,代表自己的期望接收

5.TCP連接釋放

可以將TCP連接視為一對單工連接,任何一方都可以通過使用FIN欄位請求關閉,另一方可以回傳ACK來確認,一次ACK和一次FIN可以合并,

如果請求FIN的一方在兩倍于最大資料包生存區的時間內都沒有回應就直接釋放連接,另一方也會因此超時,

6.TCP滑動視窗協議

兩端都有一個緩沖區,接收端回傳時需要標明自己視窗剩余大小

·Nagle演算法

發送端只在一開始發送一個小資料包,之后到達的位元組都先緩沖,直到前一個資料包被確認或者緩沖區滿再發送

·低能視窗綜合癥

接收端一次從緩沖區里讀一個位元組,并立刻向發送端更新視窗資訊的話,就會導致發送端一次發一個位元組

·Clark演算法

不允許接收端發送只有1個位元組的視窗更新段,強制要求接收端緩沖區有一定量的可用空間后再告訴發送端

7.TCP擁塞控制

·慢啟動演算法

實際上這是一個不斷的探測程序,而且我們并不會管到底是什么引起了超時,這只是一個嘗試解決問題的程序,

*快速重傳

我們要求接收方如果收到了跨順序的包(比如手里有1、2接到了4),就會不斷回傳舊確認號,稱之為重復確認

發送端在接到三次這樣的重復確認后就會重發這個可能丟失的包,慢啟動閾值設定為當前擁塞視窗的一半(如同超時一樣)

第七章——應用層

一、DNS——域名系統

1.基礎定義

我們利用域名系統,可以將一個名字映射成IP地址

應用程式可以呼叫一個叫決議器的程式,將名字作為引數傳給這個程式,這個程式會向本地DNS發送一個包含該名字的請求報文,本地DNS查詢到這個名字對應的IP地址就會將它回傳給決議器,決議器再將它回傳給呼叫方

2.域名的格式

·每個域由它往上到根的路徑命名(越靠后越靠近根),成員由“.”分隔:cs.zju.edu.cn

·域名對大小寫不敏感

·成員名最長63個字符,路徑名不能超過255個字符

·頂級域分為通用域和國家域

比如:eng.sun.com

3.域名資源記錄

每個域都有一組與它相關的資源記錄,這些資源記錄不只限于IP地址

資源記錄格式:域名 生存期 類別 型別 值

·域名:額……域名

·生存期:指代的其實是該記錄的穩定程度

·類別:對于Internet資訊,這里總是IN,其余情況可能是其它的代碼,但少見

·型別:指明這是什么型別的記錄

4.域名服務器

為避免單個資訊源帶來的諸多問題,DNS的名字空間被劃分為不重疊的若干區域,分給不同的DNS服務器來存盤、處理,

比如這里,能處理eng.yale.edu的域名服務器是處理不了cs.yale.edu的

·查詢程序

當我們進行一次域名查詢但本地域名服務器沒有時,域名服務器就會查詢從根服務器開始發動查詢,

如果收到查詢請求的服務器沒有這條記錄(因為是磁區的),那么這個更接近頂級的域名服務器根據這個域名發現自己下屬的哪一個域名服務器可能能查詢到,并將它的IP回傳,如此反復,直到最終找到保存有記錄的域名服務器,

二、HTTP——超文本傳輸協議

這段可以看書P531

HTTP是用于web服務器與客戶之間傳輸資訊的協議

它涉及了各種略有額外通用性的方法

有不同的回應狀態碼等

1.方法

2.回應組的狀態碼

3.訊息頭

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400509.html

標籤:其他

上一篇:python——Socket網路編程(詳細講解)

下一篇:HTTP http相關知識點詳解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more