1.OSI網絡7層模型
網絡協議設計者不應當設計一個單一、巨大的協議來為所有形式的通信規定完整的細節,而應把通信問題划分成多個小問題,然后為每一個小問題設計一個單獨的協議。這樣做使得每個協議的設計、分析、時限和測試比較容易。協議划分的一個主要原則是確保目標系統有效且效率高。為了提高效率,每個協議只應該注意沒有被其他協議處理過的那部分通信問題;為了主協議的實現更加有效,協議之間應該能夠共享特定的數據結構;同時這些協議的組合應該能處理所有可能的硬件錯誤以及其它異常情況。為了保證這些協議工作的協同性,應當將協議設計和開發成完整的、協作的協議系列(即協議族),而不是孤立地開發每個協議。在網絡歷史的早期,國際標准化組織(ISO)和國際電報電話咨詢委員會(CCITT)共同出版了開放系統互聯的七層參考模型。一台計算機操作系統中的網絡過程包括從應用請求(在協議棧的頂部)到網絡介質(底部) ,OSI參考模型把功能分成七個分立的層次。圖表示了OSI分層模型。
| OSI中的層 | 功能 | TCP/IP協議族 |
|---|---|---|
| 應用層 | 文件傳輸,電子郵件,文件服務,虛擬終端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet |
| 表示層 | 數據格式化,代碼轉換,數據加密 | ASCII、ASN.1、JPEG、MPEG |
| 會話層 | 解除或建立與別的接點的聯系 | NetBIOS、ZIP |
| 傳輸層 | 位數據段提供端對端的接口 | TCP,UDP,SPX |
| 網絡層 | 為數據包選擇路由,擁塞控制、網際互連 | IP,ICMP,OSPF,BGP,IGMP,ARP,RARP,IPX、RIP、OSPF |
| 數據鏈路層 | 傳輸有地址的幀以及錯誤檢測功能 | SLIP,CSLIP,PPP,MTU,ARP,RARP,SDLC、HDLC、PPP、STP、幀中繼 |
| 物理層 | 以二進制數據形式在物理媒體上傳輸數據 | ISO2110,IEEE802,IEEE802.2,EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45 |
OSI模型的七層分別進行以下的操作:
第一層:物理層
負責最后將信息編碼成電流脈沖或其它信號用於網上傳輸。它由計算機和網絡介質之間的實際界面組成,可定義電氣信號、符號、線的狀態和時鍾要求、數據編碼和數據傳輸用的連接器。如最常用的RS-232規范、10BASE-T的曼徹斯特編碼以及RJ-45就屬於第一層。所有比物理層高的層都通過事先定義好的接口而與它通話。如以太網的附屬單元接口(AUI),一個DB-15連接器可被用來連接層一和層二。
第二層:數據鏈路層
通過物理網絡鏈路提供可靠的數據傳輸。不同的數據鏈路層定義了不同的網絡和協議特征,其中包括物理編址、網絡拓撲結構、錯誤校驗、幀序列以及流控。物理編址(相對應的是網絡編址)定義了設備在數據鏈路層的編址方式;網絡拓撲結構定義了設備的物理連接方式,如總線拓撲結構和環拓撲結構;錯誤校驗向發生傳輸錯誤的上層協議告警;數據幀序列重新整理並傳輸除序列以外的幀;流控可能延緩數據的傳輸,以使接收設備不會因為在某一時刻接收到超過其處理能力的信息流而崩潰。數據鏈路層實際上由兩個獨立的部分組成,介質存取控制(Media Access Control,MAC)和邏輯鏈路控制層(Logical Link Control,LLC)。MAC描述在共享介質環境中如何進行站的調度、發生和接收數據。MAC確保信息跨鏈路的可靠傳輸,對數據傳輸進行同步,識別錯誤和控制數據的流向。一般地講,MAC只在共享介質環境中才是重要的,只有在共享介質環境中多個節點才能連接到同一傳輸介質上。IEEE MAC規則定義了地址,以標識數據鏈路層中的多個設備。邏輯鏈路控制子層管理單一網絡鏈路上的設備間的通信,IEEE 802.2標准定義了LLC。LLC支持無連接服務和面向連接的服務。在數據鏈路層的信息幀中定義了許多域。這些域使得多種高層協議可以共享一個物理數據鏈路。
第三層:網絡層
負責在源和終點之間建立連接。它一般包括網絡尋徑,還可能包括流量控制、錯誤檢查等。相同MAC標准的不同網段之間的數據傳輸一般只涉及到數據鏈路層,而不同的MAC標准之間的數據傳輸都涉及到網絡層。例如IP路由器工作在網絡層,因而可以實現多種網絡間的互聯。
第四層:傳輸層
向高層提供可靠的端到端的網絡數據流服務。傳輸層的功能一般包括流控、多路傳輸、虛電路管理及差錯校驗和恢復。流控管理設備之間的數據傳輸,確保傳輸設備不發送比接收設備處理能力大的數據;多路傳輸使得多個應用程序的數據可以傳輸到一個物理鏈路上;虛電路由傳輸層建立、維護和終止;差錯校驗包括為檢測傳輸錯誤而建立的各種不同結構;而差錯恢復包括所采取的行動(如請求數據重發),以便解決發生的任何錯誤。傳輸控制協議(TCP)是提供可靠數據傳輸的TCP/IP協議族中的傳輸層協議。
第五層:會話層
建立、管理和終止表示層與實體之間的通信會話。通信會話包括發生在不同網絡應用層之間的服務請求和服務應答,這些請求與應答通過會話層的協議實現。它還包括創建檢查點,使通信發生中斷的時候可以返回到以前的一個狀態。
第六層:表示層
提供多種功能用於應用層數據編碼和轉化,以確保以一個系統應用層發送的信息可以被另一個系統應用層識別。表示層的編碼和轉化模式包括公用數據表示格式、性能轉化表示格式、公用數據壓縮模式和公用數據加密模式。公用數據表示格式就是標准的圖像、聲音和視頻格式。通過使用這些標准格式,不同類型的計算機系統可以相互交換數據;轉化模式通過使用不同的文本和數據表示,在系統間交換信息,例如ASCII(American Standard Code for Information Interchange,美國標准信息交換碼);標准數據壓縮模式確保原始設備上被壓縮的數據可以在目標設備上正確的解壓;加密模式確保原始設備上加密的數據可以在目標設備上正確地解密。
表示層協議一般不與特殊的協議棧關聯,如QuickTime是Applet計算機的視頻和音頻的標准,MPEG是ISO的視頻壓縮與編碼標准。常見的圖形圖像格式PCX、GIF、JPEG是不同的靜態圖像壓縮和編碼標准。
第七層:應用層
最接近終端用戶的OSI層,這就意味着OSI應用層與用戶之間是通過應用軟件直接相互作用的。注意,應用層並非由計算機上運行的實際應用軟件組成,而是由向應用程序提供訪問網絡資源的API(Application Program Interface,應用程序接口)組成,這類應用軟件程序超出了OSI模型的范疇。應用層的功能一般包括標識通信伙伴、定義資源的可用性和同步通信。因為可能丟失通信伙伴,應用層必須為傳輸數據的應用子程序定義通信伙伴的標識和可用性。定義資源可用性時,應用層為了請求通信而必須判定是否有足夠的網絡資源。在同步通信中,所有應用程序之間的通信都需要應用層的協同操作。OSI的應用層協議包括文件的傳輸、訪問及管理協議(FTAM) ,以及文件虛擬終端協議(VIP)和公用管理系統信息(CMIP)等。
2. TCP/IP4層模型
TCP/IP分層模型(TCP/IP Layening Model)被稱作因特網分層模型(Internet Layering Model)、因特網參考模型(Internet Reference Model)。
ISO制定的OSI參考模型的過於龐大、復雜招致了許多批評。與此對照,由技術人員自己開發的TCP/IP協議棧獲得了更為廣泛的應用。如圖2-1所示,是TCP/IP參考模型和OSI參考模型的對比示意圖。
TCP/IP協議被組織成四個概念層,其中有三層對應於ISO參考模型中的相應層。ICP/IP協議族並不包含物理層和數據鏈路層,因此它不能獨立完成整個計算機網絡系統的功能,必須與許多其他的協議協同工作。
TCP/IP分層模型的四個協議層分別完成以下的功能:
第一層:網絡接口層包括用於協作IP數據在已有網絡介質上傳輸的協議。實際上TCP/IP標准並不定義與ISO數據鏈路層和物理層相對應的功能。相反,它定義像地址解析協議(Address Resolution Protocol,ARP)這樣的協議,提供TCP/IP協議的數據結構和實際物理硬件之間的接口。
第二層:網間層
對應於OSI七層參考模型的網絡層。本層包含IP協議、RIP協議(Routing Information Protocol,路由信息協議),負責數據的包裝、尋址和路由。同時還包含網間控制報文協議(Internet Control Message Protocol,ICMP)用來提供網絡診斷信息。
第三層:傳輸層
對應於OSI七層參考模型的傳輸層,它提供兩種端到端的通信服務。其中TCP協議(Transmission Control Protocol)提供可靠的數據流運輸服務,UDP協議(Use Datagram Protocol)提供不可靠的用戶數據報服務。
第四層:應用層
對應於OSI七層參考模型的應用層和表達層。因特網的應用層協議包括Finger、Whois、FTP(文件傳輸協議)、Gopher、HTTP(超文本傳輸協議)、Telent(遠程終端協議)、SMTP(簡單郵件傳送協議)、IRC(因特網中繼會話)、NNTP(網絡新聞傳輸協議)等。
3.TCP/IP協議棧與數據包封裝
TCP/IP網絡協議棧分為應用層(Application)、傳輸層(Transport)、網絡層(Network)和鏈路層(Link)四層,如下圖所示。

TCP/IP協議棧
兩台計算機通過TCP/IP協議通訊的過程如下所示。

傳輸層及其以下的機制由內核提供,應用層由用戶進程提供,應用程序對通訊數據的含義進行解釋,而傳輸層及其以下處理通訊的細節,將數據從一台計算機通過一定的路徑發送到另一台計算機。應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation),如下圖所示。

不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀(frame)。數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,最后將應用層數據交給應用程序處理。
上圖對應兩台計算機在同一網段中的情況,如果兩台計算機在不同的網段中,那么數據從一台計算機到另一台計算機傳輸過程中要經過一個或多個路由器,如下圖所示。

其實在鏈路層之下還有物理層,指的是電信號的傳遞方式,比如現在以太網通用的網線(雙絞線)、早期以太網采用的的同軸電纜(現在主要用於有線電視)、光纖等都屬於物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)是工作在物理層的網絡設備,用於雙絞線的連接和信號中繼(將已衰減的信號再次放大使之傳得更遠)。
鏈路層有以太網、令牌環網等標准,鏈路層負責網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作。交換機是工作在鏈路層的網絡設備,可以在不同的鏈路層網絡之間轉發數據幀(比如十兆以太網和百兆以太網之間、以太網和令牌環網之間),由於不同鏈路層的幀格式不同,交換機要將進來的數據包拆掉鏈路層首部重新封裝之后再轉發。
網絡層的IP協議是構成Internet的基礎。Internet上的主機通過IP地址來標識,Internet上有大量路由器負責根據IP地址選擇合適的路徑轉發數據包,數據包從Internet上的源主機到目的主機往往要經過十多個路由器。路由器是工作在第三層的網絡設備,同時兼有交換機的功能,可以在不同的鏈路層接口之間轉發數據包,因此路由器需要將進來的數據包拆掉網絡層和鏈路層兩層首部並重新封裝。IP協議不保證傳輸的可靠性,數據包在傳輸過程中可能丟失,可靠性可以在上層協議或應用程序中提供支持。
網絡層負責點到點(point-to-point)的傳輸(這里的“點”指主機或路由器),而傳輸層負責端到端(end-to-end)的傳輸(這里的“端”指源主機和目的主機)。傳輸層可選擇TCP或UDP協議。TCP是一種面向連接的、可靠的協議,有點像打電話,雙方拿起電話互通身份之后就建立了連接,然后說話就行了,這邊說的話那邊保證聽得到,並且是按說話的順序聽到的,說完話掛機斷開連接。也就是說TCP傳輸的雙方需要首先建立連接,之后由TCP協議保證數據收發的可靠性,丟失的數據包自動重發,上層應用程序收到的總是可靠的數據流,通訊之后關閉連接。UDP協議不面向連接,也不保證可靠性,有點像寄信,寫好信放到郵筒里,既不能保證信件在郵遞過程中不會丟失,也不能保證信件是按順序寄到目的地的。使用UDP協議的應用程序需要自己完成丟包重發、消息排序等工作。
目的主機收到數據包后,如何經過各層協議棧最后到達應用程序呢?整個過程如下圖所示。

以太網驅動程序首先根據以太網首部中的“上層協議”字段確定該數據幀的有效載荷(payload,指除去協議首部之外實際傳輸的數據)是IP、ARP還是RARP協議的數據報,然后交給相應的協議處理。假如是IP數據報,IP協議再根據IP首部中的“上層協議”字段確定該數據報的有效載荷是TCP、UDP、ICMP還是IGMP,然后交給相應的協議處理。假如是TCP段或UDP段,TCP或UDP協議再根據TCP首部或UDP首部的“端口號”字段確定應該將應用層數據交給哪個用戶進程。IP地址是標識網絡中不同主機的地址,而端口號就是同一台主機上標識不同進程的地址,IP地址和端口號合起來標識網絡中唯一的進程。
注意,雖然IP、ARP和RARP數據報都需要以太網驅動程序來封裝成幀,但是從功能上划分,ARP和RARP屬於鏈路層,IP屬於網絡層。雖然ICMP、IGMP、TCP、UDP的數據都需要IP協議來封裝成數據報,但是從功能上划分,ICMP、IGMP與IP同屬於網絡層,TCP和UDP屬於傳輸層。本文對RARP、ICMP、IGMP協議不做進一步介紹,有興趣的讀者可以看參考資料。
4.以太網的幀格式
其中的源地址和目的地址是指網卡的硬件地址(也叫MAC地址),長度是48位,是在網卡出廠時固化的。用ifconfig命令看一下,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。類型字段有三種值,分別對應IP、ARP、RARP。幀末尾是CRC校驗碼。
以太網幀中的數據長度規定最小46字節,最大1500字節,ARP和RARP數據包的長度不夠46字節,要在后面補填充位。最大值1500稱為以太網的最大傳輸單元(MTU),不同的網絡類型有不同的MTU,如果一個數據包從以太網路由到撥號鏈路上,數據包長度大於撥號鏈路的MTU了,則需要對數據包進行分片(fragmentation)。ifconfig命令的輸出中也有“MTU:1500”。注意,MTU這個概念指數據幀中有效載荷的最大長度,不包括幀首部的長度。
5.ARP數據報格式
在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬件地址。ARP協議就起到這個作用。源主機發出ARP請求,詢問“IP地址是192.168.0.1的主機的硬件地址是多少”,並將這個請求廣播到本地網段(以太網幀首部的硬件地址填FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機,將自己的硬件地址填寫在應答包中。
每台主機都維護一個ARP緩存表,可以用arp -a命令查看。緩存表中的表項有過期時間(一般為20分鍾),如果20分鍾內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來獲得目的主機的硬件地址。
6.IP協議
iPv4的IP地址長度為4字節,通常采用點分十進制表示法(dotted decimal representation)例如0xc0a80002表示為192.168.0.2。Internet被各種路由器和網關設備分隔成很多網段,為了標識不同的網段,需要把32位的IP地址划分成網絡號和主機號兩部分,網絡號相同的各主機位於同一網段,相互間可以直接通信,網絡號不同的主機之間通信則需要通過路由器轉發。
ipv4把所有IP地址分為五類:
A類 0.0.0.0到127.255.255.255
一個A類網絡可容納的地址數量最大,一個B類網絡的地址數量是65536,一個C類網絡的地址數量是256。D類地址用作多播地址,E類地址保留未用。
隨着Internet的飛速發展,這種划分方案的局限性很快顯現出來,大多數組織都申請B類網絡地址,導致B類地址很快就分配完了,而A類卻浪費了大量地址。這種方式對網絡的划分是flat的而不是層級結構(hierarchical)的,Internet上的每個路由器都必須掌握所有網絡的信息,隨着大量C類網絡的出現,路由器需要檢索的路由表越來越龐大,負擔越來越重。
針對這種情況提出了新的划分方案,稱為CIDR(Classless Interdomain Routing)。網絡號和主機號的划分需要用一個額外的子網掩碼(subnet mask)來表示,而不能由IP地址本身的數值決定,也就是說,網絡號和主機號的划分與這個IP地址是A類、B類還是C類無關,因此稱為Classless的。這樣,多個子網就可以匯總(summarize)成一個Internet上的網絡,例如,有8個站點都申請了C類網絡,本來網絡號是24位的,但是這8個站點通過同一個ISP(Internet service provider)連到Internet上,它們網絡號的高21位是相同的,只有低三位不同,這8個站點就可以匯總,在Internet上只需要一個路由表項,數據包通過Internet上的路由器到達ISP,然后在ISP這邊再通過次級的路由器選路到某個站點。
下面舉兩個例子:
| IP地址 | 140.252.20.68 | 8C FC 14 44 |
| 子網掩碼 | 255.255.255.0 | FF FF FF 00 |
| 網絡號 | 140.252.20.0 | 8C FC 14 00 |
| 子網地址范圍 | 140.252.20.0~140.252.20.255 |
| IP地址 | 140.252.20.68 | 8C FC 14 44 |
| 子網掩碼 | 255.255.255.240 | FF FF FF F0 |
| 網絡號 | 140.252.20.64 | 8C FC 14 40 |
| 子網地址范圍 | 140.252.20.64~140.252.20.79 | |
可見,IP地址與子網掩碼做與運算可以得到網絡號,主機號從全0到全1就是子網的地址范圍。IP地址和子網掩碼還有一種更簡潔的表示方法,例如140.252.20.68/24,表示IP地址為140.252.20.68,子網掩碼的高24位是1,也就是255.255.255.0。
如果一個組織內部組建局域網,IP地址只用於局域網內的通信,而不直接連到Internet上,理論上使用任意的IP地址都可以,但是RFC 1918規定了用於組建局域網的私有IP地址,這些地址不會出現在Internet上,如下表所示。
-
10.*,前8位是網絡號,共16,777,216個地址
-
172.16.*到172.31.*,前12位是網絡號,共1,048,576個地址
-
192.168.*,前16位是網絡號,共65,536個地址
使用私有IP地址的局域網主機雖然沒有Internet的IP地址,但也可以通過代理服務器或NAT(網絡地址轉換)等技術連到Internet上。
還有一些不能用作主機IP地址的特殊地址:
-
目的地址為255.255.255.255,表示本網絡內部廣播,路由器不轉發這樣的廣播數據包。
-
主機號全為0的地址只表示網絡而不能表示某個主機,如192.168.10.0(假設子網掩碼為255.255.255.0)。
-
目的地址的主機號為全1,表示廣播至某個網絡的所有主機,例如目的地址192.168.10.255表示廣播至192.168.10.0網絡(假設子網掩碼為255.255.255.0)。
7.路由
- 路由(名詞): 數據包從源地址到目的地址所經過的路徑,由一系列路由節點組成。
- 路由(動詞): 某個路由節點為數據報選擇投遞方向的選路過程。
- 路由節點: 一個具有路由能力的主機或路由器,它維護一張路由表,通過查詢路由表來決定向哪個接口發送數據包。
- 接口: 路由節點與某個網絡相連的網卡接口。
- 路由表: 由很多路由條目組成,每個條目都指明去往某個網絡的數據包應該經由哪個接口發送,其中最后一條是缺省路由條目。
- 路由條目: 路由表中的一行,每個條目主要由目的網絡地址、子網掩碼、下一跳地址、發送接口四部分組成,如果要發送的數據包的目的網絡地址匹配路由表中的某一行,就按規定的接口發送到下一跳地址。
- 缺省路由條目: 路由表中的最后一行,主要由下一跳地址和發送接口兩部分組成,當目的地址與路由表中其它行都不匹配時,就按缺省路由條目規定的接口發送到下一跳地址。
-
-
-
-
-
-



