TCP/IP校验和计算算法

2023-11-11

ICMP,IP,UDP,TCP报头部分都有checksum(检验和)字段。ICMP和IP报头校验和的计算都很简单,过程如下:

1.把校验和字段置为0;

2.对IP头部中的每16bit进行二进制求和;

3.如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值;

4.将该16bit的值取反,存入校验和字段。

//计算校验和
USHORT checksum(USHORT *buffer,int size)
{
 unsigned long cksum=0;
 while(size>1)
 {
  cksum+=*buffer++;
  size-=sizeof(USHORT);
 }
 if(size)
 {
  cksum+=*(UCHAR *)buffer;
 }
 //将32位数转换成16
 while (cksum>>16)
  cksum=(cksum>>16)+(cksum & 0xffff);
 return (USHORT) (~cksum);
}

UDP/TCP报头中的校验和的计算比较复杂的,要用到 UDP/TCP伪首部:先要填充伪首部各个字段,然后再将UDP/TCP报头以后(包括报头)的数据附加到伪首部的后面,再对位首部使用上述校验和计算,所得到的值才是UDP/TCP报头部分的校验和。 位首部可以用如下的结构体表示:typedef struct{
 ULONG  sourceip;    //源IP地址
 ULONG  destip;      //目的IP地址
 BYTE mbz;           //置空(0)
 BYTE ptcl;          //协议类型
 USHORT plen;        //TCP/UDP数据包的长度(即从TCP/UDP报头算起到数据包结束的长度 单位:字节)
}Psd_Header; 注:1.对于UDP协议,如果不想计算的话,可以把校验和的两个字节置0,根据RFC的规定,这样上层UDP协议就不会计算校验和了2.sniffer查看校验和时,最好在中间节点。你在本机抓的时候,你的协议驱动在NDIS架构中层次太高,与标准协议栈是平级的,此时校验和处未被计算填充,还是垃圾填充数据。你在网络其它节点抓的时候,报文已经经过网卡的处理,校验和被正确设置了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP校验和计算算法 的相关文章

  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • 为什么SOCKS5需要通过UDP中继UDP?

    The SOCKS5 https en wikipedia org wiki SOCKS SOCKS5协议 描述为RFC1928 https www rfc editor org rfc rfc1928提供对 UDP 的支持 总而言之 希望
  • Apache HttpClient TCP Keep-Alive(套接字保持活动)

    我的 http 请求需要太多时间才能被服务器处理 大约 5 分钟 由于连接闲置 5 分钟 代理服务器将关闭连接 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep Alive 来使连接长时间处于活动状态
  • Android.system.ErrnoException:isConnected失败:ECONNREFUSED(连接被拒绝)

    我使用Java连接MySQL和Json将数据发送到android 当我通过URL地址将数据从Java发送到json时 http 192 168 1 221 9999 rentalcar service category getAllManu
  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • C#:如何在 Socket.BeginReceive 回调之前终止套接字?

    我有一个接收来自客户端的连接请求的服务器 该服务器使用异步Socket BeginReceive and Socket EndReceive方法 该代码与找到的代码非常相似here http msdn microsoft com en us
  • 路由是否会影响具有绑定源地址的套接字?

    假设我有两个网络接口 eth0有地址10 0 0 1 eth1有地址192 168 0 1 Using route or ip route add我已将其设置为路由 所有地址至eth0 1 2 3 4只为了eth1 所以数据包到1 2 3
  • Java Servlet 中限制 HTTP 请求

    在 java servlet 中 如何根据客户端的 IP 地址限制来自用户的 http 请求 我不想每秒处理来自特定源 IP 地址的超过 X 个请求 其中 X 是可配置的并且具有 0 1 中的实际值 10 范围 从 10 秒内 1 个请求到
  • Docker 容器是否有自己的 TCP/IP 堆栈?

    我试图了解来自连接到主机的线路并定向到 Docker 容器内的应用程序的网络数据包在幕后发生了什么 如果它是一个经典的 VM 我知道到达主机的数据包将由虚拟机管理程序 例如 VMware VBox 等 传输到 VM 的虚拟 NIC 并从那里
  • StreamWriter的正确使用

    经过几次尝试后 我无法让 StreamWriter 正确构建 工作 所以我做了一些根本错误的事情 C Visual Studio 我有一个现有的 TCP 客户端 它连接并充当读取器 它工作正常 private System Net Sock
  • NodeJS:TCP套接字服务器仅在第一次返回数据

    我正在尝试在 node js 中编写一个小型中继脚本 用于侦听本地套接字上传入的 TCP 连接 当它收到连接时 将流量转发给第三方 它还必须从该第三方获取任何返回的数据并将其发送回原始本地套接字 我试过类似的代码http delog wor
  • ConnectionTimeout 与 SocketTimeout

    我正在使用的库有问题 可能是图书馆的问题 也可能是我用错了 基本上 当我这样做时 超时以毫秒为单位 ignitedHttp setConnectionTimeout 1 v short ignitedHttp setSocketTimeou
  • python 中的原始套接字和 sendto

    我正在努力将 scapy 与twisted 集成 但我在 OSX 上遇到了这个非常奇怪的错误 我似乎无法弄清楚 基本上我无法通过原始套接字发送有效的 TCP 数据包 包括 IP 标头 这就是我正在做的 import socket from
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • SO_REUSEPORT 可以在 Unix 域套接字上使用吗?

    Linux 内核 gt 3 9 允许通过设置在内核负载平衡的进程之间共享套接字SO REUSEPORT http lwn net Articles 542629 http lwn net Articles 542629 这如何用于类型的套接
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 应用程序多播的最佳教程? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我最近意识到 IP 多播 显然在公共互联网上工作得不太好 和应用程序多播 显然在 IRC 和 PSYC 中使用 根据http en wikipedia
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的
  • 在 Node.js 中查找默认网关 IP 的最佳方法是什么?

    如今在 Node js 中查找默认网关 IP 地址的最佳方法是什么 os networkInterfaces 不提供此信息 想到的唯一想法是解析stdout子流程的route n Kernel IP routing table Destin

随机推荐

  • Jetson Nano安装pytorch 基于torch1.6和torchvision0.7

    需要注意的是 博主使用的是win10主机 通过局域网连接的jetson nano 其中jetson nano的预制CUDA版本为10 2 Jetpack 4 1 1 分别执行以下命令 即可查看自己的jetson nano 预搭载的CUDA版
  • NLP系列(2)_用朴素贝叶斯进行文本分类(上)

    作者 寒小阳 龙心尘 时间 2016年1月 出处 http blog csdn net longxinchen ml article details 50597149 http blog csdn net han xiaoyang arti
  • 【OpenMMLab实践】01MMSegmentation官方教程实现过程记录(mmcv,mmsegmentation,torch)

    本文主要根据mmsegmentation的官方教程 教程链接在这里 并且看了b站的视频 一步步实现代码中的demo教程 主要包含以下两方面的功能 通过MMSeg加载预训练好的权重 输入单张图片 实现分割 并可视化分割图 自定义数据集 修改配
  • 注意力&Transformer

    注意力 注意力分为两步 计算注意力分布 alpha 其实就是 打分函数进行打分 然后softmax进行归一化 根据 alpha 来计算输入信息的加权平均 软注意力 其选择
  • nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping:

    原因是使用idea快捷键时 添加的注释为 注释里面我写了另外一条SQL 但是mybatis执行时仍然把里面的 routeId 执行了 导致报错 参数异常 需要参数两个 实际传参才只有一个 注意xml中的注释要使用 上图
  • 终于刷进去了联想官方固件

    联想官方社区 第四步 设置检验所有校验和 解决 tool dl image fail 若解决线刷时出现BROM ERROR S COM PORT OPEN FAIL 1013 教程 找不到端口 多试试吧 重启电脑 重换插口 重装驱动 注意
  • 基于netty游戏服后台搭建

    项目要转游戏开发了 所以搭个游戏服 游戏一般是长连接 自定义协议 不用http协议 BIO NIO AIO这些我就不说了 自己查资料 我现在用spring netty搭起简单的游戏服 思路 1自定义协议和协议包 2spring netty整
  • python元组列表里追加元素_Python元祖 tuple 内部列表添加元素相关

    面试python遇到的一道数据类型基础题 我们都知道python中不可变类型有tuple 但是如果tuple里面的列表增加元素会怎么样呢 先看代码 a 1 2 3 4 5 print a 3 4 5 a 3 append 6 print a
  • 学习笔记(5):MySQL数据库从入门到实战应用-数据完整性

    立即学习 https edu csdn net course play 27328 362521 utm source blogtoedu 实体完整性 要求每张表都有唯一标识符 每张表主键字段不为空且不能重复 唯一性约束 主键约束 标识列
  • MVC框架增删改查

    mvc对表单内容的增删改查 1 首先把所需的包导入项目内 2 连接数据库的帮助类DBAccess package com Liuyujian Dao import java io InputStream import java sql Co
  • 邮件服务器-postfix服务器

    Postfix 是一种电子邮件服务器 它是由任职于IBM华生研究中心 T J Watson Research Center 的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的 最早在1990年代晚期出现 是一
  • Java设计模式之策略模式+工厂模式(反射和注解)

    现在我们有一个需求 我们通常的实现方式是这样的 假设有3种会员 分别为会员 超级会员以及金牌会员和普通顾客 针对不同类别的会员 有不同的打折方式 并且一个顾客每消费10000就增加一个级别 以上四种级别分别采用原价 普通顾客 九折 会员 八
  • [Android] Toast问题深度剖析(二)

    欢迎大家前往云 社区 获取更多腾讯海量技术实践干货哦 作者 QQ音乐技术团队 题记 Toast 作为 Android 系统中最常用的类之一 由于其方便的api设计和简洁的交互体验 被我们所广泛采用 但是 伴随着我们开发的深入 Toast 的
  • ORA-00936: missing expression

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 造成这个错误的原因是 选取的最后一个字段与from之间有逗号 解决方法 将字段与from之间的逗号去掉
  • Spring MVC使用JSON的过程与步骤

    活动地址 CSDN21天学习挑战赛 目录 JSON数据交互 RESTful支持 JSON数据交互 1 用eclipse创建一个动态web项目 将项目依赖的jar包放到lib目录下 2 在WEB INF目录下创建web xml 对Spring
  • 关于JPEG的那点事儿:JPEG原理篇

    前言 本文其实于差不多正好1年前写成 是关于JPEG的那点事儿的补充 但是由于实战篇一直烂尾 拖到现在 前几天看到Google发了个JPEG新算法 说是可以将JPEG的体积同质量情况下再压缩35 突然想起了这文了 为了说清楚Google为什
  • python题目55:单词接龙

    单词接龙的规则是 可用于接龙的单词首字母必须要与前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等则取词典序最小的单词 已经参与接龙的单词不能重复使用 现给定一组全部由小写字母组成的单词数组 并指定其中的
  • 勿以专家自居

    对于权威 我心存芥蒂 我在 StrongOpinions Weakly Held 观点鲜明 但不固执己见 一文中曾经说过 当我了解到别人把我视为专家或者权威 而不是像伙伴一样的志趣相投者时 我就会觉得非常困扰 如果非要说我在迄今为止的职业生
  • PCL学习之点云可视化:坐标字段、随机、单一颜色、法向量

    pcl中几种常见的点云渲染方式 1 颜色区别深度 此方法在PointCloudColorHandlerGenericField类中实现 该将不同的深度值显示为不同的颜色 实现以颜色区分深度的目的 PointCloudColorHandler
  • TCP/IP校验和计算算法

    ICMP IP UDP TCP报头部分都有checksum 检验和 字段 ICMP和IP报头校验和的计算都很简单 过程如下 1 把校验和字段置为0 2 对IP头部中的每16bit进行二进制求和 3 如果和的高16bit不为0 则将和的高16