文档介绍:IT-Homer 专栏
成功是优点的发挥,失败是缺点的积累! 不为失败找理由,只为成功找
方法……
TCP/IP数据报格式
分类: NetWork 2010-06-10 21:16 678人阅读评论(0) 收藏举报
IP数据报格式
 
版本字段长度为4,用来表明建立数据报的IP版本,目前的IP版本是IPv4,IPv6正在发展中。IPv4的字段为0100 。
首部长度(报头长度)指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60
个字节。15x32/8= (不含填充字段和IP选
项字段的IP报头是最常见的IP报头,为20个字节)
    服务类型TOS(Type Of Service)总长度字段是指整个I P数据报的长度,
特,所以I P数据报最长可达6 5 5 3 5字节(64KB).总长度字段是I P首部中必要的内容。数据长度=总长-报头长
度。
    标识符长16比特。
标志位长度为3比特,用于分段控制:第0位为预留位,第1位表示可否分段。当该位的值为0时,表示数据报不可分
段,值为1时,表示数据报可被分段。第2位为段是否结束位,当该位的值为0时,表示该段是原数据报的最后一段,
值为1时,表示后面不有更多的分段。
当网络设备要发送的数据报长度比所在网络的最大传输单元(MTU,Max Transfer United)大,并且标志位的第1位
设置为不能分段(0)时,网络设备会向发送方返回一个因特网控制消息协议ICMP错误消息,并丢弃该数据报。除了
最后一个分段外,其余分段的第2位均设置为1。
段偏移13比特长度,用于指定分段在原始数据报中的位置,以8个字节为单位.
生存时间TTL长度为8比特,用于指定数据报允许保留在网络上的时间。
协议字段长度为8比特,用于指定数据报数据区中携带的消息是由哪种高级协议建立的。ICMP为1,TCP为6,UDP为
17。协议号分配RFC790.
报头校验和16比特,仅用于IP报头校验和。
源IP地址及目的IP地址。
选项,填充字段用于确保将选项字段填充为最少32个比特位,以保证IP报头以32位结束。
分段:分段是将一个大的IP数据报分解成几个较小的数据报段的过程。当IP模块需要通过一个具有较小MTU的网络传
送较大的数据包时,就必须将其分段。
//定义ip报头数据结构 typedef struct _iphdr { byte ver_len; //版本4位,头长度4位,报头长度以32位为一个单
位 byte type; //类型8位 byte length[2]; //总长度,16位,指出报文的以字节为单位的总长度, 报文长度不能超
过65536个字节,否则认为报文遭到破坏 byte id[2]; //报文标示,用于多于一个报文16位 byte flag_offset[2];
//标志,3位数据块偏移13位 byte time; //生存时间,8位 byte protocol; //协议,8位 byte crc_val[2]; //头校
验和,16位 byte src_addr