您好,登錄后才能下訂單哦!
最知名的網絡協議就是TCP/IP協議了。事實上,TCP/IP協議是一個協議集,由很多協議組成。TCP和IP
協議是這個協議集中兩個,TCP/IP協議集是用這兩個協議來命名的。
TCP/IP協議集中的每一個協議涉及的功能,都用程序來實現。TCP協議和IP協議有對應的TCP程序和IP程
序。
根據TCP協議我們了解到,網絡協議是一個約定,該約定規定了:
① 實現這個協議的程序要完成什么功能;
② 如何完成這個功能;
③ 實現這個功能需要的通訊的報文包的格式。
如果一個網絡協議涉及了硬件的功能,通常就被叫做標準,而不再稱為協議了。網絡標準還需要約定硬
件的物理尺寸和電氣特性。
ISO發布了注明的開放系統互聯參考模型(Open System Interconnection Reference Model),簡稱OSI。
OSI模型詳細規定了網絡需要實現的功能、實現這些功能的方法、以及通訊報文包的格式。但是,沒有
一個廠家遵循OSI模型來開發網絡產品。不論是網絡操作系統還是網絡設備,不是遵循廠家自己制訂的
協議(Novell公司的Novell協議,蘋果公司的AppleTalk、微軟公司的NetBEUI、IBM公司的SNA),就是
遵循某個政府部門制訂的協議(如TCP/IP協議)。而現在TCP/IP已經占主流。
4.1 OSI模型
圖4.1 OSI模型的7層協議
當需要把一個數據文件發送往另外一個主機之前,這個數據要經歷這7層協議每一層的加工。例如我
們要把一封郵件發送往服務器,當我們在Outlook中編輯完成,按發送鍵后,Outlook就會把我們的
郵件交給第7層中按POP3或SMTP協議編寫的程序。POP3或SMTP程序按自己的協議整理數據格式,然后
發給下面層的某個程序。每個層(除了物理層,它是硬件電路和網線,不再加工數據)也會對數據
格式做一些加工,還會用報頭的形式增加一些信息。經過加工后的數據以幀的形式交給物理層,物
理層的電路再以位流的形式發送數據到網絡中。
接受方的過程是相反的,物理層接收到數據后,以相反的順序遍歷OSI的所有層,使接收方收到這個
電子郵件。接收方的主機,每一層都會閱讀本層對應的報頭,拆除自己層的報頭把數據傳送給上一
層。
圖4.2 OSI模型的7層協議功能描述
4.2 TCP/IP協議
圖4.3 OSI模型和TCP/IP協議集模型對比
TCP/IP協議是一個協議集,它由十幾個協議組成。
圖4.4 TCP/IP協議集中的各個協議
主要的TCP/IP協議有:
. 應用層:FTP,TFTP,Http,SMTP,POP3,SNMP,DNS,Telnet
. 傳輸層:TCP,UDP
. 網絡層:IP,ARP,RARP,ICMP,RIP,IGRP,OSPF
4.2.1 應用層協議
FTP:文件傳輸協議。用于主機間文件交換。FTP使用TCP協議進行數據傳輸,是一個可靠的、
面向連接的協議。FTP支持二進制文件和ASCII協議。
TFTP:簡單的文件傳輸協議。它比FTP簡易,是一個非面向連接的協議,使用UDP進行傳輸,
因此傳送速度更快。該協議多用于局域網中,交換機和路由器把自己的配置文件傳
送到主機上。
SMTP:簡單郵件傳輸協議。
POP3:郵件傳輸協議,比SMTP更科學,本不屬于TCP/IP協議集。
Telnet:遠程終端仿真協議。可以使一臺主機遠程登錄到其他機器,成為那臺遠程主機的顯
示和鍵盤終端。
DNS:域名解析協議。根據域名,解析出對應的IP地址。
SNMP:簡單網絡管理協議。網管工作站搜集、了解網絡中交換機、路由器等設備的工作狀態
所使用的協議。
NFS:網絡文件系統協議。允許網絡上的其他主機共享某臺機器目錄的協議。
4.2.2 傳輸層協議
TCP/IP協議集在傳輸層只有兩個協議:傳輸控制協議(TCP)和用戶數據報協議(UDP)。
TCP協議要完成5個主要功能:
. 端口地址尋址;
. 連接的建立、維護與拆除;
. 流量控制;
. 出錯重發;
. 數據分段。
(1) 端口地址尋址
端口地址到底有什么用呢?當數據報到達主機后,鏈路層的程序會通過數據報的幀報尾
進行CRC校驗,校驗合格的數據幀被去掉幀報頭向上交給IP程序。IP程序去掉報頭后,
再向上把數據交給TCP程序。待TCP程序把TCP報頭去掉后,它把數據交給誰呢?這時,
TCP程序就可以通過TCP報頭中由源主機指出的端口地址,了解到發送主機希望目標主機
的什么應用程序接收這個數據報。
因此,端口地址尋址是對應用層程序尋址。
圖4.5 常用端口地址
詳細的端口號編排可以在TCP/IP的注釋RFC1700查到。
TCP/IP規定端口號的編排方法:
低于255的編號:用于FTP、Http這樣的公共應用層協議。
255到1023的編號:提供給操作系統開發公司,為市場化的應用層協議編號。
大于1023的編號:普通應用程序。
端口號的編碼范圍從0到65535。從1024到49151的地址范圍需要注冊使用,49152到
65535的地址范圍可以自由使用。
端口地址被源主機在數據發送前封裝在其TCP報頭或UDP報頭中。圖4.6給出了TCP報頭
的格式:
圖4.6 TCP報頭格式
計算機網絡中約定,當一臺主機向另一臺主機發出連接請求時,這臺發送請求的機器被
視為客戶機,而那臺接受請求的機器被視為服務器。通常,客戶機在給自己的程序編端
口號時,隨機使用一個大于1023的編號。例如一臺主機訪問WWW服務器,在其TCP報頭中
的源端口地址封裝為1391,目標端口地址則需要為80,指明與Http通訊。
(2) TCP連接的建立、維護與拆除
TCP協議是一個面向連接的協議,所謂面向連接,是指一臺主機需要和另外一臺主機通
訊時,需先呼叫對方,請求與對方建立連接,只有對方同意,才能開始通訊。
所謂呼叫,就是連接的發起方發送一個“建立連接請求”的報文給對方,對方如果同
意這個連接,就簡單的發回一個“連接響應”的應答包,連接就建立起來了。
圖4.7描述了TCP建立連接的過程。
圖4.7 建立TCP連接
主機A希望與主機B建立連接以交換數據,它的TCP程序首先構造一個請求連接報文包給對
方,請求連接包的TCP報頭中報文性質碼標志為SYN(見圖4.8),聲明是一個“連接請求
包”。主機B的TCP程序收到主機A的連接請求后,如果同意這個連接,就發回一個“確
認連接包”,應答A主機。主機B的“確認連接包”的TCP報頭中的報文性質碼標志為
ACK。
圖4.8 SYN標志位和ACK標志位
SYN和ACK是TCP報頭中報文性質碼的連接標志位(見圖4.8),建立連接時,SYN標志置
1,ACK標志置0,表示本報文包是個同步包;確認連接包,ACK置1,SYN置1,表示本報
文包是確認包。
從圖4.7可以看到,建立連接的第3個包,是主機A對主機B的連接確認。主機A為什么要發
送第3個包呢?
注:這里的第3個包是這樣計算得來的:主機A連接請求包是第1個包,主機B的應答包是
第2個包,主機A收到主機B的應答包后再發的包(ACK=y+1)就是第3個包了。
繼續討論為什么要發第3個包。考慮這樣一種情況:主機A發送一個請求包,但這個請求
包在傳輸過程中丟失,主機A再重發連接請求包,第2個連接請求包到達主機B,保證了
連接的建立。但是如果連接請求包沒有丟失而只是網絡慢而導致主機A超時呢?這就會
使主機B收到兩個連接請求包,使主機B誤以為第2個連接請求是主機A的又一個請求。第
3個確認包就是為防止這樣的錯誤而設計的。這樣的連接機制被稱為三次握手。
從TCP程序設計的深層看,源主機發送“連接請求包”是為了觸發對方主機的TCP程序開
辟一個對應的TCP進程。你的主機可以邀請對方開辟多個TCP進程,同時進行多路通訊。
FLOOD******就是采用無休止的邀請對方建立連接,使對方主機開辟無數個TCP進程與
之連接,最后耗盡對方主機資源。
可以理解,當通訊結束時,發起連接的主機應該發送拆除連接的報文包,通知對方主機
關閉響應的TCP進程,釋放資源。拆除連接報文包的TCP報頭中,報文性質碼的FIN標志
置1。
為了防止連接雙方的一側出現故障后異常關機,而另外一方的TCP進程無休止地駐留,任
何一方如果發現對方長時間沒有通訊流量,就會拆除連接。
但是有時確實有一段時間沒有流量,但還需要保持連接,就需要發送空的報文包,以維
持這個連接。維持連接的報文包叫:keepalive。為了在一段時間內沒有數據發送但還
需要保持連接而發送keepalive包,被稱為連接的維護。
(3) TCP報頭中的報文序號
TCP是將應用層交給的數據分段后發送的。為了支持數據出錯重發和數據段組裝,TCP為
每個數據段封裝的報頭中,設計了兩個數據報序號字段,分別稱為發送序號和確認序
號。
出錯重發是指一旦發現有丟失的數據段,可以重發丟失的數據,以保證數據傳輸的完整
性。如果數據沒有分段,出錯后源主機就不得不重發整個數據。為了確認丟失的數據是
哪個數據段,報文就需要安裝序號。
數據分段可以使報文在網絡中的傳輸非常靈活。一個數據的各個分段,可以選擇不同的
路徑到達目標主機。由于網絡中各條路徑在傳輸速度上不一致性,有可能前面發出的數
據段后到達,而后出發的數據段先到達。為了使目標主機能夠按照正確的次序重新裝配
數據,也需要在數據段的報頭中安裝序號。
TCP報頭中的第3,4個字段分別是發送序號和確認序號。發送序號是指本數據段是第幾個
報文包,確認序號是指對方發來的下一個數據段該是第幾號段。
圖4.9 發送序號與確認序號
(4) PAR出錯重發機制
在網絡中有兩種情況會丟失數據包。如果網絡設備的負荷太大,當其數據包緩沖區滿的
時候,就會丟失數據包。另外一種情況是,如果在傳輸中因為噪聲干擾、數據碰撞或設
備故障,數據包就會受到損壞。在接受主機的鏈路層接受校驗時就會被丟棄。
發送主機應發現丟失的數據段,并重發出錯的數據。
TCP使用PAR(Positive Acknowledgement and Retransmission)的出錯重發方案。
TCP程序在發送數據時,先把數據段都放到其發送窗口中,然后發送出去。然后,PAR會
為發送窗口中每個已發送的數據段啟動定時器,被對方主機確認收到的數據,將從發送
窗口中刪除。如果某數據段的定時時間到,仍然沒有收到確認,PAR就會重發這個數據
段。
圖4.10 PAR出錯重發機制
在圖4.10中,發送主機的2號數據段丟失,接收主機只確認了1號數據段。發送主機從發
送窗口中刪除已確認的1號包,放入4好數據段,將2,3,4號發送出去,其中,2,3是重發
的數據段。你會發現,盡管數據段3已經被接收主機收到,仍然被重發,這顯然是一種
浪費。但是PAR機制只能這樣處理,因為只有一個確認序號字段,如果有丟失大于一個數
據段,一個確認序號無法記錄多個丟失數據包。而單獨設計一個包來通知源主機也不
行,因為這個通知包也丟失了該怎么辦呢?
(5) TCP流量控制
如果接收主機同時與多個TCP通訊,接收的數據包的重新組裝需要在內存中排隊。如果
接收主機的負荷太大,因為內存緩沖區滿,就有可能丟失數據。因此,當接收主機無法
承受發送主機的發送速度時,就需要通知發送主機放慢數據的發送速度。事實上,接收
主機并不是通知發送主機放慢發送速度,而是直接控制發送主機的發送窗口大小。接收
主機如果需要對方放慢數據的發送速度,就減小數據報中TCP報頭里“發送窗口”字段
的數值。對方主機必須服從這個數值,減小發送窗口的大小,從而降低了發送速度。
圖4.11 TCP流量控制
極端的情況,如果接收主機把窗口大小字段設為0,發送主機將暫停發送數據。有趣的
是,盡管發送主機接受接收主機的窗口設置降低了發送速度,但是,發送主機會自己漸
漸擴大窗口,這樣做的目的是盡可能的提高數據的發送速度。也就是說,發送主機會降
低發送速度,但不一定會減小窗口大小。
在實際中,TCP報頭中的窗口字段不是用數據段的個數來說明大小,而是以字節數來說
明大小。
(6) UDP協議
TCP/IP協議集中設計了另外一個傳輸層協議:無連接數據傳輸協議(Connectionless
Data Transport Protocol)。這是一個簡化了的傳輸層協議。UDP去掉了TCP協議5個功
能中的3個:
連接建立、流量控制、出錯重發,只保留端口尋址和數據分段2個功能。
UDP通過犧牲可靠性換得通訊效率的提供。對于那些數據可靠性要求不高的數據傳輸,
可以使用UDP協議完成。如DNS,SNMP,TFTP,DHCP。
UDP的報頭格式非常簡單,核心內容只有源端口地址和目標端口地址兩個字段。DHCP的
細節詳見RFC768。
圖4.12 UDP報頭格式
UDP程序需要與TCP一樣完成端口地址尋址和數據分段兩個功能。但是它不知道數據包是
否到達目標主機,接收主機也不能抑制發送數據的速度。由于數據報中不再有報文序
號,一旦數據包沿不同路徑到達目標主機的次序出現變化,目標主機也無法按正確的次
序糾正這樣的錯誤。
4.2.3 網絡層協議
TCP/IP協議集中最重要的網絡層協議是IP和ARP。除了這兩個協議外,網絡層還有一些其
它的協議,如RARP,DHCP,ICMP,RIP,IGRP,OSPF等。這些協議的功能是:
IP協議:
用于將多個包交換網絡連接起來的。
ARP(Address Resolution Protocol)協議:
根據IP地址獲取MAC地址。
RARP(Reverse Address Resolution Protocol)協議:
將局域網中某個主機的MAC地址轉換為IP地址。
BOOTP(Bootstrap Protocol)協議:
是一種引導協議,基于IP/UDP協議,也稱自舉協議,是DHCP協議的前身。BOOTP用
于無盤工作站的局域網中,可以讓無盤工作站從一個中心服務器上獲得IP地址。通過
BOOTP協議可以為局域網中的無盤工作站分配動態IP地址,這樣就不需要管理員去為
每個用戶去設置靜態IP地址。
DHCP(Dynamic Host Configuration Protocol)協議:
是一個局域網的網絡協議,使用UDP協議工作, 主要有兩個用途:給內部網絡或網
絡服務供應商自動分配IP地址,給用戶或者內部網絡管理員作為對所有計算機作中央
管理的手段,在RFC 2131中有詳細的描述。DHCP有3個端口,其中UDP67和UDP68
為正常的DHCP服務端口,分別作為DHCP Server和DHCP Client的服務端口;546號
端口用于DHCPv6 Client,而不用于DHCPv4,是為DHCP failover服務,這是需要特別
開啟的服務,DHCP failover是用來做“雙機熱備”的。
ICMP(Internet Control Message Protocol)協議:
Internet控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間
傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身
的消息。
RIP協議:
是一種內部網關協議(IGP),是一種動態路由選擇協議,用于自治系統(AS)內的路由
信息的傳遞。RIP協議基于距離矢量算法(DistanceVectorAlgorithms),使用“跳數”(即
metric)來衡量到達目標地址的路由距離。這種協議的路由器只關心自己周圍的世界,只與
自己相鄰的路由器交換信息,范圍限制在15跳(15度)之內,再遠,它就不關心了。RIP應
用于OSI網絡七層模型的應用層。
各廠家定義的管理距離(AD,即優先級)如下:
華為定義的優先級是100,思科定義的是120。
IGRP(Interior Gateway Routing Protocol)協議:
是一種內部網關路由協議,它由Cisco公司八十年代中期設計。
OSPF(Open Shortest Path First 開放式最短路徑優先)協議:
是一個內部網關協議(Interior Gateway Protocol,簡稱IGP),用于在單一自治系統
(Autonomous System,AS)內決策路由。
4.3 IEEE 802標準
TCP/IP沒有對OSI模型最下面兩層的實現,TCP/IP協議主要是在網絡操作系統中實現的。主機中的
應用層、傳輸層、網絡層任務由TCP/IP程序來完成,而主機OSI模型的最下面兩層數據鏈路層和物
理層的功能由網卡制造廠商的程序和硬件電路來完成。
網絡設備廠商在制造網卡、交換機、路由器的時候,其數據鏈路層和物理層的功能是依照IEEE
802規范,也沒有按照OSI的具體協議開發。
IEEE制訂的802規范標準規定了數據鏈路層和物理層功能是:
. 物理地址尋址
發送方需要對數據包安裝幀報頭,將物理地址封裝在幀報頭中。接收方能夠根據物理地址識別
是否是發給自己的數據。
. 介質訪問控制
如何使用共享傳輸介質,避免介質使用沖突。
知名的介質訪問控制技術有以太網技術、令牌網技術、FDDI技術等。
. 數據幀校驗
數據幀在傳輸過程中是否受到損壞,丟棄損壞了的幀。
. 數據的發送和接收
操作內存中的待發送數據向物理層電路中發送的過程。在接收方完成相反的操作。
IEEE 802根據不同功能,有相應的協議規范,統稱為IEEE 802x標準。
圖4.13列出了現在流行的IEEE 802標準。
圖4.13 IEEE協議標準
由圖4.13可見,OSI模型把數據鏈路層又劃分為兩個子層:
邏輯鏈路控制(LLC: Logical Link Control)子層
和
介質訪問控制(MAC: Media Access Control)子層。
LLC子層的任務是提供網絡層程序與鏈路層程序的接口,使得鏈路層主體MAC子層的程序設計獨立于
網絡層的某個具體協議程序。這樣設計是有必要的,例如新的網絡層協議出現時,只需要為這個新
的網絡層協議程序寫出對應的LLC子層接口程序,就可以使用已有的鏈路層程序,而不需要全部推翻
過去的鏈路層程序。
MAC子層完成所有OSI對數據鏈路層要求完成的功能:物理地址尋址、介質訪問控制、數據幀校驗、
數據發送與接收的控制。
IEEE 802.2協議對應OSI模型的LLC子層。
IEEE 802x的核心標準是10余個跨越MAC子層和物理層的設計規范。下面列出了一些常見的IEEE 802
協議:
IEEE 802.3
以太網標準協議規范,提供10M局域網的介質訪問控制子層和物理層設計標準。
IEEE 802.3u
快速以太網標準規范,提供100M局域網的介質訪問控制子層和物理層設計標準。
IEEE 802.3ab
千兆以太網標準規范,提供1000M局域網的介質訪問控制子層和物理層設計標準。
IEEE 802.5
令牌環網標準規范,提供令牌環網的介質訪問控制子層和物理層設計標準。
IEEE 802.11
無線局域網標準規范,提供2.4G微波波段1-2Mbps低速WLAN的介質訪問控制子層和物理層設計標準。
IEEE 802.11a
無線局域網標準規范,提供5G微波波段54Mbps高速WLAN的介質訪問控制子層和物理層設計標準。
IEEE 802.11b
無線局域網標準規范,提供2.4G微波波段11Mbps高速WLAN的介質訪問控制子層和物理層設計標準。
IEEE 802.11g
無線局域網標準規范,提供IEEE 802.11a和IEEE 802.11b兼容標準。
IEEE 802.14
有線電視網標準規范,提供Cable Model技術所設計的介質訪問控制子層和物理層設計標準。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。