专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

如何计算UDP头的checksum

  UDP报头只有4个字段,分别是:源端口号、目的端口号、报文长度和报头checksum,其中的报头checksum这个字段在IPv4中并不是强制的,但在IPv6中是强制的,本文介绍UDP报头中checksum的计算方法,并给出相应的源程序。1。UDP报文结构UDP报文为两部分,报头数据;在Linux下,UDP报头定义在头文件linuxudp。h中;structudphdr{be16source;be16dest;be16len;sum16check;};source来源端口号,可选项,如果不使用,填充0;dest目的端口号;len报文长度;check报头的校验和,在IPv4中是可选的,IPv6中是强制的,如果不使用,应填充0;
  图1:UDP数据报结构2。IP报头结构之所以在这里介绍IP报头,是因为在计算UDP报头checksum时会用到IP头中的一些字段;在Linux下,IP报头定义在头文件linuxip。h中,可以自行查看,我们这里仅给出图示;
  图2:IP报头结构3。UDP报头checksum的计算UDP报头checksum的定义及计算方法在〔RFC768〕(http:www。faqs。orgrfcsrfc768。html)中有明确的说明;UDP报头checksum的具体算法在〔RFC1071〕(http:www。faqs。orgrfcsrfc1071。html)有明确的说明;在计算UDP报头checksum前要首先为UDP报头加上一个伪报头;加上伪报头的UDP报文格式如下:
  图3:伪报头伪报头中源IP地址(SourceIPaddress)、目的IP地址(DestinationIPaddress)和协议(Protocol)这三个字段都是从IP报头中取过来的;源IP地址和目的IP地址是32bit的IP地址,Protocol字段是网络协议号,UDP协议号为17(0X11);如果checksum中没有加入伪报头,UDP报文也是可以安全送达的,但是,如果IP报头有损坏或者被认为修改,报文有可能被送到错误的地址;伪报头中加入protocol字段是为了保证报文为UDP报文,正常情况下protocol为17(0x11),如果传输中这个字段变化了,那么在接收端计算出的checksum就会不正确,接收端会丢弃这个出现错误的报文;checksum计算规则:UDP报头中的check字段填充0;(伪报头UDP报头DATA)的长度应该为16bit字的整数倍,如果不是,DATA的最后部分要填充1个字节0,以使其为16bit字的整数倍;(伪报头UDP报头DATA)看作是很多个16bit字,并逐一相加,结果仍为16bit字,如果出现溢出,则结果1,然后继续,直至完成;结果求反即为所需的checksum;在RFC768中定义的UDP的checksum为:(伪报头UDP报头DATA)按16bit字进行反码求和的结果就是checksum;但实际上原码求和再取反和反码求和是一样的结果,因为求反码再求和的方法对每一组16bit字都要做一次求反运算,因此其运算量更大一些,在实际中没有人使用;以上两种运算方法在本文给出的范例中均有体现,可以用来验证其结果的一致性;按照RFC768的说明,当checksum的运算结果为0时,checksum应该作为全1来传输,因为在UDP协议中,checksum为0表示没有使用checksum,UDP的checksum在ipv4中并不是强制使用的。下面是计算udp报头checksum的完整源代码:includestdio。hincludestdlib。hincludeunistd。hincludestdint。hincludeincludelinuxudp。hudppseudoheaderstructurestructpseudohdr{uint32tsourceip;uint32tdestinationip;uint8tzero;uint8tprotocol;uint16tudplen;};udppacketstructureforcalculatingchecksumstructudpcheckhdr{structpseudohdrpseudohdr;structudphdrudphdr;unsignedchardata〔16〕;};initialpseudoheadervoidinitpseudohdr(structudpcheckhdrp){ppseudohdr。sourceipinetaddr(152。1。51。27);0X01980X1B33ppseudohdr。destinationipinetaddr(152。14。94。75);0X0E980X4B5Eppseudohdr。zero0;0X000X1100ppseudohdr。protocol17;0X11ppseudohdr。udplen13;0X000D}initialudpheadervoidinitudphdr(structudpcheckhdrp){pudphdr。source56020;0xDAD4pudphdr。dest8000;0X1F40pudphdr。len13;0X000Dpudphdr。check0;0X0000}initialudpdatavoidinitudpdata(structudpcheckhdrp){pdata〔0〕h;0X680X6568pdata〔1〕e;0X65pdata〔2〕l;0X6C0X6C6Cpdata〔3〕l;0X6Cpdata〔4〕o;0X6F0X006Fpdata〔5〕0;}uint16tchecksum1(uint16tp,intcount){registerlongsum0;unsignedshortchecksum;uint16ttemp;uint16ti0;while(count1){Thisistheinnerlooptemp(unsignedshort)(unsignedshort)p;printf(Step02d:0X08lX0X04X,i,sum,temp);sumtemp;count2;}Addleftoverbyte,ifanyif(count0){temp(unsignedshort)(unsignedshort)p;printf(Step02d:0X08lX0X04X,i,sum,temp);sum(unsignedchar)p;}printf(Resultbeforefolding:0X08lX,sum);Fold32bitsumto16bitswhile(sum16)sum(sum0xffff)(sum16);printf(Resultafterfolding:0X08lX,sum);checksum(unsignedshort)sum;printf(Checksum0x04X,checksum);returnchecksum;}uint16tchecksum2(uint16tp,intcount){registerlongsum0;unsignedshortchecksum;uint16ttemp;uint16ti0;while(count1){Thisistheinnerlooptemp(unsignedshort)(unsignedshort)p;printf(Step02d:0X08lX0X04X(0X04X),i,sum,(uint16t)temp,temp);sum(uint16t)temp;count2;}Addleftoverbyte,ifanyif(count0){temp(unsignedshort)(unsignedshort)p;printf(Step02d:0X08lX0X04X(0X04X),i,sum,(uint16t)temp,temp);sum(uint16t)temp;}printf(Resultbeforefolding:0X08lX,sum);Fold32bitsumto16bitswhile(sum16)sum(sum0xffff)(sum16);printf(Resultafterfolding:0X08lX,sum);checksum(unsignedshort)sum;printf(Checksum0x04X,checksum);returnchecksum;}intmain(intargc,charargv){structudpcheckhdrudppacket;initpseudohdr(udppacket);initudphdr(udppacket);initudpdata(udppacket);unsignedshortp(unsignedshort)udppacket;intcountsizeof(structpseudohdr)udppacket。udphdr。len;printf(Theonescomplementcodeof16bittruecodesum);checksum1(p,count);printf(Theonescomplementsum);checksum2(p,count);return0;}其中在计算checksum的程序中参考了RFC1071中给出的源代码;checksum1()使用的常规的算法,checksum2()使用的把每个16bit字求反在相加的算法进行的运算,两种算法的结果是一样的。读者可以根据需要适当第调整数据,以使其计算出不同的结果;下面是我的机器上的运行结果截屏
  图4:程序运行截屏4。UDP报头checksum的验证UDP报文的接收端是需要对checksum字段进行验证的,方法如下:加入伪报头;将(伪报头UDP头DATA)按16bit分成若干个16bit字,如果最后一个字节无法组成一个16bit字,要在DATA的最后补0;将所有的16bit字相加(包括checksum字段),其结果仍然是16bit字,如果出现溢出则结果1;如果最后结果为全1,即:0XFFFF,则表示UDP报文正确,否则应该认为UDP报文有错误,应该丢弃。
  欢迎访问我的博客:https:whowin。cn

张绣的命运深渊,聪明如贾诩,又怎会想不到曹操终要报杀子之仇?曹操一生之中有三次濒临死亡,一次是赤壁之战中,曹操多次濒临险境,第二次则是被马超逼的割袍断须,不过这两次的危机表面来看凶险万分,实际上曹操的人身安全还是有所保障的,唯独第三次,曹操抗日战争十大战役之太原会战头条创作挑战赛太原会战发生在中国抗日战争的初期,1937年9月13日至9月25日,地点在山西省太原市以南地区。这场战役是中国军队在战争初期的一次大规模战斗,也是中国人民抵抗日本侵略清代命案私和现象泛滥,政府无力制止,背后的原因引深思在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。引言提到清朝,我们一般会想到康乾盛世或者闭关锁国,印象中的它十分落后封建,但这个时她叫安妮,一个智慧美丽的女孩久远的以前,有一个古老的王国,它的国王非常善良仁慈。他经常在城镇和村庄里巡视,听取百姓的心声,关注人们的生活,并尽力为他们解决问题。在他治理下,这个王国变得繁荣富强,百姓们生活得非新世纪学生有了民族自信反倒上世纪老师见到外国人还忍不住想下跪鲁迅先生说过,冷漠,麻木,自私,懦弱,已浸入骨子里。一个民族的崛起首先是自尊,自强,自立。我国是礼仪之邦,这礼仪不是委屈自己的礼仪,而是,邦外之人必须遵守的礼仪!外籍留学生插队,出林高远钱天一再见!国乒外卡名单出炉,林诗栋陈幸同成功入选北京时间3月22日晚,国际乒联更新WTT新乡冠军赛名单,中国队新增两位运动员,分别是小将林诗栋世界冠军陈幸同,而世界冠军林高远最近势头正盛的钱天一则遗憾落选,无缘拿到外卡资格。在此徒步天花板!邀你参加一场极地严寒的探索之旅!我喜欢徒步喜欢那种走进户外全身心投入到自然中的感觉随着步伐前行的节奏我的呼吸心跳乃至思想都在逐渐与大自然同频在这一刻我即自然,自然即我在这山野林间我真正体会到了天人合一随着春回大地心情不好的时候,看看这五句话,可以治愈你!文飞鱼导语心情不好的时候,看看这五句话,可以治愈你。第一难过的时候,为自己鼓掌。成年人的世界里,或苦或甜,或喜或悲,都要学会自己来承担。人生苦短,悲欢离合,难过的时候,就要学会为自做一个不好惹的女人著名作家杨绛先生说道如果低头了还得寸进尺,那就抬起头,挺起腰,不择手段的撩到他。无论是谁,待我如何,我便待你如何,是规矩,也是礼貌,如果善良得不到尊重,那就让它长刺!。读完杨绛先生辽宁12月房地产开发投资下降16。6据辽宁省统计局数据显示,12月份,全省经济运行呈现企稳回升态势。一规模以上工业恢复加快12月份,全省规模以上工业增加值同比增长3。0。从三大门类看,采矿业增加值同比增长1。5,制造相思相思这个词,听起来就很虚。像是能把一切美好和悲伤都装进去的一个奇怪的盒子。我并不相信它,但也不能否认它的存在。毕竟,当在寂静的夜里,孤独的人们只能望着月亮发呆时,它就像是一阵微风,
全球菜籽增产进口到港增加国内三大油脂中菜油供需最宽松2023年元旦过后,国内菜油现货价格走出了一波流畅的下跌行情,沿海地区进口四级菜油价格普遍下跌超过2500元吨。这波下跌主要是由供给端主导,目前来看,菜油供需基本面在三大植物油脂中哈驻华大使努雷舍夫一带一路倡议已成为全球经贸与投资合作的稳固推动力新华网北京3月9日电(记者黄思路霍艳)在今年中国全国两会期间,哈萨克斯坦驻华大使沙赫拉特努雷舍夫就两国双边关系一带一路倡议等议题接受了新华网专访。他表示,一带一路倡议已成为全球经贸用基因技术监控世界,一个无法被拉黑的真相说到底,还是一场利益的博弈,一场事关全球基因测序产业格局的战争。美国商务部近期将37个实体列入贸易黑名单,其中包括中国企业华大基因旗下的两个部门,称其通过收集和分析基因数据来协助中银行春招开拔,金融科技人才依然是香饽饽21世纪经济报道记者叶麦穗广州报道近期,多家银行拉开社会招聘的帷幕。目前,已有农业银行工商银行邮储银行浦发银行等十多家银行的总行及分支机构发布了社会招聘公告。整体来看,金融科技人才见过幸福的样子,才有幸福的能力关于家暴的话题,近日又登上热榜。沉寂许久的叔圈顶流吴秀波也因儿子吴瀚家暴女友一事再次遭人诟病。前有老子把情人送进监狱,后有儿子暴打女友出圈。很多人开始不解难道这种渣男行径在父子间也隆利科技已提前布局MicroLED等新型显示技术Meta是公司的终端客户隆利科技已提前布局MicroLED等新型显示技术Meta是公司的终端客户财联社3月10日电,隆利科技在互动平台表示,公司已提前布局MicroLED等新型显示技术,储备了相关专利。并兴业银行技术流迈入4。0时代累计为179户在湘科创企业提供近60亿信贷支持红网时刻新闻3月10日讯(通讯员白杨)兴业银行以助力科创企业破解融资难题加大金融服务对实体经济的支持为目标,围绕先进制造业科技创新中小科技企业等重点领域和薄弱环节,在2022年初创科斯蒂奇必须忘记对罗马的失利,尤文有能力赢得欧联杯直播吧3月9日讯在明天凌晨进行的欧联杯18决赛首回合,尤文将在主场迎战弗赖堡。尤文球员科斯蒂奇在赛前接受了采访。在上轮意甲联赛,尤文客场01负于罗马。科斯蒂奇首先表示我们必须立即忘从测试片到现场全覆盖监看,中国第二季HDR技术总监尤子元带来幕后秘籍转自影视工业网订阅010860920622022年由数据指南DATAGUIDE参与制作的大型历史文化纪录片中国(第二季)成功播出继第一季(2020年)播出之后,再次成为了年度网络影凌娅副局长丑陋的双面人生2023年3月3日,湖南株洲市公安局原党委委员,副局长凌娅投案自首。近几年来,随着中央反腐的高压之下,官员投案自首本不是什么新鲜事了,唯独凌娅的投案引来了各媒体的轩然大波。投案以后解析西楚霸王项羽为什么被誉为千古第一人西楚霸王项羽被誉为千古第一人,但是在历史长河中,流传着成王败寇这句话,为何项羽能被人永远铭记?生当作人杰,死亦为鬼雄,至今思项羽,不肯过江东。在公元前202年,秋叶昏黄之际,西楚霸
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网