当前位置: 首页 > article >正文

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

目录

解析步骤

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.数据区域


解析步骤

对于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.数据区域

用来携带上层的数据。


http://www.kler.cn/a/555692.html

相关文章:

  • List的基本功能(1)
  • 以ChatGPT为例解析大模型背后的技术
  • 数学建模:解锁智能计算的密码!
  • JVM 深入理解与性能优化
  • Qt常用控件之标签QLabel
  • 跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展
  • QT实战-基于QWidget实现的异形tip窗口
  • 前端vue的一些常见项目启动命令
  • R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...
  • 鸿蒙5.0实战案例:基于measure实现的文本测量
  • VSCode集成deepseek使用介绍(Visual Studio Code)
  • 2022年下半年试题一:论基于构件的软件开发方法及其应用
  • AI工作流+专业知识库+系统API的全流程任务自动化
  • 网络安全-js安全知识点与XSS常用payloads
  • HTML项目一键打包工具:HTML2EXE 最新版
  • AI学习指南DeepSeek篇(6)-DeepSeek论文介绍
  • 第37章 合作之路与占坑成功
  • 源码方式安装llama.cpp及调试
  • 【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3
  • 将 DeepSeek 接入 WPS 为办公提效 !