LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1026|回复: 3

sk_buff中重复字段的区别及data数据字段请教

[复制链接]
发表于 2007-3-17 11:38:16 | 显示全部楼层 |阅读模式
sk_buff中 union h中 有成员 struct tcphdr *th,struct iphdr *ipiph;
而在union nh中也有 struct iphdr *iph,我想请教 在同一个sk_buff中,两处的iphdr内容是否相同?

另外,我看到有的程序上 在获取tcphdr时,没有直接从 h 处的th 取值,而是从data 成员处使用 (struct tcphdr *)(data+ iphdr偏移长度)来获得的,这样做有什么好处?两个地方的tcphdr一样吗?

请高手指教!谢谢
发表于 2007-3-17 18:30:35 | 显示全部楼层
楼主,问下,你看linux的TCP/IP协议栈是只接看源码还是有什么书,如果有这方面的书麻烦介绍下,这方面的书好像很少(中文).

看了<<TCP/IP详解:卷二>>前10章,后来再看linux的源码,发现差异之大...........
回复 支持 反对

使用道具 举报

发表于 2007-3-20 01:12:27 | 显示全部楼层
Post by EnjoyTech
sk_buff中 union h中 有成员 struct tcphdr *th,struct iphdr *ipiph;
而在union nh中也有 struct iphdr *iph,我想请教 在同一个sk_buff中,两处的iphdr内容是否相同?

另外,我看到有的程序上 在获取tcphdr时,没有直接从 h 处的th 取值,而是从data 成员处使用 (struct tcphdr *)(data+ iphdr偏移长度)来获得的,这样做有什么好处?两个地方的tcphdr一样吗?

请高手指教!谢谢


h 是指向 transport layer 的, nh 则是指向 network layer的。 nh.iph 是我们通常所说的ip header.

n.iph 是另外一个packet 的 header. 通常这出现在ip tunneling应用中, 也就是说一个IP packet成了另外一个ip packet 的 payload。好像mobile ipv4 协议就是这么用的。

至于读取iphdr, 这两种方法其实是一样的,内容也都一样。只是在有的layer里,sk_buff的一些指针还没有被初始化,所以只好自己算。
回复 支持 反对

使用道具 举报

发表于 2007-3-20 01:15:00 | 显示全部楼层
Post by cho
楼主,问下,你看linux的TCP/IP协议栈是只接看源码还是有什么书,如果有这方面的书麻烦介绍下,这方面的书好像很少(中文).

看了<<TCP/IP详解:卷二>>前10章,后来再看linux的源码,发现差异之大...........

个人强烈推荐Understanding Linux networking Internals这本书,是一本指南性质的好书!我做project全靠它了。唯一遗憾的是,他对于XFRM 和 IPV6 没怎么讲到。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表