UDP/TCP检验和的计算方法
来源:互联网 发布:twitter视频保存软件 编辑:程序博客网 时间:2024/05/14 14:45
1.UDP伪首部
2.UDP首部
3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了~)
首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。
还有一个概念十分重要,那就是16位UDP总长度,请注意该长度不是报文的总长度,而只是UDP(包括UDP头和数据部分)的总长度(之前就是因为这个概念没弄清楚,走了不少弯路,吐血~~)。
二、计算检验和(checksum)的过程很关键,主要分为以下几个步骤:
1.把伪首部添加到UDP上;
2.计算初始时是需要将检验和字段添零的;
3.把所有位划分为16位(2字节)的字
4.把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上,举例,0xBB5E+0xFCED=0x1 B84B,则将1放到最低位,得到结果是0xB84C
5.将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。
三、狮屎胜于雄辩,还是举个例子来分析一下吧,该例子计算的是一个TCP的检验和(和UDP的算法一致)
TCP计算检验和的报文结构如下所示:
抓包工具抓了一个TCP 的syn报文做研究,呵呵,下面就是整个报文:
1.首先将检验和部分添零;
2.然后将TCP伪首部部分,TCP首部部分,数据部分都划分成16位的一个个16进制数;
3.将这些数逐个相加,记得溢出的部分加到最低位上,这是循环加法:
0xc0a8+ 0x0166+……+0x0402=0x9b49
4.最后将得到的结果取反,则可以得到检验和位0x64B6
按照上述步骤进行计算就可以得到检验和为0x64B6,大家也可以试试看哦~
- UDP/TCP检验和的计算方法
- IP TCP UDP ICMP IGMP检验和的计算方法
- udp检验和计算方法
- 如何计算UDP/TCP检验和checksum
- 如何计算UDP/TCP检验和checksum
- 计算UDP/TCP检验和checksum
- 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
- 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
- IP、TCP、UDP、ICMP、IGMP包首部中的检验和都是针对哪部分的?
- TCP/UDP伪头部检验
- TCP/IP 中校验和的计算方法
- TCP中RTT和RTO的计算方法
- TCP的seq和ack号计算方法
- TCP/IP检验和的理解
- ip校验和 及 udp校验和 的计算方法
- ip校验和及udp校验和的计算方法
- TCP和UDP的区别
- TCP和UDP的区别
- java 数据结构--------数组、集合和矩阵
- Linux Shell常用技巧(六)
- visitor设置模式以及变种的思考
- qt(1)
- java.lang.IllegalArgumentException: Can't convert argument: null
- UDP/TCP检验和的计算方法
- uboot在引导linux之前要做的事 theKernel 作用
- POI中关于背景色的使用
- Linux Shell常用技巧(七)
- sp_MSforeachtable使用方法
- android pendingIntent
- Linux Shell常用技巧(八)
- d3.time.format中的时间格式
- android_手机铃声设置