首页
登录 | 注册

重构skb包中的检验和的计算

   在之前看过那篇对于sk_buff结构介绍的文章后,对skb包中各字段有了比较深的认识吧,这两天又看了如何构造skb包的两个帖子,也在虚拟机上实现了一把,但在这里不讨论实现的具体流程,只说一下在自己构造skb包时各个检验和字段的计算。
   其中主要涉及三个函数:
skb_checksum(const struct sk_buff *skb, int offset,
int len, __wsum csum)
四个参数解释:
skb:不用说了
offset:IP Header长度
len:IP payload长度
csum:0,计算校验和时为0
ip_fast_csum(const void *iph, unsigned int ihl)
iph: ip头部首地址
ihl: ip头部长度/4,也即是iph->ihl字段的值

csum_tcpudp_magic(__be32 saddr, __be32 daddr,
unsigned short len,
unsigned short proto,
__wsum sum)

saddr:源IP
daddr:目的IP
proto:传输协议
sum:IP payload校验和,在使用中我是用的skb->csum字段的值,在网上也见到一种是通过csum_partial((char *)udph,udp_len,0),感觉上应该跟第一种计算方式是等价的,有待验证。

第一个是计算TCP、UDP payload校验和,也就是skb->csum字段,第二个是计算ip头部检验和,iph->check,后者是计算整个IP payload校验和,也就是tcp->check
 
在构造流程中的计算如下:
skb->csum = skb_checksum()
iph->check = ip_fast_csum()
udph->check = csum_tcpudp_magic(
 
两个注意的问题:
因为校验和不涉及链路层,如果skb是直接从网卡驱动取出来的话,就需要把skb->data设置为iph
在调用skb_checksum以前必须设置udph->check为0。这是协议规定的

 

关于如何重新构造skb包的文档地址如下:

http://linux.chinaunix.net/bbs/viewthread.php?tid=1152885&extra=page%3D3%26amp%3Bfilter%3Ddigest

http://blog.chinaunix.net/u2/73067/showart_2254716.html



相关文章

  • :1.5.7 Android Java包快速了解Android平台的一种方式是查看Java包的结构.因为Android源于标准的JDK发布版,所以了解受支持的内容和不受支持的内容非常重要.下面简短介绍一下Android SDK中重要的包.a ...
  •     errors是用的最多的一个package,go doc上面显示有202948个package使用了errors.我相信只有使用go写程序,基本上都会用到这个库.每一个编程语言都离不开错误处理的话题.     Java 通过catc ...
  • 【Xamarin.Android】Android奥利奥通知通道
    Android 8.0 Oreo中引入的最重要功能之一是通知渠道. 通知渠道使您可以对通知进行分组,以便发布到通道的所有通知都具有相同的行为. 例如,您可能有一个用于需要立即关注的通知的通知通道,以及用于信息性消息的单独的"较安静 ...
  • 下班后,运动1小时,吃着西瓜,编着代码,慢慢的等待着世界杯~~~~~ 整理一下编译MYSQL源码中遇到的新工具以及DEBUG工具 简单的介绍一下,CMake(         cmake - Cross-Platform Makefile ...
  • "前车之鉴"出自<荀子>,说的是要吸取前面车子倾覆的教训.在提出新的"云"计划之前,微软的.NET战略在计算布局方面几乎已经走了8年的弯路,最近微软中国董事长张亚勤也提到了.NET&quo ...
  • 说说tomcat与类加载器
    再次认识Tomcat Conf,是我们tomcat相应配置所在的地方,在我们最早学习部署的时候,就有一种直接在conf中修改server.xml以及session过期时间之类的. Logs,是tomcat运行中的日志记录,当我们需要排查线上 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
京ICP备10005923号