一,計算機網絡參考模型
1.1 OSI七層模型
1)物理層
主要功能是完成相鄰節點之間原始比特流的傳輸。(網卡等)
物理層協議關心的典型問題是使用什么樣的物理信號來表示數據1和0;持續的時間有多長;數據傳輸是否可同時在兩個方向上進行。物理層的設計還涉及通信工程領域內的一些問題。
2)數據鏈路層
主要負責將上層數據封裝成固定格式的幀,在數據幀內封裝發送和接收端的數據鏈路層地址(在以太網中為MAC地址,MAC地址是用來標識網卡的物理地址;在廣域網中點到多點的連接情況下,可以是一個鏈路的標識)並且為了防止在數據傳輸過程中產生誤碼,要在幀尾部加上校驗信息,發現數據錯誤時,可以重傳數據幀。
3)網絡層
主要功能是實現數據從源端到目的端的傳輸。
在網絡層,使用邏輯地址來標識一個點,將上層數據封裝成數據包,在包的頭部封裝源和目的端的邏輯地址。網絡層根據數據包頭部的邏輯地址選擇最佳的路徑,將數據送達目的端。
4)傳輸層
主要功能是實現網絡中不同主機上用戶進程之間的數據通信
網絡層和數據鏈路層負責將數據送達目的端的主機,而這個數據需要什么用戶進程去處理,就需要傳輸層幫忙了。
例如:QQ發送消息,網絡層和數據鏈路層負責將消息轉發到接收人的主機,而接收人應該用QQ程序來接收還是用IE瀏覽器來接收,就是在傳輸層進行標識。
傳輸層要決定對會話層用戶(最終的網絡用戶)提供什么樣的服務。因此,我們經常把1~3層的協議稱為點到點的協議,而把4~7層的協議叫做端到端的協議。
由於絕大多數主機都支持多進程操作,因而機器上會同時有多個程序訪問網絡,這就意味着將有多條連接進出於這台主機,因此需要以某種方式區別報文屬於哪條連接。識別這些連接的信息可以放在傳輸層的報文頭中。除了將幾個報文流多路復用到一條通道上,傳輸層還必須管理跨網連接的建立和拆除,這就需要某種命名機制,使機器內的進程能夠說明它希望交談的對象。
5)會話層
主要是允許不同機器上的用戶之間建立會話關系。
會話層允許進行類似傳輸層的普通數據的傳輸,在某些場合還提供了一些有用的增強型服務;允許用戶利用一次會話在遠端的分時系統上登陸,或者在兩台機器間傳遞文件。
6)表示層
主要用於完成某些特定功能,對這些功能人們常常希望找到普遍的解決方法,而不必由每個用戶自己來實現。
表示層還涉及數據壓縮解壓,數據加密和解密等工作
7)應用層
聯網的目的在於支持運行於不同計算機上的進程之間的通信,而這些進程則是為用戶完成不同任務而設計的。
1.2 TCP/IP參考模型
1)物理層和數據鏈路層
在物理層和數據鏈路層,TCP/IP並沒有定義任何特定的協議。它支持所有標准的和專用的協議,網絡可以是局域網(如廣泛使用的以太網),城域網或廣域網。所以,TCP/IP實際上只有三個層次。
2)網絡層
在網絡層,TCP/IP定義了網絡互聯協議,而IP又由四個支撐協議組成;ARP(地址解析協議),RARP(逆地址解析協議),ICMP(網際控制報文協議)和IGMP(網際組管理協議)
3)傳輸層
傳統上,TCP/IP有兩個傳輸層協議;TCP(傳輸控制協議)和UDP(用戶數據報協議)。TCP協議傳輸更加穩定可靠,UDP協議傳輸效率更高。
4)應用層
在應用層,TCP/IP定義了許多協議,如HTTP(超文本傳輸協議),FTP(文件傳輸協議),SMTP(簡單郵件傳輸協議),DNS(域名系統)等
上述這些協議將在后續課程中具體講解,這里大家只要明確協議與各層的對應關系即可。當我們研究具體協議的應用時,結合該協議所在層功能來理解和分析問題將事半功倍。
二,了解數據的傳輸過程
2.1 數據的封裝和解封過程
下面我們將以TCP/IP五層結構為基礎來學習數據在網絡中傳輸的“真相”。由於這個過程比較抽象,我們可以類比給遠在美國的朋友郵寄聖誕節禮物的過程。
(1)當我們給朋友寫一封信時,一定會遵照一個約定俗成的信件格式去寫信。例如,在開頭寫對收信人的稱呼,接下來是問候語“你好”等,中間是信的內容,最后落款寫自己的姓名,日期等。那么,這個書信格式以及通信采用的語言實際上就是和朋友之間的協議,只有遵照這個協議,對方才能讀懂信。
(2)寫好了信,要將信裝在信封中。在信封上,要書寫收信人的地址和姓名等。再將信交給郵局。郵局根據收信人的目的地址,將信件再次封裝成大的包裹,通過運輸部門發往目的城市。
(3)運輸部門會將信件的包裹送達目的地的郵局。目的地郵局會將信件送達收信人手中。
在這個寄信的例子中,一封信的傳輸需要經過三個層次:
-
[x] :首先發信和收信的雙方是這個過程中的最高層,位於下層的郵局和運輸部門都是為了最高層之間的通信在服務。寄信人和收信人之間要有個協議,這個協議保證收信人能讀懂寄信人的信件。
-
[x] :兩地的郵局和運輸部門之間也有約定,如包裹大小,地址的書寫方式,運輸到站的時間等
-
[x] :郵局是寄信人和收信人的下一層,為上一層提供服務,郵局為寄信人提供服務時,郵筒就是兩個層之間的接口。
2.1.1 數據的封裝過程
1)應用層傳輸過程
在應用層,數據被“翻譯”為網絡世界使用的語言---二進制編碼數據(0和1組成)。大家可以試想以下,人們需要通過計算機傳輸的數據形式千變萬化,各式各樣,有字母,數字,漢字,圖片,聲音等。這些信息對於單一通過弱電流傳輸的計算機來說太過於“復雜”,因此這些人類方便識別的信息被應用層通過各種特殊的編碼過程轉換成二進制數據。這就是上面所描述的“翻譯”過程,也是應用層在網絡數據傳輸過程中最為核心的貢獻。
2)傳輸層傳輸過程
在傳輸層,上面數據被分割成小的數據段,並為每個分段后的數據封裝TCP報文頭部。應用層將人們需要傳輸的信息轉換成計算機能夠識別的二進制數據后,這些數據往往都是海量的。例如:一張高清晰的圖片轉換成二進制數據可能會有幾百萬甚至幾千萬位,如此龐大的數據一次性傳輸的話,一旦網絡出現問題而導致數據出錯就要重新傳輸,數據量過大會加大出錯的概率,最終可能會導致網絡資源耗盡。因此,將數據先分割成小段再逐段傳輸,一旦出現數據傳輸錯誤只需重傳這一小段數據即可。
在TCP頭部有一個關鍵的字段信息---端口號,它用於標識上層的協議或應用程序,確保上層應用數據的正常通信。
3)網絡層傳輸過程
在網絡層,上層數據被封裝上新的報文頭部---IP頭部。值得注意的是,這里所說的上層數據包括TCP頭部,也就是說,這里的上層是指傳輸層。對於網絡層而言,它是“看不懂”TCP包頭中的內容的,在它看來,無論是應用層的應用數據,還是TCP頭部信息都屬於上層數據。
在IP頭部中有一個關鍵的字段信息--IP地址,它是由一組32位的二進制數組成的,用於標識網絡的邏輯地址。回想剛才寄信的例子,我們在信封上填寫了對方的詳細地址和本地的詳細地址,以保證收件人能夠順利收到信件。在網絡層的傳輸過程與其很類似,在IP頭部中包含目標IP地址和源IP地址,在網絡傳輸過程中的一些中間設備,如路由器,會根據目標IP地址來邏輯尋址,找到正確的路徑將數據轉發到目的端。如果中間的路由設備發現目標的IP地址根本是不可能到達的,它將會把該消息傳回發送端主機,因此在網絡層需要同時封裝目標IP和源IP。
4)數據鏈路層傳輸過程
在數據鏈路層,上層數據被封裝一個MAC頭部,其內部有一個關鍵的字段信息--MAC地址,它由一組48位的二進制數組成。在目前階段,我們先把它理解為固化在硬件設備中的物理地址,具有全球唯一性。例如,之前講解的網卡就有屬於自己的唯一的MAC地址。和IP頭部類似,在MAC頭部同時封裝着目標MAC地址和源MAC地址。
5)物理層傳輸過程
無論在之前哪一層封裝的報文頭部還是上層數據信息都是由二進制數組成的,在物理層,將這些二進制數字組成的比特流轉換成電信號在網絡中傳輸。
2.1.2 數據的解封裝過程
在物理層,首先將電信號轉換成二進制數據,並將數據送至數據鏈路層。在數據鏈路層,將查看目標MAC地址,判斷其是否與自己的MAC地址吻合,並據此完成后續處理。如果數據報文的目標MAC地址就是自己的MAC地址,數據的MAC頭部將被“拆掉”,並將剩余的數據傳送至上一層;如果目標MAC地址不是自己的MAC地址,對於終端設備來說,它將會丟棄數據。在網絡層與在數據鏈路層類似,目標IP地址將被核實是否與自己的IP地址相同,從而確定是否送至上一層;到了傳輸層,首先要根據TCP頭部判斷數據段送往哪個應用層協議或應用程序。然后將之前被分組的數據段重組,再送往應用層;在應用層,這些二進制數據將經歷復雜的解碼過程,以還原發送者所傳輸的最原始的信息。
2.1.3 網絡環境中的數據傳輸過程
如果網絡世界中只有終端設備,那將不能稱之為網絡。正因為有很多中轉設備才形成了今天如此復雜的Internet網絡,只不過一貫作為網絡用戶的我們沒有機會感知他們的存在,這都是傳輸層的“功勞”。由於傳輸層通過端口號輔助上層建立最終用戶間的端到端會話,因此對於最終用戶而言,數據的真實傳輸過程都被掩藏起來。
例如:通過QQ軟件即使通信時,用戶感覺好像在和對方面對面溝通,全然不知自己要說的內容經過了多少交換機和路由器才到達對方那里,但這些過程是真實發生的。
在實際的網絡環境中,最終的發送方和接收方往往相隔千山萬水,中間會有很多的硬件設備起到中轉的作用。為了說明整個過程,我們假設了一種通信結構,如下圖,在兩台通信的計算機之間增加了兩台交換機和路由器,發送主機的數據將會經過這些“中間設備”才能到達接收主機。
- 發送主機按照之前講解的內容進行數據封裝。
- 從發送主機物理網卡發出的電信號通過網線到達交換機,交換機將電信號轉換成二進制數據送往交換機的數據鏈路層。因為交換機屬於數據鏈路層的設備,所以它將可以查看數據幀頭部的內容,但不會進行封裝和解封裝過程。當交換機發現數據幀頭部封裝的MAC地址不屬於自己的MAC地址,他不會像終端設備那樣將數據幀丟棄,而是根據該MAC地址將數據幀智能地轉發到路由器設備,在轉發前要重新將二進制數據轉換成物理的電信號。
- 當路由器收到數據后,會拆掉數據鏈路層的MAC頭部信息,將數據送達網絡層,這樣IP頭部信息就“暴露”在最外面。路由器將檢測數據包頭部的目標IP地址信息,並根據該信息進行路由過程,智能地將數據報文轉發到下一跳路由器上,在轉發前要重新封裝新的MAC頭部信息,並將數據轉換成二進制數。
- 之后的過程有點大同小異了....
從這個過程我們可以看出,數據在傳輸過程中不斷的進行着封裝和解封裝的過程,中間設備屬於哪一層就在哪一層對數據進行相關的處理,以實現設備的主要功能。也正因如此,我們稱TCP/IP五層模型為“參考”模型,參考這五層模型可以幫助我們很好的研究網絡中的設備以及設備工作過程中遵守的協議。
2.1.4 網絡各層典型的硬件設備
層名稱 | 應用層 | 傳輸層 | 網絡層 | 數據鏈路層 | 物理層 |
---|---|---|---|---|---|
典型設備 | 計算機 | 防火牆 | 路由器 | 交換機 | 網卡 |
三,了解TCP和UDP協議
3.1 TCP協議的特點
- TCP是面向連接的,可靠的進程到進程通信的協議
- TCP提供全雙工服務,即數據可在同一時間雙向傳輸
- TCP將若干個字節構成一個分組,此分組稱為報文段
3.2 TCP報文段的首部格式
格式 | 用途 |
---|---|
源端口號 | 發送方進程對應的端口號 |
目標端口號 | 接收端收到數據段后,根據這個端口號來確定把數據送給哪個應用程序的進程 |
序號 | 當TCP從進程接收數據字節時,就把他們存儲在發送緩存中,並對每一個字節進行編號。當數據到達目的地后,接收端會按照這個序號把數據重新排列,保證數據的正確性 |
確認號 | 是對發送端的確認信息,用它來告訴發送端這個序號之前的數據段都已經收到,如確認號是X,就是表示前X-1個數據段都已經收到 |
首部長度 | 用它可以確定首部數據結構的字節長度。一般情況下TCP首部是20字節,但首部長度最大可以擴展為60字節 |
保留 | 這部分保留位作為今后擴展功能用 |
控制位 | 這六位有很重要的作用,TCP的連接,傳輸和斷開都受這六個控制位的指揮 |
窗口值 | 說明本地可接收數據段的數目,這個值的大小是可變的,當網絡通暢時將這個窗口值變大以加快傳輸速度,當網絡不穩定時減小這個值可保證網絡數據的可靠傳輸,TCP協議中的流量控制機制就是依靠變化窗口的大小實現的 |
校驗和 | 用來做差錯控制,TCP校驗和的計算包括TCP首部,數據和其他填充字節。在發送TCP數據段時,由發送端計算校驗和,當到達目的地時又進行一次校驗和計算。若這兩次的校驗和一致,則說明數據基本是正確的,否則將認為該數據已被破壞,接收端將丟棄該數據 |
緊急指針 | 和URG配合使用 |
選項 | TCP首部可以有多達40字節的可選信息 |
3.3 TCP協議的三次握手和四次揮手
報文類型 | 含義 | 狀態 |
---|---|---|
SYN | 發起一個新連接 | 1表示發起連接 |
FIN | 釋放一個連接 | 1表示結束連接 |
ACK | 確認序號有效 | 1表示序號有效 |
seq | 隨機序號 | 隨機數 |
ack | 隨機序號回復 | ack=seq+1 |
3.3.1 三次握手
1)第一次握手:Client將標志位SYN置為1,隨機產生一個seq=x,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。
2)第二次握手:Server收到數據包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=x+1,隨機產生一個值seq=y,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
3)第三次握手:Client收到確認后,檢查ack是否為x+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=y+1,並將該數據包發送給Server,Server檢查ack是否為y+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨后Client與Server之間可以開始傳輸數據了。
3.3.2 四次揮手
1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳輸,同時發送一個seq=x的隨機序號。Client進入FIN_wait_1狀態
2)第二次揮手:Server收到FIN后,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)Server進入CLOSE_WAIT狀態。
3)第三次揮手:Server發送一個FIN,用來關閉Server到CLient的數據傳輸,同時發送一個seq=y的隨機數,Server進入LAST_ACK狀態
4)第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次回揮手
3.4 常用的TCP端口號及其功能
TCP在網絡中的應用范圍很廣,主要用在對數據傳輸可靠性要求高的環境中,如網頁瀏覽,它使用的HTTP協議就是依賴TCP協議提供可靠性的。
3.5 UDP協議
3.5.1 UDP協議的特點
- UDP是一個無連接,不保證可靠性的傳輸層協議,也就是說發送端不關心發送的數據是否到達目標主機,數據是否出錯等,收到數據的主機也不會告訴發送方是否收到了數據,它的可靠性由上層協議來保障
- 既然UDP有這樣的缺點,那為什么進程還願意使用它呢?因為UDP也有優點,UDP的首部結構簡單,在數據傳輸時能實現最小的開銷,如果進程想發送很短的報文而不關心可靠性,就可以使用UDP
3.5.2 UDP的報文
格式 | 用途 |
---|---|
UDP長度 | 用來指出UDP的總長度,為首部加上數據 |
校驗和 | 用來完成對UDP數據的差錯檢驗,它的計算與TCP校驗和類似。這是UDP協議提供的唯一可靠機制 |
3.5.3 常用的UDP端口號及其功能
UDP協議在實際工作中的應用也比較多,例如聊天工具QQ在處理發送短消息時就是使用了UDP的方式。不難想象,如果發送十幾個字的短消息也使用TCP協議進行一系列的驗證,將導致傳輸率大大下降。有誰願意用一個“反應遲鈍”的軟件進行網絡聊天呢?