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

以太网基础④IP 协议介绍与 IP 校验和算法实现

1. 今日摸鱼任务

IP 校验和算法实现

02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.5.2.pdf

55 IP 协议介绍与 IP 校验和算法实现
网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)_nat报文-CSDN博客
        IP 层的实质是在 MAC层的基础上将原有协议更加细化。
        最核心的意义是让IP 地址参与到网络数据传输中,让硬件和硬件的通信传输,从网卡号作为唯一的身份识别标志,变为以 IP 地址作为身份识别标志。

2. IP 协议数据字段格式

所有的 TCPUDPICMPIGMP 数据都以 IP 数据报的格式传输。
IP 仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,然后发送 ICMP 消息给信源端。另外,IP 数据报可以不按发送顺序接收。
IP 数据报的长度/类型段的数值为 0x0800,数据和填充段包括 IP 头部数据和 IP 数据两个部分。

jiangjiangjiang~

上面这个图是不是感觉看不懂?????

直接看下面的表就可以啦!!!

IP

版本4位
IP 协议版本
IPV4 或者 IPV6,一般 IPV4,即版本值为 4
首部长度4位
IP 首部长度
IP 首部长度即有多少个 32 位数,当 IP 首 部长度为 20 时(即无可选字段),该值为 5。(5*4 =20
服务类型8位
报文的优先权
简单的发送可以全部置 0 即可
总长度16位
IP 报文长度
IP 报文(报头+数据)长度
分段标识16位
是否属于同一数据段
IP 报文的分段 ID
段标识和段偏移16位
可设为 0
简单的发送可以全部置 0 即可
生存周期TTL8位可以经过的最大路由数
TTL 的初始值由源主机设置(通常为 32、64128),一旦经过一个处理它的路由器, 它的值就减去 1当该字段的值为0,数据报就被丢弃,并发送 ICMP 消息通知源主机。这样当封包在传递过程中由于某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面
上层协议类型8位
数据段内容的网络协议类型
常用协议号:
00:IP   01:ICMP    06:TCP    17UDP
报头校验和2位
IP 报头的校验和
IP 报头计算得出
源IP地址4位
发送端的 IP 地址
192.168.0.2
目的IP地址4位
接收端的 IP 地址
192.168.0.3
可选字段--
没有的时候长度可以为 0

这样再看上面的图,就会发现,只是每行按32计数,这样可以清楚看懂首部长度~

前 20 个字节是固定的,可选字段则可有可无。

3. 校验和计算

校验和计算步骤:

        ①将校验和字段置零:

                在计算前,先将首部中的校验和字段(16 位)设为 0x0000。

        ②将首部分解为 16 位字:

                 IP 首部长度通常是 20 字节(无选项时),按 2 字节为一组分割,得到 10 个 16 位字。

                此时校验和为0,计算时累加9个2字节。

        ③计算二进制反码和:

                将所有 16 位字相加(按二进制加法,溢出时回卷,即最高位进位加到最低位)。

                最后对和取反码(按位取反),得到校验和。

        ④存储校验和:

                将计算得到的校验和存入 IP 首部的校验和字段。

使用小兵计算校验和(pdf截图):

module checksum(
    input [3:0]ver, //版本
    input [3:0]hdr_len,//首部长度
    input [7:0]tos, //服务类型
    input [15:0]total_len,  //IP报文总长
    input [15:0]id, //分段标识
    input [15:0]offset, //偏移
    input [7:0]ttl, //生存周期
    input [7:0]protocol, //上层协议类型
    input [31:0]src_ip, //源IP地址
    input [31:0]dst_ip, //目的IP地址
    
    output [15:0]checksum_result //校验和
);

    
    wire [31:0]suma,sumb;

    assign suma = {ver,hdr_len,tos} + total_len + id + offset + {ttl,protocol} 
                    + src_ip[31:16] + src_ip[15:0] + dst_ip[31:16] + dst_ip[15:0];
    
    assign sumb = (suma[31:16] + suma[15:0]);
    
    assign checksum_result = sumb[31:16]? ~(sumb[31:16] + sumb[15:0]):~sumb[15:0];

endmodule

http://www.xdnf.cn/news/15104.html

相关文章:

  • Deepseek搭建智能体个人知识库
  • HashMap的get与put流程源码深度解析
  • 详解CAN总线的位填充机制
  • LLM的表征做减法的是什么,自然语言是一个矩阵,怎么进行减法的
  • S7-1500——(一)从入门到精通1、基于TIA 博途解析PLC程序结构(二)
  • 服务器中source: not found解决方法
  • AP中的Execution Manager“非报告进程”和“伴随进程”概念解析
  • Django核心知识点详解:JSON、AJAX、Cookie、Session与用户认证
  • RAG实战之dify源码文件解析-pdf文件解析流程
  • QT6 源(158)模型视图架构里的文件系统模型 QFileSystemModel 篇一:属性,成员函数,与信号函数
  • 在 macOS 上安装与自定义 Oh My Zsh:让终端美观又高效 [特殊字符]
  • Microsoft AZ-305 Exam Question
  • Git常用指令
  • Python-文件操作
  • 如何将 AWS EBS 卷从 gp2 批量迁移到 gp3:完整指南
  • RabbitMQ 高级特性之事务
  • FPGA加速HMI实时渲染:复杂图形处理的并行计算方案
  • 【macOS】【Swift】【RTF】黑色文字在macOS深色外观下看不清的解决方法
  • 5.注册中心横向对比:Nacos vs Eureka vs Consul —— 深度解析与科学选型指南
  • 字体 Unicode 区块字符展示 PDF 生成器
  • MySQL 09 普通索引和唯一索引
  • 5N70-ASEMI电源管理领域专用5N70
  • 前端业务监控系统,异常上报业务,异常队列收集,异常捕获
  • 【Unity】MiniGame编辑器小游戏(十)连连看【Link】
  • C#基础篇(11)泛型类与泛型方法详解
  • UI前端与数字孪生结合实践探索:智慧物流的仓储优化与管理系统
  • 大数据在UI前端的应用深化:用户行为模式的挖掘与预测性分析
  • 原型与原型链到底是什么?
  • Linux驱动学习day20(pinctrl子系统驱动大全)
  • 自动驾驶决策与规划