伪头部校验

本章问题

UDP和TCP的伪首部只用于计算校验和,在UDP和TCP的报文中是不存在的,为什么要引入伪首部呢?为什么伪首部的要有这些字段?这里我们就先看一下TCP和UDP的首部格式。
 

TCP和UDP首部


源端口目的端口:是0-65535任何数字,在收到请求时系统会为客户端动态分配,0-1023为知名端口号
UDP报文长度(单位4byte):表示udp报头 + udp数据总长度 = 8 + len
校验和:计算之前校验和位置填0,发送之前将校验结果填上,目标端收到后会再次进行校验结果为0表示正确
UDP伪头部:包含UDP1+UDP+data三部分共12 + 8 + len 个字节,UDP发送时需要通过伪头部进行16位校验,伪头部只是在校验时用到,数据收发不用伪头部
TCP报头长度(单位4byte):表示TCP报头不包含数据的长度=20+选项长度,UDP无选项
TCP伪头部:包含TCP1+TCP+选项长度+数据长度4部分组成,如果没有选项和数据刚好就是12+20=32个字节,tcp发送时需要对12+20+选项长度+数据长度这些字节进行16位校验,伪头部只是在校验时用到,数据收发不用伪头部,因为这只是IP报头的一部分而已。

我们为什么会使用伪头部校验?

伪首部是为了增加 校验和 的检错能力:通过伪首部的目的IP地址来检查TCP报文是否收错了、通过伪首部的传输层协议号来检查传输层协议是否选对了。

伪首部的目的是为了防止有人截获tcp数据然后加上IP包头伪造数据包,重放攻击。伪首部只是一个虚拟的概念,是为了计算tcp校验和而虚构的,不存在协议层中任何一个位置。
由于socket协议栈在开始已经知道应用层数据要发往哪里,但是还没有到tcp层封装,故虽然知道ip源地址和目的地址,但是没有填入数据包。

为什么伪首部要有目的IP地址?

我们知道数据传输过程中会产生误码,0可能变为1,1可能变为0,并且每种校验码都有一定的查错能力,超过这个范围,就无法察觉错误了。而早期的通信环境大概比较糟糕,因此,在传输过程中出现误码,可能使IP报文的目的地址出现错误,接收主机的UDP计算校验和时,目的IP地址来自IP层,由于目的IP地址出现错误,导致发送主机计算检验和时使用的目的IP地址与接收主机计算检验和时使用的目的IP地址不同,UDP发现错误,丢弃报文。

为什么伪首部要有源IP地址?

为了让接收主机确认源IP地址没有出现错误。假设我们想要开发一款基于UDP的程序,A发送UDP报文给B,B要发送回应报文给A,假设传输过程出现误码,源IP地址出现错误,则A计算检验和时使用的源IP地址与B计算校验和时使用的源IP地址不同,B就可以发现错误,从而丢弃报文,定时重传等可靠性由应用程序自己保证。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…

2024汽车行业用户洞察与营销趋势白皮书

来源:小红书&寰球汽车:

晶振的振荡模式有哪些?

晶振,即晶体振荡器,是一种能够产生精确振荡频率的电子元件,它利用石英晶体的压电效应来产生稳定的振荡信号。晶振的振荡模式主要有以下几种:1. 串联谐振(Series Resonance): 在这种模式下&am…

Moe 混合多专家模型 原理 + 大模型的有性繁殖 + DIY 自己的 Moe 专家系统

Moe 混合多专家模型 原理 大模型的有性繁殖 DIY 自己的 Moe 专家系统 MoE 介绍标准 Transformer 编码器MoE Transformer 编码器专家网络层 大模型的有性繁殖mergekit 合并 多个专家模型 的方式1. SLERP(球面线性插值)2. TIES3. DARE4. Passthrough5. L…

露营涮火锅小朋友不慎烫伤大腿 家长抱娃涮河急救获医生点赞

近日,陈女士一家三口在西安市长安区附近露营涮火锅,却不料小朋友在起身时不小心打翻了吃火锅的锅,导致腿被烫伤,陈女士急忙抱着孩子到临近河边,用河水来冲洗小朋友烫伤的腿,随后立刻赶至西安国际医学中心医…

Kroma宣布推出Spectrum:以太坊Layer-2的先进原生质押服务

Kroma宣布推出备受期待的Spectrum,这是一项先进的原生质押服务,旨在彻底改变以太坊 Layer-2格局。Spectrum将于2024年5月14日开始运营,为用户提供利用质押ETH、stETH和eETH的奖励机会,助力用户在去中心化金融(DeFi&…

Python 海龟画图(Turtle)命令大全

移动和绘制 forward() | fd() 使用语法: ​​turtle.forward(距离)​​ ​​turtle.fd(距离)​​ 参数说明: 距离 一个数字 (整数 或者 浮点) (注:单位是像素) 代码示例: import turtle turtle.forward(200) …

docker镜像中搭建FastDfs

docker镜像中搭建FastDfs 一、搭建过程二、docker端口映射三、映射的方法三、配置Tracker 和 Storage 环境:腾讯云服务器上 ubuntu20.04镜像 一、搭建过程 正常直接在云服务器上搭建过程参考博客: https://blog.csdn.net/qq_38531706/article/details/…

分享如何通过定时任务调用lighthouse前端测试脚本+在持续集成测试中调用lighthouse前端测试脚本

最近写了个小工具来优化lighthouse在实际工作中的使用,具体实现了:通过定时任务调用前端测试脚本在持续集成测试中调用前端测试脚本。由于在公司中已经应用,所以就不能提供源码了,这里简单说一下实现思路,希望可以帮助…

武汉星起航:亚马逊跨境电商助力全球贸易:卖家轻松触达全球市场

作为全球最大的电子商务平台之一,亚马逊以其强大的品牌影响力和完善的服务体系,为全球卖家提供了一个展示和销售各类商品的广阔舞台。亚马逊跨境电商业务的快速发展,不仅为卖家打开了通向全球市场的大门,也为买家带来了更多元化、…

JS+JQ+Layui菜单栏点击URL跳转后保持选中状态

目录 一.问题描述 二.问题分析 三.问题解决 3.1JQuery解决 3.2原生JS解决 四.衍生问题 五.衍生问题解决方式 5.1JQ解决 5.2JS解决 六.效果 七.建议 一.问题描述 后端使用“Flask”开发 最近在开发个人网站,其中使用了“Layui”组件库来做“菜单导航栏…

Nginx日志格式配置

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Nginx(“engine x”…

数据库SQL语言实战(九)(索引)

目录 1实战目标 2前提知识 2.1索引失效的情况 2.1.1数据准备 2.1.2插入数据 2.1.3失效情况 3练习题(利用索引提高查询速度) 题目一 题目二​ 题目三​ 题目四​ 题目五​ 总结 1实战目标 对比有无索引情况下数据检索速度,学会如何能够使用索引,掌握如何…

130.哈希表:赎金信(力扣)

题目描述 代码解决 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 创建一个大小为26的整数数组,用于存储每个字母在magazine中的出现次数int hash[26] {0};// 遍历magazine,将每个字母的出现次数记录在hash数组…

The 13th Shandong ICPC Provincial Collegiate Programming Contest

The 13th Shandong ICPC Provincial Collegiate Programming Contest The 13th Shandong ICPC Provincial Collegiate Programming Contest A. Orders 题意:有n个订单, 每日可生产k个产品,每个订单给出交付日和交付数量,是否能…

谈谈【软件测试的基础知识,基础模型】

关于软件测试的基本概念和基本模型 前言一个优秀的测试人员具备的素质关于需求测试用例软件错误(BUG)概念开发模型瀑布模型(Waterfall Model)螺旋模型(Spiral Model) 前言 首先,什么是软件测试? 通俗来讲:软件测试就是找BUG&…

Vitis HLS 学习笔记--优化本地存储器访问瓶颈

目录 1. 简介 2. 代码解析 2.1 原始代码 2.2 优化后 2.3 分析优化措施 3. 总结 1. 简介 在Vitis HLS中,实现II(迭代间隔) 1是提高循环执行效率的关键。II1意味着每个时钟周期都可以开始一个新的迭代,这是最理想的情况&…

Java面试八股之HashSet和TreeSet有什么区别

Java中HashSet和TreeSet有什么区别 1. 底层数据结构 HashSet: 基于哈希表(实际上是 HashMap 的内部实现)实现。每个元素通过其 hashCode() 方法计算出哈希码,并通过哈希码确定其在哈希表中的位置。这种结构使得 HashSet 在插入、删除和查找…

Win11下Java环境安装指南

Windows下Java环境安装指南 前言一、安装简介JDK与JRE安装包 二、JDK安装检查操作系统类型基于Win11基于Win10 安装包准备工作 三、配置环境配置JAVA_HOME配置Path配置CLASSPATH 四、检验配置是否打开cmd命令行窗口输出java -version命令 五、注意事项 前言 在Windows系统上安…

数据结构-栈(带图)

目录 栈的概念 画图理解栈 栈的实现 fun.h fun.c main.c 栈的概念 栈(Stack)是一种基本的数据结构,其特点是只允许在同一端进行插入和删除操作,这一端被称为栈顶。遵循后进先出(Last In, First Out, LIFO&#…