Socket編程實踐(16),socket編程實踐16
乙太網路框架格式
說明1:鏈路層的資料包,稱為乙太網路幀。
說明2:鏈路層不識別IP地址[因為IP地址是邏輯地址],鏈路層識別物理網卡MAC地址[硬體地址]。
說明3:需要根據IP地址找到對方的MAC地址(ARP位址解析通訊協定)[MAC —> IP地址方向位址解析:RARP反向位址解析通訊協定]。
說明4:應用程式層根據對等方的IP地址進行通訊,在資料封裝過程中,鏈路層需要目的地址的MAC地址從何而來?需要將IP地址轉換成MAC地址,也就是位址解析。
乙太網路首部代碼:
struct ethernet_hdr{ char dest_mac[6]; char src_mac[6]; short protocol;};
ARP位址解析通訊協定
ARP首部代碼:
struct arp_hdr{ unsigned short hwtype;// 固定1 unsigned short protype;// 固定0x0800(代表為IP協議做請求) unsigned char hwaddrlen;// 固定6(即MAC地址長度) unsigned char proaddrlen;// 固定4 (即IP地址長度) unsigned short opcode;// Request - 1, Reply - 0x0002 unsigned char sender_mac[6];// 寄件者MAC unsigned char sender_ip[4];// 寄件者IP unsigned char dest_mac[6];// 接收者MAC unsigned char dest_ip[4];// 接收者IP}; 乙太網路的MTU和路徑MTU
乙太網路和IEEE 802.3對資料幀的長度都有限制,其最大值分別是1500和1492位元組,將這個限制稱作傳輸單元最大值(MTU,Maximum Transmission Unit)
如果IP層有一個資料報要傳,而且資料的長度比鏈路層的MTU還大,那麼IP層就要進行分區(Fragmentation),把資料報分成若干片,這樣每一片都小於MTU。
當網路上的兩台主機互相進行通訊時,兩台主機之間要經過多個網路,每個網路的鏈路層可能有不同的MTU,其中兩台通訊主機路徑中的最小MTU被稱作路徑MTU。
IP資料報
版本號碼,目前取值4
首部長度,4個位元組為單位,取值範圍5~15
服務類型,指定傳輸的優先順序、傳輸速度、可靠性和輸送量等
報文總長度,最大長度為65535位元組
報文標識,唯一標識一個資料報,如果資料報分段,則每個分段的標識都一樣
標誌,最高位未使用,定義為0,其餘兩位為DF(不分段)和MF(更多分段)
段位移量,以8個位元組為單位,指出該分段的第一個資料字在未經處理資料報中的位移位置
存留時間(TTL),取值0~255,每經過一個路由節點減1,為0時被丟棄(Tranceroute程式的實現原理)
協議,指明該資料報的協議類型,如1為ICMP,4為IP,6為TCP,17為UDP等
首部校正和,每通過一次網關都要重新計算該值,用於保證IP首部的完整性
選項,長度可變,提供某些場合下需要的控制功能,IP首部的長度必須是4個位元組的整數倍,如果選項長度不是4的整數倍,必須填充資料
IP首部代碼:
struct ip_hdr{ char ver_hl; char tos; unsigned short len; unsigned short id; unsigned short fragment; char ttl; char protocol; unsigned short hdr_chksum; char src_ip [4]; char dest_ip [4];}; ICMP協議
ICMP協議用於傳遞差錯資訊、時間、回顯、網路資訊等控制資料
當我們ping 一台主機想看它是否運行時,就產生了一條ICMP 資訊。遠程主機將用它自己的ICMP 資訊對ping 請求作出回應。
ICMP協議說明:
本身是IP的一部分。
用途:網關或者目標機器利用ICMP與源通訊,當出現問題時,提供反饋資訊
在IP協議棧中必須實現
ICMP包含在IP資料包的淨荷資料中,IP頭中協議類型為1
ICMP資料的第一個位元組代表ICMP報文的類型,它決定了後續資料的格式
特點:
其控制能力並不用於保證傳輸的可靠性
它本身也不是可靠傳輸的
ICMP資料包
ICMP包含在IP資料包的淨荷資料中,IP頭中協議類型為1
ICMP資料的第一個位元組代表ICMP報文的類型,它決定了後續資料的格式
ICMP首部代碼:
struct icmp_hdr{ chartype;// ICMP報文類型 char code;// “子類型” unsigned short icmpchksum;// 校正和};
ICMP報文類型
報文類型說明
² 0 Echo Reply
² 3 Destination Unreachable
² 4 Source Quench
² 5 Redirect
² 8 Echo
² 11 Time Exceeded
² 12 Parameter Problem
² 13 Timestamp
² 14 Timestamp Reply
² 15 Information Request
² 16 Information Reply
² 17 Address Mask Request
² 18 Address Mask Reply
報文分類
² ICMP差錯報文
² 目的不可達報文(類型3)
² 逾時報文(類型11)
² 參數出錯報文(類型12)
² ICMP控制報文
² 報源抑制報文(類型4)
² 重新導向(類型5)
² ICMP請求/應答報文
² 回送請求和響應報文(類型0和8)
² 時間戳記請求和響應報文(類型13和14)
² 位址遮罩請求和響應報文(類型17和18)
² 其他
ICMP Echo報文
類型:0表示Echo Reply,8表示Echo
代碼:0
標識符:標識一個會話,例如,用進程ID
序號:例如每個請求增1
選項資料:回顯
ICMP 目的不可達報文
類型:3
代碼:0表示網路不可達,1表示主機不可達;2表示協議不可達;3表示連接埠不可達;等等
出錯的IP包的IP首部+原始IP資料包中前8個位元組