您好,登錄后才能下訂單哦!
IP協議是用于將多個包交換網絡連接起來的,它在源地址和目的地址之間傳送一種稱之為數據包的東西,它還提供對數據大小的重新組裝功能,以適應不同網絡對包大小的要求。IP的責任就是把數據從源傳送到目的地。它不負責保證傳送可靠性,流控制,包順序和其它對于主機到主機協議來說很普通的服務。
ip數據包的格式:
IP協議是TCP/IP體系中兩個主要的協議之一,而IP地址位于IP數據報的首部,在網絡層及以上使用的是IP地址,因此在數據鏈路層是看不見數據報的IP地址,另外首部的前一部分是固定長度,共20字節。在TCP/IP的標準中,各種數據格式常以32位為單位來描述,通過分析IP數據報的格式就能夠知道IP協議都具有哪些功能
分析捕捉到的數據包:
從捕捉的數據包看出是ipv4的版本,首部長度為20字節,次長度為固定長度,total length :60 全部長度為字節 Differentiated services Field: 0xoo 指明服務類型;flags 標志 Fragment offset :0 片偏移量為零。time to live :64 生存時間,又叫跳數。header checksum :oxee19 校驗和,可驗證數據包是否出錯,source:172.28.15.1 原地址的ip Destination:172.28.15.55為目的地址ip。
IP使用四個關鍵技術提供服務:服務類型,生存時間,選項和報頭校驗碼。服務類型指希望得到的服務質量。服務類型是一個參數集,這些參數是Internet能夠提供服務的代表。這種服務類型由網關使用,用于在特定的網絡,或是用于下下一個要經過的網絡,或是下一個要對這個數據報進行路由的網關上選擇實際的傳送參數。生存時間是數據報可以生存的時間上限。它由發送者設置,由經過路由的地方處理。如果未到達時生存時間為零,拋棄此數據報。對于控制函數來說選項是重要的,但對于通常的通信來說它沒有存在的必要。選項包括時間戳,安全和特殊路由。報頭校驗碼保證數據的正確傳輸。如果校驗出錯,拋棄整個數據報。
IP不提供可靠的傳輸服務,它不提供端到端的或(路由)結點到(路由)結點的確認,對數據沒有差錯控制,它只使用報頭的校驗碼,它不提供重發和流量控制。如果出錯可以通過ICMP報告,ICMP在IP模塊中實現。
接下來即是校驗和的計算:
IP首部校驗和的計算方法
1.把校驗和字段清零。
2.然后對每16位(2字節)進行二進制反碼求和,反碼求和的意思是先對每16位求和,再將得到的和轉為反碼。
下面以網絡上的例子講述:
接收方進行校驗時,也是對每16位進行二進制反碼求和。接收方計算校驗和時的首部與發送方計算校驗和時的首部相比,多了一個發送方計算出來的校驗和。因此,如果首部在傳輸過程中沒有發生差錯,那么接收方計算的結果應該為全一,因為接收方計算除校驗和以外的部分得到值是校驗和的反碼,再加多出來的校驗和當然是全一了。
最后對上述過程舉個例子:先將校驗和字段置零;
IP頭:
45 00 00 31
89 F5 00 00
6E 06 00 00(校驗字段)
DE B7 45 5D -> 222.183.69.93
C0 A8 00 DC -> 192.168.0.220
計算:
4500 + 0031 +89F5 + 0000 + 6e06+ 0000 + DEB7 + 455D + C0A8 + 00DC =3 22C4
0003 + 22C4 = 22C7
~22C7 = DD38 ->即為應填充的校驗和
當接受到IP數據包時,要檢查IP頭是否正確,則對IP頭進行檢驗,方法同上:
計算:
4500 + 0031 +89F5 + 0000 + 6E06+ DD38 + DEB7 + 455D + C0A8 + 00DC =3 FFFC
0003 + FFFC = FFFF
得到的結果是全一,正確。
(作業)
求校驗和的算法及程序:
算法:
SHORT checksum(USHORT* buffer, int size){
unsigned long cksum = 0;
while(size>1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if(size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum>>16) + (cksum&0xffff);
cksum += (cksum>>16);
return (USHORT)(~cksum);
}
程序:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。