国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

IP報文格式詳解

2019-11-06 08:48:29
字體:
來源:轉載
供稿:網友

ip報文是在網絡層傳輸的數據單元,也叫IP數據報。IP報文格式如下圖(圖片來源:百度百科)

版本:IP協議的版本,目前的IP協議版本號為4,下一代IP協議版本號為6。

首部長度:IP報頭的長度。固定部分的長度(20字節)和可變部分的長度之和。共占4位。最大為1111,即10進制的15,代表IP報頭的最大長度可以為15個32bits(4字節),也就是最長可為15*4=60字節,除去固定部分的長度20字節,可變部分的長度最大為40字節。

服務類型:Type Of Service。

總長度:IP報文的總長度。報頭的長度和數據部分的長度之和。

標識:唯一的標識主機發送的每一分數據報。通常每發送一個報文,它的值加一。當IP報文長度超過傳輸網絡的MTU(最大傳輸單元)時必須分片,這個標識字段的值被復制到所有數據分片的標識字段中,使得這些分片在達到最終目的地時可以依照標識字段的內容重新組成原先的數據。

標志:共3位。R、DF、MF三位。目前只有后兩位有效,DF位:為1表示不分片,為0表示分片。MF:為1表示“更多的片”,為0表示這是最后一片。

片位移:本分片在原先數據報文中相對首位的偏移位。(需要再乘以8)

生存時間:IP報文所允許通過的路由器的最大數量。每經過一個路由器,TTL減1,當為0時,路由器將該數據報丟棄。TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64。發送 ICMP 回顯應答時經常把 TTL 設為最大值 255。

協議:指出IP報文攜帶的數據使用的是那種協議,以便目的主機的IP層能知道要將數據報上交到哪個進程(不同的協議有專門不同的進程處理)。和端口號類似,此處采用協議號,TCP的協議號為6,UDP的協議號為17。ICMP的協議號為1,IGMP的協議號為2.

首部校驗和:計算IP頭部的校驗和,檢查IP報頭的完整性。

源IP地址:標識IP數據報的源端設備。

目的IP地址:標識IP數據報的目的地址。

———————————————————————————————————————————————————————————————————

linux下各數據報頭部結構體定義:

#ifndef LITTLE_ENDIAN#define LITTLE_ENDIAN   (1)   //BYTE ORDER#else#error Redefine LITTLE_ORDER#endif

//Mac頭部,總長度14字節typedef struct _eth_hdr{unsigned char dstmac[6]; //目標mac地址unsigned char srcmac[6]; //源mac地址unsigned short eth_type; //以太網類型}eth_hdr;

//IP頭部,總長度20字節typedef struct _ip_hdr{#if LITTLE_ENDIANunsigned char ihl:4;   //首部長度unsigned char version:4, //版本 #elseunsigned char version:4, //版本unsigned char ihl:4;   //首部長度#endifunsigned char tos;   //服務類型unsigned short tot_len; //總長度unsigned short id;    //標志unsigned short frag_off; //分片偏移unsigned char ttl;   //生存時間unsigned char PRotocol; //協議unsigned short chk_sum; //檢驗和struct in_addr srcaddr; //源IP地址struct in_addr dstaddr; //目的IP地址}ip_hdr;

//TCP頭部,總長度20字節typedef struct _tcp_hdr{unsigned short src_port;   //源端口號unsigned short dst_port;   //目的端口號unsigned int seq_no;    //序列號unsigned int ack_no;    //確認號#if LITTLE_ENDIANunsigned char reserved_1:4; //保留6位中的4位首部長度unsigned char thl:4;    //tcp頭部長度unsigned char flag:6;    //6位標志unsigned char reseverd_2:2; //保留6位中的2位#elseunsigned char thl:4;    //tcp頭部長度unsigned char reserved_1:4; //保留6位中的4位首部長度unsigned char reseverd_2:2; //保留6位中的2位unsigned char flag:6;    //6位標志 #endifunsigned short wnd_size;   //16位窗口大小unsigned short chk_sum;   //16位TCP檢驗和unsigned short urgt_p;    //16為緊急指針}tcp_hdr;

//UDP頭部,總長度8字節typedef struct _udp_hdr{unsigned short src_port; //遠端口號unsigned short dst_port; //目的端口號unsigned short uhl;   //udp頭部長度unsigned short chk_sum; //16位udp檢驗和}udp_hdr;

//ICMP頭部,總長度4字節typedef struct _icmp_hdr{unsigned char icmp_type;   //類型unsigned char code;    //代碼unsigned short chk_sum;   //16位檢驗和}icmp_hdr;

參考文獻:

http://blog.csdn.net/shinezhang86/article/details/47145907

http://blog.csdn.net/kernel_jim_wu/article/details/7447377

http://www.360doc.com/content/17/0301/10/40723314_632895111.shtml

http://www.360doc.com/content/11/0120/23/1964482_87982213.shtml

http://www.cnblogs.com/yongren1zu/p/6274460.html

http://www.cnblogs.com/kzloser/articles/2582349.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贞丰县| 瑞金市| 昌黎县| 巴东县| 绥芬河市| 益阳市| 宝兴县| 健康| 龙陵县| 微山县| 萍乡市| 图们市| 虹口区| 屯门区| 莱西市| 池州市| 江川县| 广德县| 湖州市| 修水县| 临沂市| 兰考县| 都昌县| 吉林市| 柘城县| 荣昌县| 吉安县| 临朐县| 平安县| 林周县| 四会市| 长宁区| 荔波县| 丰城市| 西和县| 闽清县| 建湖县| 凤冈县| 雷山县| 开阳县| 山东省|