IP数据报详解

一、IP数据报的定义

IP数据报是互联网协议(IP)中的一个基本概念,它是网络传输层中用于在计算机网络中进行传输的数据单元。IP数据报由源主机分段并通过互联网传输到目标主机,其中每个段都可能有不同的路径,通常也可能经过中转主机。

二、IP数据报首部

IP数据报首部是每个IP数据报中的头部信息,包含20个字节。其结构如下:

|              20 Bytes              |
+-----------------------------------+
|      Version      | Header Length |
+-----------------------------------+
|     Differentiated Services Field |
+-----------------------------------+
|              Total Length         |
+-----------------------------------+
|           Identification          |
+-----------------------------------+
|    Flags    | Fragment Offset     |
+-----------------------------------+
| Time to Live |    Protocol        |
+-----------------------------------+
|            Header Checksum        |
+-----------------------------------+
|            Source Address         |
+-----------------------------------+
|          Destination Address      |
+-----------------------------------+

三、IP数据报是哪一层

IP数据报是互联网协议中的网络层协议。

四、IP数据报首部长度

IP数据报首部长度固定为20字节,但是IP数据报的数据部分长度是可变的。

五、IP数据报报头

IP数据报报头由版本、首部长度、不同服务字段、标识、片偏、TTL、协议、源IP地址和目标IP地址组成,共20字节。其中不同服务字段用来指定所要求的服务的优先级,TTL是生存时间(Time To Live)的缩写,标识用于唯一地标识正在传输的数据片段。

六、IP数据报传输图示

七、IP数据报格式

一个标准的IP数据报包含一个20字节的首部和一个不定长的负载。其格式如下:

+------------+--------------+
|   Header   |   Payload    |
+------------+--------------+

八、IP数据报分片

由于IP数据报所能承载的负载大小有限,如果发送的数据大于MTU(Maximum transmission unit),则需要进行分片。在分片的过程中,IP数据报首部中的标识和片偏字段就成为了关键字。

九、IP数据报分析题

请分析下面的IP数据报:

0000   45 00 04 36 2c 4b 40 00 34 06 05 f3 ac 10 01 0b 
0010   ac 10 01 01 05 5b 11 ea 00 1e 36 da 59 7a 56 5e 
0020   b4 8d 58 50 18 ff ff 21 b9 00 00

分析结果如下:

  • 版本:4
  • 首部长度:5(20字节)
  • 不同服务字段:0
  • 总长度:1078字节(0x436)
  • 标识:0x2c4b
  • 片偏:0
  • TTL:52
  • 协议:6(TCP)
  • 源IP地址:172.16.1.11
  • 目标IP地址:172.16.1.1

十、IP数据报抓包选取

以下是Wireshark抓包显示的IP数据报(其中红框内的部分为IP数据报首部信息):

完整代码示例

// 创建IP数据报
def create_ip_packet(source_ip, dest_ip, payload):
    packet = b''
    # 版本(IPv4)和首部长度(20字节)
    version = 4
    ihl = 5
    packet += struct.pack('!B', (version << 4) + ihl)
    # 不同服务字段
    packet += b'\x00'
    # 总长度(数据部分size + 首部size)
    total_length = len(payload) + 20
    packet += struct.pack('!H', total_length)
    # 标识、标志(2位)和片偏(13位)
    identification = random.randint(0, 65535)
    flags = 0
    fragment_offset = 0
    packet += struct.pack('!H', identification)
    packet += struct.pack('!H', (flags << 13) + fragment_offset)
    # TTL、协议(TCP)和头部校验和
    ttl = 64
    protocol = socket.IPPROTO_TCP
    packet += struct.pack('!B', ttl)
    packet += struct.pack('!B', protocol)
    packet += struct.pack('!H', 0)
    # 源IP地址和目标IP地址
    packet += socket.inet_aton(source_ip)
    packet += socket.inet_aton(dest_ip)
    # 计算假首部校验和
    pseudo_header = b''
    pseudo_header += socket.inet_aton(source_ip)
    pseudo_header += socket.inet_aton(dest_ip)
    pseudo_header += struct.pack('!B', 0)
    pseudo_header += struct.pack('!B', protocol)
    pseudo_header += struct.pack('!H', total_length - 20)
    # 计算真正的头部校验和
    packet += checksum(pseudo_header + packet)
    # 将数据部分添加到IP数据报中
    packet += payload
    return packet

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/160923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-21 01:16
下一篇 2024-11-21 01:16

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • Python根据表格数据生成折线图

    本文将介绍如何使用Python根据表格数据生成折线图。折线图是一种常见的数据可视化图表形式,可以用来展示数据的趋势和变化。Python是一种流行的编程语言,其强大的数据分析和可视化…

    编程 2025-04-29

发表回复

登录后才能评论