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

简介: 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

 

目录
相关文章
|
4天前
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第6版(IPv6)的发展历程、技术特点以及在各领域的应用前景。通过对IPv4面临的问题进行分析,阐明了IPv6出现的必要性及其在地址空间扩展、安全性提升和自动配置等方面的显著优势。结合当前技术趋势和应用案例,展望了IPv6在未来网络中的发展潜力,为相关领域的研究和实践提供了参考。
|
4天前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
29 1
|
14天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
15天前
|
自动驾驶 物联网 5G
毫米波技术及其在5G网络中的应用详解
毫米波技术及其在5G网络中的应用详解
103 3
|
15天前
|
自动驾驶 物联网 5G
深入探索5G网络中的网络切片技术及其应用场景
深入探索5G网络中的网络切片技术及其应用场景
139 3
|
15天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
32 1
|
4天前
|
网络协议 物联网 5G
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展背景、技术特性及其在现代网络中的应用。通过分析IPv4面临的地址枯竭问题,阐述了IPv6作为解决方案的重要性和紧迫性。文章详细介绍了IPv6相较于IPv4的改进之处,如更大的地址空间、简化的包头格式、增强的组播支持等,并探讨了IPv6在实际部署中遇到的挑战及应对策略。通过对IPv6过渡技术和双栈技术的讨论,揭示了其在促进下一代互联网发展中的关键作用。此外,文章还展望了IPv6在未来网络安全、物联网整合以及新兴技术中的应用前景,强调了掌握IPv6技术对于把握未来互联网发展趋势的重要性。
|
2天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
3天前
|
SQL 安全 算法
网络安全的盾牌与剑:漏洞防御与加密技术的实战应用
【9月更文挑战第30天】在数字时代的浪潮中,网络安全成为守护信息资产的关键防线。本文深入浅出地探讨了网络安全中的两大核心议题——安全漏洞与加密技术,并辅以实例和代码演示,旨在提升公众的安全意识和技术防护能力。
下一篇
无影云桌面