前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Linux网络编程】IP协议格式,解包步骤

【Linux网络编程】IP协议格式,解包步骤

作者头像
用户11396661
发布2025-02-22 20:10:03
发布2025-02-22 20:10:03
1170
举报
文章被收录于专栏:C++开发C++开发

解析步骤

对于IP,每次先去看前二十个字节。也就是说这二十字节里面的东西是固定的,每个IP报头都是如此,不会改变。

前二十个字节就包含除了选项部分(如果存在)数据区域。选项部分的大小,数据区域的大小是可以改变的。

然后选项的有无,数据区域的大小根据首部长度,数据报长度(总大小,单位字节)推算出来。

也就是下面的推算关系。

选项

首部长度

数据区域大小

数据报长度减去手部长度


1.版本字段(大小:4比特位)

IP的版本现在有IPv4还有IPv6。

所以这四位要么是4(二进制为:0100),要么是6(二进制为:0110)。

所以每个IP地址前面要么填0100(表示IPv4),要么填0110(表示IPv6)。

题外话: 虽然IPv6比IPv4要好,但是目前主要还是IPv4。 IPv6在我国发展的比较好,IPv4的主导是外国的,IPv4和操作系统有关,操作系统也是外国主导的。所以IPv4不可能迅速变更到IPv6。


2.首部长度(大小:4比特位)(单位:4字节)

首部长度主要是去看选项的,看有没有选项,如果有选项,选项的大小又是多少?

首部长度------》选项有无,选项大小

🍜细节解释:

首部长度是占四个比特位的,表示的范围是0~15。但是最起码报头都有20字节,那么这是怎么表示的呢?

原来首部长度的的单位是4字节。

所以现在能表示的范围就是0~15*4=60字节所以最大就能表示60字节了。

60字节,减去固定的20字节,那么选项的最大就是占40字节。(二进制首部长度:1111)

最起码要20字节。(二进制首部长度:0101)


3.服务类型(大小:8比特位)

前3位是优先级字段,已经废用。

然后就是4位TOS字段+最后一位保留字段。最后的保留字段被设置为0.

位TOS字段

🍛第1位:最小延迟。

🍛第2位:最大吞吐量。

🍛第3位:最高可靠性。

🍛第4位:最低成本。

上面的最小延迟,最高可靠性,最低成本基本都能理解。那就解释一下最大吞吐量。

最大吞吐量是描述网络状态的。单位时间内传输的数据量。单位是比特/s,字节/s,或者每秒数据包数。


4.数据报长度:总长度(大小:16比特)(单位:字节)

这里的单位是字节,在报头长度那里的单位是4字节。

最大能表示65,535字节(16位无符号整数的最大值)。

然后减去报头的最大值(60字节),所以数据区域的最大值就是(65475字节)。

这个被设计就是来看数据区域有多大。因为会有很多个IP,有粘包问题。为了让每个IP都能被正确解包,就要看数据区域有多大。


5. 16位标识(大小:16比特)

IP协议允许数据报进行分片。

在数据链路层,IP可能会被分片。去适应链路的最大传输单位(MTU)。

然后在对方网络层的时候,要能合并,就要进行区分哪些时一起的,然后进行拼接。


6. 3位标记(大小:3比特)

第1位

目前还没有被使用,被设置为0。

第2位(不分片标志位)(DF:don’t fragment)

如果是1,就表示数据报不能进行分片。如果数据报超过了链路的最大传输单位(MTU),这时候就会给发送方反馈数据报过大的信息。

如果是0,就表示数据报能被分片。

第3位(更多分片标志位)(MF:more fragments)

如果是1,表示后面还有很多的分片。

如果是0,表示是这个数据报的最后一个分片。


7. 13位片偏移(大小:13比特)(单位:8字节)

当IP数据报进行分片以后,在对方IP进行合并的时候,就要知道这是该数据报的哪一个部分。应该拼接在哪里,从哪里开始拼接。

用偏移量也能达到这个目的。

13位偏移量的单位是8字节。所有每个都是8的整数倍。


8. 8位生存时间(TTL)

实现是一个计数器,当计数器值为0,就丢弃这个IP数据报。并向发送方回馈超时信息。

每次经过一个路由器,它的值就会减1。

这个设计避免了网络环回的问题。因为如果网络换回,数据报一直在路由器之间跳来跳去,一直没有结束,也到不了目标主机。就会影响网络。

WIndows系统一般设置为128. Linux系统Unix一般设置为64.


9. 8位协议

它的作用就是来区分上层用的什么协议,TCP还是UDP还是ICMP。

TCP为6,UDP是17,ICMP(1)。


10. 16位首部校验和

这个是看IP数据报头在传输的过程中是否发送错误。

它是采用反码求和的方式。如果对方把接受的报头反码求和,看是不是等于这个数,如果对得上,就基本是对的。

它的具体计算方式是:

每个16位比特为一组,然后反码求和。


11. 32位源IP,32位目的IP

用来表示发生方的IP,和接受方的IP。

标识发送方和接收方。

这个也不难理解。有了源IP,目的IP,就能进行路径选择

  • A类0.0.0.0127.255.255.255):用于大型网络。
  • B类128.0.0.0191.255.255.255):用于中型网络。
  • C类192.0.0.0223.255.255.255):用于小型网络。
  • D类224.0.0.0239.255.255.255):用于多播。
  • E类240.0.0.0255.255.255.255):保留用于未来使用

12.数据区域

用来携带上层的数据。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解析步骤
  • 1.版本字段(大小:4比特位)
  • 2.首部长度(大小:4比特位)(单位:4字节)
    • 🍜细节解释:
  • 3.服务类型(大小:8比特位)
    • 位TOS字段
  • 4.数据报长度:总长度(大小:16比特)(单位:字节)
  • 5. 16位标识(大小:16比特)
  • 6. 3位标记(大小:3比特)
    • 第1位
    • 第2位(不分片标志位)(DF:don’t fragment)
    • 第3位(更多分片标志位)(MF:more fragments)
  • 7. 13位片偏移(大小:13比特)(单位:8字节)
  • 8. 8位生存时间(TTL)
  • 9. 8位协议
  • 10. 16位首部校验和
  • 11. 32位源IP,32位目的IP
  • 12.数据区域
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档