以太網首部
目地MAC地址(8字節) |
源MAC地址(8字節) |
類型(2字節) |
1、IP頭的結構
版本(4位) |
頭長度(4位) |
服務類型(8位) |
封包總長度(16位) |
封包標識(16位) |
標誌(3位) |
片斷偏移地址(13位) |
|
存活時間(8位) |
協議(8位) |
校驗和(16位) |
|
來源IP地址(32位) |
|||
目的IP地址(32位) |
|||
選項(可選) |
填充(可選) |
||
數據 |
(1)字節和數字的存儲順序是從右到左,依次是從低位到高位,而網絡存儲順序是從左到右,依次從低位到高位。
(2)版本:佔第一個字節的高四位。頭長度:佔第一個字節的低四位。
(3)服務類型:前3位爲優先字段權,現在已經被忽略。接着4位用來表示最小延遲、最大吞吐量、最高可靠性和最小費用。
(4)封包總長度:整個IP報的長度,單位爲字節。
(5)存活時間:就是封包的生存時間。通常用通過的路由器的個數來衡量,比如初始值設置爲32,則每通過一個路由器處理就會被減一,當這個值爲0的時候就會丟掉這個包,並用ICMP消息通知源主機。
(6)協議:定義了數據的協議,分別爲:TCP、UDP、ICMP和IGMP。定義爲:
#define PROTOCOL_TCP 0x06
#define PROTOCOL_UDP 0x11
#define PROTOCOL_ICMP 0x06
#define PROTOCOL_IGMP 0x06
(7)檢驗和:校驗的首先將該字段設置爲0,然後將IP頭的每16位進行二進制取反求和,將結果保存在校驗和字段。
(8)來源IP地址:將IP地址看作是32位數值則需要將網絡字節順序轉化位主機字節順序。轉化的方法是:將每4個字節首尾互換,將2、3字節互換。
(9)目的IP地址:轉換方法和來源IP地址一樣。
在網絡協議中,IP是面向非連接的,所謂的非連接就是傳遞數據的時候,不檢測網絡是否連通。所以是不可靠的數據報協議,IP協議主要負責在主機之間尋址和選擇數據包路由。
2、ICMP協議的頭結構
類型(8位) |
代碼(8位) |
校驗和(8位) |
類型或者代碼 |
(1)類型:一個8位類型字段,表示ICMP數據包類型。
(2)代碼:一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置爲0。
(3)檢驗和:數據包中ICMP部分上的一個16位檢驗和。
3、TCP協議的頭結構
來源端口(2字節) |
目的端口(2字節) |
||||
序號(4字節) |
確認序號(4字節) |
||||
頭長度(4位) |
保留(6位) |
||||
URG |
ACK |
PSH |
RST |
SYN |
PIN |
窗口大小(2字節) |
校驗和(16位) |
||||
緊急指針(16位) |
選項(可選) |
||||
數據 |
|||||
(1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。
(2)TCP目的端口(Destination Port):16位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。
(3)序列號(Sequence Number):TCP連線發送方向接收方的封包順序號。
(4)確認序號(Acknowledge Number):接收方回發的應答順序號。
(5)頭長度(Header Length):表示TCP頭的雙四字節數,如果轉化爲字節個數需要乘以4。
(6)URG:是否使用緊急指針,0爲不使用,1爲使用。
(7)ACK:請求/應答狀態。0爲請求,1爲應答。
(8)PSH:以最快的速度傳輸數據。
(9)RST:連線復位,首先斷開連接,然後重建。
(10)SYN:同步連線序號,用來建立連線。
(11)FIN:結束連線。如果FIN爲0是結束連線請求,FIN爲1表示結束連線。
(12)窗口大小(Window):目的機使用16位的域告訴源主機,它想收到的每個TCP數據段大小。
(13)校驗和(Check Sum):這個校驗和和IP的校驗和有所不同,不僅對頭數據進行校驗還對封包內容校驗。
(14)緊急指針(Urgent Pointer):當URG爲1的時候纔有效。TCP的緊急方式是發送緊急數據的一種方式。
4、UDP協議的頭結構
源端口(2字節) |
目的端口(2字節) |
封報長度(2字節) |
校驗和(2字節) |
數據 |
(1)源端口(Source Port):16位的源端口域包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。
(2)目的端口(Destination Port):6位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。
(3)封包長度(Length):UDP頭和數據的總長度。
(4)校驗和(Check Sum):和TCP和校驗和一樣,不僅對頭數據進行校驗,還對包的內容進行校驗。
5、ARP報頭結構
硬件類型 |
協議類型 |
|
硬件地址長度 |
協議長度 |
操作類型 |
發送方的硬件地址(0-3字節) |
||
源物理地址(4-5字節) |
源IP地址(0-1字節) |
|
源IP地址(2-3字節) |
目標硬件地址(0-1字節) |
|
目標硬件地址(2-5字節) |
||
目標IP地址(0-3字節) |
||
(1)硬件類型字段指明瞭發送方想知道的硬件接口類型,以太網的值爲1;
(2)協議類型字段指明瞭發送方提供的高層協議類型,IP爲0800(16進制);
(3)硬件地址長度和協議長度指明瞭硬件地址和高層協議地址的長度,這樣ARP報文就可以在任意硬件和任意協議的網絡中使用;
(4)操作字段用來表示這個報文的類型,ARP請求爲1,ARP響應爲2,RARP請求爲3,RARP響應爲4;
(5)發送方的硬件地址(0-3字節):源主機硬件地址的前3個字節;
(6)發送方的硬件地址(4-5字節):源主機硬件地址的後3個字節;
(7)發送方IP(0-1字節):源主機硬件地址的前2個字節;
(8)發送方IP(2-3字節):源主機硬件地址的後2個字節;
(9)目的硬件地址(0-1字節):目的主機硬件地址的前2個字節;
(10)目的硬件地址(2-5字節):目的主機硬件地址的後4個字節;
(11)目的IP(0-3字節):目的主機的IP地址。
ARP的工作原理如下:
1. 首先,每臺主機都會在自己的ARP緩衝區(ARP Cache)中建立一個 ARP列表,以表示IP地址和MAC地址的對應關係。
2. 當源主機需要將一個數據包要發送到目的主機時,會首先檢查自己 ARP列表中是否存在該 IP地址對應的MAC地址,如果有﹐就直接將數據包發送到這個MAC地址;如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC地址。此ARP請求數據包裏包括源主機的IP地址、硬件地址、以及目的主機的IP地址。
3. 網絡中所有的主機收到這個ARP請求後,會檢查數據包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此數據包;如果相同,該主機首先將發送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經存在該IP的信息,則將其覆蓋,然後給源主機發送一個 ARP響應數據包,告訴對方自己是它需要查找的MAC地址;
4. 源主機收到這個ARP響應數據包後,將得到的目的主機的IP地址和MAC地址添加到自己的ARP列表中,並利用此信息開始數據的傳輸。如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。