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

【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.lryc.cn/news/540985.html

相关文章:

  • 给老系统做个安全检查——Burp SqlMap扫描注入漏洞
  • Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory
  • 开源免费文档翻译工具 可支持pdf、word、excel、ppt
  • 从CNN到Transformer:遥感影像目标检测的未来趋势
  • 【GORM学习笔记】GORM介绍以及增删改查相关操作
  • WebSocket在分布式环境中的局限性及解决方案
  • SIM盾构建安全底座的可行性分析
  • 【Java八股文】10-数据结构与算法面试篇
  • go 并发 gorouting chan channel select Mutex sync.One
  • 亲测Windows部署Ollama+WebUI可视化
  • linux 安装启动zookeeper全过程及遇到的坑
  • 策略模式Spring框架下开发实例
  • DeepSeek模型量化
  • 【练习】【回溯:组合:不同集合】力扣 17. 电话号码的字母组合
  • 分布式文件系统HDFS
  • 从WebRTC到EasyRTC:嵌入式适配的视频通话SDK实现低延迟、高稳定性音视频通信
  • WordPress自定义排序插件:Simple Custom Post Order完全指南(SEO优化版)
  • docker安装ros2 并在windows中显示docker内ubuntu系统窗口并且vscode编程
  • 【QT中的一些高级数据结构,持续更新中...】
  • 简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
  • 《95015网络安全应急响应分析报告(2024)》
  • TensorFlow v2.16 Overview
  • Udp发送和接收数据(python和QT)
  • element-plus 根据条件显示多选框
  • Ubuntu 22.04 Install deepseek
  • DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑
  • 小程序的分包
  • RTSP场景下RTP协议详解及音视频打包全流程
  • 使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)
  • 如何基于transformers库通过训练Qwen/DeepSeek模型的传统分类能力实现文本分类任务