嵌入式 > 嵌入式开发 > 详情

ip头部结构的详解

发布时间:2024-06-05 发布时间:
|
ip属于网络层协议,其意义在于确定设备的位置,即ip地址。但又和arp与tcp不同,它是为传输层服务的,通常将tcp和udp架在ip协议之上。所以他只不过是一个数据的载体,本身并没有自己的询问与回复功能。他在程序中,只起到确定传输的功能。



以上是ip头的内容,
版本一般为4,即ipv4,如果是ipv6,则可能为6,
首部长度:首部长度应该为 数量*4 通常为20字节,通过抓包工具抓包,基本都是20字节无一例外。

tos服务类型:应该是对应路由器的,当终端接收到数据后,应该就不关心这个的值了。包括过程字段(3位,设置了数据包的重要性,取值越大数据越重要),延迟字段(1位),流量字段(1位),可靠性字段(1位), 成本字段(1位),未使用(1位)
16位总长度:即ip总长

16位标识:占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

ip头部标识与片偏移:
ip数据头中的3位标识最低位为mf,为1时说明这个ip数据包是分片的,并且后续还有数据包,为0时说明这个ip数据包是分片的,但已经是最后一个数据了。中间位为df,df为1时,说明这个数据包是不分片的,为零时才允许数据包分片。
片偏移 :占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。
8位ttl生存时间,表示的是数据从一个设备发向另一个设备,经过一个中转站,则减1,当ttl为0时,即使收端收到,则认定该数据超时,则丢弃该数据。也就是一个防止超时的设置,不过网上还有另一种说法,就是表示自己的设备使用的是什么系统,具体表示什么,没有试过。不过一般ttl的数值为64.

8位协议:ICMP(1)、TCP(6)、UDP(17)。
校验和:为头部校验。
32位源ip和32为目标ip
还有一个是选项,至于选项的内容是什么,因为没见过,具体我也不知道。
如果没有选项或选项的后面,那就是数据,数据包含这tcp数据和udp数据。

对于程序而言,先颠倒ip,然后把那些死的东西写进去,甚至是不处理,只处理那些可变的部分即可。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
占先式内核(只带延时服务)