2.2 - 网络协议 - IP协议,IP地址划分,报文格式,数据分片,抓包实战

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

IP协议

  • 1、IP地址划分
  • 2、IP协议报文格式
  • 3、IP协议数据分片
  • 4、IP协议抓包分析

IP(Internet Protocol)协议也叫 「网际互联协议」,负责 「不同网络」之间的 「通信」,为主机提供一种无连接、不可靠的数据包传输服务。

1、IP地址划分

IP协议规定,网络上的所有设备都必须有一个「唯一」的IP地址(同一设备可以有多个不同的IP)

cmd 执行 ipconfig ,可以查看本机的IP地址:

在这里插入图片描述

IP地址由「网络地址」「主机地址」两部分组成。

  • 「网络地址」:用来识别设备所在的「网络」,位于IP地址的前段,同一网络上的所有设备,都使用相同的网络地址。比如 192.168.31.121,前段的 192.168 就是网络地址。IP在路由的时候,就是根据网络地址,决定数据发给哪个网络。
  • 「主机地址」:用来识别网络上的「设备」,位于IP地址的后段。比如 192.168.31.121,后段的 31.121 就是主机地址。IP路由到指定网络以后,就根据主机地址,决定数据发给哪个设备。

为了适应「不同大小」的网络规模,IP地址被划分为A、B、C、D、E五类。

在这里插入图片描述

A类地址第一段是网络地址,剩下三段是主机地址;
B类地址前两段是网络地址,剩下两段是主机地址;
C类地址前三段是网络地址,最后一段是主机地址;

类别IP范围子网掩码描述
A类(1~126)1.0.0.1 ~ 127.255.255.254255.0.0.0共有126个网络,每个网络有1600万台主机,适合大规模的网络。
B类(128~191)128.0.0.1 ~ 191.255.255.254255.255.0.0共有16384个网络,每个网络有6万台主机,适合中等规模的网络。
C类(192~223)192.0.0.1 ~ 233.255.255.254255.255.255.0共有209万个网络,每个网络有254台主机,适合小型网络。
D类(224~239)224.0.0.0 ~ 239.255.255.255组播地址,一次请求发给一组特定的主机 ,常用于视频会议等场景。
E类(240~255)240.0.0.0 ~ 255.255.255.254保留地址

其中A、B、C三类地址比较常用,分别适用于大、中、小型网络,公司可以根据自己的规模申请合适的网络地址。比如我是个大公司,我就可以申请 126.0.0.0 这个网络地址,我公司的员工可以使用它的主机地址。

IP地址是有限的,总有用完的一天,为了节约IP资源,从A、B、C类地址中抽出一部分作为「私有地址」。私有地址不需要注册,也不不能跟互联网直接通信。比如我们公司的网络可以用192.168.100.1这个私有IP,其他公司的网络也可以用同样的IP。

私有地址如下:

  • A类 10.0.0.0–10.255.255.255,1个
  • B类 172.16.0.0–172.31.255.255,16个
  • C类 192.168.0.0–192.168.255.255,255个

A、B、C类地址范围中,私有IP外的地址都是「公有地址」(特殊地址除外)。

为了满足不同的应用场景,产生了很多不同作用的「特殊地址」

类型地址格式描述
全0地址0.0.0.0路由表的默认路由,表示整个网络,即网络内的所有主机,而非某一个主机,不可用。
网络号全00.x.x.x本网内某个特定主机
主机号全0x.0.0.0网络地址,表示整个网络
全1地址255.255.255.255子网的广播地址,路由器不转发
主机号全1x.255.255.255广播地址,对当前网络所有主机进行广播
环回地址127.0.0.1 ~ 127.255.255.254代表本机IP,可用于测试网络连通性

2、IP协议报文格式

IP协议的报文分为「首部」「数据」两个部分,首部分由固定部分(20字节)和可变部分组成。

在这里插入图片描述

结合数据包解释下每个字段的含义

在这里插入图片描述

  • Version:版本【4位】,目标主机按照此版本解释数据,如果目标主机使用的是其他版本,则丢弃数据报。
  • Header Length:首部长度【4位】,数据报协议头长度,最小值为5,最大值为15。
  • Differentiated Services Field:服务【8位】,用于分配优先级、延迟、吞吐量以及可靠性;前3位是优先级,后面4位成为服务类型,最后1位没有定义。
  • Total Length:总长度【16位】,IP数据报的字节长度(协议头部和数据),其最大值为65535字节。
  • Identification:标识【16位】,一个整数,数据报分段时,用于识别当前数据报。
  • Flags:标记【3位】,由3位字段构成,最低位(MF)控制分段,存在下一个分段置为1,否则置0代表该分段是最后一个分段;中间位(DF)指出数据报是否可进行分段,如果为1则机器不能将该数据报进行分段;第三位即最高位保留不使用,值为0。
  • Fragment offset:分段偏移【13位】,指出数据在源数据报中的相对位置,用于重组源数据。
  • Time to live:生存时间【8位】,一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据报拥有有限的环路过程(即TTL),限制了数据报的寿命。
  • Protocol:协议【8位】,指明上层接收数据报的协议。
  • Header checksum:头部校验和【16位】,该字段帮助确保IP协议头的完整性。由于某些协议头字段的改变,这就需要对每个点重新计算和检验。计算过程是先将校验和字段置为0,然后将整个头部每16位划分为一部分,将个部分相加,再将计算结果取反码,插入到校验和字段中。
  • Source:源地址【32位】,源主机IP地址,该字段在IPv4数据报从源主机到目的主机传输期间必须保持不变。
  • Destination:目的地址【32位】,目标主机IP地址,该字段在IPv4数据报从源主机到目的主机传输期间同样必须保持不变。

3、IP协议数据分片

IP协议接收传输层的数据包,添加IP首部后,发送给数据链路层,由链路层「封装成帧」进行传输。

在这里插入图片描述

由于帧(默认MTU)最多只能封装1500字节的数据,当「超过最大限制」时,IP协议就会将报文的数据部分「分割」成若干个报文,也就是IP分片。

分片的时候,用标记位(Flags)和偏移量(Fragment offset)来记录报文的顺序。
等目标主机接收到所有的IP分片以后,再按照顺序「重组」起来。

4、IP协议抓包分析

1)Wireshark开启抓包后,cmd 执行 ping 54.222.162.186 -n 1 -l 3200,向百度发送一个3200字节的数据包

在这里插入图片描述

2)找到IPv4协议的数据包,前三个是「请求包」,后三个「响应包」

在这里插入图片描述

数据帧的最大传输限制(MTU)是1500字节,我们 ping 的数据包是 3200 字节,会被IP协议分割成三个数据包(1500 + 1500 + 200),刚好对应前面三个请求包;

三个请求包最后以一个ICMP协议数据包结尾,用来传输「控制信息」。响应包的作用也是如此。

3)先看第一个数据包(IPv4),重点看我圈中的字段:

在这里插入图片描述
Flags字段第二个值是 More Fragments,表示这个数据报后边有多余的数据分片;
Fragment Offset字段的值是0,表示这个数据分片从第0个字节开始保存数据。

4)再看第二个数据包(IPv4),重点看我圈中的字段:

在这里插入图片描述

Flags字段第二个值仍是More Fragments,表示这个数据报后边也有多余的数据分片;
Fragment Offset字段的值是1480,表示这个数据分片从第1480个字节开始保存数据。
从这里也可以反推出,第一个字段保存了 0~1480个字节。之所以只保存了1480个字段,是因为首部占了20个字节,首部+数据刚好够1500个字节,达到数据帧的上限。

5)再看第三个数据包(ICMP),重点看我圈中的字段:

在这里插入图片描述
Flags字段第二个值为「空」,表示这个数据报没有多余的数据分片;
Fragment Offset字段的值是2960,表示这个数据分片从第2960个字节开始保存数据。
从这里可以反推出,第二个字段保存了第 1480 ~ 2960个字节。

最下面的 IPv4 Fragments 字段记录了数据报的分片信息:第一、二个数据包保存了1480个字节,第三个数据包保存了248个字节。

接收方可以根据这些分片信息,重组被分割的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习框架:Pytorch与Keras的区别与使用方法

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 Pytorch与Keras介绍 Pytorch 模型定义 模型编译 模型训练 输入格式 完整代码 Keras 模型定义 模型编译 模型训练 输入格式 完整代…

渗透测试考核(靶机1)

信息收集 主机发现 nbtscan -r 172.16.17.0/24 发现在局域网内,有两台主机名字比较可疑,177和134,猜测其为目标主机,其余的应该是局域网内的其他用户,因为其主机名字比较显眼,有姓名的拼音和笔记本电脑的…

【Python】SqlmapAPI调用实现自动化SQL注入安全检测

文章目录 简单使用优化 应用案例:前期通过信息收集拿到大量的URL地址,这个时候可以配置sqlmapAP接口进行批量的SQL注入检测 (SRC挖掘) 查看sqlmapapi使用方法 python sqlmapapi.py -h启动sqlmapapi 的web服务: 任务流…

【论文笔记】SDCL: Self-Distillation Contrastive Learning for Chinese Spell Checking

文章目录 论文信息Abstract1. Introduction2. Methodology2.1 The Main Model2.2 Contrastive Loss2.3 Implementation Details(Hyperparameters) 3. Experiments代码实现个人总结值得借鉴的地方 论文信息 论文地址:https://arxiv.org/pdf/2210.17168.pdf Abstrac…

idea doc 注释 插件及使用

开启rendered view https://blog.csdn.net/Leiyi_Ann/article/details/124145492 生成doc https://blog.csdn.net/qq_42581682/article/details/105018239 把注释加到类名旁边插件 https://blog.csdn.net/qq_30231473/article/details/128825306

聚类分析例题 (多元统计分析期末复习)

例一 动态聚类,K-means法,随机选取凝聚点(题目直接给出) 已知5个样品的观测值为:1,4,5,7,11。试用K均值法分为两类(凝聚点分别取1,4与1,11) 解&…

找不到 sun.misc.BASE64Decoder ,sun.misc.BASE64Encoder 类

找不到 sun.misc.BASE64Decoder ,sun.misc.BASE64Encoder 类 1. 现象 idea 引用报错 找不到对应的包 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;2. 原因 因为sun.misc.BASE64Decoder和sun.misc.BASE64Encoder是Java的内部API,通…

VR虚拟教育展厅,为教学领域开启创新之路

线上虚拟展厅是一项全新的展示技术,可以为参展者带来不一样的观展体验。传统的实体展览存在着空间限制、时间限制以及高昂的成本,因此对于教育领域来说,线上虚拟教育展厅的出现,可以对传统教育方式带来改革,凭借强大的…

ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET

有个11g rac环境,停电维护后,orcl1正常启动了,orcl2启动报错如下 SQL*Plus: Release 11.2.0.4.0 Production on Wed Nov 29 14:04:21 2023 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SYS…

从0开始学习JavaScript--JavaScript 模板字符串的全面应用

JavaScript 模板字符串是 ES6 引入的一项强大特性,它提供了一种更优雅、更灵活的字符串拼接方式。在本文中,将深入探讨模板字符串的基本语法、高级用法以及在实际项目中的广泛应用,通过丰富的示例代码带你领略模板字符串的魅力。 模板字符串…

亚马逊云科技基于 Polygon 推出首款 Amazon Managed Blockchain Access,助 Web3 开发人员降低区块链节点运行成本

2023 年 11 月 26 日,亚马逊 (Amazon) 旗下 Amazon Web Services(Amazon)在其官方博客上宣布,Amazon Managed Blockchain (AMB) Access 已支持 Polygon Proof-of-Stake(POS) 网络,并将满足各种场景的需求,包…

删除list中除最后一个之外所有的数据

1.你可以新建一个list List<Integer> listnew ArrayList<>();int i0;while (i<100){list.add(i);}List<Integer> subList list.subList(list.size()-1, list.size());System.out.println("原list大小--"list.size());System.out.println("…

群晖安装portainer

一、下载镜像 打开【Container Manager】 ,搜索portainer&#xff0c;双击【6053537/portainer-ce】下载汉化版本 二、创建映射文件夹 打开【File Station】&#xff0c;在docker目录下创建【portainer】文件夹 三、开启SSH 群晖 - 【控制面板】-【终端机和SNMP】 勾选【启动…

第二十章 多线程总结

继承Thread 类 Thread 类时 java.lang 包中的一个类&#xff0c;从类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行&#xff0c;任务是指线程在启动时执行的工作&#xff0c;start() 方法启动线程&…

五、初识FreeRTOS之FreeRTOS的任务创建和删除

本节主要学习以下内容&#xff1a; 1&#xff0c;任务创建和删除的API函数&#xff08;熟悉&#xff09; 2&#xff0c;任务创建和删除&#xff08;动态方法&#xff09;&#xff08;掌握&#xff09; 3&#xff0c;任务创建和删除&#xff08;静态方法&#xff09;&#xf…

mongodb基本操作命令

mongodb快速搭建及使用 1.mongodb安装1.1 docker安装启动mongodb 2.mongo shell常用命令2.1 插入文档2.1.1 插入单个文档2.1.2 插入多个文档2.1.3 用脚本批量插入 2.2 查询文档 前言&#xff1a;本篇默认你是对nongodb的基础概念有了了解&#xff0c;操作是非常基础的。但是与关…

微信小程序——给按钮添加点击音效

今天来讲解一下如何给微信小程序的按钮添加点击音效 注意&#xff1a;这里的按钮不一定只是 <button>&#xff0c;也可以是一张图片&#xff0c;其实只是添加一个监听点击事件的函数而已 首先来看下按钮的定义 <button bind:tap"onInput" >点我有音效&…

C++面向对象复习笔记暨备忘录

C指针 指针作为形参 交换两个实际参数的值 #include <iostream> #include<cassert> using namespace std;int swap(int *x, int* y) {int a;a *x;*x *y;*y a;return 0; } int main() {int a 1;int b 2;swap(&a, &b);cout << a << &quo…

【开源视频联动物联网平台】为什么需要物联网网关?

在一些物联网项目中&#xff0c;物联网网关这一产品经常被涉及。那么&#xff0c;物联网网关究竟有何作用&#xff1f;具备哪些功能&#xff1f;同时&#xff0c;我们也发现有些物联网设备并不需要网关。那么&#xff0c;究竟在何时需要物联网网关呢&#xff1f; 物联网的架构…

LaTeX插入裁剪后的pdf图像

画图 VSCode Draw.io Integration插件 有数学公式的打开下面的选项&#xff1a; 导出 File -> Export -> .svg导出成svg格式的文件。然后用浏览器打开svg文件后CtrlP选择另存为PDF&#xff0c;将图片存成pdf格式。 裁剪 只要安装了TeXLive&#xff0c;就只需要在图…