[TOC]
# 網絡傳輸模型
OSI七層和TCP/IP四層的區別:
* TCP/IP他是一個協議簇;而OSI則是一個模型,且TCP/IP的開發時間在OSI之前;
* TCP/IP是由一些交互性的模塊做成的分層次的協議,其中每個模塊提供特定的功能;OSI則指定了哪個功能是屬于哪一層的;
* OSI是現有模型后有協議,TCP/IP是先有協議后有模型。
## OSI 七層模型
OSI(Open?System?Interconnect)的縮寫,意為開放式系統互聯包括?物理層、數據鏈路層、物理層、傳輸層、會話層、表示層、應用層;
第一層:物理層(PhysicalLayer)
規定通信設備的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路連接。在這一層,數據的單位稱為比特(bit)。屬于物理層定義的典型規范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等
第二層:數據鏈路層(DataLinkLayer):
在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,并進行各電路上的動作系列。數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。在這一層,數據的單位稱為幀(frame)。數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。
第三層是網絡層
在 計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。網絡層將數據鏈路層提供的幀組成數據包,包中封裝有網絡層包頭,其中含有邏輯地址信息- -源站點和目的站點地址的網絡地址。地址解析和路由是3層的重要目的。網絡層還可以實現擁塞控制、網際互連等功能。在這一層,數據的單位稱為數據包(packet)。網絡層協議的代表包括:IP、IPX、RIP、OSPF等。
第四層是處理信息的傳輸層
第4層的數據單元也稱作數據包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的數據單元稱為段 (segments)而UDP協議的數據單元稱為“數據報(datagrams)”。這個層負責獲取全部信息,因此,它必須跟蹤數據單元碎片、亂序到達的 數據包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(最終用戶到最終用戶)的透明的、可靠的數據傳輸服務。所為透明的傳輸是指在通信過程中 傳輸層對上層屏蔽了通信傳輸系統的具體細節。傳輸層協議的代表包括:TCP、UDP、SPX等。
第五層是會話層
這一層也可以稱為會晤層或對話層,在會話層及以上的高層次中,數據傳送的單位不再另外命名,而是統稱為報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如服務器驗證用戶登錄便是由會話層完成的。
第六層是表示層
這一層主要解決用戶信息的語法表示問題。它將欲交換的數據從適合于某一用戶的抽象語法,轉換為適合于OSI系統內部使用的傳送語法。即提供格式化的表示和轉換數據服務。數據的壓縮和解壓縮, 加密和解密等工作都由表示層負責。
第七層應用層
應用層為操作系統或網絡應用程序提供訪問網絡服務的接口。應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。
## TCP/IP模型
TCP/IP(Transmission Control Protocol/Internet Protocol 傳輸控制協議/網際協議)模型共分為四層:應用層、傳輸層、網絡層、數據鏈路層(網絡接口層)
第一層:數據鏈路層
對應OSI的數據鏈路層、物理層,負責接收IP數據包并通過網絡發送,或者從網絡上接收物理幀,抽出IP數據包,交給IP層;常見的接口層協議有: Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等
第二層:網絡層:
負責相鄰計算機之間的通信。其功能包括三方面。 處理來自傳輸層的分組發送請求,收到請求后,將分組裝入IP數據報,填充報頭,選擇去往信宿機的路徑,然后將數據報發往適當的網絡接口。 處理輸入數據報:首先檢查其合法性,然后進行尋徑--假如該數據報已到達信宿機,則去掉報頭,將剩下部分交給適當的傳輸協議;假如該數據報尚未到達信宿,則轉發該數據報。
處理路徑、流控、擁塞等問題。
第三層:傳輸層
提供應用程序間的通信。其功能包括:一、格式化信息流;二、提供可靠傳輸。為實現后者,傳輸層協議規定接收端必須發回確認,并且假如分組丟失,必須重新發送,即耳熟能詳的“三次握手”過程,從而提供可靠的數據傳輸。 傳輸層協議主要是:傳輸控制協議TCP(Transmission Control Protocol)和用戶數據報協議UDP(User Datagram protocol)。
第四層:應用層
向用戶提供一組常用的應用程序,比如電子郵件、文件傳輸訪問、遠程登錄等。遠程登錄TELNET使用TELNET協議提供在網絡其它主機上注冊的接口。TELNET會話提供了基于字符的虛擬終端。文件傳輸訪問FTP使用FTP協議來提供網絡內機器間的文件拷貝功能。 應用層協議主要包括如下幾個:FTP、TELNET、DNS、SMTP、NFS、HTTP。
# IP 地址簡介
IP地址(Internet Protocol Address)是指互聯網協議地址,又譯為網際協議地址。以下介紹了IP地址的相關信息:
* IP地址范圍
* IP地址的分類
* 特殊的IP地址
* 子網掩碼組成
## IP地址范圍
以下分為IPV4版本的兩種表達IP范圍的方式,一種是計算機的實際工作原理二級制,另外是方便人們理解記憶十進制。
* 二進制,00000000.00000000.00000000.00000000 - 11111111.11111111.1111111.1111111
* 十進制,0.0.0.0 - 255.255.255.255
目前IPV4版本的地址,大約有43億個IP地址(2^32次方)。
## IP地址分類
國際互聯網組織還將IPV4版本進行了分類,目前有五類:
* A: 0.0.0.0 - 127.255.255.255
* B: 128.0.0.0 - 192.255.255.255
* C: 192.0.0.0.0 - 223.255.255.255
* D: 224.0.0.0 - 239.255.255.255 (組播)
* E: 240.0.0.0 - 255.255.255.255 (科研)
根據RFC1918規定私有網絡范圍,以下私有網段不能在公網路由器中路由。
| RFC1918 規定區塊名 | IP地址區段 | IP數量 |
| --- | --- | --- |
| 24位區塊 | 10.0.0.0 – 10.255.255.255 | 16,777,216 |
| 20位區塊 | 172.16.0.0 – 172.31.255.255 | 1,048,576 |
| 16位區塊 | 192.168.0.0 – 192.168.255.255 | 65,536 |
**騰訊子網規范**
* A:騰訊云私網保留位 10.0.0.0 - 255.255.0.0 (cidr16-28)
* B:騰訊云私網保留位 172.16.0.0 - 255.255.0.0 (cidr16-28)
* C:騰訊云私網保留位 192.168.0.0 - 255.255.0.0 (cidr16-28)
## 特殊的IP地址
在IPV4版本分類網段的基礎上,還保留了特殊的IP地址,如下:
* 127.0.0.0 - 127.255.255.255 網絡回環的測試地址
* 0.0.0.0
* 255.255.255.255
## 子網掩碼組成
子網掩碼的作用主要是區分網絡地址與主機地址。譬如IP:192.168.0.0 ,子網掩碼255.255.255.0 ,cidr表示 24 (網絡位),主機位和網絡位的計算方式如下:
* 網絡位 32-8 =24
* 主機位 32-24= 8 ,2的8次方-2 = 254
## 如何計算子網掩碼
了解了基礎知識后,我們通過以下兩個個案例來分別看一下它的應用:
* 案例1:存放100個IP,那么CIDR表示法應該是多少
* 案例2:存放1000個IP,那么CIDR表示法應該是多少
**案例1**
問題:在一個子網中最多存放100個IP,CIDR表示法應該是多少,計算的過程是?
解題:192.168.0.0/24,其中25為網絡位,用32(總共長度)-25(網絡位)=7(主機位), 2的7次方=128,再減去2,126 > 100 ,所以網絡位25可以存放下這100個IP,用CIDR表示為25。
**案例2**
問題:我存放1000個IP,那么CIDR表示法應該是多少?計算過程是?
階梯:192.168.1.0/22(網絡位),主機位(10) , 地址 2^10 -2 = 1024-2 =1022 > 1000 個IP,用CIDR表示為22。
# TCP/IP
## TCP報文

以下為TCP的報文標志位:
* URG:指示報文中有緊急數據,應盡快傳送(相當于高優先級的數據)
* PSH:為1表示是帶有push標志的數據,指示接收方在接收到該報文段以后,應盡快將這個報文段交給應用程序,而不是在緩沖區排隊
* RST:TCP連接中出現嚴重差錯(如主機崩潰),必須釋放連接,在重新建立連接
* FIN:發送端已完成數據傳輸,請求釋放連接
* SYN:處于TCP連接建立過程 (Synchronize Sequence Numbers)
* ACK:確認序號標志,為1時表示確認號有效,為0表示報文中不含確認信息,忽略確認號字段
## 建立連接

介紹一下建立連接的三次握手過程:
* 客戶端向服務器發送請求,其首部中的同步比特 SYN 應置為1,并選擇序號 x,表明傳送數據時的第一個數據字節的序號是 x(設置初始段序號SEQ = x ,例如SEQ = 26500)
* 服務器接收到客戶端的請求,如同意,則發回確認SYN,ACK(ACK 26501)
* B 在確認報文段中應將 SYN 置為 1,其確認號ACK應為 x + 1(ACK 26501),同時也給出自己的選擇序號 y(設置初始段序號SEQ = y ,例如SEQ = 29010)。
* A 收到此報文段后,向 B 給出確認,其確認號應為 y + 1(ACK = 29011)。
* A 的 TCP 通知上層應用進程,連接已經建立。
當運行服務器進程的主機 B 的 TCP 收到主機 A 的確認后,也通知其上層應用進程,連接已經建立。
由于客戶對報文段進行了編號,它知道哪些序號是期待的,哪些序號是過時的。當客戶發現報文段的序號是一個過時的序號時,就會拒絕該報文段,這樣就不會造成重復連接。
## 關閉連接

介紹一下關閉連接的四次揮手過程:
* 客戶端進程發出連接釋放報文,并且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等于前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
* 服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
* 客戶端收到服務器的確認請求后,此時,客戶端就進入**FIN-WAIT-2(終止等待2)**狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
* 服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了**LAST-ACK(最后確認)**狀態,等待客戶端的確認。
* 客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。
* 服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
# 單位換算