TCP/IP協議簇和底層協議配合,保證了數據可以實現端到端的傳輸。數據傳輸過程是一個很是複雜的過程,例如數據在轉發的過程當中會進行一系列的封裝和解封裝。
因此網絡工程師,深刻地瞭解數據在各類不一樣設備上的轉發過程,纔可以對網絡在進行正確地分析和檢測。緩存
數據包在相同網段內或者不一樣網段之間轉發所依據的原理基本一致。服務器
數據能夠在同一網絡內或者不一樣網絡間傳輸,數據轉發過程也分爲本地轉發和遠程轉發,可是二者的數據轉發原理基本一致,都是遵循TCP/IP協議簇。網絡
本示例中,主機A須要訪問服務器A的Web服務,而且嘉定二者之間已經創建了TCP鏈接。加密
主機A會對待發送的應用數據首先執行加密和壓縮等相關操做,以後進行傳輸層封裝。Web應用是基於傳輸層的TCP協議傳輸數據的。主機A使用TCP進行報文封裝時,必須填充源端口和目的端口字段,初始序列號和確認序列號字段,標識位,窗口字段以及校驗和字段。此例中數據段的源端口號爲主機A隨機選擇的1027號端口,目的端口號爲服務器A的TCP知名端口80。code
主機A完成傳輸層封裝後,通常會進行網絡層數據封裝,在使用IP進行封裝的時候,須要明確IP報文的源和目的地址,若是IP報文的大小大於網絡的最大傳輸單元(MTU),則該報文有可能在傳輸過程當中被分片(分片是IP層)。
生存時間(TTL)字段用來減小網絡環路形成的影響。ARG3系列路由器產生的數據包,默認TTL值爲255.路由器轉發一個數據包時,該值會被減1,若是路由器發現該值被減爲0,會丟棄該數據包。這樣,即便網絡中存在環路,數據包也不會在網絡上一直被轉發。
協議字段標識了傳輸層所用的協議。本例子中,傳輸層使用的是TCP協議,因此該字的填充值爲0x06
。blog
主機A必需要擁有到達目的地的路由。接口
每一個主機都會獨立維護各自的路由表項。主機A在發送數據前須要先檢查是否可以到達目的端,這個過程是經過查找路由來完成的。在此示例中,主機A擁有一條到達『任何網絡』(在IP編址部分已經簡要介紹過)的路由,它發往其餘網絡的數據都會經過IP地址爲10.1.1.1
的接口轉發到下一跳,即網關10.1.1.254
。路由
經過ARP緩存表找到下一跳的MAC地址。
若是表項中沒有下一跳的MAC地址,主機A會發送ARP請求。同步
接下來,因爲數據包要被封裝成數據幀,因此主機A須要獲取下一跳的MAC地址,也就是網關的MAC地址。主機首先會查詢ARP緩存表。
本例中,主機A的ARP緩存表中存在網關MAC地址的表項。
若是沒有查找到網關的MAC地址表項,主機A會經過發送ARP請求來獲取網關的MAC地址。io
主機A在鏈路層封裝數據幀的時候,會遵循IEEE 802.3或者Ethernet_II標磚,Ethernet_II幀頭的類型字段填充爲0x0800
,以表示網絡層使用的是IP協議。源MAC地址爲主機A的MAC地址,目的MAC地址爲網關路由器E0/0接口的MAC地址。
主機工做在半雙工狀態下,因此會使用CSMA/CD來檢測鏈路是否空閒。
前導碼(Preamble)用於使接收者進入同步狀態,定界符(SFD)用於指示幀的開始。
前導碼是包括了7個字節的二進制1
,0
交替的代碼,即1010...10
共56位。幀首定界符是長度爲1個字節的1010...
二進制序列,它的做用是使接受端對幀的第一位進行定位。
同一個衝突域裏的設備都會接受到主機A發送的數據幀。
只有網關(RTA)會處理該數據幀,並基於轉發。
本例中,主機A發送數據幀到共享以太網,此網絡中的全部設備都會受到該幀。設備收到幀以後,首先會進行FCS校驗。若是FCS校驗未能經過,則幀被當即丟棄。對於經過了FCS校驗的幀,設備會檢查幀中的目的MAC地址。若是幀中的目的MAC地址與本身的MAC地址不一樣,設備將丟棄幀,若是相同,則會繼續處理。處理過程當中,幀頭幀尾會被剝去(就是解封裝),生效的數據報文會被根據幀頭中的類型字段的值來送到網絡層中的對應協議模塊去處理。
網關檢查是否具備到達目的網絡的路由條目。
若是存在轉發路徑,則爲數據包添加一個新的二層幀頭和幀尾,並繼續轉發。
RT-A收到此數據報文後,網絡層會對該報文進行處理。RT-A首先根據IP頭部信息中的校驗和字段,檢查IP數據報文頭部的完整性,而後根據目的IP地址查看路由表,肯定是否可以將數據包轉發到目的端。RT-A還必須對TTL的值進行處理。另外,報文大小不能超過MTU值。若是報文大小超過MTU值,則報文將被分片。 網絡層處理完成後,報文將被送到數據鏈路層從新進行封裝,稱爲一個新的數據幀,該幀的頭部會封裝新的源MAC地址和目的MAC地址。若是當前網絡設備不知道下一跳的MAC地址,將會使用ARP來得到。