TCP/IP 協(xié)議族
Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議, 由于各種各樣的電腦運(yùn)行著各自不同的操作系統(tǒng)為大家服務(wù),這些電腦在表達(dá)同一種信息的時候所使用的方法是千差萬別。所以需要一種協(xié)議來相互之間通信。TCP IP協(xié)議族就是不同種操作系統(tǒng)之間通信的協(xié)議。
1. 協(xié)議分層
1.? 數(shù)據(jù)鏈路層:SLIP、PPP
2.? 網(wǎng)絡(luò)層:IP、ARP、RARP、ICMP
3.? 傳輸層:TCP、UDP
4.? 應(yīng)用層:FTP、TELNET、SMTP、HTTP、TFTP
2.IP協(xié)議 網(wǎng)絡(luò)層
IP協(xié)議是TCP/IP協(xié)議族中最為核心的協(xié)議,所有的TCP、UDP、ICMP及IGMP數(shù)據(jù)都以IP數(shù)據(jù)報格式傳輸。
IP協(xié)議提供不可靠、無連接的數(shù)據(jù)報傳送服務(wù)。
IP數(shù)據(jù)報? ??

?? 版本:???? 指IP協(xié)議所使用的的版本。目前廣泛使用的IP協(xié)議版本號為4???
首部長度:? IP首部長度,可表示的最大十進(jìn)制數(shù)值是15。注意:該字段表示首部占32bit(4個字節(jié))的數(shù)目。因?yàn)樽畲笾荒鼙硎?5個,所以首部長度最大為60字節(jié)???
服務(wù)類型: 優(yōu)先級標(biāo)志位(3bit)和服務(wù)類型標(biāo)志位(4bit分別表示最小時延D,最大吞吐量T,最高可靠性R,最小費(fèi)用C)以及1bit未用位(置0)? 優(yōu)先權(quán)(0-7)數(shù)越大,優(yōu)先級越高。
總長度:??? 指IP的首部和數(shù)據(jù)部分的長度,單位為字節(jié)??傞L度為16位,因此最大長度為2^16- 1 = 65536字節(jié)。知道首部長度以及總長度可以得到數(shù)據(jù)部分的起始位置以及數(shù)據(jù)長度。???
標(biāo)識:? 一個唯一的標(biāo)識數(shù)字,用來標(biāo)識一個數(shù)據(jù)報或者被分片數(shù)據(jù)報的次序???
標(biāo)志:?? 用來標(biāo)識一個數(shù)據(jù)包是否是一組分片數(shù)據(jù)包的一部分。 最低位MF(More Fragment)。當(dāng)MF=1表示后面“還有分片”的數(shù)據(jù)包,MF=0表示這已經(jīng)是最后一個分片數(shù)據(jù)了,中間位DF(Dont Fragment)不能分片,只有當(dāng)DF=0時,才允許分片???
片偏移: 一個數(shù)據(jù)包其中的分片,用于重新組裝數(shù)據(jù)用???
生存時間(TTL): 用來定義數(shù)據(jù)包的生存周期(初始值由源主機(jī)設(shè)置通常為32/64),經(jīng)過一個路由器-1。???
協(xié)議: 用來識別上層協(xié)議數(shù)據(jù)包所屬類型???
首部檢驗(yàn)和: 一個錯誤的檢測機(jī)制,確保IP頭部沒有被修改??
源地址: 發(fā)送端的IP地址?? 目的地址:數(shù)據(jù)包目的的IP地址???
可選字段:保留作額外的IP選項(xiàng)???
數(shù)據(jù)部分:需要IP傳遞的實(shí)體數(shù)據(jù)
數(shù)據(jù)報的層層封裝? ?

通信過程中,每層協(xié)議都要加上一個數(shù)據(jù)首部(header),稱為封裝(Encapsulation)
封裝是從上往下,解析是從下往上,依次解析。

(一)IP協(xié)議的功能:
(1)尋址和路由;(根據(jù)對方的IP地址,尋找最佳路徑傳輸信息);
(2)傳遞服務(wù):① 不可靠(IP協(xié)議只是盡自己最大努力去傳輸數(shù)據(jù)包),可靠性由上層協(xié)議提供(TCP協(xié)議);② 無連接;(事先不建立會話);
(3)數(shù)據(jù)包的分片和重組 。
1.IP地址? ??
(1)IPv4
????在主機(jī)或路由器中存放的IP地址(IPv4)都是32位的二進(jìn)制代碼。它包含了網(wǎng)絡(luò)號(net-id)和主機(jī)號(host-id)兩個獨(dú)立的信息段。網(wǎng)絡(luò)號用了標(biāo)識主機(jī)或路由器所連接到的網(wǎng)絡(luò),主機(jī)號用來標(biāo)識該主機(jī)或路由器。
--IP地址分類
????A<128??一個A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“0”,地址范圍從1.0.0.0到126.0.0.0??捎玫腁類網(wǎng)絡(luò)有126個,每個網(wǎng)絡(luò)能容納1億多個主機(jī)。??數(shù)字0則表示該地址是本地宿主機(jī),不能傳送。
????B<192一個B類IP地址由2個字節(jié)的網(wǎng)絡(luò)地址和2個字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“10”,地址范圍從128.0.0.0到191.255.255.255??捎玫?b>B類網(wǎng)絡(luò)有16382個,每個網(wǎng)絡(luò)能容納6萬多個主機(jī)。
????C<224一個C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“110”。范圍從192.0.0.0到223.255.255.255。C類網(wǎng)絡(luò)可達(dá)209萬余個,每個網(wǎng)絡(luò)能容納254個主機(jī)。
????D<240D類IP地址第一個字節(jié)以“lll0”開始,它是一個專門保留的地址。它并不指向特定的網(wǎng)絡(luò),目前這一類地址被用在多點(diǎn)廣播(Multicast)中。多點(diǎn)廣播地址用來一次尋址一組計算機(jī),它標(biāo)識共享同一協(xié)議的一組計算機(jī)。
????E<255以“llll0”開始,為將來使用保留。全零(“0.0.0.0”)地址對應(yīng)于當(dāng)前主機(jī)。全“1”的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址。
--公網(wǎng)IP地址
????公有地址分配和管理由Inter NIC(Internet Network Information Center 因特網(wǎng)信息中心)負(fù)責(zé)。各級ISP使用的公網(wǎng)地址都需要向Inter NIC提出申請,有Inter NIC統(tǒng)一發(fā)放,這樣就能確保地址塊不沖突。
--私網(wǎng)IP地址
????創(chuàng)建IP尋址方案的人也創(chuàng)建了私網(wǎng)IP地址。這些地址可以被用于私有網(wǎng)絡(luò),在Internet沒有這些IP地址,Internet上的路由器也沒有到私有網(wǎng)絡(luò)的路由表。
????A類:10.0.0.0 255.0.0.0,保留了1個A類網(wǎng)絡(luò)。
????B類:172.16.0.0 255.255.0.0~172.31.0.0 255.255.0.0,保留了16個B類網(wǎng)絡(luò)。
????C類:192.168.0.0 255.255.255.0~192.168.255.0 255.255.255.0,保留了256個C類網(wǎng)絡(luò)。
(2)IPv6
IPv6地址長度是128位,由8塊(或8個字段)組成,每一塊都包含四個16進(jìn)制數(shù),每塊由冒號分隔。
有以下特點(diǎn):
????1、一個塊中前導(dǎo)的0不必書寫。
????2、全0的塊可以省略,并用符號::代替。
????3、IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。
????表示方式為:IPv6塊值為ffff,其后面緊跟“點(diǎn)分四組”的格式。如:
????::ffff:10.0.0.1
????可以代表IPv4:10.0.0.1
????4、IPv6的低32位通常采用點(diǎn)分四組(就是上面那樣)的表示法。
2.子網(wǎng)掩碼
? (1)子網(wǎng)掩碼的概述及作用
? ? 子網(wǎng)掩碼是一個應(yīng)用于TCP/IP網(wǎng)絡(luò)的32位二進(jìn)制值,每節(jié)8位,必須結(jié)合IP地址對應(yīng)使用。
? ? 子網(wǎng)掩碼32位都與IP地址32位對應(yīng),如果某位是網(wǎng)絡(luò)地址,則子網(wǎng)掩碼為1,否則為0。
? ? 子網(wǎng)掩碼可以通過與IP地址“與”計算,分離出IP地址中的網(wǎng)絡(luò)地址和主機(jī)地址,用于判斷該IP地址是在局域網(wǎng)上,還是在廣域網(wǎng)上。
? ? 子網(wǎng)掩碼一般用于將網(wǎng)絡(luò)進(jìn)一步劃分為若干子網(wǎng),以避免主機(jī)過多而擁堵或過少而IP浪費(fèi)。能有效的隔離廣播域,使得每個廣播域的范圍不至于太大
????(2)子網(wǎng)掩碼和IP地址的計算?
? ? ?1、 網(wǎng)絡(luò)地址? ? ??網(wǎng)絡(luò)號是用于三層尋址的地址,它代表了整個網(wǎng)絡(luò)本身;另一個是廣播地址,它代表了網(wǎng)絡(luò)全部的主機(jī)。網(wǎng)絡(luò)號是網(wǎng)段中的第一個地址,廣播地址是網(wǎng)段中的最后一個地址,這兩個地址是不能配置在計算機(jī)主機(jī)上的。
????2、 廣播地址? ?它代表了網(wǎng)絡(luò)全部的主機(jī)
? ? 3、 地址范圍? ?
????4、 本網(wǎng)有幾臺主機(jī)??

3.IP尋址?
IP數(shù)據(jù)包的傳輸過程。
最特殊的情況是目的主機(jī)和主機(jī)直連,那么主機(jī)根本不用尋找路由,直接把數(shù)據(jù)傳遞過去就可以了。稍微一般一點(diǎn)的情況是,主機(jī)通過若干個路由器(router)和目的主機(jī)連接。那么路由器就要通過ip包的信息來為ip包尋找到一個合適的目標(biāo)來進(jìn)行傳遞,比如合適的主機(jī),或者合適的路由。路由器或者主機(jī)將會用如下的方式來處理某一個IP數(shù)據(jù)包。如果IP數(shù)據(jù)包的TTL(生命周期)以到,則該IP數(shù)據(jù)包就被拋棄。
????1. 搜索路由表,優(yōu)先搜索匹配主機(jī),如果能找到和IP地址完全一致的目標(biāo)主機(jī),則將該包發(fā)向目標(biāo)主機(jī)
????2. 搜索路由表,如果匹配主機(jī)失敗,則匹配同子網(wǎng)的路由器,這需要“子網(wǎng)掩碼”的協(xié)助。如果找到路由器,則將該包發(fā)向路由器。
????3. 搜索路由表,如果匹配同子網(wǎng)路由器失敗,則匹配同網(wǎng)號路由器,如果找到路由器,則將該包發(fā)向路由器。
????4. 搜索路由表,如果以上都失敗了,就搜索默認(rèn)路由,如果默認(rèn)路由存在,則發(fā)包
????5. 如果都失敗了,就丟掉這個包。
這也證明了,ip包是不可靠的。因?yàn)樗槐WC送達(dá)。
網(wǎng)絡(luò)通信的過程?

現(xiàn)在我們假設(shè)有2個主機(jī),主機(jī)A和主機(jī)B通信,首先主機(jī)A通過本機(jī)的hosts表或者wins系統(tǒng)或dns系統(tǒng)先將主機(jī)B的計算機(jī)名轉(zhuǎn)換為IP地址,然后用自己的IP地址與子網(wǎng)掩碼計算出自己所在的網(wǎng)段,比較目的主機(jī)B的ip地址與自己的子網(wǎng)掩碼,發(fā)現(xiàn)與自己是出于相同的網(wǎng)段,于是在自己的ARP緩存中查找是否有主機(jī)B 的mac地址,如果能找到就直接做數(shù)據(jù)鏈路層封裝并且通過網(wǎng)卡將封裝好的以太網(wǎng)幀發(fā)送有物理線路上去:如果arp緩存中沒有主機(jī)B的的mac地址,主機(jī)A將啟動arp協(xié)議通過在本地網(wǎng)絡(luò)上的arp廣播來查詢主機(jī)B的mac地址,獲得主機(jī)B的mac地址后寫入arp緩存表,進(jìn)行數(shù)據(jù)鏈路層的封裝,發(fā)送數(shù)據(jù)。
如果發(fā)現(xiàn)A和B不在一個網(wǎng)段中時候,A先找到A的網(wǎng)關(guān)C(可以看做路由器),然后網(wǎng)關(guān)C會把數(shù)據(jù)交給另外一個網(wǎng)段的網(wǎng)關(guān)D,如果D發(fā)現(xiàn)B在這個網(wǎng)段下,就把數(shù)據(jù)發(fā)送給B;如果發(fā)現(xiàn)不在,網(wǎng)關(guān)D會繼續(xù)搜索路由表,找到可以到達(dá)B的線路。
路由器在其中的作用

所以路由器最主要的作用是維護(hù)路由表,尋找最佳路由然后轉(zhuǎn)發(fā)報文
路由表的建立與維護(hù)
路由表中路由有三類:(1)鏈路層協(xié)議發(fā)現(xiàn)的路由(即是直連路由)(2)靜態(tài)路由(3)動態(tài)路由協(xié)議發(fā)現(xiàn)的路由。?
?靜態(tài)路由入口由網(wǎng)絡(luò)管理員手工配置的靜態(tài)路由組成,動態(tài)路由入口由路由協(xié)議如RIP、OSPF、BGP等交換的路由表信息組成。執(zhí)行路由操作所需要的信息被包含在路由器的路由表中,它們由一個或多個路由選擇協(xié)議進(jìn)程生成。路由表的內(nèi)容被限制為只含有到所有目的地的最佳路由。如果存在多條等佳路徑,那么所有這些路徑都將被列入路由表。

動態(tài)協(xié)議更新路由表
RIP
RIP采用距離向量算法。路由器收集所有可到達(dá)目的地的不同路徑,并且保存有關(guān)到達(dá)每個目的地的最少站點(diǎn)數(shù)的路徑信息,除到達(dá)目的地的最佳路徑外,任何其它信息均予以丟棄。同時路由器也把所收集的路由信息用RIP協(xié)議通知相鄰的其它路由器。這樣,正確的路由信息逐漸擴(kuò)散到了全網(wǎng)。
0SPF
RIP不能適應(yīng)大規(guī)模異構(gòu)網(wǎng)絡(luò)的互連。0SPF是一種基于鏈路狀態(tài)的路由協(xié)議,需要每個路由器向其同一管理域的所有其它路由器發(fā)送鏈路狀態(tài)廣播信息。在OSPF的鏈路狀態(tài)廣播中包括所有接口信息、所有的量度和其它一些變量。利用0SPF的路由器首先必須收集有關(guān)的鏈路狀態(tài)信息,并根據(jù)一定的算法計算出到每個節(jié)點(diǎn)的最短路徑。而基于距離向量的路由協(xié)議僅向其鄰接路由器發(fā)送有關(guān)路由更新信息。
與RIP不同,OSPF將一個自治域再劃分為區(qū),相應(yīng)地即有兩種類型的路由選擇方式:當(dāng)源和目的地在同一區(qū)時,采用區(qū)內(nèi)路由選擇;當(dāng)源和目的地在不同區(qū)時,則采用區(qū)間路由選擇。這就大大減少了網(wǎng)絡(luò)開銷,并增加了網(wǎng)絡(luò)的穩(wěn)定性。當(dāng)一個區(qū)內(nèi)的路由器出了故障時并不影響自治域內(nèi)其它區(qū)路由器的正常工作,這也給網(wǎng)絡(luò)的管理、維護(hù)帶來方便。
LAN口不能和WAN口網(wǎng)段相同
如果網(wǎng)段相同,則主機(jī)不能判斷,訪問的是內(nèi)網(wǎng)還是外網(wǎng)地址,有混亂。并且沒有意義
為什么有了IP地址,還要使用MAC地址:
① IP地址一般情況下容易修改和變動,具有隨意性,不能在網(wǎng)絡(luò)上固定標(biāo)識一臺設(shè)備;
② MAC地址一般情況出廠時由廠家燒錄到網(wǎng)卡中,不容易修改,在局域范圍內(nèi)容易唯一定位一臺設(shè)備。
③ 從拓?fù)浣Y(jié)構(gòu)和分層上分析,IP地址屬于網(wǎng)絡(luò)層,主要功能在廣域網(wǎng)范圍內(nèi)路由尋址,選擇最佳路由,而MAC地址在網(wǎng)絡(luò)接口層要形成適合于網(wǎng)絡(luò)媒體上傳輸?shù)臄?shù)據(jù)幀。
2. ARP? 網(wǎng)絡(luò)層協(xié)議
地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。主機(jī)發(fā)送信息時將包含目標(biāo)IP地址的ARP請求廣播到網(wǎng)絡(luò)上的所有主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址;收到返回消息后將該IP地址和物理地址存入本機(jī)ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。 當(dāng)不知道目標(biāo)主機(jī)的mac地址時使用。??
ARP協(xié)議工作過程:
1.? ? 原理:(ARP協(xié)議只使用于局域網(wǎng)中)
1>? 在局域網(wǎng)中,網(wǎng)絡(luò)中實(shí)際傳輸?shù)氖恰皫?,幀里面是有目?biāo)主機(jī)的MAC地址的。
2>? 在以太網(wǎng)中,一個主機(jī)要和另一個主機(jī)進(jìn)行直接通信,必須要知道目標(biāo)主機(jī)的MAC地址。但這個目標(biāo)MAC地址是如何獲得呢?它就是通過地址解析協(xié)議獲得的。所謂“地址解析”就是主機(jī)在發(fā)送幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過程。
3>? ARP協(xié)議的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。
4>? 點(diǎn)對點(diǎn)的連接是不需要ARP協(xié)議的
2.? ? 工作過程:
1>? 當(dāng)主機(jī)A向本局域網(wǎng)上的某個主機(jī)B發(fā)送IP數(shù)據(jù)報時,就先在自己的ARP緩沖表中查看有無主機(jī)B的IP地址。
2>? 如果有,就可以查出其對應(yīng)的硬件地址,再將此硬件地址寫入MAC幀,然后通過以太網(wǎng)將數(shù)據(jù)包發(fā)送到目的主機(jī)中。
3>? 如果查不到主機(jī)B的IP地址的表項(xiàng)??赡苁侵鳈C(jī)B才入網(wǎng),也可能是主機(jī)A剛剛加電。其高速緩沖表還是空的。在這中情況下,主機(jī)A就自動運(yùn)行ARP。
(1)ARP進(jìn)程在本局域網(wǎng)上廣播一個ARP請求分組。ARP請求分組的主要內(nèi)容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址為192.168.0.4的主機(jī)的硬件地址。
(2)在本局域網(wǎng)上的所有主機(jī)上運(yùn)行的ARP進(jìn)行都收到此ARP請求分組。
(3)主機(jī)B在ARP請求分組中見到自己的IP地址,就向主機(jī)A發(fā)送ARP響應(yīng)分組,并寫入自己的硬件地址。其余的所有主機(jī)都不理睬這個ARP請求分組。ARP響應(yīng)分組的主要內(nèi)容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播發(fā)送的,但ARP響應(yīng)分組是普通的單播,即從一個源地址發(fā)送到一個目的地址。
(4)主機(jī)A收到主機(jī)B的ARP響應(yīng)分組后,就在其ARP高速緩沖表中寫入主機(jī)B的IP地址到硬件地址的映射。
反向地址轉(zhuǎn)換協(xié)議(RARP:Reverse Address Resolution Protocol) 反向地址轉(zhuǎn)換協(xié)議(RARP)允許局域網(wǎng)的物理機(jī)器從網(wǎng)關(guān)服務(wù)器的 ARP 表或者緩存上請求其 IP 地址。
3. ICMP??
ICMP是(Internet Control Message Protocol)Internet控制報文協(xié)議。它是TCP/IP協(xié)議族的一個子協(xié)議,用于在IP主機(jī)、路由器之間傳遞控制消息。控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對于用戶數(shù)據(jù)的傳遞起著重要的作用 。ICMP協(xié)議主要用來檢測網(wǎng)絡(luò)通信故障和實(shí)現(xiàn)鏈路追蹤

1.ICMP詢問報文有四種回送請求和回答,時間戳請求和回答,掩碼地址請求和回答,以及路由器詢問和通過。
1>ICMP回送請求報文是由主機(jī)或路由器向一個特定的目的主機(jī)發(fā)出的詢問。收到此報文的機(jī)器必須給源主機(jī)發(fā)送ICMP回送應(yīng)答報文。這種詢問報文用來測試目的站是否可達(dá)以及了解其有關(guān)狀態(tài)。
2>ICMP時間戳請求允許系統(tǒng)向另一個系統(tǒng)查詢當(dāng)前的時間。該ICMP報文的好處是它提供了毫秒級的分辨率,而利用其他方法從別的主機(jī)獲取的時間只能提供秒級的分辨率。請求端填寫發(fā)起時間,然后發(fā)送報文。應(yīng)答系統(tǒng)收到請求報文時填寫接收時間戳,在發(fā)送應(yīng)答時填寫發(fā)送時間戳。大多數(shù)的實(shí)現(xiàn)是把后面兩個字段都設(shè)成相同的值。
3>主機(jī)使用ICMP地址掩碼請求報文可向子網(wǎng)掩碼服務(wù)器得到某個接口的地址掩碼。系統(tǒng)廣播它的ICMP請求報文。ICMP報文中的標(biāo)識符和序列號字段由發(fā)送端任意選擇設(shè)定,這些值在應(yīng)答中將被返回,這樣,發(fā)送端就可以把應(yīng)答與請求進(jìn)行匹配。
4>主機(jī)使用ICMP路由器詢問和通過報文可了解連接在本網(wǎng)絡(luò)上的路由器是否正常工作。主機(jī)將路由器詢問報文進(jìn)行廣播(或多播)。收到詢問報文的一個或幾個路由器就使用路由器通過報文廣播其路由選擇信息
ping? ? ?
因特網(wǎng)包探索器,用于測試網(wǎng)絡(luò)連接量的程序。Ping發(fā)送一個ICMP;回聲請求消息給目的地并報告是否收到所希望的ICMPecho (ICMP回聲應(yīng)答)。它是用來檢查網(wǎng)絡(luò)是否通暢或者網(wǎng)絡(luò)連接速度的命令。作為一個生活在網(wǎng)絡(luò)上的管理員或者黑客來說,ping命令是第一個必須掌握的DOS命令,它所利用的原理是這樣的:利用網(wǎng)絡(luò)上機(jī)器IP地址的唯一性,給目標(biāo)IP地址發(fā)送一個數(shù)據(jù)包,再要求對方返回一個同樣大小的數(shù)據(jù)包來確定兩臺網(wǎng)絡(luò)機(jī)器是否連接相通,時延是多少。


1.ping 整體過程
主機(jī)A 192.168.0.2? ping? B? 1.1.1.5
主機(jī)A打開命令提示符(具體方法:開始——運(yùn)行——cmd),命令提示符(>)后輸入ping 1.1.1.5? 當(dāng)“ping”這個指令被計算機(jī)執(zhí)行的時候,TCP/IP協(xié)議棧會調(diào)用該協(xié)議棧互聯(lián)網(wǎng)層的“ICMP”協(xié)議封裝“ping 1.1.1.5”這個請求。
ICMP協(xié)議封裝如下:

1->Host A(主機(jī)A)若要將這個ICMP協(xié)議封裝的請求發(fā)送給目標(biāo)主機(jī)B(Host B)就必須要使用IP協(xié)議來“運(yùn)輸”該請求。此時需要IP協(xié)議進(jìn)行封裝,將ICMP這個數(shù)據(jù)包寫上發(fā)送者(主機(jī)A)的IP地址和接收者(主機(jī)B)的IP地址,然后就可以根據(jù)這個目標(biāo)地址傳遞數(shù)據(jù)包。
IP協(xié)議在封裝如下:

2->下一步進(jìn)行數(shù)據(jù)鏈路層的封裝。
2-->判斷目標(biāo)主機(jī)B在本地網(wǎng)絡(luò)還是在遠(yuǎn)程網(wǎng)絡(luò)。根據(jù)IP地址和子網(wǎng)掩碼可以計算出了目標(biāo)主機(jī)B在遠(yuǎn)程網(wǎng)絡(luò)。
3->主機(jī)A首先會查詢自己的路由表,看在自己的路由表中能否找到去往目標(biāo)網(wǎng)絡(luò)(網(wǎng)絡(luò)B)的路由條目。若沒有則發(fā)送到默認(rèn)網(wǎng)關(guān)或缺省網(wǎng)關(guān),由這個默認(rèn)/缺省網(wǎng)關(guān)再將該數(shù)據(jù)包轉(zhuǎn)發(fā)到目標(biāo)網(wǎng)絡(luò)。現(xiàn)在主機(jī)A知道了默認(rèn)網(wǎng)關(guān)是自己的下一跳地址,主機(jī)A開始執(zhí)行封裝。封裝信息如下:

4->在以上所封裝的尋址信息當(dāng)中,主機(jī)A唯一不知道的就是“下一跳設(shè)備的MAC地址”,這里的“下一跳設(shè)備MAC地址”是指主機(jī)A的默認(rèn)網(wǎng)關(guān)的F0/0接口的MAC地址。首先主機(jī)A查看自己的ARP緩存表,每臺主機(jī)/電腦都有這個ARP緩存表,該緩存表記錄著與自己發(fā)生過通信的所有的直接相鄰設(shè)備或主機(jī)的硬件地址(MAC地址),ARP緩存表經(jīng)過一段時間會自動刪除,比如Windows 的動態(tài) ARP 緩存條目不超過 10 分鐘就會被刪除。如果主機(jī)A與路由器之前曾發(fā)生過通信,主機(jī)A自然能在ARP緩存表中找到路由器F0/0的硬件MAC地址,可是如果這是主機(jī)A與路由器的第一次通信,則主機(jī)A會向網(wǎng)絡(luò)A上發(fā)送發(fā)送ARP廣播請求數(shù)據(jù)包,該ARP請求包包含的關(guān)鍵信息如下:

????? 5->以上ARP請求包中封裝的三項(xiàng)信息都是已知的,只有“目的MAC地址”這一信息是未知的(全“0”填充)。當(dāng)該ARP請求包發(fā)送到網(wǎng)絡(luò)A上時,網(wǎng)絡(luò)A上的設(shè)備接收該ARP包并查看該ARP包內(nèi)的具體封裝信息。因?yàn)樵揂RP包中封裝的目的IP地址是192.168.0.1,所以只有具有192.168.0.1這個IP的接口或設(shè)備才應(yīng)答該ARP查詢請求,應(yīng)答者會將自己的硬件MAC地址封裝到這個ARP應(yīng)答數(shù)據(jù)包中。這個ARP應(yīng)答數(shù)據(jù)包(本例中由路由器F0/0接口發(fā)出ARP應(yīng)答)封裝的關(guān)鍵信息如下:

6->主機(jī)A通過ARP協(xié)議解析出路由器F0/0接口的MAC地址從而完成了數(shù)據(jù)鏈路層的封裝。最后主機(jī)A完成MAC地址解析后將該幀發(fā)送到網(wǎng)絡(luò)A上,該幀的具體封裝如下:

7->因?yàn)樵搸哪康腗AC地址是某個的MAC地址,所以只有路由器的該接口接收并處理該數(shù)據(jù)幀。路由器將該幀解封裝并查看網(wǎng)絡(luò)層的封裝信息,路由器看到該數(shù)據(jù)包網(wǎng)絡(luò)層封裝的目的地址是1.1.1.5。路由器為了將這個數(shù)據(jù)包轉(zhuǎn)發(fā)到1.1.1.5,進(jìn)行新一輪的網(wǎng)段查詢,發(fā)現(xiàn)路由器F0/1接口與主機(jī)B網(wǎng)段相同,取得b的mac地址,封裝以太網(wǎng)幀轉(zhuǎn)發(fā)。

8->這樣主機(jī)B就收到了該數(shù)據(jù)幀,主機(jī)B對該幀進(jìn)行解封裝看到了網(wǎng)絡(luò)層封裝的目的IP地址,知道這個數(shù)據(jù)包的目的地是自己后,主機(jī)B繼續(xù)對其拆封裝并查看ICMP報頭內(nèi)的信息得出結(jié)論:這是一個請求自己進(jìn)行反饋的數(shù)據(jù)包,需要自己將這條“數(shù)據(jù)包已到達(dá)主機(jī)B”的信息回饋給主機(jī)A。因此主機(jī)B為了將回饋信息順利送達(dá)主機(jī)A需要經(jīng)過如封裝:

主機(jī)B在發(fā)送應(yīng)答數(shù)據(jù)包時封裝的目的MAC地址是路由器F0/1接口的MAC地址,這也是主機(jī)B通過路由判斷和與運(yùn)算得出的結(jié)論,對于主機(jī)B來說路由器F0/1接口是它的下一跳。所以相當(dāng)于原路返回。
從主機(jī)A到路由器再到主機(jī)B執(zhí)行的封裝過程中可以看出網(wǎng)絡(luò)層封裝的信息是始終不變的:源IP是192.168.0.5 目的IP是1.1.1.5。始終變化的是一跳一跳的硬件MAC地址。
traceroute? 路由追蹤? ??
traceroute (Windows 系統(tǒng)下是tracert) 命令利用ICMP 協(xié)議定位您的計算機(jī)和目標(biāo)計算機(jī)之間的所有路由器。TTL 值可以反映數(shù)據(jù)包經(jīng)過的路由器或網(wǎng)關(guān)的數(shù)量,通過操縱獨(dú)立ICMP 呼叫報文的TTL 值和觀察該報文被拋棄的返回信息,traceroute命令能夠遍歷到數(shù)據(jù)包傳輸路徑上的所有路由器,Traceroute是用來偵測主機(jī)到目的主機(jī)之間所經(jīng)路由情況的重要工具。

原理
Traceroute的原理是知道目的主機(jī)的IP后,首先給目的主機(jī)發(fā)送一個TTL=1的UDP數(shù)據(jù)包,而經(jīng)過的第一個路由器收到這個數(shù)據(jù)包以后,就自動把TTL減1,而TTL變?yōu)?以后,路由器就把這個包給拋棄了,并同時產(chǎn)生?一個主機(jī)不可達(dá)的ICMP數(shù)據(jù)報給主機(jī)。主機(jī)收到這個數(shù)據(jù)報以后再發(fā)一個TTL=2的UDP數(shù)據(jù)報給目的主機(jī),然后刺激第二個路由器給主機(jī)發(fā)ICMP數(shù)據(jù)報。如此往復(fù)直到到達(dá)目的主機(jī)。這樣,traceroute就拿到了所有的路由器ip。