本書采用理論與實踐相結合的方法介紹TCP/IP協議族各層協議。選取TCP/IP協議框架中每一層的主要協議,包括以太網和IEEE 802.3、ARP、IP、IP、RIP、OSPF、UDP、TCP、DNS、DHCP、SNMP、Telnet、HTTP和FTP等協議。在介紹協議基本原理的基礎上,利用在網絡仿真環境和真實環境中捕獲協議數據包,對協議工作過程進行深入的分析。
本書在介紹協議基本原理的基礎上,利用在網絡仿真環境和真實環境中捕獲協議數據包的實驗對協議工作過程進行深入分析學習,直觀地再現協議工作機制,激發讀者的學習興趣,提高工程實踐能力。
前言
TCP/IP原理是網絡工程專業的主干專業課程內容,同時也是計算機應用相關學科專業學生深入學習計算機網絡技術的主要內容。實現掌握TCP/IP協議族中協議工作原理這一學習目標的主要途徑需要通過網絡協議分析來達成。針對協議分析具有很強的理論性和實踐性的特點,同時考慮到計算機及相關專業的本科教育多強調應用能力的培養,編者旨在將本書編寫成為一種注重網絡協議分析實驗及操作,把TCP/IP原理的理論學習和實驗相互融合的教材。本書按照 TCP/IP協議框架的層次結構對網絡互連中的主要協議進行分析,采用實例分析的方法學習TCP/IP基本原理。選取TCP/IP協議框架中每一層的主要協議,包括鏈路層以太網和IEEE 802.3、ARP、ICMP、IP、RIP、OSPF、UDP、TCP、DNS、DHCP、SNMP、Telnet、HTTP和FTP等協議,由下而上地設計了26個實驗,利用在網絡仿真環境和真實環境中捕獲協議數據包,將抽象的網絡協議的PDU構成和工作原理通過實驗直觀形象地展示出來,使學生能將理論與實踐結合起來,加深對網絡協議的理解并掌握協議分析的基本方法。 本書編寫上特點突出,強化了在闡述TCP/IP協議概念和原理的基礎上動手實踐的內容。首先是重構實驗內容,把TCP/IP原理課程中對TCP/IP各個協議工作原理的學習,用當今主要的網絡協議學習工具和協議分析工具進行教學內容和實驗形式的重新設計,通過實驗強化學生的網絡工程實踐能力。其次,融合了多種當今主流的網絡協議分析和學習工具,綜合國內外相關教程的內容,可以使學生以不同的方式,從不同的角度來理解和掌握協議原理,獲得更大的學習自主性和積極性。實驗既可以在真實網絡設備上進行,也可以在虛擬或仿真環境中完成,使學生即使在課余時間也可以自己學習,更好地提高學習效果。第三是改變網絡協議的講解形式,采用基于協議分析工具的講解方式,讓學生在實際的網絡環境中通過再現網絡協議工作過程和解析網絡協議,真正做到“做中學”,全面徹底改變學生死記硬背網絡協議的學習方式,讓網絡協議的工作過程變得觸手可及,大大地提高了學生的學習興趣和學習效果,有效地提高學生的網絡工程實踐能力和應用能力。第四是教材中對路由器和交換機等網絡設備有要求的實驗都可在仿真條件下進行,因此即便實驗條件不夠完備,也可以完成相關的實驗教學。 本書適合已經學習過計算機網絡基礎課程且已掌握計算機網絡基本體系結構,需要進一步學習掌握具體的網絡協議工作原理的讀者使用。書中各章安排的實驗按學生實驗指導書的形式編寫,能夠直接滿足教學需要,因而也適合作為高校計算機網絡原理教學中協議分析實驗課程的教材使用。 全書共8章。除第1章外,其余各章的基本結構都按照先介紹基本概念和理論,再安排實驗內容的方式編排,實驗內容上覆蓋了各章主要的知識點。第1章為TCP/IP協議概述,介紹TCP/IP協議分層、封裝與分用的概念、RFC、應用編程的套接字和Libpcap編程接口。第2章為協議分析和學習工具,介紹協議分析器的基本原理和用途、Cisco Packet Tracer、Wireshark、GNS3、Sniffer pro和科來網絡分析系統的特點和用法,實驗內容安排了Cisco Packet Tracer、Wireshark、GNS3的使用方法學習。第3章為鏈路層協議分析,介紹鏈路層的作用、以太網的幀結構、SLIP和PPP幀結構、MTU和環回接口,實驗內容安排了DIX Ethernet V2幀、IEEE 802幀和PPP幀分析、環回接口實驗。第4章為ARP協議分析,介紹地址變換的概念、ARP協議的工作過程、協議報文格式和特殊的ARP,實驗內容安排了arp命令用法、ARP請求與應答、ARP代理和免費ARP實驗。第5章為 ICMP協議分析,介紹ICMP的作用、ICMP報文及類型,分析ICMP差錯報告、控制報文和查詢報文的特點、ping程序和Traceroute程序的機制和用法,實驗內容安排了ICMP回顯查詢報文、ping程序和IP選項、ICMP重定向差錯報文和Traceroute程序實驗。第6章為IP協議和IP選路協議,介紹IP協議的特點、IP數據報格式、路由表及選路基本原理、RIP協議和OSPF協議、IP分片與路徑MTU發現,實驗內容安排了route命令與靜態路由、ICMP主機和網絡不可達差錯、RIP協議分析、OSPF協議分析、IP分片和路徑MTU發現實驗。第7章為UDP及應用協議分析,介紹UDP協議特點、UDP的報文格式,基于UDP的應用協議DNS、DHCP和SNMP的有關概念、協議工作基本原理、報文格式和報文實例解析,實驗內容安排了DNS協議分析、DHCP協議分析和SNMP協議分析實驗。第8章為TCP及應用協議分析,介紹TCP段格式,TCP連接建立和拆除過程,Telnet遠程登錄的工作機制和報文實例解析,HTTP協議的工作特點、報文格式和實例解析,FTP協議的工作原理和報文實例解析,實驗內容安排了Telnet程序和TCP連接分析、HTTP協議分析、FTP協議分析實驗。附錄中給出了Cisco常用命令,以方便讀者使用Packet Tracer時查閱。根據教學時數和不同的要求,可以在本書的范圍內選擇相應的實驗內容,以滿足不同的教學需求。如8學時的實驗可采用以太網鏈路層幀格式分析實驗、ARP協議分析實驗、ICMP協議分析實驗、TCP及應用協議分析實驗4個實驗組合; 16學時的實驗可采用以太網鏈路層幀格式分析實驗、ARP協議分析實驗、ICMP協議分析實驗、RIP協議分析實驗、DHCP協議分析實驗、SNMP協議分析實驗、Telnet協議分析實驗、HTTP協議分析實驗8個實驗組合; 其余的實驗可以作為任選實驗或者課后學生自主安排實驗。SNMP協議涉及的相關原理內容較多一些,可視學時情況安排。如果能夠在實驗室以講練結合的方式使用本書進行教學,應當能用較少的學時獲得較好的學習效果。本書的所有實驗全部經過在教學過程中實際上機操作,讀者也可以根據自己的實驗網絡環境進行實驗內容調整。在清華大學出版社的網站(http://www.tup.tsinghua.edu.cn)上提供了本書的多媒體課件,讀者可下載使用。本書與課件使用中的相關問題請聯系fuhy@tup.tsinghua.edu.cn。本書由陳年主編,各章的內容尤其是實驗內容是近年來在TCP/IP原理課程教學實踐中不斷地進行補充完善和總結的結果。在此,對本書的編寫和出版給予支持和幫助的所有老師、同學和朋友表示衷心的感謝。限于編者的水平,不當之處在所難免,敬請各位讀者批評指正。任何意見、建議可以發至郵箱chennian_zg@126.com。編者2016年9月
目錄
第1章TCP/IP協議概述
1.1TCP/IP協議體系結構
1.1.1TCP/IP協議分層
1.1.2IP地址和端口
1.2封裝與分用
1.2.1封裝
1.2.2分用
1.3RFC
1.4應用編程接口
1.4.1套接字編程
1.4.2Libpcap編程
1.5小結
1.6習題
第2章協議分析和學習工具
2.1協議分析
2.1.1協議分析器的原理
2.1.2協議分析器的主要用途
2.2Cisco Packet Tracer
2.2.1Packet Tracer的工作界面
2.2.2利用Packet Tracer學習網絡協議分析
2.3Wireshark
2.3.1數據包嗅探器Wireshark
2.3.2Wireshark的工作界面
2.3.3Wireshark抓包的基本操作
2.4GNS3
2.4.1GNS3安裝和配置
2.4.2GNS3的使用
2.5Sniffer Pro
2.6科來網絡分析系統
2.7小結
2.8習題
實驗
實驗21Packet Tracer 6.0的使用
實驗22Wireshark的使用
實驗23GNS3的安裝使用
第3章鏈路層協議分析
3.1鏈路層的作用
3.2以太網的幀結構
3.2.1以太網的兩種主要標準
3.2.2以太網幀的封裝結構
3.3串行接口的鏈路層協議
3.3.1SLIP
3.3.2PPP
3.4MTU
3.5環回接口
3.6小結
3.7習題
實驗
實驗31DIX Ethernet V2幀格式分析
實驗32IEEE 802幀格式分析
實驗33PPP幀的觀察
實驗34環回接口
第4章ARP協議分析
4.1物理地址和網絡地址的轉換
4.2ARP協議的工作原理
4.2.1地址解析的例子
4.2.2ARP協議的工作過程
4.2.3ARP協議報文格式
4.3特殊的ARP
4.3.1免費ARP
4.3.2代理ARP
4.4RARP協議
4.5小結
4.6習題
實驗
實驗41arp命令
實驗42ARP請求與應答
實驗43ARP代理
實驗44免費ARP
第5章ICMP協議分析
5.1ICMP的作用
5.2ICMP報文及類型
5.2.1ICMP報文格式
5.2.2ICMP報文類型
5.2.3ICMP差錯報告
5.2.4ICMP控制報文
5.2.5ICMP查詢報文
5.3ICMP測試和故障診斷程序
5.3.1ping程序
5.3.2traceroute程序
5.4小結
5.5習題
實驗
實驗51ICMP回顯查詢報文
實驗52ping程序和IP選項
實驗53ICMP重定向差錯報文
實驗54traceroute程序
第6章IP協議和IP選路協議
6.1IP協議
6.1.1IP層的傳輸特點
6.1.2IP數據報格式
6.2IP路由選擇
6.2.1路由表及維護
6.2.2IP選路機制
6.3動態選路協議
6.3.1RIP協議
6.3.2OSPF協議
6.4IP分片與路徑MTU發現
6.4.1IP分片
6.4.2路徑MTU發現
6.5小結
6.6習題
實驗
實驗61route命令與靜態路由
實驗62ICMP主機和網絡不可達差錯
實驗63RIP協議分析
實驗64OSPF協議分析
實驗65IP分片和路徑MTU發現
第7章UDP及應用協議分析
7.1UDP協議
7.1.1UDP協議的特點
7.1.2UDP的報文格式
7.2DNS協議
7.2.1域名解析的有關概念
7.2.2DNS報文格式分析
7.2.3DNS報文實例
7.3DHCP協議
7.3.1DHCP的有關概念
7.3.2DHCP的報文格式
7.3.3DHCP報文實例
7.4SNMP協議
7.4.1SNMP體系結構
7.4.2管理信息結構
7.4.3管理信息庫MIBⅡ
7.4.4SNMP安全機制
7.4.5SNMP報文
7.4.6SNMP操作
7.4.7SNMP報文實例
7.5小結
7.6習題
實驗
實驗71DNS協議分析
實驗72DHCP協議分析
實驗73SNMP協議分析
第8章TCP及應用協議分析
8.1傳輸控制協議
8.1.1TCP段格式
8.1.2TCP連接的建立和拆除
8.2Telnet遠程登錄
8.2.1Telnet工作機制
8.2.2Telnet報文實例
8.3HTTP協議
8.3.1HTTP協議特點和報文格式
8.3.2HTTP報文實例
8.4FTP協議
8.4.1FTP協議的工作原理
8.4.2FTP報文實例
8.5小結
8.6習題
實驗
實驗81Telnet程序和TCP連接分析
實驗82HTTP協議分析
實驗83FTP協議分析
附錄ACisco常用命令
參考文獻
第3章鏈路層協議分析
在TCP/IP協議族中,鏈路層也叫網絡接口層,包含著OSI/RM模型的數據鏈路層和物理層。數據幀在這里轉換成在網絡傳輸媒體上傳送的比特流,或將從傳輸媒體上接收的比特流組裝成數據幀。本章將著重介紹鏈路層最常用的以太網協議,并詳細比較DIX Ethernet V2和IEEE 802.3封裝的異同,對SLIP和PPP只作簡單介紹,對大多數實現都包含的環回(loopback)接口驅動程序也作了介紹。實驗部分要求掌握分析鏈路層幀的基本方法,同時熟悉Packet Tracer和Wireshark的用法,進一步掌握協議分析學習工具的功能特點和用途。
3.1鏈路層的作用
為了更清楚地理解鏈路層的作用,需要再回顧一下TCP/IP協議的基本層次關系。TCP/IP協議的層次結構如圖31所示。
圖31TCP/IP協議的層次結構
在圖31中,“硬件接口”即對應著鏈路層的主體。從圖中可以看出,鏈路層主要有3個目的。(1) 為IP模塊發送和接收IP數據報。(2) 為ARP模塊發送ARP請求和接收ARP應答。(3) 為RARP模塊發送RARP請求和接收RARP應答。 在這里可以十分明確: 鏈路層在各層協議中要直接打交道的就是IP、ARP和RARP 3個協議。結合第1章講過的協議工作原理中封裝和分用的過程,鏈路層幀中封裝的數據體現為IP、ARP和RARP這3種類型的協議數據。網絡在鏈路層所使用的硬件不同,則會采用不同的鏈路層協議,如以太網、令牌環網、FDDI(Fiber Distributed Data Interface,光纖分布式數據接口)及RS232串行線路等。目前TCP/IP能夠支持多種不同的鏈路層協議。在網絡技術中,局域網占有非常重要的地位。按照網絡拓撲結構,局域網可以分為星形、環形、總線型和樹型網絡,代表性的網絡主要是以太網、令牌環網和令牌總線網。經過數十年的發展,特別是近年來千兆以太網和萬兆以太網的飛速發展,采用CSMA/CD(Carrier Sense Multiple Access/Collision Detection,載波偵聽多路訪問/沖突檢測)接入方法的以太網已經在局域網市場中占有絕對優勢。以太網幾乎成為局域網的同義詞,因此本章將以以太網作為主要的學習內容,然后介紹SLIP(Serial Line Internet Protocol,串行線路網際協議)和PPP(Point to Point Protocol,點對點協議),對現今已經基本淘汰而較少使用的技術,如令牌總線網等就不再涉及。
3.2以太網的幀結構
目前使用最為廣泛的鏈路層協議有以太網、串行接口鏈路等。3.2.1以太網的兩種主要標準以太網是1982年由美國DEC、Intel和Xerox 3家公司聯合制定的局域網技術標準,目前采用的是Ethernet V2標準,因此也稱為DIX Ethernet Ⅱ格式。在TCP/IP標準中,由RFC 894(Hornig,1984)來說明,是目前最常用的局域網標準。IEEE 802是一個標準集,是由IEEE(Institute of Electrical and Electronics Engineers,電氣和電子工程師學會)在以太網推出后不久公布的一個局域網標準。IEEE 802將數據鏈路層分為兩個子層,即LLC(Logical Link Control,邏輯鏈路控制層)和MAC(Media Access Control,介質訪問控制層)。IEEE 802.2規定了LLC的有關內容,而IEEE 802.3針對整個CSMA/CD網絡對MAC有具體的規定。IEEE 802的MAC子層用于規定網絡傳輸介質或網絡媒體的訪問,LLC子層則用于管理兩個MAC層地址之間的點到點的數據傳輸。IEEE 802.4和802.5都是令牌網絡有關的標準,現已較少使用。3.2.2以太網幀的封裝結構現在采用的以太網主要有兩種不同規格的標準,分別由RFC 894(Ethernet Ⅱ)、RFC 1042 (IEEE 802網絡)規定了兩種不同形式的封裝格式,如圖32所示。圖中幀格式下的數字表示對應字段的字節數。從圖32可以看到,兩種幀格式都采用48位(6字節)的目的地址和源地址,這就是硬件地址(MAC地址)。接下來的2個字節在IEEE 802中是長度字段,是指它后續數據的字節長度,但不包括CRC檢驗碼; Ethernet Ⅱ此處是類型字段,定義了后續數據的類型。(請思考: 系統是如何區分收到的幀該位置的2個字節是表示長度還是類型的呢?)在IEEE 802幀格式中,跟隨在長度后面的是3個字節的802.2 LLC結構。其中,LLC由DSAP(Destination Service Access Point,目的服務訪問點)和SSAP(Source Service Access Point,源服務訪問點)及Cntl組成。DSAP和SSAP通常取值相同,用于說明通信兩端采用的鏈路層協議。如果其中封裝的是802.2 SNAP(Subnetwork Access Protocol,子網訪問協議)的協議數據,則DSAP和SSAP的值都設為0xAA(IEEE對DSAP和SSAP的取值有專門的規定,需要時可以查閱相關資料),Cntl字段的值設為3。隨后有5個字節的SNAP結構,包含的前3個字節為org code,都置為0。再接下來的2個字節的類型字段和以太網幀格式的一樣。在圖32中標示出了鏈路層中封裝的主要3種協議的類型標識的取值。0x0800表示幀承載的是IP報文,0x0806表示幀承載的是ARP報文,而0x8035表示幀承載的是RARP報文。RFC 5342對以太網幀格式中的“類型”字段的更多取值有相應的規定,需要時可以查閱。
圖32IEEE 802.2/802.3(RFC1042)和以太網(RFC 894)的封裝格式
大多數應用程序的以太網數據包都采用Ethernet Ⅱ格式的幀來封裝(如HTTP、Telnet、FTP、SMTP、POP3等應用),執行STP(Spanning Tree Protocol,生成樹協議)的交換機之間的BPDU(Bridge Protocol Data Unit,網橋協議數據單元)采用IEEE 802.3 SAP幀(即802.3 MAC和802.2 LLC),VLAN Trunk協議802.1Q和CDP(Cisco Discovery Protocol,Cisco發現協議)采用IEEE 802.3 SNAP幀。CRC字段用于幀內字節差錯的循環冗余碼檢驗,它也被稱為FCS(Frame Check Sequence,幀檢驗序列)。IEEE 802標準定義的幀和Ethernet Ⅱ的幀都有最小和最大長度要求。IEEE 802標準規定幀的數據部分最少要有38字節,以太網則規定最少為46字節。如果不足最小長度,則協議要求用插入填充(pad)字節的方式來補足。最大長度要求就是通常所說的MTU(Maximum Transmission Unit,最大傳輸單元),IEEE 802和Ethernet Ⅱ分別是1492和1500字節。在傳輸媒體上實際傳送的比特流中還要在如圖32所示的幀序列前多出8字節的前導字節(7個字節的前同步碼和1個字節的起始幀定界符),用作幀收發的同步控制。這里沒有標注出來是因為只有鏈路層硬件接口(如網卡)正確地從網絡鏈路上接收到能夠識別處理的比特流數據且沒有差錯并組裝成幀后,才會由鏈路層協議棧來處理。或者說,不能夠識別的或錯誤的比特流都丟棄了。因而,在各種協議分析器捕獲的數據中都不會看到幀前導字節,甚至是校驗字節。Cisco Packet Tracer模擬方式顯示的幀有時會給出前導字節。
3.3串行接口的鏈路層協議
在串行線路上對IP數據報進行封裝的常見形式有SLIP和PPP。當然,這兩個協議不只用于數據通信網絡中,也可以和許多其他的串行通信協議一樣用于工業控制、家用電器等微型或小型系統間的數據傳輸,目前在嵌入式系統中也有應用。3.3.1SLIPSLIP是一種在串行線路上對IP數據報進行封裝的簡單形式,在RFC 1055中有詳細的描述。SLIP適合具有最常見的RS232串行口的計算機系統或高速調制解調器接入IP網絡使用。SLIP幀的格式如圖33所示。
圖33SLIP報文的封裝結構
IP數據報以一個稱為END(0xc0)的特殊字符結束,同時為了防止數據報到來之前的線路噪聲被當成數據報內容,大多數實現在數據報的開始處也會傳一個END字符。如果IP報文中某個字符為END,那么就要連續傳輸2個字節的0xdb和0xdc來取代這個END。0xdb這個特殊字符被稱為SLIP的ESC字符(轉義字符)。如果IP報文中某個字符為SLIP的ESC字符,那么就要連續傳輸2個字節的0xdb和0xdd來取代它。這個方式其實就是一種字符填充的方式,在串行線路上傳輸的總字節數會增加。SLIP是一種簡單的封裝方法,雖然簡便,但有以下缺陷。(1) 每一端必須知道對方的IP地址,否則不能通信。(2) 沒有辦法把本地IP地址通知給另一端,可以看到幀中沒有專門的地址字段。(3) 沒有在數據幀中加入校驗和,如果SLIP傳輸的報文受線路噪聲影響而發生錯誤,則只能通過上層協議來發現,這樣上層協議必須提供某種形式的校驗。目前SLIP已經被PPP所取代,因為PPP有許多更好的特點,并且不需要在連接建立前進行IP地址的配置。但由于SLIP有非常小的包裝頭,因此在微控制器中它仍是首選的封裝IP包的方式。3.3.2PPPPPP是支持點到點連接的一種通信協議,既支持數據為8位和無奇偶校驗的異步模式,也支持面向比特位的同步連接,提供對從局域網到廣域網的數據鏈路封裝支持。RFC 1661給出了PPP的詳細規范,主要包括以下內容。(1) 支持同一鏈路上同時使用多種協議的封裝方法。事實上,PPP支持各種主要網絡協議的封裝,包括IP、NetBEUI、AppleTalk、IPX、SNA以及其他更多的協議。(2) 采用一個特殊的LCP(Link Control Protocol,鏈路控制協議)來建立、配置、測試乃至終止鏈路,協商任何點到點鏈路的特性。(3) 針對封裝的不同網絡協議,采用NCP(Network Control Protocol,網絡控制協議)來完成點對點通信設備之間網絡層通信所需參數的配置,它通過協議域來區分數據域中凈載荷的數據類型。RFC 1332和RFC 1877描述了一個用于IP的NCP,稱為IP控制協議,它用于協商發送方的IP地址、DNS服務器的地址以及在可能情況下使用的壓縮協議。PPP的封裝和組幀技術基于ISO的HDLC(Highlevel Data Link Control,高級數據鏈路控制)協議,因此數據幀封裝格式非常類似于HDLC。PPP幀結構如圖34所示。
圖34PPP數據幀結構
每個PPP數據包的開始和結束都有一個0x7E的數據標志。在開始標志后,緊跟兩個HDLC常量: 地址常量0xFF和控制常量0x03。接下來是協議字段,長度通常為2字節,表示信息字段中包含的是哪種協議以及它的處理信息。正如圖34中標示的一樣,0x0021表示信息字段是一個IP數據報,0xC021表示信息字段是LCP的內容,0x8021則表示信息字段是NCP的內容。信息字段的長度最多為1500字節。然后是一個長度為2個字節的循環冗余檢驗碼,以檢測數據幀中的錯誤。由于標志字符的值是0x7E,因此當該字符出現在信息字段中時,類似于SLIP的字符填充,PPP也需要對它進行轉義。具體實現過程如下。(1) 當遇到字符0x7E時,需連續傳送兩個字符: 0x7D和0x5E,以實現標志字符的轉義。(2) 當遇到轉義字符0x7D時,需連續傳送兩個字符: 0x7D和0x5D,以實現轉義字符的轉義。(3) 默認情況下,如果字符的值小于0x20(如ASCII控制字符),一般都要進行轉義。例如,遇到字符0x01時需連續傳送0x7D和0x21字符(這時第6個比特位取補碼后變為1,而前面兩種情況均把它變為0)。這樣做是防止它們出現在雙方主機的串行接口驅動程序或調制解調器中,因為它們有時會把這些控制字符解釋成特殊的含義。另一種可能是用LCP來指定是否需要對這32個字符中的某些值進行轉義。默認情況下是對所有的32個字符都進行轉義。當PPP用于同步通信時,如綜合業務數字網(ISDN)、同步光纖網(SONET)的鏈路,則使用了一種更快速、更有效的比特填充技術,而不是字符填充。這時任何連續的6個1序列(考查用作標志的0x7E)都可以通過在5個1之后插入1個0來進行轉義。該方法支持這種鏈路類型中潛在非法值的更有效編碼,因而使PPP成為TCP/IP中最流行的點到點協議。PPP還支持多鏈路實現,即將多個相同寬度的數據通道合并。PPP在工作時為建立點對點鏈路上的通信連接,發送端首先發送LCP幀,以配置和測試數據鏈路。在LCP建立好數據鏈路并協調好所選設備后,發送端發送NCP幀,以選擇和配置一個或多個網絡層協議。當所選的網絡層協議配置好后,便可以將各網絡層協議的數據包發送到數據鏈路上。配置好的鏈路將一直處于通信狀態,直到LCP幀或NCP幀明確提示關閉鏈路,或有其他的外部事件發生。在鏈路建立和數據傳輸的過程中,信息字段的內容還可以分出代碼(code)、標識符(ID)和長度(length)等字段,以滿足不同協議的工作要求。這里不再深入闡述,更具體的內容請參考有關資料。要指出的是,在點到點鏈路上因為只有兩方參與通信,并不需要尋址。PPP提供了一種管理兩點間會話的有效方法,同時不同于廣域網上使用的X.25、frame relay(幀中繼)等數據鏈路層協議,PPP提供了兩種可選的身份認證方法: PAP(Password Authentication Protocol,口令驗證協議)和CHAP(Challenge Handshake Authentication Protocol,挑戰握手驗證協議),從而更好地保證了網絡通信的安全性。總的來看,PPP相比SLIP具有顯著的優點: PPP支持在單根串行線路上運行多種協議,而不只是IP; 每一幀都有循環冗余校驗; 通信雙方可以進行IP地址的動態協商; LCP可以對多個數據鏈路選項進行設置; 提供安全支持。同時,PPP仍然保持了成本低、傳輸穩定等特點。
3.4MTU
鏈路層數據幀的最大長度就是MTU。注意,MTU是指幀的凈載荷部分,不包括幀的頭部、尾部及控制用字段。前面已經指出以太網和IEEE 802.3的數據幀的長度限制,其MTU分別是1500和1492字節,如圖32所示。不同類型的網絡數據幀的長度都有一個上限。如果IP層有一個數據包要傳送,而且IP PDU的長度比鏈路層的MTU要大,那么IP層就需要進行分片,即把數據報分成若干片,使得每一片都小于MTU,這樣才能通過鏈路層來封裝傳送。IP分片的過程將在以后的章節中討論。表31所示列出了一些典型的MTU值,表的內容來自于RFC 1191。其中,“點到點(低時延)”是指SLIP和PPP在低時延情況下的邏輯鏈路限制,這時減少每一幀的字節數可以降低應用程序的交互時延,從而為交互應用提供足夠快的響應時間。
表31幾種常見的MTU
網 絡 類 型MTU字節
超通道655354Mb/s令牌環(IEEE 802.5)4464FDDI4352以太網1500IEEE 802.3/802.21492X.25576點對點(低時延)296
在RFC 1055中,SLIP的MTU是1006個字節。在Windows 2000的實現中,SLIP的MTU設置為1500個字節,以滿足和以太網的互聯。目前PPP默認的MTU是1500個字節,這個長度對于基于以太網的互聯十分理想。其實,通過LCP在對等實體之間協商,PPP可以在通信中使用更大或更小的MTU,依據是它們所連接的網絡的類型不同。此時PPP能夠處理更大的幀,如9216字節。可以用netstat命令查看并打印出網絡接口的MTU。和MTU直接相關的另一個重要概念是路徑MTU。如果兩臺主機之間的通信要通過多個網絡,那么每個網絡的鏈路層就可能有不同的MTU。這時重要的并不是兩臺主機各自所在網絡的MTU,而是連接兩臺主機的所有網絡中的最小MTU,稱為路徑MTU,即兩臺主機的通信路徑上最小的MTU。這個數值直接影響著在整個通信過程中數據包是否需要分片。路徑MTU不一定是常數,它取決于通信時選擇的路由。由于路徑的選擇不一定是對稱的,因此路徑MTU在通信的兩個方向上不一定是一致的。RFC 1191描述了路徑MTU的發現機制,即確定路徑MTU的方法。在后面的章節中將采用這種發現方法來完成確定路徑MTU的實驗。
3.5環回接口
環回接口(loopback interface)是一種特殊的邏輯網絡接口。絕大多數產品都支持這種形式的邏輯接口,以允許運行在同一臺主機上的客戶程序和服務器程序通過TCP/IP通信。A類網絡號127就是為環回接口預留的。根據慣例,大多數系統把IP地址127.0.0.1分配給這個接口,并命名為localhost,這個地址也稱為回送地址。回送地址主要用于網絡軟件測試及本機進程間通信。例如,“ping 127.0.0.1”用來測試本機中的TCP/IP協議是否正常工作。其另一個作用是某些C/S模式的應用程序在運行時需調用服務器上的資源,一般要指定服務器的IP地址,但當該程序要在同一臺機器上運行而沒有別的服務器時,就可以把服務器的資源裝在本機,服務器的IP地址設為127.0.0.1,同樣也可以運行。對于大多數習慣用localhost來指代服務器的表示來說,實質上就是指向127.0.0.1這個本地IP地址。在Windows系統中,它成了127.0.0.1的別名。對于網站建設者,經常用localhost指向一個表示自己的特殊DNS主機名。環回接口對路由器來講是一個邏輯的虛擬接口,方便用于測試目的,因為該接口總是開啟的,可作為一臺路由器的管理地址,作為動態路由協議OSPF、BGP的Router Id。
圖35所示是環回接口處理IP數據報的簡單過程。從中可以看到一個傳給環回接口的IP數據報不能在任何網絡上出現。無論什么程序,一旦使用環回地址發送數據,環回驅動程序會立即把數據返回給協議棧中的IP輸入函數,而不進行任何網絡傳輸。
圖35環回接口處理IP數據報的過程
圖35中需要指出的要點如下。(1) 傳給環回地址的任何數據均作為IP輸入。(2) 傳給廣播地址或多播地址的數據報復制一份傳給環回接口,然后送到以太網上。這是因為廣播傳送和多播傳送的對象也包括主機本身。(3) 任何傳給該主機IP地址的數據均送到環回接口。在圖35中,另一個隱含的意思是送給主機本身IP地址的IP數據報一般不出現在相應的網絡上。因為借助環回地址,主機保證了處理發送給自己的IP數據報。
3.6小結
(1) TCP/IP協議族中和鏈路層協議有直接聯系的協議有3個,即IP、ARP和RARP,這體現在鏈路層的功能描述中。(2) 目前鏈路層使用最多的局域網協議是以太網,包括Ethernet V2和IEEE 802兩種。Ethernet V2標準規定的鏈路層幀結構和IEEE 802標準規定的鏈路層幀結構既有相同的地方,也有不同之處。相同之處主要是MAC地址形式,不同之處主要體現在IEEE 802.2對LLC的規定中。(3) SLIP和PPP協議是串行鏈路中的重要協議,其幀結構為適應串行通信有特別的設計,如幀內容的字節填充方式。(4) 不同類型的鏈路層對MTU有不同的規定,Ethernet V2標準規定的MTU是1500字節,IEEE 802是1492字節。(5) 大多數實現都提供環回接口,傳送給環回接口的數據不會出現在網絡上。訪問這個接口可以通過特殊的環回地址。
3.7習題
1. 除了圖32所示給出的3種以太網幀類型,是否還有其他幀類型?從什么地方可以查閱到以太網幀格式中的“類型”字段是怎樣分配的?2. 如果讀者的主機是通過ADSL的PPPoE撥號上網的,請嘗試在系統上網時捕獲撥號連接通信的PPPoE幀并進行分析。 3. 如果讀者的主機系統有netstat命令,如何用它來確定系統上的接口及其MTU?4. 主機中的環回地址通常為127.0.0.1,能夠采用其他地址來表示環回地址么?
實驗
實驗31DIX Ethernet V2幀格式分析1. 實驗說明
分別通過在Packet Tracer和Wireshark中查看分析鏈路層的以太網幀,進一步學習捕獲查看網絡通信信息的方法。同時通過對DIX Ethernet V2幀的分析,進一步鞏固對鏈路層幀結構的理解和掌握。2. 實驗環境Windows操作系統及聯網環境(主機有以太網網卡并連接局域網或Internet),安裝有Packet Tracer 6.0和Wireshark 1.10。3. 實驗步驟(1) 在Wireshark中捕獲分析以太網幀。步驟1啟動Wireshark。在Windows中啟動Wireshark,選定本地網絡接口并啟動抓包。步驟2構造網絡通信信息。啟動瀏覽器瀏覽網頁或運行網絡應用程序(如運行QQ或ping命令等),在本機網絡接口中產生網絡通信信息。步驟3分析捕獲的幀。在Wireshark中查看捕獲的以太網幀,并結合3.2節的內容分析以太網幀結構。圖36所示為在Windows主機瀏覽器中訪問Internet網站時捕獲的以太網幀示例,實驗時請依據實際捕獲的幀進行分析。注意,分析幀中的每一個域以及取值,觀察幀的長度和MAC地址的構成,如48位MAC地址中LG和IG比特的含義、Type字段的取值。
圖36以太網幀結構分析示例
步驟4任意訪問一個網站,在捕獲的輸入幀中查看有沒有幀長度剛好為60字節的幀,能否看到Padding字段,分析其成因。如果沒有,則可以反復多次捕獲幀以獲取,也可以用ping 1限定幀長來構造短幀。有時捕獲的幀中會有小于最小幀長的幀出現,這是為什么呢?
圖37所示是在連通測試時捕獲到有Padding字段及幀長為54字節的數據包示例,請分析其成因。
圖37有Padding字段的以太網幀示例
(2) 在Packet Tracer中查看以太網幀。步驟1啟動Packet Tracer,按圖38所示建立一個簡單的網絡并相應做好IP地址配置,也可以打開以前建立的網絡拓撲來進行實驗。
圖38中,PC0、PC1和PC2的默認網關分別設置為指向路由器對應接口,路由器可以只配置靜態路由。配置方法請參考2.2節。
圖38Packet Tracer鏈路層實驗
步驟2運行ping命令,查看鏈路層數據。先在Packet Tracer工作窗口中單擊Simulation mode,切換到模擬模式,然后在網絡拓撲中單擊PC0圖標,打開PC0的Desktop選項卡,單擊Command Prompt,打開命令行窗口,輸入以下命令。
PC〉ping 192.168.1.3
按Enter鍵后,馬上就可以在Event List對話框中看到出現了對應的網絡事件。步驟3單擊Capture/Forward按鈕,會產生下一個事件,這樣不斷單擊就可以看到ping程序運行中數據包傳送的全部情況。步驟4單擊第一個事件的Info字段,打開PDU Information對話框中的Outbound PDU Details選項卡,可以看到PC0發出的第一個ICMP數據包在鏈路層的封裝情況,得到類似圖39所示的數據。認真分析每一個數據域的內容。
圖39Packet Tracer下查看以太網幀結構示例
4. 實驗報告記錄自己的實驗過程和實驗結果,分析實驗結果,比較說明用Wireshark和Packet Tracer捕獲的以太網幀的異同,理解和掌握以太網幀結構。5. 思考(1) 圖36所示示例中捕獲的以太網幀類型為0x0800,要怎樣做才能捕獲一個0x0806類型的幀?(2) 圖39所示顯示的幀結構中的內容和實際網絡中的數據有區別嗎?實驗32IEEE 802幀格式分析1. 實驗說明
分別通過在Packet Tracer和Wireshark中查看分析鏈路層的IEEE 802幀,學習了解不同的鏈路層幀格式。 實驗中提到的STP在IEEE 802.1D文檔中給出了其定義。STP協議按照樹的結構來構造網絡拓撲,消除網絡中的環路,避免廣播風暴。CDP是Cisco公司設計的專用協議,被Cisco公司的網絡設備用來獲取相鄰設備的協議地址及發現這些設備的平臺。本實驗的主要目的是觀察IEEE 802幀不同于Ethernet V2的封裝結構,對STP和CDP的具體工作原理和協議結構不作要求,需要時請參考有關書籍或資料。2. 實驗環境Windows操作系統及聯網環境(主機有以太網網卡并連接局域網或Internet),安裝有Packet Tracer 6.0、Wireshark 1.10和GNS3(已配置好IOS)。3. 實驗步驟(1) 在Packet Tracer中捕獲分析IEEE 802幀。步驟1啟動Packet Tracer,建立如圖38所示的實驗網絡。切換到模擬模式,直接單擊Capture/Forward按鈕,這時會看到從交換機Switch0發出的STP包。步驟2任意選擇一個STP協議包事件并單擊其Info字段,會彈出PDU Information對話框,單擊Outbound PDU Details選項卡,可以看到類似圖310所示的PDU Formats。
圖310IEEE 802幀結構示例
步驟3依據實驗中PDU Formats實際顯示的內容,對照圖32認真分析幀的每一個字段。要特別注意802.2 LLC結構中DSAP和SSAP的取值。STP的配置往往和VLAN的配置相關聯,圖38所示實驗拓撲中的Cisco 2950交換機有默認VLAN1(盡管沒有配置),因此能夠捕獲STP包。和VLAN有關的具體操作請參考有關書籍或資料。步驟4繼續單擊Capture/Forward按鈕,直到看到交換機發出的CDP包。單擊CDP協議包事件的Info字段,在打開的對話框中查看其Outbound PDU Details選項卡。步驟5依據實驗中PDU Formats實際顯示的內容,對照圖32認真分析幀的每一個字段。圖311所示是CDP使用的IEEE 802幀的局部信息示例。
圖311CDP使用的IEEE 802幀的基本格式
注意觀察,由于有SNAP幀的存在,LLC的DSAP和SSAP值為0xAA。(2) 用Wireshark捕獲分析IEEE 802幀(選做)。利用GNS3按圖38所示構建高仿真的網絡環境,用Wireshark捕獲完全和真實網絡環境中一樣的STP或CDP幀。這部分實驗內容作為課后自學,這里不給出詳細的實驗過程,請參考Packet Tracer的實驗內容和第2章關于GNS3的內容。4. 實驗報告記錄自己的實驗過程和實驗結果,分析實驗結果,比較說明IEEE 802幀和DIX Ethernet V2幀的異同。實驗33PPP幀的觀察1. 實驗說明
PPP協議是當今網絡上使用最廣泛的串行鏈路協議。PPPoE(Point to Point Protocol over Ethernet,以太網上的點到點協議)則是一種設計用于串行通信并為以太網進行了改造的PPP。通過在標準PPP報文的前面加上以太網的報頭,使得PPPoE提供通過簡單橋接接入設備連接遠端接入設備,并可以利用以太網的共享性連接多個用戶主機。PPPoE廣泛用于用戶通過撥號或專線方式接入ISP時建立點對點連接的收發數據。更多有關PPPoE的通信過程請查閱相關資料。本實驗通過在Packet Tracer中查看分析網絡設備互聯的PPP幀結構,學習了解串行鏈路中使用的幀格式; 通過在真實上網時捕獲ADSL Modem撥號連接時系統收發的數據包,了解鏈路層PPPoE幀格式。 2. 實驗環境Windows操作系統及聯網環境(主機有以太網網卡并連接局域網和Internet),安裝有Packet Tracer 6.0、Wireshark 1.10; ADSL Modem撥號上網設備。3. 實驗步驟(1) 在Packet Tracer中觀察分析PPP幀結構。步驟1啟動Packet Tracer,建立如圖312所示的實驗網絡。先在兩臺路由器中添加WIC1T串行接口模塊,然后從Router0處選用串口線DCE連接兩臺路由器,配置好IP地址。
圖312PPP幀查看實驗
步驟2將鼠標停留在Router0的接口處即會顯示出時鐘圖標,表明Router0是DCE,需要設置DCE的時鐘頻率。輸入以下命令進行配置。
Router#show controllers s0/0/0 #可查看路由器是否為DCE
Router#conf t
Router(config)#int s0/0/0
Router(config-if)#clock rate 9600 #設置串口同步時鐘頻率為9600b/s
Router1的串口為DTE,不用配置時鐘。實驗中沒有設置帶寬,采用默認的128kb/s。步驟3繼續配置PPP,運行命令啟用PPP。
Router(config-if)#encapsulation ppp #設置串行通信的封裝方式為PPP
Router(config-if)#^z #保存
Router#show int s0/0/0 #查看設置參數
步驟4切換Packet Tracer到模擬模式,直接單擊Capture/Forward按鈕,這時會看到從Router0發出的CDP包。任意選擇一個CDP協議包事件并單擊其Info字段,查看Outbound PDU Details選項卡,可以看到類似圖313所示的PDU Formats。
圖313Packet Tracer中CDP的PPP幀封裝
對照3.3.2節的內容,分析PPP幀的結構。(2) 觀察分析ADSL撥號上網的PPPoE幀。步驟1確認實驗需要的ADSL寬帶設備及撥號上網可用,Windows中已配置有撥號上網快捷方式。步驟2先在Windows中啟動Wireshark,選定本地網絡接口并啟動抓包,隨即啟動寬帶連接撥號,輸入用戶名和口令,這時可以看到捕獲的撥號連接數據包。步驟3在Wireshark的顯示過濾器中輸入“pppoed”,可以查看PPPoE幀信息,如圖314所示。在PPPoE的Discovery階段,以太網幀的Type域都設置為0x8863。
圖314撥號上網的PPPoE幀結構示例
步驟4結合PPPoE的相關工作原理,分析自己捕獲的PPPoE幀結構。步驟5觀察能否捕獲PPP會話階段(以太網幀的Type域都設置為0x8864)的幀。PPPoE的payload部分包含0個或多個TAG。一個TAG是一個TLV(typelengthvalue)結構,TAG_TYPE域為16位值(網絡字節序),請了解TAG取值的情況。4. 實驗報告記錄自己的實驗過程和實驗結果,分析實驗結果,說明PPP幀的結構。5. 思考通過連接路由器之間的WAN口來觀察PPP幀可以得到更多的內容,請思考應該如何實驗。實驗34環回接口1. 實驗說明
本實驗通過在Packet Tracer中配置路由器上的環回接口,查看了解其工作特點。2. 實驗環境Windows操作系統,安裝有Packet Tracer 6.0。3. 實驗步驟步驟1啟動Packet Tracer,建立如圖315所示的拓撲。步驟2在Router0上配置網絡接口地址,分別為10.1.1.1/24和20.1.1.1/24,類似地在Router1、Router2和PC1、PC2上配置相應的IP地址。在Router0上配置環回接口地址,命令如下。
Router0(config)#interface loopback 0
Router0(config-if)#ip address 17.17.1.1 255.255.255.255
然后配置OSPF,命令如下。
Router0(config)#router ospf 1
Router0(config-router)#network 10.1.1.0 0.0.0.255 area 0
Router0(config-router)#network 20.1.1.0 0.0.0.255 area 0
圖315環回接口實驗拓撲
步驟3配置好后,在Router0上執行命令“show ip protocol”,可以看到如圖316所示的輸出。
圖316環回接口地址作為路由器的Router ID
在圖316中可以看到,Router0上設置的環回接口地址17.17.1.1被當作了路由器的Router ID。步驟4在Router0上執行以下命令。
Router0#ping 17.17.1.1
在Packet Tracer中采用模擬方式可以看到ping發出的數據包只在Router0上收發,并收發成功。4. 實驗報告記錄自己的實驗過程和實驗結果,分析實驗結果,說明環回接口的特點。5. 思考(1) 路由器使用環回接口地址作為該路由器產生的所有IP包的源地址,從而提高數據的過濾效率,請參考路由器配置的有關資料了解其工作原理和特點。(2) 在Windows主機上用Wireshark能不能抓到對127.0.0.1進行ping的數據包呢?如果抓不到,原因是什么?