好文參考:《網路傳輸的三張表:MAC地址表,ARP緩存表和路由表》http://www.cnblogs.com/clovn/p/4911212.html
(1)數據包封裝
? ? ? ? ? 傳輸層及其一下的機制由內核決定,主要負責通訊的具體細節;應用層由用戶進程提供,主要負責對通訊數據的含義進行解釋。應用層數據通過協議棧發送到網絡上,為了保證數據能夠被接收,需要在每層協議之前加一個數據首部作為標識,我們稱之為封裝,具體格式如下:
? ? ? ?? ? ? ? ??
(2)以太網幀格式
? ? ? ? ? ? 1)?在鏈路層中,傳輸的數據我們稱為幀,具體的幀格式如下圖所示:
? ?
? ? ? ? ?其中:圖中的目的地址和原地址指的是網卡的硬件地址(MAC地址,即網卡編號,唯一),CRC為校驗位
? ? ? ? ? 2)ARP數據報格式:獲取下一跳(下一個路由節點)的MAC,實現數據傳遞。
? ? ? ? ? ? ? 1>在網路傳輸的過程中,只有知道目標的MAC地址(未知)和發送數據起點的MAC地址(已知),才能進行正常的數據傳輸。如果得知目標的MAC地址,通過ARP發送數據請求和數據應答即可得到目標的MAC地址,ARP數據報的格式如下:
? ? ? ? ? ? ??
? ? ? ? ? ? ? 2>?具體的實現流程:
? ? ? ? ? ? ? ? ?在數據過程中,首先需要獲得目標的MAC地址,這就需要使用ARP協議了。在每臺主機中都有一個ARP緩存表,其中記錄了主機IP和MAC地址的對應關系。如果AB之間想要通信,A首先會檢查自己的ARP緩存表中是否有B的IP地址和對應MAC地址的對應關系。如果有,則會將B的IP地址和對應的MAC地址填到ARP數據報中;如果沒有,則A會發一個ARP請求給B,此時交換機接收到這個數據幀(廣播幀),將數據以非接口的形式廣播出去。此時B收到這個數據幀,會檢查是否和自己的IP相同,如果不同,則忽略信息,如果相同,則會將A的IP和MAC地址的對應關系記錄在自己的ARP緩存表中,同時將給A發送一個ARP應答數據(拆包和組包),其中包括B的MAC地址。A收到B的應答數據后,會將B的IP地址和MAC地址填入到自己的ARP緩存地址中。
? ? ? ? ? ? ? ? 在網路傳輸中,交換機在收到數據幀之后,會將數據幀中的MAC地址和端口號記錄在MAC表中,然后在表中尋找有沒有數據幀目標的MAC地址信息。如果有,則直接將數據從表中的接口傳遞給下一個MAC地址(單播);如果沒有,則將數據以非接口的形式發送出去(稱為廣播)(現在的路由器一般都包含了交換機在內)。?
? ? ? ? ? ? ? ?通過路由節點的不斷拆包和組包,直到找到封裝在網絡層IP協議中的目的地址.數據包在不斷傳遞的過程中,最長的生命周期,我們稱之為TTL。
? ? ? ? ? ? 3>IP段格式:數據前面的那段我們稱為IP首部(固定部分+可變部分)。
? ? ? ? ??
? ? ? ? ?其中:4位版本號:IPV4/IPV6? ? ?4位首部長度:數據首部的最大字節數(最小為5,最大為15,以4字節為單位)
? ? ? ? ? ? ? ? ? ? ? 16位總長度:數據報的最大長度為2^16-1=65535字節(首部和數據之和長度)
? ? ? ? ? ? ? ? ? ? ? 13位片偏移:用于傳輸較大的數據,切片時記錄片的編號(片偏移以8字節為偏移單位)
? ? ? ? ? ? ? ? ? ? ? 8位生存時間:為起始主機到目標主機之間最多可存在255個路由節點(最多有255跳)
? ? ? ? ? ? ? ? ? ? ? 32位源IP地址:發送數據端的IP? ? ? ? ? ? ? 32位目的IP地址:接收數據端的IP
? ? ? ? ? ? ? ?4>UDP數據報格式
? ? ?? ? ? ??
? ? ? ?由于在一個主機中,不同的應用對應于不用的進程,也就是所謂的端口號。因此通過指定兩個端口號,就可以指定兩個應用進行通信,從而不會導致數據傳輸錯亂。
? ? ? ? ? 5>TCP數據報格式
? ? ? ? ? ? ? ?
? ? ? ? ? 和UDP相比,TCP數據報格式相對來說比較復雜,除了相對的端口號,還有序號和確認序號,用來重構數據使用。
?