网络协议及应用之二:校验和

简介: TCP/IP协议族校验和的计算方法相同, 差别在于进行校验的数据.   一 校验和计算方法    1. 将数据流按16bit求和, 存放在32Bit及更大的空间(eg.
TCP/IP协议族校验和的计算方法相同, 差别在于进行校验的数据.
 
一 校验和计算方法
   1. 将数据流按16bit求和, 存放在32Bit及更大的空间(eg. u_int32_t cs).
   2. 如果数据流为单字节(留8bit数据), 将之前求和的值与最后8bit求和.
   3. 如cs高16bit不为0, 则将高16bit与低16bit相加, 直到高16bit为0.
   4. 将低16bit的值取反, 得到校验和.
 
   这种校验和的计算方法有两个特点:
   1 把数据流按16bit化分为若干u_int16_t的字段. 计算结果并不依赖u_int16_t的顺序.
   2 在检验和计算中加上全0值对结果没有影响.
   算法如下:
  1. u_int16_t check_sum(u_int16_t *buffer, int size)
  2. {
  3.     //建议将变量放入寄存器, 提高处理效率.
  4.     register int len = size;       
  5.     register u_int16_t *p = buffer;
  6.     register u_int32_t cs = 0;
  7.     //16bit求和
  8.     while( len >= 2)
  9.     {
  10.         cs += *(p++);
  11.         len -= 2;
  12.     }
  13.     //最后的单字节直接求和
  14.     if( len == 1)
  15.         cs += *((u_int8_t *)buffer);
  16.     //高16bit与低16bit求和, 直到高16bit为0
  17.     while( (cs&0xffff0000) != 0)
  18.         cs = (cs>>16) + (cs&0xffff);
  19.     //取反
  20.     return (u_int16_t)(~cs);
  21. }

二 TCP/UDP的校验和计算方法
   TCP/UDP的校验和计算方法相同, 都包括了以下数据的计算: 1) 12字节的伪首部(包含了IP层信息). 2) TCP/UDP首部. 3) TCP/UDP数据.   
   我们用IP首部/UDP首部为例(1 示例不包含IP选项. 2 引用的图来自于《TCP/IP详解-卷二》)
   1. 首先看在缓冲区内的UDP/IP数据, 灰色部份IP填充, 白色UDP填充img_bdd1c01e33b5d08ed7c50fa249cd532b.jpg
   2. 伪首部的数据img_a7e2cffe45f7a59a4a13b953dcf83e8f.jpg

    考虑到校验和算法的两个特点 顺序无关/全0无关, 我们可以认为: 缓冲区内, 8字节以后的数据与伪部首完全一至, 可以直接进行校验和计算.
注: 1 TCP数据校验方法和UDP完全相同.
    2 也可以另外建立一个缓冲区, 将数据拷贝过去进行计算, 但效率太低.

    以下是上一篇文章《网络协议及应用之一:socket构造数据包及DOS(SYNflood)攻击》中应用到的代码及详细解释.

  1.     {
  2.         //ip首部中的ttl. 在伪首部计算时, 要先设置为0
  3.         ip->ip_ttl = 0; 
  4.         
  5.         //ip首部的校验和字段, 作为伪首部时, 存放tcp长度
  6.         ip->ip_sum = htons(sizeof(struct tcphdr));
  7.         //因为是攻击包, 源地址随机产生
  8.         ip->ip_src.s_addr = random();        
  9.         //校验前, 将校验和字段设置为0
  10.         tcp->check = 0;
  11.         
  12.         //计算tcp校验和时, 避开ip首部的8个字节. 并设置需要校验的长度
  13.         tcp->check = check_sum((u_int16_t *)buffer + 4, sizeof(buffer) - 8);

  14.         //恢复ip的ttl 
  15.         ip->ip_ttl = MAXTTL;        

  16.         sendto( sockfd, buffer, len, 0, (struct sockaddr *)(&addr), sizeof(struct sockaddr_in));
  17.     }

三 计算结果
   1 校验和错误时, 没有服务器的SYN+ACK包img_af6c6205543d738f84e643f879d46e9d.jpg


   2 校验和正确, 双向SYN包. 服务器等待第3次握手img_fbb92dfb9d9d2a00b5891d65475c2ad7.jpg


   3 正确的tcp校验和结果

img_744c19ad2e534f2f3f84cf1a7240e7d2.jpg

 

目录
相关文章
|
28天前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
2月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
139 6
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
640 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
5月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
1月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
305 11
|
6月前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
279 0
中国联通网络资源湖仓一体应用实践
|
8月前
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
296 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
2月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
163 0
|
2月前
|
安全 Linux
利用Libevent在CentOS 7上打造异步网络应用
总结以上步骤,您可以在CentOS 7系统上,使用Libevent有效地构建和运行异步网络应用。通过采取正确的架构和代码设计策略,能保证网络应用的高效性和稳定性。
93 0
|
5月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
156 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析

热门文章

最新文章