免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1975 | 回复: 0
打印 上一主题 下一主题

IP协议(RFC791)-IP包格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-30 13:03 |只看该作者 |倒序浏览
IP协议是在网络层的协议.它主要完成数据包的发送作用. 下面这个表是IP4的数据包格式,IP封包格式(IPv4包首部长度为20字节)
file:///F:/IT学习/单片机/走过/以太网/8019/网页资料/IP协议(RFC791)-IP包格式.files/0.jpg

|0......4........8..............16....................................32
-------------------------------------------------------------------------
|版本4.|首部长度|服务类型(优先级|数据包总长............................|
-------------------------------------------------------------------------
|标识...........................|RF|DF|MF|碎片偏移.....................|
-------------------------------------------------------------------------
|生存时间TTL....|协议(TCP/UDP)..|首部较验和............................|
-------------------------------------------------------------------------
|源IP地址..............................................................|
-------------------------------------------------------------------------
|目的IP地址............................................................|
-------------------------------------------------------------------------
|选项..................................................................|
=========================================================================
|数据..................................................................|
-------------------------------------------------------------------------Version (4) Internet Header Length (4) Type of Service (8) Total Length (16)  
Identification (16) Flags (3) Fragment Offset (13)  
Time To Live (8) Protocol (8) Header checksum (16)  
Source Address (32)  
Destination Address (32)  
Options (Variable) Padding (0-24)  
   
Data
....  
file:///F:/IT学习/单片机/走过/以太网/8019/网页资料/IP协议(RFC791)-IP包格式.files/expand.gif
IP包字段含义
下面我们看一看IP的结构定义
struct ip
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4; /* header length */
unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4; /* version */
unsigned int ip_hl:4; /* header length */
#endif
u_int8_t ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* Reserved Fragment flag */
#define IP_DF 0x4000 /* Don't Fragment flag即第二位为1(不可分包) */
#define IP_MF 0x2000 /* More Fragments flag即二三位为00(可分包,此为最后一个包)或01(还有后继包) */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_int8_t ip_ttl; /* time to live */
u_int8_t ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src, ip_dst; /* source and dest address */
};
ip_v IP协议的版本号,这里是4,现在IPV6已经出来了
ip_hl IP包首部长度,这个值以4字节为单位.IP协议首部的固定长度为20个字节,如果IP包没有选项,那么这个值为5.
ip_tos服务类型,说明提供的优先权.
ip_len说明IP数据的长度.以字节为单位.
ip_id标识这个IP数据包.
ip_off碎片偏移,这和上面ID一起用来重组碎片的.
ip_ttl生存时间.没经过一个路由的时候减一,直到为0时被抛弃.
ip_p协议,表示创建这个IP数据包的高层协议.如TCP,UDP协议.
ip_sum首部校验和,提供对首部数据的校验.
ip_src,ip_dst发送者和接收者的IP地址
关于IP协议的详细情况,请参考 RFC791


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104453/showart_2063002.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP